本章主要介紹Windows操做系統的關鍵概念和術語程序員
1.概念和工具數據庫
1.2.2 服務、函數和例程數據結構
1.2.3.1 進程ide
Windows操做系統版本已經不少了
Windows API(應用程序接口),是針對Windows操做系統的系統編程接口。
Windows API有幾個分類:
n 基本服務
n 組件服務
n 用戶界面服務
n 圖形和多媒體服務
n 消息和協議
n Web服務
本書重點介紹基本服務(好比,進程和線程,內存管理,I/O,安全性)。
關於.Net和WinFX
.NET FrameWork由框架類庫(FCL)和一個提供託管代碼運行環境的(CLR)組成。
CLR提供即時編譯,類型檢查,垃圾回收和代碼訪問安全性等。
託管代碼:在最初編譯時,將源代碼編譯成中間代碼(IL),而後在運行時,使用運行庫編譯器在受控的環境下,將中間代碼編譯成機器碼。
在微軟體系下,認爲不是託管代碼就是非託管代碼。
CLR是一個典型的COM服務器,創建在Windows API之上。
而WinFX就是新的Windows API(爲vista特別設計的),也提供了託管代碼的功能,可是缺容易混淆,後來改成.Net FrameWork 3。(關於WinFX的介紹在第6版中已經沒有了)。
.NET FrameWork是對API的一種擴展。
主要介紹一些書中提到的專業術語:
n Windows API函數:主要是指已經被文檔化的可調用的子例程
n 原生的系統服務:指操做系統中未文檔化的,能夠在用戶模式下調用的底層服務,如NtCreateProcess
n 內核支持函數(例程):值操做系統內部且只能被內核調用的子例程
n Windows服務:由Windows服務管理器啓動的進程(在註冊表中,認爲驅動定於爲服務,可是書中並不這樣引用)
n DLL:一組可調用的子例程,合起來被連接成一個二進制文件,應用程序能夠動態加載這些二進制文件。
程序是指一個靜態的指令序列,而進程是程序的實例化,擁有各類資源。一個進程由如下元素組成:
n 私有的虛擬地址空間
n 程序定義的代碼和數據,被映射到進程的虛擬地址空間中
n 一個已打開的句柄列表,這些句柄指向各類資源
n 稱爲訪問令牌的安全環境,標示了改進程關聯的用戶,安全組和特權
n 進程ID,能夠惟一識別一個進程
n 至少一個線程
每一個進程都指向一個父進程或者建立者進程,可是若是父進程被關閉,進程就會指向一個不存在的父進程。
線程是在進程中的實體,也是Windows執行此進程的調度實體,沒有線程進程是不可能運行的。
線程的基本部件:
n 一組表明處理器狀態的CPU寄存器中的內容
n 2個棧,一個用於線程在內核模式下執行,一個用於線程在用戶模式下執行
n 線程局部存儲區(TLS),線程私有存儲區域,各個子系統,運行庫,DLL都會用到這個區域
n 惟一表示線程的線程ID
n 線程本身的安全環境
易失的寄存器,棧,私有存儲區域合起來稱爲線程的環境。
雖然線程有本身的環境,可是同一個進程內的線程共享該進程的虛擬地址空間及其餘屬於該進程的資源。
也就是說線程能夠讀寫進程內其餘線程的內存,可是不能跨進程的訪問,除非另一個進程把虛擬地址空間變成共享內存區。
虛擬地址描述符是一些數據結構,內存管理器使用這個數據結構來記錄一個進程所使用的虛擬地址。
做業是指,一組進程當一個總體來維護管理。
Windows 實現了平面地址空間的虛擬內存系統,每一個進程感受本身獨立擁有一個很大的私有地址空間。虛擬內存提供了內存邏輯視圖,並不對應於內存物理佈局。運行的時候,內存管理器藉助硬件支持,講虛擬地址翻譯成真正的物理地址。
進程之間就隔離了,一個進程不會訪問到另一個進程的東西。
大多數系統擁有的物理內存比虛擬地址小,因此當內存不夠的時候,內存管理器會把內存移動到磁盤,釋放內存,讓被的進程使用。
在32bit下,4GB的地址空間,其中2GB是內核地址空間,2GB是用戶模式地址空間,在起用3gb參數,用戶模式地址空間時3GB,內核模式地址空間時1GB
還有AWE地址窗口擴展,可讓32bit系統訪問64GB的內存。缺點是程序員本身解決映射關係。
在64bit下地址空間能夠達到8T,在Itanium系統上能夠達到7T
爲了不用戶程序讀寫關鍵操做系統數據,Windows使用了2中處理器訪問模式:用戶模式,內核模式。用戶程序代碼運行在用戶模式,系統代碼運行在內核模式。內核模式容許訪問全部系統內存和cpu指令。用內核模式來保護操做系統穩定。
雖然Windows 進程都有本身的地址空間,可是內核模式的操做系統和驅動都是使用同一個虛擬地址空間。
系統空間中的頁面只有在內核模式下能夠訪問,用戶空間中的頁面在用戶模式下均可以訪問。
內核模式下運行的代碼能夠訪問全部系統空間中的內存。
由於進入內核模式就缺乏保護,因此第三方設備驅動程序加載時要當心。
當用戶模式調用系統服務的時候,會切換到內核模式下,當要將cpu控制權返回給用戶的時候要先切換到用戶模式。
略
內核對象是某一個靜態定義的對象類型的單個運行時的實例。對象類型包含了一個系統定義的數據類型,在該對象上可用的函數,及一組對象屬性。如全部的進程是進程對象類型的一個實例。
對象和普通數據結構的區別是,對象的內部結構是被隱藏的。必需要調用對象服務才能讀寫對象內部數據。
對象技術的實現了操做系統4個系統任務:
n 提供了可供人讀的名稱
n 進程間共享資源和數據
n 保護資源,避免未受權訪問
n 引用跟蹤,若是再也不使用能夠釋放掉。
Windows的核心安全功能包含:針對全部可共享對象的自主保護,安全審計,登陸時密碼認證,以及一個資源被一個進程釋放後,其餘進程看不到上一個進程留下的資源。
註冊表是系統數據庫,包含了引道和配置系統全部的信息。也反映了內存中易失的數據窗口,好比當前的硬件狀態,性能計數器。
略
主要介紹了一些調試工具,和Windows SDK
http://zh.wikipedia.org/wiki/WinFX
http://en.wikipedia.org/wiki/Framework_Class_Library