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