国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
windows內(nèi)核初窺(一)------體系結(jié)構(gòu)
windows是一個(gè)非常優(yōu)秀的OS,從今天開(kāi)始,我要和大家共同分享windows給我們帶來(lái)的快樂(lè)!本人只所以將自己的學(xué)習(xí)筆記與大家分享,一是讓自己更深入的理解windows,再就是有什么疏漏之處,望大家指正!!來(lái)吧,開(kāi)始我們的windows之旅!
一,windows2000體系結(jié)構(gòu)
(1)系統(tǒng)模型
   在大多數(shù)多用戶的OS中,用戶程序和系統(tǒng)程序是分開(kāi)的---系統(tǒng)程序是一個(gè)比較高的優(yōu)先級(jí)上運(yùn)行(核心態(tài)),而用戶程序是在一個(gè)較低的等級(jí)上運(yùn)行。系統(tǒng)程序有對(duì)系統(tǒng)數(shù)據(jù)和硬件的操作權(quán),而用戶程序要想操作系統(tǒng)數(shù)據(jù)或者硬件就只能通過(guò)系統(tǒng)程序。系統(tǒng)程序在windows2000中是以服務(wù)的形式給出。當(dāng)一個(gè)用戶程序要訪問(wèn)系統(tǒng)數(shù)據(jù)時(shí),通過(guò)向相應(yīng)的服務(wù)發(fā)出請(qǐng)求而實(shí)現(xiàn),而此時(shí)CPU通過(guò)一個(gè)陷阱來(lái)陷入到核心態(tài)來(lái)運(yùn)行。當(dāng)所要求的服務(wù)完成返回時(shí),windows2000負(fù)責(zé)恢復(fù)用戶線程(windows2000中,CPU是以線程為單位來(lái)進(jìn)行調(diào)度的)的寄存器狀態(tài)等,從而使得用戶線程得以繼續(xù)運(yùn)行。windows2000中,內(nèi)核和設(shè)備驅(qū)動(dòng)都是運(yùn)行在核心態(tài),它們使用同一段內(nèi)存空間,這意味著屬于某個(gè)組成部分的數(shù)據(jù)有可能被其它的組成部分所修改,有潛在的風(fēng)險(xiǎn)!各個(gè)組成部分之間又是可以相互協(xié)作的,為了完成一個(gè)任務(wù),往往需要這些組成部分之間進(jìn)行合作。有關(guān)系統(tǒng)模型在以后的日子我們會(huì)慢慢說(shuō)
(2)可移植性
  windows2000被設(shè)計(jì)成能在多種硬件平臺(tái)上運(yùn)行,我們可能會(huì)感到很奇怪,它是怎么實(shí)現(xiàn)其移植性的呢?我們知道每個(gè)平臺(tái)上的指令系統(tǒng)都不同,所以,不同平臺(tái)上的代碼肯定是不一樣的,所以實(shí)現(xiàn)移植性的手段也不是很神秘的,主要是以下兩點(diǎn):
     1,windows2000是分層次的,底層部分是平臺(tái)相關(guān)的,而上層部分是平臺(tái)無(wú)關(guān)的。也就是說(shuō)對(duì)于每個(gè)硬件平臺(tái)底層部分都要有一個(gè)實(shí)現(xiàn),而底層對(duì)上層的接口是統(tǒng)一的,所以上層就不用關(guān)心底層到底是怎么樣實(shí)現(xiàn)的,它關(guān)心的就是他們之間的接口。 在windows2000中,實(shí)現(xiàn)可移植性的兩個(gè)重要部分是內(nèi)核(kenel)和硬件抽象層(HAL),這兩個(gè)部分我們以后會(huì)詳細(xì)說(shuō)
     2,windows2000的大部分是用C寫(xiě)的,也有一部分是用C++寫(xiě)的,匯編語(yǔ)言只用在直接跟硬件打交道的地方和對(duì)性能要求教高的地方。
 
     上面這個(gè)系統(tǒng)結(jié)構(gòu)圖在很多書(shū)上都有,它就是windows2000的結(jié)構(gòu)圖,下面我們就來(lái)詳細(xì)說(shuō)說(shuō)各個(gè)部分的功能:
      從上圖我們可以看出,在用戶態(tài),windows2000有三個(gè)子系統(tǒng),分別為win32,posix,os/2.其中最重要的就是win32,它負(fù)責(zé)輸入輸出管理,沒(méi)有它,系統(tǒng)將無(wú)法工作,其它兩個(gè)子系統(tǒng)需要配置才能啟動(dòng)。我們主要精力放在win32上,因?yàn)檫@是我們用的最廣的。我們要特別注意以下三個(gè)關(guān)鍵點(diǎn):子系統(tǒng)進(jìn)程,子系統(tǒng)動(dòng)態(tài)鏈接庫(kù),用戶進(jìn)程。
   (1) 子系統(tǒng)進(jìn)程:win32子系統(tǒng)在windows2000中是以一個(gè)進(jìn)程的形式出現(xiàn)的(csrss.exe)。它負(fù)責(zé)所有win32用戶進(jìn)程,線程的創(chuàng)建與撤消,建立與撤消臨時(shí)文件,以及控制臺(tái)的管理。
   (2)子系統(tǒng)動(dòng)態(tài)鏈接庫(kù):win32子系統(tǒng)用的動(dòng)態(tài)鏈接庫(kù),里面有子系統(tǒng)所需要的大部分功能。
    (3)用戶創(chuàng)建的運(yùn)行于wn32子系統(tǒng)之上的應(yīng)用程序。
   用戶進(jìn)程并不直接地調(diào)用系統(tǒng)服務(wù),它們直接調(diào)用子系統(tǒng)動(dòng)態(tài)鏈接庫(kù),當(dāng)一個(gè)程序調(diào)用子系統(tǒng)動(dòng)態(tài)鏈接庫(kù)的一個(gè)功能時(shí),可能會(huì)發(fā)生以下三中情形之一:
   (1)所要求的功能全部是由子系統(tǒng)動(dòng)態(tài)鏈接庫(kù)提供,也就是說(shuō)程序完全運(yùn)行于用戶態(tài)。
   (2)需要調(diào)用一個(gè)或者多個(gè)運(yùn)行于核心態(tài)的服務(wù)。
   (3)需要子系統(tǒng)進(jìn)程的協(xié)助才能完成,這時(shí),用戶進(jìn)程向子系統(tǒng)進(jìn)程發(fā)送一C/S請(qǐng)求,具體工作由子系統(tǒng)進(jìn)程來(lái)完成。
 特別說(shuō)明,當(dāng)用戶進(jìn)程調(diào)用系統(tǒng)服務(wù)時(shí)實(shí)際上是通過(guò)設(shè)置一個(gè)陷阱陷入到核心態(tài)來(lái)運(yùn)行,將運(yùn)行權(quán)交給系統(tǒng)服務(wù)調(diào)度程序來(lái)調(diào)度,并不用通過(guò)創(chuàng)建新的進(jìn)程,線程來(lái)實(shí)現(xiàn)。
ntdll.dll
子系統(tǒng)下面是 ntdll.dll,它提供了一些子系統(tǒng)動(dòng)態(tài)鏈接庫(kù)所需要的功能。其實(shí),NTDLL.DLL的最主要功能就是為它的下層---執(zhí)行體提供一個(gè)文檔化接口,使得它以上的各個(gè)模塊可以調(diào)用執(zhí)行體提供的服務(wù)。
執(zhí)行體:
      這是令人激動(dòng)的一層,因?yàn)閺倪@層開(kāi)始我們就進(jìn)入了windows的核心態(tài),雖然我們對(duì)核心態(tài)的具體含義不是太清楚,沒(méi)有關(guān)系,隨著我們研究的深入你就會(huì)慢慢發(fā)現(xiàn)這是最重要的一層,因?yàn)樗衱indows的主要功能都是在這里完成的,下面我們就一點(diǎn)一點(diǎn)剖開(kāi):
     這一層包含以下幾種重要函數(shù)(服務(wù)):
(1)可以從用戶態(tài)直接調(diào)用的函數(shù),這些在NTDLL中文檔化(前面已說(shuō)過(guò)),這些中大多數(shù)都可以調(diào)用某個(gè)WIN32 API來(lái)啟動(dòng)所對(duì)應(yīng)的服務(wù)。
(2)只能從核心態(tài)調(diào)用的函數(shù),其中有一些在DDK中已文檔化,編寫(xiě)windows上驅(qū)動(dòng)程序的人員必須熟悉的
(3)沒(méi)有文檔化的函數(shù),供執(zhí)行體內(nèi)部使用
執(zhí)行體從總體上可以分為以下幾個(gè)模塊:
(1)配置管理器:負(fù)責(zé)管理注冊(cè)表,我們以后會(huì)詳解
(2)進(jìn)程、線程管理器:負(fù)責(zé)創(chuàng)建和終止進(jìn)程、線程。
(3)安全引用監(jiān)視器:在本地計(jì)算機(jī)上執(zhí)行安全策略,保護(hù)計(jì)算機(jī)的資源
(4)I/O管理器:實(shí)現(xiàn)I/O的設(shè)備無(wú)關(guān)性,并負(fù)責(zé)把I/O請(qǐng)求分配給相應(yīng)的設(shè)備驅(qū)動(dòng)程序以進(jìn)一步處理
(5)即插即用管理器(PNP):確定設(shè)備應(yīng)該由哪個(gè)驅(qū)動(dòng)程序來(lái)支持并負(fù)責(zé)加載相應(yīng)驅(qū)動(dòng)。在啟動(dòng)時(shí)的枚舉過(guò)程中,它收集每個(gè)設(shè)備所需要的硬件資源,并根據(jù)設(shè)備的需要來(lái)分配合適的硬件資源如I/O端口,IRQ,DMA通道之類,當(dāng)系統(tǒng)中的設(shè)備發(fā)生變化時(shí)它負(fù)責(zé)向系統(tǒng)和應(yīng)用程序發(fā)送通知消息。
(6)電源管理:協(xié)調(diào)電源時(shí)間,通過(guò)合理的配置,使得CPU降低電源消耗
(7)緩沖管理器:將最近使用過(guò)的數(shù)據(jù)留在CACHE中來(lái)提高系統(tǒng)的整體性能
(8)虛擬內(nèi)存管理:這是最為讓人激動(dòng)的地方,對(duì)于這個(gè)部分的理解會(huì)影響我們對(duì)整個(gè)系統(tǒng)結(jié)構(gòu)的理解,我們會(huì)在以后詳細(xì)解說(shuō)
(9)WDM管理方法例程:可以讓設(shè)備驅(qū)動(dòng)程序發(fā)布性能和配置信息以及從用戶態(tài)的WMI服務(wù)接受命令
         在WINDOWS平臺(tái)上有過(guò)編程經(jīng)歷的人一定對(duì)句柄(handle)不陌生,句柄到底是什么樣的東東呢??這往往給一些初學(xué)者帶來(lái)一些迷惑。其實(shí)要真正理解句柄就要從windows的設(shè)計(jì)理念上來(lái)解決這個(gè)問(wèn)題,那就是wndows是面向?qū)ο蟮模严到y(tǒng)的一些資源,進(jìn)程,文件等都看成對(duì)象,用對(duì)象管理器對(duì)這些對(duì)象統(tǒng)一管理。對(duì)于用戶來(lái)說(shuō)是通過(guò)句柄來(lái)操作響應(yīng)對(duì)象的,可以看成是對(duì)象的一個(gè)引用。
內(nèi)核:
     內(nèi)核是執(zhí)行體的下一個(gè)層次,它為執(zhí)行體提供一些最基本的功能,簡(jiǎn)單的對(duì)象,而執(zhí)行體就通過(guò)在這些簡(jiǎn)單對(duì)象上加上一些安全屬性,控制屬性等來(lái)完成更為復(fù)雜的功能。它重要提供以下四種函數(shù):
(1)線程調(diào)度
(2)陷阱處理和異步調(diào)度
(3)中斷處理和調(diào)度
(4)多處理器同步
   內(nèi)核提供了一個(gè)低層次的系統(tǒng)原語(yǔ)和機(jī)制供執(zhí)行體來(lái)調(diào)用以實(shí)現(xiàn)其功能。內(nèi)核只是提供了底層的機(jī)制,而不做任何策略性的事務(wù)。但線程的調(diào)度和異常處理是在內(nèi)核中實(shí)現(xiàn)的,內(nèi)核永遠(yuǎn)都運(yùn)行在核心態(tài)。
   一類對(duì)象叫做控制對(duì)象,包括APC,DPC對(duì)象以及I/O要用到的對(duì)象,如中斷對(duì)象。
   一類對(duì)象叫做調(diào)度對(duì)象,用于線程調(diào)度。這些對(duì)象包括線程,互斥體,事件,內(nèi)核事件對(duì),信號(hào)量,定時(shí)器,可等待定時(shí)器。
   硬件支持:
   內(nèi)核的另一主要功能是使得執(zhí)行體和設(shè)備驅(qū)動(dòng)獨(dú)立于硬件,這個(gè)工作包含處理多個(gè)方面的差異:中斷處理,異常處理,多處理器同步方式的差異
硬件抽象層(HAL):
   這是windows2000實(shí)現(xiàn)其可移植性最重要的組成部分,HAL是一個(gè)可加載的核心態(tài)模塊(HAL.DLL),它提供了windows2000所運(yùn)行的硬件平臺(tái)的底層接口,HAL隱藏了各種與硬件有關(guān)的細(xì)節(jié),比如I/O接口、中斷控制器、多處理通信機(jī)制等----這些都是平臺(tái)相關(guān)的。當(dāng)需要平臺(tái)相關(guān)的信息時(shí),windows2000的內(nèi)部模塊或者用戶程序通過(guò)HAL來(lái)實(shí)現(xiàn)。
設(shè)備驅(qū)動(dòng)程序:
   
    設(shè)備驅(qū)動(dòng)程序是核心態(tài)可加載模塊(以.SYS為擴(kuò)展名),它們是I/O管理器和相關(guān)硬件設(shè)備的接口。它們運(yùn)行于以下三種環(huán)境之一:
    (1) 在一個(gè)初始化了I/O函數(shù)的用戶線程環(huán)境中
    (2) 在內(nèi)核模式的系統(tǒng)線程中
    (3) 中斷發(fā)生后(不在任何進(jìn)程和線程中運(yùn)行,中斷發(fā)生時(shí)哪一個(gè)進(jìn)程或者線程正在運(yùn)行)
    如前所述,windows2000的設(shè)備驅(qū)動(dòng)程序并不直接操作硬件,而是調(diào)用HAL中的函數(shù)作為與硬件的接口。驅(qū)動(dòng)程序通常用C語(yǔ)言寫(xiě)(有時(shí)用C++)。因此,設(shè)備驅(qū)動(dòng)程序通過(guò)使用HAL可以實(shí)現(xiàn)平臺(tái)無(wú)關(guān)性。
     有以下幾中設(shè)備驅(qū)動(dòng)程序:
    (1)硬件驅(qū)動(dòng)程序:實(shí)現(xiàn)對(duì)物理硬件的讀寫(xiě)(通過(guò)使用HAL)。
    (2)文件系統(tǒng)驅(qū)動(dòng)程序:是面向文件I/O的驅(qū)動(dòng)程序,它把這些請(qǐng)求轉(zhuǎn)化成綁定到特定設(shè)備的I/O請(qǐng)求
    (3)文件過(guò)濾器驅(qū)動(dòng)程序
    (4)網(wǎng)絡(luò)重定向驅(qū)動(dòng)程序
    (5)協(xié)議驅(qū)動(dòng)程序
    (6)內(nèi)核流過(guò)濾器驅(qū)動(dòng)程序
  因?yàn)榘惭b驅(qū)動(dòng)程序是把用戶編寫(xiě)的用戶態(tài)代碼添加到系統(tǒng)的唯一辦法,因此,一些程序員通過(guò)編寫(xiě)設(shè)備驅(qū)動(dòng)程序可以訪問(wèn)OS的內(nèi)部函數(shù)或者內(nèi)部數(shù)據(jù)結(jié)構(gòu)。

    好,到此為止我們對(duì)windows2000的整體結(jié)構(gòu)有了大概的了解,在接下來(lái)的日子里我們要對(duì)每個(gè)部分進(jìn)行更為深入的研究,并且會(huì)舉一些例子程序來(lái)輔助說(shuō)明,因?yàn)槲覀儗W(xué)它的目的就是為了用,為了改變!
 
本文來(lái)自CSDN博客,轉(zhuǎn)載請(qǐng)標(biāo)明出處:http://blog.csdn.net/ljob2006/archive/2009/03/23/4018365.aspx
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開(kāi)APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Windows 的體系結(jié)構(gòu)
windows內(nèi)核相關(guān)基礎(chǔ)
Linux 2.6內(nèi)核的精彩世界
如何識(shí)別驅(qū)動(dòng)木馬
Windows啟動(dòng)過(guò)程分析
Windows NT 和 VMS: 其余的故事 (The Rest of the Story)
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服