作業系統面試題

才智咖 人氣:3W

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中刪除,很有可能導致程式崩潰。