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

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
Windows 管理: 了解 Windows Vista 內(nèi)核:第 2 部分(轉(zhuǎn)與 TechNet)
上個月,我在這個由三部分構(gòu)成的系列文章的第一部分,分析了 Windows Vista 內(nèi)核在進程和 I/O 方面的增強功能。
這一次,我將涵蓋到 Windows Vista 對內(nèi)存管理方式的提升以及系統(tǒng)啟動、關(guān)閉和電源管理方面的主要改進(第 1 部分)。
Windows? 隨著每個發(fā)行版本的問世都在可伸縮性和性能方面進行了改進,Windows Vista? 也不例外。Windows Vista 內(nèi)存管理器包含了大量增強功能,例如,更大范圍地使用無鎖同步技術(shù)、鎖定粒度更細、數(shù)據(jù)結(jié)構(gòu)包更緊密,分頁 I/O 更大、增加了對現(xiàn)代 GPU 內(nèi)存體系結(jié)構(gòu)的支持,并更有效利用了硬件的轉(zhuǎn)換旁路緩沖器。另外,Windows Vista 內(nèi)存管理如今還針對不同工作負荷的要求提供動態(tài)地址空間分配。
以下四種采用新技術(shù)的性能增強型功能首次在 Windows Vista 操作系統(tǒng)上登臺亮相:SuperFetch、ReadyBoost、ReadyBoot 和 ReadyDrive。本文稍后將詳細討論這些功能。
動態(tài)內(nèi)核地址空間
Windows 以及其上所運行的應(yīng)用程序占用的地址空間已經(jīng)達到了 32 位處理器的地址空間極限。默認情況下,Windows 內(nèi)核被限制在 2GB,或者是 32 位虛擬地址空間總量的一半,另一半則預(yù)留給當前正在 CPU 中運行線程的進程使用。在其自己的那一半虛擬地址空間中,內(nèi)核必須映射其自身、設(shè)備驅(qū)動程序、文件系統(tǒng)緩存、內(nèi)核堆棧、每會話代碼數(shù)據(jù)結(jié)構(gòu),以及由設(shè)備驅(qū)動程序分配的非分頁(鎖定的物理內(nèi)存)緩沖區(qū)和分頁緩沖區(qū)。在 Windows Vista 推出之前,內(nèi)存管理器在引導(dǎo)時確定針對這些用途分配多少地址空間,但這種不變性有時會造成其中某一區(qū)域空間被占滿,而其他區(qū)域仍有大量可用空間的情況。區(qū)域空間被用盡會導(dǎo)致應(yīng)用程序出現(xiàn)故障,并會妨礙設(shè)備驅(qū)動程序完成 I/O 操作。
在 32 位 Windows Vista 中,內(nèi)存管理器動態(tài)管理內(nèi)核的地址空間,根據(jù)工作負荷的具體需求為各種用途分配和釋放空間。這樣,用于存儲分頁緩沖區(qū)的虛擬內(nèi)存量會隨著設(shè)備驅(qū)動程序需求量增加而增加,并會在驅(qū)動程序釋放它時縮小。因此,Windows Vista 將能夠處理更大范圍的工作負荷,同樣,即將推出的代號為“Longhorn”的 32 位版本 Windows Server? 也將升級到可以處理更多的并行終端服務(wù)器用戶。
當然,在 64 位 Windows Vista 系統(tǒng)上,地址空間約束目前還不屬于實質(zhì)性的限制,因此,在將這些約束配置為相應(yīng)最大值時,不需要對其進行任何特殊處理。
內(nèi)存優(yōu)先級
就像 Windows Vista 添加 I/O 優(yōu)先級(如上一部分中所述)一樣,它還實現(xiàn)內(nèi)存優(yōu)先級。要了解 Windows 如何使用內(nèi)存優(yōu)先級,就需要掌握內(nèi)存管理器如何實現(xiàn)其內(nèi)存緩存(稱為“待機列表”)。在 Windows Vista 之前的所有 Windows 版本中,當某個進程所擁有的物理頁面(大小一般為 4KB)被系統(tǒng)回收時,內(nèi)存管理器通常將該頁面置于“待機列表”末尾。如果進程想要再次訪問該頁面,內(nèi)存管理器會從“待機列表”獲取該頁面,然后將其重新分配給該進程。如果進程想要使用物理內(nèi)存的新頁面,但沒有可用的內(nèi)存,則內(nèi)存管理器會為其提供“待機列表”前端的頁面。此方案基本上對待機列表中的所有頁面都同等對待,僅按頁面被置于列表中的時間來對它們進行排序。
在 Windows Vista 上,內(nèi)存的每個頁面都具有一個在 0 到 7 之間的優(yōu)先級,這樣,內(nèi)存管理器會將“待機列表”劃分為八個列表,每一個都用來存儲具有特定優(yōu)先級的頁面。當內(nèi)存管理器想要從“待機列表”中獲取某一頁面時,它會先從低優(yōu)先級列表獲取頁面。頁面的優(yōu)先級通常反映的是第一個導(dǎo)致該頁面分配的線程的優(yōu)先級。(如果頁面是共享的,它反映的就是共享線程的最高內(nèi)存優(yōu)先級。)線程會從其所屬的進程繼承它的頁面優(yōu)先級值。當內(nèi)存管理器預(yù)見到某一進程要訪問內(nèi)存時,會將低優(yōu)先級用于它從磁盤推測性讀取的頁面。
默認情況下,進程的頁面優(yōu)先級值為 5,但應(yīng)用程序和系統(tǒng)可通過函數(shù)更改進程和線程的頁面優(yōu)先級值。只有從宏觀上理解頁面的相對優(yōu)先級時,才能意識到內(nèi)存優(yōu)先級的真正價值,也就是 SuperFetch 所發(fā)揮的作用。
SuperFetch
內(nèi)存管理器的重大改變體現(xiàn)在它對物理內(nèi)存的管理方式。先前版本 Windows 所使用的“待機列表”管理有兩個局限性。首先,頁面的優(yōu)先化僅取決于進程最近過去的行為,而不會預(yù)見到它們未來的內(nèi)存需求。其次,用于優(yōu)先化的數(shù)據(jù)僅限定于進程在任意給定時刻所擁有的頁面列表。這兩個缺點會導(dǎo)致出現(xiàn)“午餐后綜合癥”之類的狀況,即您離開計算機一段時間,但需要內(nèi)存密集型的系統(tǒng)應(yīng)用程序在此期間一直都在運行(例如病毒掃描或磁盤碎片整理)。此應(yīng)用程序會強制您的活動應(yīng)用程序已在內(nèi)存中進行緩存處理的代碼和數(shù)據(jù)由內(nèi)存密集型活動重寫。等您回來后,就會發(fā)現(xiàn)性能變得非常緩慢,因為各應(yīng)用程序必須從磁盤請求它們的數(shù)據(jù)和代碼。
Windows XP 采用了預(yù)取支持,該功能基于以前的引導(dǎo)和應(yīng)用程序啟動來執(zhí)行大規(guī)模的磁盤 I/O,以向內(nèi)存預(yù)加載所預(yù)期到的代碼和文件系統(tǒng)數(shù)據(jù),從而改進了引導(dǎo)和應(yīng)用程序啟動性能。Windows Vista 憑借 SuperFetch 又向前邁進了一大步,SuperFetch 是一種通過歷史信息和前瞻性內(nèi)存管理來增強“l(fā)east-recently accessed”(最近最少訪問的)方法的內(nèi)存管理方案。
SuperFetch 作為在服務(wù)主機進程 (%SystemRoot%\System32\Svchost.exe) 內(nèi)運行的 Windows 服務(wù)在 %SystemRoot%\System32\Sysmain.dll 中實現(xiàn)。該方案依賴于內(nèi)存管理器提供的支持,因此它可以檢索頁面使用歷史,以及引導(dǎo)內(nèi)存管理器將來自磁盤文件或分頁文件的數(shù)據(jù)和代碼預(yù)加載到“待機列表”中,并為各頁面指定優(yōu)先級。SuperFetch 服務(wù)基本上是將頁面跟蹤擴展到曾經(jīng)存儲在內(nèi)存中但已被內(nèi)存管理器重新使用以為新數(shù)據(jù)和代碼讓出空間的數(shù)據(jù)和代碼。該服務(wù)會將這一信息存儲在 %SystemRoot%\Prefetch 目錄中擴展名為 .db 的場景文件中(位于用于優(yōu)化應(yīng)用程序啟動的標準預(yù)取文件旁邊)。在對內(nèi)存使用情況的這種深入了解基礎(chǔ)上,SuperFetch 可在物理內(nèi)存變?yōu)榭捎脮r預(yù)加載數(shù)據(jù)和代碼。
只要內(nèi)存變?yōu)榭捎茫ɡ?,當某?yīng)用程序退出或釋放內(nèi)存時),SuperFetch 便會要求內(nèi)存管理器提取最近被驅(qū)出的數(shù)據(jù)和代碼。這將以每秒少數(shù)幾頁的速率完成,并且 I/O 的優(yōu)先級為“非常低”,以便預(yù)加載操作不會影響用戶或其他活動應(yīng)用程序。因此,如果您離開計算機去享用午餐,并且某個內(nèi)存密集型的后臺任務(wù)導(dǎo)致活動應(yīng)用程序的代碼和數(shù)據(jù)在您離開期間被驅(qū)出內(nèi)存,則 SuperFetch 通常會在您回來之前將所有或大多數(shù)代碼和數(shù)據(jù)返回到內(nèi)存中。SuperFetch 還包含了對休眠、待機、快速用戶切換 (FUS) 和應(yīng)用程序啟動的特定場景支持。例如,當系統(tǒng)處于休眠狀態(tài)時,SuperFetch 會將數(shù)據(jù)和代碼存儲在它預(yù)期(基于以前的休眠)將在后續(xù)恢復(fù)期間被訪問的休眠文件中。相比之下,當您恢復(fù) Windows XP 時,先前緩存的數(shù)據(jù)在被引用時必須從磁盤重新讀取。
請參閱邊欄“觀察 SuperFetch”以簡單了解 SuperFetch 如何影響可用內(nèi)存。
觀察 SuperFetch
在您使用 Windows Vista 系統(tǒng)一段時間后,您會發(fā)現(xiàn)任務(wù)管理器“性能”頁面上的“可用物理內(nèi)存”計數(shù)器的數(shù)值很低。這是因為 SuperFetch 和標準 Windows 緩存處理使用了所有可用物理內(nèi)存來緩存磁盤數(shù)據(jù)。例如,在您首次引導(dǎo)時,如果您立即運行任務(wù)管理器,則您會注意到,可用內(nèi)存值會隨著已緩存內(nèi)存量的增加而減少。如果您運行一個內(nèi)存需求很大的程序,然后退出該程序(分配大量內(nèi)存并在之后釋放內(nèi)存的任何免費軟件“RAM 優(yōu)化程序”都適用),或者剛剛復(fù)制了一個非常大的文件,則在系統(tǒng)回收已釋放內(nèi)存時可用內(nèi)存量將增加,并且物理內(nèi)存用量圖將下降。但隨著時間的過去,SuperFetch 會用被強制離開內(nèi)存的數(shù)據(jù)重新填充緩存,這樣,已緩存內(nèi)存量將增加,可用內(nèi)存量將下降。
Watching memory  (單擊該圖像獲得較大視圖)
ReadyBoost
CPU 和內(nèi)存的速度快到超越了硬盤的速度,因此磁盤是一個常見的系統(tǒng)性能瓶頸。隨機磁盤 I/O 成本尤為高昂,因為磁頭尋道時間約為 10 毫秒,這對于現(xiàn)今的 3GHz 處理器來說有些漫長。盡管 RAM 是用于緩存磁盤數(shù)據(jù)的理想選擇,但它的成本也相對較高。不過,閃存通常較為便宜,它隨機讀取的速度最高可比典型硬盤快 10 倍。因此,Windows Vista 中加入了一個名為 ReadyBoost 的功能來利用閃存存儲設(shè)備,方法是在這些設(shè)備上創(chuàng)建一個邏輯上介于內(nèi)存和磁盤之間的中間緩存層。
ReadyBoost 由一個在 %SystemRoot%\System32\Emdmgmt.dll 中實現(xiàn)的運行于服務(wù)主機進程中的服務(wù)和一個卷過濾器驅(qū)動程序 (%SystemRoot%\System32\Drivers\Ecache.sys) 組成。(Emd 是“外部內(nèi)存設(shè)備”的簡稱,即 ReadyBoost 在開發(fā)期間所使用的工作名稱。)當您將 USB 密鑰之類的閃存設(shè)備插入到系統(tǒng)中時,ReadyBoost 服務(wù)會查看該設(shè)備以確定其性能特征并將測試結(jié)果存儲在 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\Currentversion\Emdmgmt 中(如圖 1 所示)。
Figure 1 ReadyBoost device test results in the registry (單擊該圖像獲得較大視圖)
如果您還未使用設(shè)備進行緩存處理,并且新設(shè)備大小介于 256MB 和 32GB 之間、對于 4KB 隨機讀取的傳輸率為 2.5MB/s 或更高、對于 512KB 隨機寫入的傳輸率為 1.75MB/s 或更高,則 ReadyBoost 將詢問您是否想要將高達 4GB 的存儲空間專門用于進行磁盤緩存。(盡管 ReadyBoost 可以使用 NTFS,它還是會將最大緩存大小限制在 4GB,以適應(yīng) FAT32 限制。)如果您同意,該服務(wù)便會在設(shè)備的根目錄下創(chuàng)建一個名為 ReadyBoost.sfcache 的緩存文件,并要求 SuperFetch 在后臺預(yù)先填充緩存。
在 ReadyBoost 服務(wù)對緩存進行初始化之后,Ecache.sys 設(shè)備驅(qū)動程序會將所有讀寫數(shù)據(jù)截取到本地硬盤卷(例如 C:\),并將要寫入的所有數(shù)據(jù)復(fù)制到該服務(wù)創(chuàng)建的緩存文件中。Ecache.sys 會將數(shù)據(jù)壓縮,壓縮比通常達到 2:1,這樣,4GB 的緩存文件通常將包含 8GB 數(shù)據(jù)。驅(qū)動程序會聯(lián)合使用高級加密標準 (AES) 和一個隨機生成的每引導(dǎo)會話密鑰對其寫入的每個塊進行加密,以在將設(shè)備從系統(tǒng)移除的情況下保證緩存中數(shù)據(jù)的保密性。
當 ReadyBoost 確定可從緩存滿足隨機讀取需求時,它便會從那里向隨機讀取提供服務(wù),但由于硬盤的有序讀取訪問要勝過閃存,因此,它允許有序訪問模式中的讀數(shù)據(jù)直接移至磁盤,即使該數(shù)據(jù)位于緩存中。
ReadyBoot
如果系統(tǒng)的內(nèi)存不到 512MB,則 Windows Vista 會使用與 Windows XP 一樣的引導(dǎo)時預(yù)取,但如果系統(tǒng)的 RAM 為 700MB 或以上,它便會使用 RAM 內(nèi)緩存來優(yōu)化引導(dǎo)進程。緩存的大小取決于可用 RAM 總量,但這足以創(chuàng)建適當?shù)木彺?,并還可以為系統(tǒng)留出要順利引導(dǎo)所需的內(nèi)存。
在每一次引導(dǎo)后,ReadyBoost 服務(wù)(就是剛剛介紹的用于實現(xiàn) ReadyBoost 功能的服務(wù))會使用空閑 CPU 時間來為下一次引導(dǎo)計算引導(dǎo)時緩存計劃。它會分析來自前五次引導(dǎo)的文件跟蹤信息,并標識出訪問了哪些文件以及這些文件在磁盤上的位置。該服務(wù)將已處理的跟蹤信息以 .fx 文件形式存儲在 %SystemRoot%\Prefetch\Readyboot 中,并將緩存計劃保存在 HKLM\System\CurrentControlSet\Services\Ecache\Parameters 下的 REG_BINARY 值(這些值針對它們所引用的內(nèi)部磁盤卷而命名)中。
緩存由實現(xiàn) ReadyBoost 緩存處理的同一設(shè)備驅(qū)動程序 (Ecache.sys) 實現(xiàn),但緩存的填充則是由 ReadyBoost 服務(wù)在系統(tǒng)引導(dǎo)時帶領(lǐng)完成。盡管引導(dǎo)緩存像 ReadyBoost 緩存一樣進行壓縮,但 ReadyBoost 和 ReadyBoot 緩存管理之間的另一個區(qū)別是,在 ReadyBoot 模式下,除了 ReadyBoost 服務(wù)的更新之外,緩存不會變?yōu)榉从吃谝龑?dǎo)期間讀取或?qū)懭氲臄?shù)據(jù)。ReadyBoost 服務(wù)會在引導(dǎo)開始后 90 秒時(或者在其他內(nèi)存需求批準它的情況下)將緩存刪除,并將緩存的統(tǒng)計信息記錄在 HKLM\System\CurrentControlSet\Services\Ecache\Parameters\ReadyBootStats 中(如圖 2 所示)。Microsoft 性能測試表明,與舊有 Windows XP 預(yù)取器相比,ReadyBoot 使性能提高了約 20%。
Figure 2 ReadyBoot Performance statistics (單擊該圖像獲得較大視圖)
ReadyDrive
ReadyDrive 是一項利用了名為 H-HDD 的新型混合硬盤驅(qū)動器的 Windows Vista 功能。H-HDD 是一種帶有嵌入式非易失性閃存(還稱為 NVRAM)的磁盤。典型 H-HDD 所包含的緩存大小介于 50MB 和 512MB 之間,但 Windows Vista 緩存限制為 2TB。
Windows Vista 使用 ATA-8 命令來定義要在閃存中存放的磁盤數(shù)據(jù)。例如,Windows Vista 會在系統(tǒng)關(guān)閉時將引導(dǎo)數(shù)據(jù)保存到緩存,從而可以更快速地重新啟動。它還會在系統(tǒng)處于休眠狀態(tài)時將某些部分的休眠文件數(shù)據(jù)存儲在緩存中,以便加速后來的恢復(fù)過程。即使在磁盤盤片降速時也會啟用緩存,因此,Windows 可以將閃存用作磁盤寫入緩存,這樣可避免在系統(tǒng)靠電池電源運行時將磁盤盤片加速。使磁盤軸保持關(guān)閉狀態(tài)可以節(jié)省由磁盤驅(qū)動器在正常使用期間所消耗的大量電源。
引導(dǎo)配置數(shù)據(jù)庫
Windows Vista 在啟動和關(guān)閉方面增強了許多功能。隨著“引導(dǎo)配置數(shù)據(jù)庫”(BCD) 的采用,啟動功能在存儲系統(tǒng)和 OS 啟動配置、系統(tǒng)啟動進程的新流程和組織、新登錄體系結(jié)構(gòu)以及對延遲式自動啟動服務(wù)的支持方面都有所改進。Windows Vista 關(guān)閉方面的變化包括 Windows 服務(wù)的預(yù)關(guān)閉通知、Windows 服務(wù)關(guān)閉排序以及 OS 對電源狀態(tài)轉(zhuǎn)換的管理方式的重大改變。
啟動進程的最明顯變化之一是,系統(tǒng)卷的根目錄中沒有了 Boot.ini。這是因為,引導(dǎo)配置現(xiàn)在存儲在 BCD 中(在先前版本的 Windows 上,它存儲在 Boot.ini 文本文件中)。Windows Vista 使用 BCD 的其中一個原因是,BCD 將 Windows 支持的兩個當前引導(dǎo)體系結(jié)構(gòu)合為了一體:主引導(dǎo)記錄 (MBR) 和可擴展固件接口 (EFI)。MBR 通常由 x86 和 x64 桌面系統(tǒng)使用,而 EFI 則由基于 Itanium 的系統(tǒng)使用(但在不久的將來,桌面 PC 很有可能會附帶 EFI 支持)。BCD 對固件進行了抽象化,并具有超越 Boot.ini 的其他優(yōu)點,例如,對 Unicode 字符串和備用預(yù)引導(dǎo)可執(zhí)行文件的支持。
BCD 實際上存儲在磁盤上的某個加載到 Windows 注冊表中以通過注冊表 API 進行訪問的注冊表配置單元中。在 PC 上,Windows 將其存儲在系統(tǒng)卷上的 \Boot\Bcd 中。在 EFI 系統(tǒng)上,它位于 EFI 系統(tǒng)分區(qū)上。在加載了該配置單元后,它會在 HKLM\Bcd00000000 下顯示,但因其內(nèi)部格式?jīng)]有文檔記錄,所以編輯它時需要使用 %SystemRoot%\System32\Bcdedit.exe 之類的工具。也可通過 Windows Management Instrumentation (WMI) 將用來操縱 BCD 的接口提供給腳本和自定義編輯器使用,并且可以使用“Windows 系統(tǒng)配置實用程序”(%SystemRoot%\System32\Msconfig.exe) 來編輯或添加基本參數(shù)(如內(nèi)核調(diào)試選項)。
BCD 將平臺范圍的引導(dǎo)設(shè)置(例如,默認 OS 選擇和引導(dǎo)菜單超時時間)與 OS 特定的設(shè)置(例如,OS 引導(dǎo)選項和 OS 引導(dǎo)加載器的路徑)分割開來。例如,圖 3 顯示了在您未使用命令行選項運行 Bcdedit 時,BCD 會在輸出上部的“Windows 引導(dǎo)管理器”部分顯示平臺設(shè)置,接著在“Windows 引導(dǎo)加載器”部分顯示 OS 特定的設(shè)置。
Figure 3 Settings displayed in BCDEdit (單擊該圖像獲得較大視圖)
當您引導(dǎo) Windows Vista 安裝時,這個新方案會將在先前版本 Windows 上由操作系統(tǒng)加載器 (Ntldr) 處理的任務(wù)劃分為兩種不同的可執(zhí)行文件:\BootMgr 和 %SystemRoot%\System32\Winload.exe。Bootmgr 會讀取 BCD 并顯示 OS 引導(dǎo)菜單,而 Winload.exe 會處理操作系統(tǒng)加載。如果您要執(zhí)行干凈引導(dǎo),則 Winload.exe 會加載引導(dǎo)啟動設(shè)備驅(qū)動程序和核心操作系統(tǒng)文件(包括 Ntoskrnl.exe),并將控制權(quán)移交給操作系統(tǒng);如果系統(tǒng)要從休眠狀態(tài)恢復(fù),則 Winload.exe 會通過執(zhí)行 %SystemRoot%\System32\Winresume.exe 將休眠數(shù)據(jù)加載到內(nèi)存中并恢復(fù) OS。
Bootmgr 還包含對其他預(yù)引導(dǎo)可執(zhí)行文件的支持。Windows Vista 還隨帶了 Windows 內(nèi)存診斷 (\Boot\Memtest.exe),該工具已被預(yù)配置為用于檢查 RAM 性能狀況的選項,但第三方可以添加其自己的預(yù)引導(dǎo)可執(zhí)行文件,以作為將在 Bootmgr 的引導(dǎo)菜單中顯示的選項使用。
啟動進程
在先前版本的 Windows 中,各種系統(tǒng)進程之間的關(guān)系并不直觀。例如,在系統(tǒng)引導(dǎo)時,交互登錄管理器 (%SystemRoot%\System32\Winlogon.exe) 會啟動“本地安全機構(gòu)子系統(tǒng)服務(wù)”(Lsass.exe) 和“服務(wù)控制管理器”(Services.exe)。此外,Windows 會使用一個名為 Session 的命名空間容器來隔離在不同登錄會話中運行的進程。但在推出 Windows Vista 之前,登錄到控制臺的用戶共享的是 Session 0(即,由系統(tǒng)進程使用的會話),這就造成了潛在的安全問題。例如,如果某個運行于 Session 0 中的編寫拙劣的 Windows 服務(wù)在交互式控制臺上顯示一個用戶界面,從而允許惡意軟件通過粉碎攻擊之類的方法來攻擊窗口并有可能獲得管理特權(quán),就會引發(fā)此類安全問題。
為解決這些問題,若干個系統(tǒng)進程都針對 Windows Vista 進行了重新設(shè)計。會話管理器 (Smss.exe) 是在使用先前版本的 Windows 時在引導(dǎo)期間創(chuàng)建的第一個用戶模式進程,但在 Windows Vista 上,會話管理器會啟動自己的另一個實例來配置 Session 0,該會話將獨自供系統(tǒng)進程專用。用于 Session 0 的會話管理器進程將啟動“Windows 啟動應(yīng)用程序”(Wininit.exe)(一個用于 Session 0 的 Windows 子系統(tǒng)進程 (Csrss.exe)),然后退出?!癢indows 啟動應(yīng)用程序”會通過啟動“服務(wù)控制管理器”、“本地安全機構(gòu)子系統(tǒng)”和一個用來管理計算機的終端服務(wù)器連接的新進程(即“本地會話管理器”(Lsm.exe))持續(xù)運行。
當用戶登錄到系統(tǒng)上時,初始的會話管理器會創(chuàng)建其自己的一個新實例來配置新會話。新的 Smss.exe 進程會為這個新會話啟動 Windows 子系統(tǒng)進程和 Winlogon 進程。讓主會話管理器使用自己的副本初始化新會話并不會為客戶端系統(tǒng)帶來任何有利條件,但在充當終端服務(wù)器的 Windows Server“Longhorn”系統(tǒng)上,可以并行運行多個副本以提高多個用戶的登錄速度。
在這個新的體系結(jié)構(gòu)下,各系統(tǒng)進程(包括 Windows 服務(wù))在 Session 0 中進行了隔離。如果運行于 Session 0 中的某個 Windows 服務(wù)顯示一個用戶界面,則“交互服務(wù)檢測”服務(wù) (%SystemRoot%\System32\UI0Detect.exe) 會通過在用戶的安全上下文中啟動自己的實例并顯示圖 4 中所示的消息來通知所有登錄的管理員。如果用戶選擇“顯示消息”按鈕,該服務(wù)會將桌面切換到 Windows 服務(wù)桌面,用戶可在這里與服務(wù)的用戶界面交互,然后再切換回自己的桌面。有關(guān)啟動時會出現(xiàn)哪些情況的詳細信息,請參閱邊欄“查看啟動進程關(guān)系”。
Figure 4 Service has displayed a window (單擊該圖像獲得較大視圖)
查看啟動進程關(guān)系
可使用 Sysinternals (microsoft.com/technet/sysinternals) 提供的 Process Explorer 來查看 Windows Vista 的進程啟動樹。
屏幕快照包括“會話”列,您可通過 Process Explorer 的列對話框添加它。突出顯示的進程是初始的 Smss.exe。位于它下面的是 Session 0 的 Csrss.exe 和 Wininit.exe,由于這兩個進程的父進程(用于配置 Session 0 的 Smss.exe 實例)已經(jīng)退出,因此它們左對齊。Wininit 的三個子進程分別是 Services.exe、Lsass.exe 和 Lsm.exe。
Process Explorer 將一組進程標識為在 Session 1 中運行,也就是我通過遠程桌面連接登錄到的會話。Process Explorer 用藍色突出色來顯示與自身使用相同帳戶運行的進程。最后,將 Session 2 初始化,以為登錄到控制臺并創(chuàng)建新登錄會話的用戶做好準備。就是在該會話中,Winlogon 將運行并使用 LogonUI 要求新的控制臺用戶“按 Ctrl+Alt+DELETE 進行登錄”,而且在該會話中,Logonui.exe 將要求用戶提供其憑據(jù)。
Startup process and session information  (單擊該圖像獲得較大視圖)
憑據(jù)提供程序
即使是登錄體系結(jié)構(gòu)也在 Windows Vista 上發(fā)生了變化。在先前版本的 Windows 上,Winlogon 進程會加載在注冊表中指定的“圖形識別與認證”(GINA) DLL 來顯示要求用戶提供其憑據(jù)的登錄 UI。遺憾的是,GINA 模式受到了許多限制,包括只能配置一個 GINA、第三方很難編寫完整的 GINA,以及具有非標準用戶界面的自定義 GINA 會改變 Windows 用戶體驗。
而 Windows Vista 使用了新的“憑據(jù)提供程序”體系結(jié)構(gòu)來代替 GINA。Winlogon 會啟動一個單獨的進程,即“登錄用戶界面主機”(Logonui.exe),該進程將加載在 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\Currentversion\Authentication\Credential Providers 中配置的憑據(jù)提供程序。Logonui 可以并行托管多個憑據(jù)提供程序;實際上,Windows Vista 隨帶了交互式 (Authui.dll) 提供程序和智能卡式 (Smart-cardcredentialprovider.dll) 提供程序。為確保統(tǒng)一的用戶體驗,LogonUI 會管理對最終用戶顯示的用戶界面,但它還會允許憑據(jù)提供程序指定文本、圖標和編輯控件之類的自定義元素。
延遲式自動啟動服務(wù)
如果您曾經(jīng)在 Windows 系統(tǒng)啟動后立即登錄到系統(tǒng)上,您或許在桌面被完全配置并且您可以與外殼和所啟動的任何應(yīng)用程序進行交互之前經(jīng)歷了一些延遲。在您登錄時,“服務(wù)控制管理器”會啟動多個被配置為自動啟動服務(wù)并因此在引導(dǎo)時激活的 Windows 服務(wù)。許多服務(wù)都會執(zhí)行與登錄活動爭用資源的 CPU 密集型初始化和磁盤密集型初始化。為解決此問題,Windows Vista 采用了一個被稱為延遲式自動啟動的新服務(wù)啟動類型,如果服務(wù)不必在 Windows 引導(dǎo)后立即激活,便可使用該類型。
“服務(wù)控制管理器”會在自動啟動服務(wù)完成啟動后再啟動配置為延遲式自動啟動的服務(wù),并將這些服務(wù)的初始線程優(yōu)先級設(shè)置為 THREAD_PRIORITY_LOWEST。此優(yōu)先級別會使線程執(zhí)行的所有磁盤 I/O 都采用“非常低”I/O 優(yōu)先級。在服務(wù)完成初始化后,“服務(wù)控制管理器”會將其優(yōu)先級設(shè)置為普通。將延遲式啟動、較低的 CPU 和內(nèi)存優(yōu)先級與后臺磁盤優(yōu)先級結(jié)合后,大大減少了與用戶登錄間的相互沖突。許多 Windows 服務(wù)(包括后臺智能傳輸、Windows Update 客戶端和 Windows Media? Center)都使用這個新啟動類型來幫助提升引導(dǎo)后的登錄性能。
關(guān)閉
困擾著 Windows 服務(wù)編寫人員的一個問題是,在 Windows 關(guān)閉過程中,默認情況下他們最多只有二十秒鐘的時間來執(zhí)行清理。Windows Vista 之前的 Windows 版本一直不支持等待所有服務(wù)都退出的干凈關(guān)閉,因為存在程序錯誤的服務(wù)可能會無限期地阻止關(guān)閉。有些服務(wù)(例如那些具有與網(wǎng)絡(luò)相關(guān)的關(guān)閉操作或必須將大量數(shù)據(jù)保存到磁盤的服務(wù))可能需要更多的時間,因此 Windows Vista 允許服務(wù)請求預(yù)關(guān)閉通知。
在 Windows Vista 關(guān)閉時,“服務(wù)控制管理器”會首先通知那些要求預(yù)關(guān)閉通知的服務(wù)。它將無限期地等待這些服務(wù)退出,但如果這些服務(wù)存在程序錯誤且沒有響應(yīng)查詢,則“服務(wù)控制管理器”會在三分鐘后放棄并繼續(xù)前進。一旦所有這些服務(wù)都已退出或超時時間已滿,“服務(wù)控制管理器”就會接著對剩余的服務(wù)執(zhí)行舊有形式的服務(wù)關(guān)閉。組策略和 Windows Update 服務(wù)會在全新的 Windows Vista 安裝中注冊預(yù)關(guān)閉通知。
組策略和 Windows Update 服務(wù)還會使用另一個 Windows Vista 服務(wù)功能:關(guān)閉排序。各服務(wù)始終都可以指定啟動依存性,“服務(wù)控制管理器”要服從這些依存性以按照滿足這些依存性的順序來啟動服務(wù),但在 Windows Vista 之前,各服務(wù)還無法指定關(guān)閉依存性?,F(xiàn)在,注冊預(yù)關(guān)閉通知的服務(wù)也可以將其自己插入到存儲在 HKLM\System\CurrentControlSet\Control\PreshutdownOrder 的列表中,“服務(wù)控制管理器”將根據(jù)它們的相應(yīng)順序?qū)⑵潢P(guān)閉。有關(guān)這些服務(wù)的詳細信息,請參閱邊欄“標識延遲式自動啟動和預(yù)關(guān)閉服務(wù)”。
電源管理
睡眠和休眠屬于其他形式的關(guān)閉,自 Windows 2000 將電源管理引入到 Windows NT? 系列的 Windows 操作系統(tǒng)后,驅(qū)動程序和應(yīng)用程序方面的問題重重的電源管理一直都是令商務(wù)旅行人士苦惱的一件事情。當許多用戶在踏上旅途前合上自己的便攜式計算機外蓋時,都期望計算機系統(tǒng)處于掛起或休眠狀態(tài),但沒想到在到達目的地時,手提箱已經(jīng)變得灼熱,電池也被用盡,而且還丟失了數(shù)據(jù)。這是因為 Windows 始終都會詢問設(shè)備驅(qū)動程序和應(yīng)用程序是否允許更改電源狀態(tài),只要有一個驅(qū)動程序或應(yīng)用程序未響應(yīng),就可能會阻止轉(zhuǎn)換。
在 Windows Vista 中,內(nèi)核的電源管理器仍會通知驅(qū)動程序和應(yīng)用程序要更改電源狀態(tài)以便它們可以為這些更改做好準備,但不會再請求許可。此外,電源管理器最多會留出 20 秒來等待應(yīng)用程序?qū)Ω耐ㄖ龀鲰憫?yīng),而不是像在先前版本的 Windows 上那樣等待 2 分鐘。因此,Windows Vista 用戶可以更加確信自己的系統(tǒng)會執(zhí)行休眠和掛起。
預(yù)告
正如我先前所說的,這是由三部分組成的系列文章中的第二部分。第一部分介紹了 Windows Vista 內(nèi)核在 I/O 和進程方面的改進。這一次,我分析了 Windows Vista 在內(nèi)存管理、啟動和關(guān)閉方面的增強。下一次,我將通過介紹內(nèi)核在可靠性和安全性方面的改變來結(jié)束本系列文章。
標識延遲式自動啟動和預(yù)關(guān)閉服務(wù)
內(nèi)置的 SC 命令在 Windows Vista 得到了更新,以顯示配置為延遲式自動啟動服務(wù)的服務(wù):
Using SC to display start type  (單擊該圖像獲得較大視圖)
遺憾的是,SC 命令不會報告已請求預(yù)關(guān)閉通知的服務(wù),但您可以使用 Sysinternals 提供的 PsService 實用程序來確保服務(wù)接受預(yù)關(guān)閉通知:
Viewing pre-shutdown status  (單擊該圖像獲得較大視圖)
Mark Russinovich 是 Microsoft 的“平臺和服務(wù)部”的一名技術(shù)人員。他是《Microsoft Windows Internals》(Microsoft Windows 內(nèi)部結(jié)構(gòu))(Microsoft Press, 2004) 的合著者之一,并經(jīng)常在 IT 和開發(fā)人員會議上演講。在 Microsoft 最近收購了 Mark Russinovich 與其他人創(chuàng)辦的 Winternals Software 之后,Mark Russinovich 也隨之加入了 Microsoft。他還創(chuàng)辦了 Sysinternals,在那里他發(fā)布了 Process Explorer、Filemon 和 Regmon 實用程序。
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Windows NT 和 VMS: 其余的故事 (The Rest of the Story)
【ITECN技術(shù)專欄】之 512MB內(nèi)存的Windows Vista照樣跑得歡
驚天秘密 window7不加內(nèi)存就可給自己的電腦提速<轉(zhuǎn)> - 操作系統(tǒng)專區(qū) - 軟件交流...
關(guān)閉Superfetch和prefetch提升Vista開機速度
使用U盤作為系統(tǒng)內(nèi)存補充
妙用ReadyBoost 加快Vista開關(guān)機速度
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服