作業系統面試題

1、 在windows 編程中互斥器(mutex)的作用和臨界區(critical section)類似,請說一下二者區別。

mutex 可以用於進程之間互斥,critical section是執行緒之間的互斥。

2、垃圾回收的優點和原理是什麼?

java語言中一個顯著的特點就是引入了垃圾回收機制,使c++程式設計師最頭疼的記憶體管理問題迎刃而解,而java程式設計師不再需要考慮記憶體管理。垃圾回收可以有效防止記憶體泄露。

3、cpu中的快取 和 os 中的快取分別是什麼?

* 塊表——cache在os 中運用的典型範例。

小結:快表是聯想暫存器訪問速度比記憶體快,不用快表要兩次訪問記憶體;用了快表只需要一次訪問記憶體。

在os中,為提高系統的存取速度,在地址映射機制中增加一個小容量的聯想暫存器,即塊表。用來存放當前訪問最頻繁的少數活動頁面的頁號。先訪問快表中是否有需要的邏輯頁號,加上頁內地址得到物理地址。如果快表中沒有才訪問記憶體中的頁表這樣兩次訪問記憶體。

* 高速緩衝存儲器: cache 在cpu中運用的典型範例。

引入原因:記憶體的存取速度跟不上cpu的執行速度

它的容量比記憶體小,但是交換速度快! cache對cpu的性能影響很大。

4、dos 與 windows nt 的許可權區別是什麼?

dos 是個單任務、單用戶的作業系統。打開裝有dos作業系統的計算機時,就擁有了該作業系統的管理員許可權,且該許可權無處不在。所以只能說,dos不支持許可權的設定。

在windows nt里,用戶被分成許多組,組和組之間有不同的許可權。當然一個組的用戶和用戶之間也可以有不同的許可權。nt中常見的用戶組:administrators 管理員組、 users 普通用戶組、guests 來賓組、everyone計算機上所有用戶.

5、進程和執行緒的差別。

執行緒是指進程內的一個執行單元,也是進程內的可調度實體.

與進程的區別:

(1)調度:執行緒作為調度和分配的基本單位,進程作為擁有資源的基本單位

(2)並發性:不僅進程之間可以並發執行,同一個進程的多個執行緒之間也可並發執行

(3)擁有資源:進程是擁有資源的一個獨立單位,執行緒不擁有系統資源,但可以訪問隸屬於進程的資源.

(4)系統開銷:在創建或撤消進程時,由於系統都要為之分配和回收資源,導致系統的開銷明顯大於創建或撤消執行緒時的開銷。

6、談談ia32下的分頁機制

小頁(4k)兩級分頁模式,大頁(4m)一級

7、在ia32中一共有多少種辦法從用戶態跳到核心態?

通過調用門,從ring3到ring0,中斷從ring3到ring0,進入vm86等等

8、網路編程中設計並發伺服器,使用'多進程'與'多執行緒',請問有什麼區別?

進程:子進程是父進程的複製品。子進程獲得父進程數據空間、堆和棧的複製品。

執行緒:相對與進程而言,執行緒是一個更加接近與執行體的概念,它可以與同進程的其他執行緒共享數據,但擁有自己的棧空間,擁有獨立的執行序列。

兩者都可以提高程式的並發度,提高程式運行效率和回響時間。

執行緒和進程在使用上各有優缺點:執行緒執行開銷小,但不利於資源管理和保護;而進程正相反。同時,執行緒適合於在smp機器上運行,而進程則可以跨機器遷移。

9、列舉幾種進程的同步機制,並比較其優缺點。

原子操作

信號量機制

自鏇鎖

管程,會合,分散式系統

10、進程之間通信的途徑

共享存儲系統

訊息傳遞系統

管道:以檔案系統為基礎

11、描述實時系統的基本特性

在特定時間內完成特定的任務,實時性與可靠性

12、windows訊息調度機制是:

a.指令佇列;b.指令堆疊;c.訊息佇列;d.訊息堆疊;

13、執行緒與進程的區別和聯繫? 執行緒是否具有相同的堆疊?dll是否有獨立的堆疊?

進程是死的,只是一些資源的集合,真正的程式執行都是執行緒來完成的,程式啟動的時候作業系統就幫你創建了一個主執行緒。

每個執行緒有自己的堆疊。

dll中有沒有獨立的堆疊,這個問題不好回答,或者說這個問題本身是否有問題。因為dll中的代碼是被某些執行緒所執行,只有執行緒擁有堆疊,如果dll中的代碼是exe中的執行緒所調用,那么這個時候是不是說這個dll沒有自己獨立的堆疊?如果dll中的代碼是由dll自己創建的執行緒所執行,那么是不是說 dll有獨立的堆疊?

以上講的是堆疊,如果對於堆來說,每個dll有自己的堆,所以如果是從dll中動態分配的記憶體,最好是從dll中刪除,如果你從dll中分配記憶體,然後在exe中,或者另外一個dll中刪除,很有可能導致程式崩潰。