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