




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
本文格式為Word版,下載可任意編輯——哈爾濱工業大學(威海)操作系統試驗報告及答案
哈爾濱工業大學(威海)
操作系統試驗報告
說明:本試驗報告試驗答案,是本人在上試驗時的測試數據,由于操作系統試驗中后面試驗與當時所做試驗的計算機的配置有關,因此本試驗報的數據僅供參考。
試驗1
進程的描述與控制
Windows2000編程
(試驗估計時間:100分鐘)
1.1背景知識
Windows2000可以識別的應用程序包括控制臺應用程序、GUI應用程序和服務應用程序??刂婆_應用程序可以創立GUI,GUI應用程序可以作為服務來運行,服務也可以向標準的輸出流寫入數據。不同類型應用程序間的惟一重要區別是其啟動方法。Windows2000是以NT技術構建的,它提供了創立控制臺應用程序的能力,使用戶可以利用標準的C++工具,如iostream庫中的cout和cin對象,來創立小型應用程序。當系統運行時,Windows2000的服務尋常要向系統用戶提供所需功能。
服務應用程序類型需要ServiceMail()函數,由服務控制管理器(SCM)加以調用。SCM是操作系統的集成部分,負責響應系統啟動以開始服務、指導用戶控制或從另一個服務中來的請求。其本身負責使應用程序的行為像一個服務,尋常,服務登錄到特別的LocalSystem賬號下,此賬號具有與開發人員創立的服務不同的權限。
當C++編譯器創立可執行程序時,編譯器將源代碼編譯成OBJ文件,然后將其與標準庫相鏈接。產生的EXE文件是裝載器指令、機器指令和應用程序的數據的集合。裝載器指令告訴系統從哪里裝載機器代碼。另一個裝載器指令告訴系統從哪里開始執行進程的主線程。在進行某些設置后,進入開發者提供的main()、Servicemain()或WinMain()函數的低級入口點。機器代碼中包括控制規律,它所做的事包括跳轉到WindowsAPI函數,進行計算或向磁盤寫入數據等。
Windows允許開發人員將大型應用程序分為較小的、相互有關系的服務模塊,即動態鏈接庫(DLL)代碼塊,在其中包含應用程序所使用的機器代碼和應用程序的數據。
1.2試驗目的
通過對Windows2000編程,進一步熟悉操作系統的基本概念,較好地理解Windows2000的結構。
1.3工具/準備工作
在開始本試驗之前,請回想教科書的相關內容。您需要做以下準備:
1)一臺運行Windows2000Professional操作系統的計算機。2)計算機中需安裝VisualC++6.0專業版或企業版。
1.4試驗內容與步驟
(1)、簡單的控制臺應用程序
我們先來創立一個名為“Hello,World〞的應用程序。
步驟1:登錄進入Windows2000Professional。
步驟2:利用輸入輸出類iostream和std::cout編寫一個控制臺小程序,在屏幕上顯示“hello,windows2000〞,并把代碼保存為1-1.cpp。步驟3:在“開始〞菜單中單擊“程序〞、“附件〞、“命令提醒符〞,進入Windows“命令提醒符〞窗口,并利用簡單的標準命令行:C:\\>CL1-1.cpp
來創立可執行的1-1.exe。
操作能否正常進行?假使不行,原因是什么?答:不能正常進行。
由于缺少環境變量,需要設置三個環境變量:path、include、lib。
Path:C:\\ProgramFiles\\MicrosoftVisualStudio\\VC98\\Bin;.;C:\\ProgramFiles\\MicrosoftVisualStudio\\COMMON\\MSDev98\\Bin;
Include:C:\\ProgramFiles\\MicrosoftVisualStudio\\VC98\\Include;Lib:C:\\ProgramFiles\\MicrosoftVisualStudio\\VC98\\Lib;
步驟4:運行1-1.exe程序,產生用戶鍵入的一行文字。運行結果(假使運行不成功,原因是什么?):
(2)、GUI應用程序
在下面的試驗中,用C++編譯器創立一個GUI應用程序,代碼應包括WinMain()方法,這是GUI類型的應用程序的標準入口點。
步驟1:用Windows.h頭文件、WinMain()、MessageBox()API函數、用pragma指令指示編譯器/連接器找到User32.lib庫文件編寫一段小程序,在屏幕上顯示一個窗口,消息框中顯示“Hello,Windows2000\消息框標是用\消息框中設一個“OK〞按鈕,代碼保存為1-2.cpp
步驟2:在“命令提醒符〞窗口運行CL.exe,產生1-2.exe文件:C:\\>CL1-2.cpp運行結果:
3、進程對象
操作系統將當前運行的應用程序看作是進程對象。利用系統提供的惟一的稱為句柄(HANDLE)的號碼,就可與進程對象交互,這一號碼只對當前進程有效。
本試驗編寫一個簡單的進程句柄的應用,在系統中運行的任何進程都可調用
GetCurrentProcess()API函數,返回標識進程本身的句柄;再利用GetPriorityClass()獲得進程的優先級,用cout函數在屏幕上把得到的進程優先級在屏幕上顯示出來。步驟1:將程序鍵入記事本中,并把代碼保存為1-3.cpp
步驟2:在“命令提醒符〞窗口運行CL.exe,產生1-3.exe文件:C:\\>CL1-3.cpp運行結果
步驟3:編寫一段程序,利用句柄查出進程的詳細信息,首先利用Windows2000的新特性工具幫助庫tlhelp.h來獲得當前運行的所有進程的快照。然后應用程序進入快照中的每一個進程,得到其以PROCESSENTRY32結構表示的屬性,這一結構用來向OpenProcess()API函數提供進程的ID。Windows跟蹤每一進程的有關時間,通過開啟的進程句柄和GetProcessTime()API來查詢得到有關時間。然后計算進程在內核模式下消耗的時間占總時間的百分比。
將程序鍵入記事本中,并把代碼保存為1-4.cpp。
步驟4:在“命令提醒符〞窗口運行CL.exe,產生1-4.exe文件:C:\\>CL1-4.cpp運行結果:
1.5試驗總結
答:
通過本次試驗初步了解了計算機操作系統試驗課的模式,通過試驗1中的四個小
問題學到了如何在命令行模式下編譯C++程序,開始在直接嘗試中遇到大量的錯誤,在解決錯誤的過程中我學到:cl.exe要用到MSDev98\\Bin目錄下的MSPDB60.DLL
解決試驗1中的第一個小試驗錯誤的方法有以下幾種:
一:將電腦目錄
C:\\ProgramFiles\\MicrosoftVisualStudio\\COMMON\\MSDev98\\Bin下面的
MSPDB60.DLL文件拷貝到CL.exe所在的文件夾中
二:在“我的電腦--屬性--高級--環境變量〞中,添加如下變量:
需要設置三個環境變量:path、include、lib。
Path:C:\\ProgramFiles\\MicrosoftVisualStudio\\VC98\\Bin;.;C:\\Program
Files\\MicrosoftVisualStudio\\COMMON\\MSDev98\\Bin;
Include:C:\\ProgramFiles\\MicrosoftVisualStudio\\VC98\\Include;
Lib:C:\\ProgramFiles\\MicrosoftVisualStudio\\VC98\\Lib;
最終我是采用其次種方法解決試驗1-1的
在試驗1-2中:
文件1-2.cpp是用Windows.h頭文件、WinMain()、MessageBox()API
函數、用pragma指令指示編譯器/連接器找到User32.lib庫文件編寫一段小程序,也就是一個簡單的windows編程,再次熟悉了WinMain()函數。
試驗2
進程的描述與控制
Windows2000進程的一生
(試驗估計時間:100分鐘)
2.1背景知識
Windows2000所創立的每個進程都從調用CreateProcess()API函數開始,該函數的任務是在對象管理器子系統內初始化進程對象。每一進程都以調用ExitProcess()或TerminateProcess()API函數終止。尋常應用程序的框架負責調用ExitProcess()函數,對于C++運行庫來說,這一調用發生在應用程序的main()函數返回之后。
1.創立進程
CreateProcess()調用的核心參數是可執行文件運行時的文件名及其命令行。表2-1詳細地列出了每個參數的類型和名稱。
表2-1試驗記錄參數名稱LPCTSTRlpApplivationNAMELPCTSTRlpCommandLineLPSECURIITY_ATTRIBUTESlpProcessAttributesLPSECURIITY_ATTRIBUTESlpThreadAttributesBOOLbInheritHandleDWORDdwCreationFlageLPVOIDlpEnvironmentLPCTSTRlpCurrentDirectorySTARTUPINFOlpStartupInfoLPPROCESS_INFORMATIONlpProcessInformation一種標志,告訴系統允許新進程繼承創立者進程的句柄特別的創立標志(如CREATE_SUSPENDED)的位標記向新進程發送的一套環境變量;如為null值則發送調用者環境新進程的啟動目錄STARTUPINFO結構,包括新進程的輸入和輸出配置的詳情調用的結果塊;發送新應用程序的進程和主線程的句柄和ID使用目的全部或部分地指明包括可執行代碼的EXE文件的文件名向可執行文件發送的參數返回進程句柄的安全屬性,主要指明這一句柄是否應當由其他子進程所繼承。返回進程的主線程的句柄的安全屬性
可以指定第一個參數,即應用程序的名稱,其中包括相對于當前進程的當前目錄的全路徑或者利用探尋方法找到路徑;lpCommandLine參數允許調用者向新應用程序發送數據;接下來的三個參數與進程和它的主線程以及返回的指向該對象的句柄的安全性有關。
然后是標志參數,用以在dwCreationFlags參數中指明系統應當給予新進程什么行為。經常使用的標志是CREATE_SUSPNDED,告訴主線程立刻暫停。當準備好時,應當使用ResumeThread()API來啟動進程。另一個常用的標志是CREATE_NEW_CONSOLE,告訴新進程啟動自己的控制臺窗口,而不是利用父窗口,這一參數還允許設置進程的優先級,用以向系統指明,相對于系統中所有其他的活動進程來說,給此進程多少CPU時間。
接著是CreateProcess()函數調用所需要的三個尋常使用缺省值的參數,第一個參數是lpEnvironment參數,指明為新進程提供的環境;其次個參數是lpCurrentDirectory,
可用于向主創進程發送與缺省目錄不同的新進程使用的特別的當前目錄;第三個參數是STARTUPINFO數據結構中所必需的,用于在必要時指明新應用程序的主窗口的外觀。
CreateProcess()的最終一個參數是用于新進程對象及其主線程的句柄和ID的返回值緩沖區,以PROCESS_INFORMATION結構中返回的句柄調用Close_Handle()API函數是重要的,由于假使不將這些句柄關閉的話,有可能危及主創進程終止之前的任何未釋放的資源。
2.正在運行的進程
假使一個進程程擁有至少一個執行線程,則為正在系統中運行的進程。尋常這種進程使用主線程來指示它的存在,當主線程終止時,調用Exitprocess()API函數,通知系統終止它所擁有的所有正在運行、準備運行或正在掛起的其他線程。當進程正在運行時,可以查看它的大量特性,其中少數特性也允許加以修改。首先可查看的進程特性是系統進程標識符(PID),可利用GetCurrentProcessId()API函數來查看,與GetCurrentProcess()相像,對該函數的調用不能失敗,但返回的PID在整個系統中都可使用,其他可顯示當前進程信息的API函數還有GetStartInfo()和GetprocessShutdownParameters(),可給出進程存活期內的配置詳情。
尋常,一個進程需要它運行期環境的信息,例如API函數GetModuleFileName()和GetcommandLine(),可以給出CreateProcess()中的參數以啟動應用程序。在創立應用程序時可使用的另一個API函數是IsDebuggerPresent()。
可利用API函數GetGuiResources()來查看進程的GUI資源,此函數既可返回指定進程中的開啟的GUI對象的數目,也可返回指定進程中開啟的USER對象的數目。進程的其他性能信息可通過GetProcessIoCounters()、GetProcessPriorityBoost()、GetProcessTimes()和GetProcessWorkingSetSize()API得到,以上這幾個API函數都只需要具有PROCESS_QUERY_INFORMATION訪問權限的指向所感興趣進程的句柄。另一個可用于進程信息查詢的API函數是GetProcessVersion(),此函數只需感興趣進程的PID(進程標識號)。
3.終止進程
所有進程都是以調用ExitProcess()或者TerminateProcess()函數終止的,但最好使用前者而不要使用后者,由于進程是在完成了它的所有的關閉“職責〞之后以正常的終止方式來調用前者的。而外部進程尋常調用后者即突然終止進程的進行,由于關閉時的途徑不太正常,有可能引起錯誤的行為。
TerminateProcess()API函數只要開啟帶有PROCESS_TERMINATE訪問權的對象,就可以終止進程,并向系統返回指定的代碼,這是一種“野蠻〞的終止進程的方式,但是有時卻是需要的。
假使開發人員確實有機遇來設計“謀殺〞(終止別的進程的進程)和“受害〞進程(被終止的進程)時,應當創立一個進程間通信的內核對象,如一個互斥程序,這樣一來,“受害〞進程只在等待或同期性地測試它是否應當終止。
2.2試驗目的
1)通過創立進程、觀測正在運行的進程和終止進程的程序設計和調試操作,進一步熟悉操作系統的進程概念,理解Windows2000進程的“一生〞。
2)通過編寫和分析試驗程序,學習創立進程、觀測進程和終止進程的程序設計方法。
2.3工具/準備工作
在開始本試驗之前,請回想教科書的相關內容。您需要做以下準備:
1)一臺運行Windows2000Professional操作系統的計算機。2)計算機中需安裝VisualC++6.0專業版或企業版。
2.4試驗內容與步驟
請回復:
Windows所創立的每個進程都是以調用CreateProcess()API函數開始和以調用ExitProcess()或TerminateProcess()API函數終止。
1、創立進程
本試驗學習創立進程的基本框架。該程序要求啟動自身,顯示它的系統進程ID和它在進程列表中的位置。
步驟1:登錄進入Windows2000Professional。
步驟2:在“開始〞菜單中單擊“程序〞、“MicrosoftVisualStudio6.0〞“MicrosoftVisualC++6.0〞,進入VisualC++窗口。步驟3:在工具欄單擊“新建〞按鈕,輸入代碼保存為2-1.cpp。
參考類和函數:windows.h、iostream、stdio.h、StartClone()、GetModuleFileName、ZeroMemory。
步驟4:單擊“Build〞菜單中的“Compile2-1.cpp〞命令,對2-1.cpp進行編譯。步驟5:編譯完成后,單擊“Build〞菜單中的“Build2-1.exe〞命令,建立2-1.exe可執行文件。
操作能否正常進行,假使不行,原因是什么?
答:不能正常進行。屏幕一直不斷彈出窗口,無休止。
原因:程序編寫時出現語法錯誤,導致類似死循環。修改,將如下sprintf(szCmdLine,\
改為:sprintf(szCmdLine,\
步驟6:在工具欄單擊“Executeprogram〞按鈕,或者按Ctrl+F5鍵,或者單擊“Build〞菜單中的“Execute2-1.exe〞命令,執行2-1.exe程序。
步驟7:按Ctrl+S鍵可暫停程序的執行,按Ctrl+Pause(Break)鍵可終止程序的執行。
程序運行時屏幕顯示的信息是:
答:屏幕彈出id0-id25的窗口
最終只保存id為0的窗口
2.正在運行的進程
本試驗用進程信息查詢的API函數GetProcessVersion()與GetVersionEx(),確定運行進程的操作系統的版本號。
步驟1:在工具欄單擊“新建〞按鈕,編寫代碼保存為2-2.cpp。
步驟2:單擊“Build〞菜單中的“Compile2-2.cpp〞命令,系統對2-2.cpp進行編譯。
步驟3:編譯完成后,單擊“Build〞菜單中的“Build2-2.exe〞命令,建立2-2.exe可執行文件。
操作能否正常進行,假使不行,原因是什么?
答:操作可以正常進行。
步驟4:在工具欄單擊“Executeprogram〞按鈕,執行2-2.exe程序。
運行結果:
當前PID信息:5800當前操作系統版本:10
系統提醒信息:5.1
答:運行結果如下圖:
除了改變進程的優先級以外,還可以對正在運行的進程執行幾項其他的操作,只要獲得其進程句柄即可,SetProcessAffinityMask()API函數允許開發人員將線程映射四處理器上;SetProcessAffinityBoost()API可關閉前臺應用程序優先級的提升;而SetProcessWorkingSet()API可調理進程可用的非頁面RAM的容量;還有一個只對當前進程可用的API函數,即SetProcessShutdownParameters(),可告訴系統如何終止該進程。3.終止進程
步驟1:在工具欄單擊“新建〞按鈕,編寫代碼保存為2-3.cpp。
步驟2:單擊“Build〞菜單中的“Compile2-3.cpp〞命令,再單擊“是〞按鈕確認,系統對2-3.cpp進行編譯。
步驟3:編譯完成后,單擊“Build〞菜單中的“Build2-3.exe〞命令,建立2-3.exe可執行文件。
操作能否正常進行,假使不行,原因是什么?答:操作可以正常進行。
步驟4:在工具欄單擊“Executeprogram〞按鈕,執行2-3.exe程序。
運行結果及說明:
答:運行后開始顯示兩個窗口,一個父窗口一個子窗口。
等待一段時間后,子進程殺死自身進程,最終運行結果:
2.5試驗總結
答:
1)2.1中出現了語法錯誤,將%d寫成了d%,這個錯誤不是很明顯,不簡單被發現,因此在平日的編程中,要養成良好的變成習慣,養成良好的習慣,要避免此類語法錯誤的產生。
2)2.2中了解學會使用GetProcessVersion函數、GetCurrentProcessId函數和GetVersionEx函數得到進程的ID和系統的版本。3)2.3通過使用SetProcessAffinityMask()、SetProcessAffinityBoost()、SetProcessWorkingSet()、SetProcessShutdownParameters()函數實現了從創立進程、創立子進程、殺死進程等功能。
試驗3
進程的同步與通信
Windows2000線程同步
(試驗估計時間:100分鐘)
3.1背景知識
Windows2000提供的常用對象可分成三類:核心應用服務、線程同步和線程間通信,其中,開發人員可以使用線程同步對象來協調線程和進程的工作,以使其共享信息并執行任務。此類對象包括互鎖數據、臨界區、事件、互斥信號量等。
多線程編程中關鍵的一步是保護所有的共享資源,工具主要有互鎖函數、臨界區和互斥信號量等;另一個實質性部分是協調線程使其完成應用程序的任務,為此,可利用內核中的事件對象和信號。
在進程內或進程間實現線程同步的最便利的方法是使用事件對象,這一組內核對象允許一個線程對其受信狀態進行直接控制(見表3-1)。API名稱CreateEvent()表3-1用于管理事件對象API描述在內核中創立一個新的事件對象。此函數允許有安全性設置、手工還是自動重置的標志以及初始時已接收還是未接收信號狀態的標志。OpenEvent()創立對已經存在的事件對象的引用。此API函數需要名稱、繼承標志和所需的訪問級別。SetEvent()將手工重置事件轉化為已接收信號狀態。ResetEvent()將手工重置事件轉化為非接收信號狀態。PulseEvnt()將自動重置事件對象轉化為已接收信號狀態。當系統釋放所有的等待它的線程時此種轉化馬上發生。
與事件對象類似,互斥信號量簡單創立、開啟、使用并清除。利用CreateMutex()API函數可創立互斥信號量,創立時還可以指定一個初始的擁有權標志,通過使用這個標志,只有當線程完成了資源的所有的初始化工作時,才允許創立線程釋放互斥信號量。
為了獲得互斥信號量,首先,想要訪問調用的線程可使用OpenMutex()API函數來獲得指向對象的句柄;然后,線程將這個句柄提供給一個等待函數。當內核將互斥信號量對象發送給等待線程時,就說明該線程獲得了互斥信號量的擁有權。當線程獲得擁有權時,線程控制了對共享資源的訪問——必需設法盡快地放棄互斥信號量。放棄共享資源時需要在該對象上調用ReleaseMutex()API。然后系統負責將互斥信號量擁有權傳遞給下一個等待著的線程(由到達時間決定順序)。
3.2試驗目的
在本試驗中,通過對事件和互斥信號量對象的了解,加深對Windows2000線程同步的理解。
1)回想系統進程、線程的有關概念,加深對Windows2000的理解。2)了解事件和互斥信號量對象。
3)通過分析試驗程序,了解管理事件對象的API。4)了解在進程中如何使用事件對象。
5)了解在進程中如何使用互斥信號量對象。6)了解父進程創立子進程的程序設計方法。
3.3工具/準備工作
在開始本試驗之前,請回想教科書的相關內容。您需要做以下準備:
1)一臺運行Windows2000Professional操作系統的計算機。2)計算機中需安裝VisualC++6.0專業版或企業版。
3.4試驗內容與步驟
1.事件對象
在進程間使用事件。父進程啟動時,利用CreateEvent()API創立一個命名的、可共享的子進程,然后等待子進程向事件發出信號并終止父進程。在創立時,子進程通過OpenEvent()API開啟事件對象,調用SetEvent()API使其轉化為已接收信號狀態。兩個進程在發出信號之后幾乎馬上終止。
步驟1:登錄進入Windows2000Professional。
步驟2:在“開始〞菜單中單擊“程序〞、“MicrosoftVisualStudio6.0〞“MicrosoftVisualC++6.0〞,進入VisualC++窗口。
步驟3:在工具欄單擊“新建〞按鈕,編寫代碼保存為3-1.cpp。程序功能:創立和開啟事件對象在進程間傳送信號。參考類和函數:
windows.h、iostream、CreateChild()、szFilename、GetModuleFileName、szCmdLine、CloseHandle、WaitForChild()。
步驟4:單擊“Build〞菜單中的“Compile3-1.cpp〞命令,單擊“是〞按鈕確認,系統對3-1.cpp進行編譯。
步驟5:編譯完成后,單擊“Build〞菜單中的“Build3-1.exe〞命令,建立3-1.exe可執行文件。
操作能否正常進行,假使不行,原因是什么?
答:程序可以正常運行。
步驟6:在工具欄單擊“Executeprogram〞按鈕,執行3-1.exe程序。
運行結果(分行書寫,假使不成功,原因是什么?):
1)eventcreated2)chlidcreated
3)Parentwaitingonchild.
4)childprocessbegining
5)eventsignaled
6)parentreceivedtheenventsignalingfromchild7)Parentreleased.運行結果圖片:
當修改之后,修改:Sleep(1500);語句:運行結果
1.2.3.4.5.6.7.eventcreatedchlidcreated
Parentwaitingconchhiildl.dprocessbegining
eparventerentceivedtheensivegntnsiganlalingefrdomchild
Parentreleased.
運行結果圖片:
這個結果與你期望的一致嗎?(從進程并發的角度對結果進行分析)。
答:當有Sleep(1500);時,主程序會等待子程序1.5s,這樣的話子程序先輸出,然后主程序再輸出。這樣的話就不會出現錯誤。
而當去掉::Sleep(1500);語句之后主程序和字程序同時輸出就會出現輸出結果重疊的狀況,變現為輸出結果錯誤。
請回復:
1)程序中,創立一個事件使用了哪一個系統函數?創立時設置的初始信號狀態是
什么?
答:
a)創立事件用CreateEvent()函數
b)HANDLEhEventContinue=::CreateEvent(
NULL,TRUE,//缺省的安全性,子進程將具有訪問權限//手工重置事件FALSE,//初始時是非接受信號狀態g_szContinueEvent);//事件名稱
2)創立一個進程(子進程)使用了哪一個系統函數?答:
BOOLbCreateOK=::CreateProcess(szFilename,//生成的可執行文件名
szCmdLine,//指示其行為與子進程一樣的標志NULL,//子進程句柄的安全性NULL,FALSE,0,NULL,NULL,
WIN32API函數CreateProcess用來創立一個新的進程和它的主線程,這個新進程運行指定的可執行文件。
2.互斥信號量對象
使用互斥信號量來保證對兩個線程間單一數值的訪問。每個線程都企圖獲得控制權來改變該數值,然后將該數值寫入輸出流中。創立者實際上創立的是互斥信號量對象,計數方法執行等待并釋放,為的是共同使用互斥信號量所需的資源(因而也就是共享資源)。
步驟1:在工具欄單擊“新建〞按鈕,編寫代碼保存為3-2.cpp。程序功能:利用互斥信號量保護共享資源
參考類與函數:windows.h、iostream、classCCountUpDown、WaitForCompletion()、DoCount()、ReleaseMutex()、
步驟2:單擊“Build〞菜單中的“Compile3-2.cpp〞命令,再單擊“是〞按鈕確認,系統對3-2.cpp進行編譯。
步驟3:編譯完成后,單擊“Build〞菜單中的“Build3-2.exe〞命令,建立3-2.exe可執行文件。
操作能否正常進行,假使不行,原因是什么?
//子線程句柄的安全性//不繼承句柄
//特別的創立標志//新環境//當前目錄
//啟動信息結構//返回的進程信息結構
答:可以正常進行。
步驟4:在工具欄單擊“Executeprogram〞按鈕,執行3-2.exe程序。
請描述運行結果(假使運行不成功,則可能的原因是什么?)
答:程序主要是在互斥信號量的保證下限制兩個線程之間對單一數值的訪問。程序中用的信號量是m_nAccess,實現對m_nValue的遞減。程序結果是:
。。。。。。。。
從50一直遞減到0
3.5試驗總結
答:試驗中主要的操作是線程的同步,像互斥信號量簡單創立、開啟、使用并清除,并利用互斥信號量保證兩個進程互斥的訪問共享數據。
當一個任務想對臨界區訪問時,為了防止別的任務也對該臨界區操作,它需要
對該臨界區上鎖,這就是互斥信號量的作用。
通過試驗,利用CreateMutex()API函數可創立互斥信號量,使用OpenMutex()API
函數來獲得指向對象的句柄,放棄共享資源時需要在該對象上調用ReleaseMutex()。學習了用于管理事件對象的API利用CreateEvent()函數創立事件,利用OpenEvent函數實現對已經創立對象的訪問等。
試驗4
進程的同步與通信
Windows2000線程間的通信
(試驗估計時間:150分鐘)
4.1背景知識
Windows2000提供的線程間通信類內核對象允許同一進程或跨進程的線程之間相互發送信息,包括文件、文件映射、郵件位和命名管道等,其中最常用的是文件和文件映射,這類對象允許一個線程很簡單地向同一進程或其他進程中的另一線程發送信息。
1.文件對象
文件對象是人們所熟悉的永久存儲的傳統元素。將一個文件看作是內核對象可使開發人員獲得比標準C++文件操作更為強大的功能。
內核允許開發人員在系統設備或網絡上創立代表永久存儲數據塊的文件對象。這些文件對象是對永久存儲數據的低級訪問者;用C++運行庫或其他方法開啟的所有文件最終都變成對CreateFile()API的調用。
CreateFile()函數分派一個內核對象來代表一個永久的文件,當在磁盤上創立一個新文件或當開啟一個已經存在的文件時,就調用這個API,其參數總結見表4-1
參數名LPCTSTRlpFileNameDWORDdwDesiredAccessDWORDdwShareModelpSecurityAttributesDWORDdwCreationDispositionDWORDdwFlagsAndAttributesHANDLEhTemplateFile表4-1CreateFile()API參數
使用目的要開啟或創立的文件名。所要求的文件訪問權;一個包括GENERIC_READ或GENERIC_WRITE的屏蔽。指定與其他進程共享的文件類型(假使有的話)性在文件系統的級別上所采取的操作的類型。如新文件的創立或開啟一個已有的文件文件系統的屬性,如只讀、隱蔽等。還可以是文件對象的屬性、如可緩存寫入等。指向另一文件對象的句柄,常用于為新創立的文件提供屬性。LPSECURITY_ATTRIBUTES當被文件系統支持時與備份文件對象有關的安全
尋??梢允褂肦eadFile()和WriteFile()API在永久存儲和應用程序間通過文件對象來移動數據,由于創立調用將對象的大多數繁雜性封裝起來了,這兩個函數只是簡單地利用指向要交換數據的文件對象的句柄(即指向內存內的數據緩存區的指針),然后計數移動數據的字節數。除此之外,這兩個函數還執行重疊式的輸入和輸出,由于不會“堵塞〞主線程,可用來傳送大量的數據。
Createfile()函數除了可訪問標準的永久文件外,還可訪問控制臺輸入和輸出,以及從命名的管道來的數據。
GetFileType()API指明要處理的關鍵文件句柄的結構。除此之外,內核還提供了GetFileInformationByHandle()、GetFileSize()和GetFileTime()API用于獲得關鍵數據的詳
細狀況。其它用于在文件中改變數據的工具函數包括Lockfile()、SetFilePoint()和SetEndOfFile()API。
除了這些基于句柄的API之外,內核還提供了大量的工具,用于按文件名對文件直接操作。文件對象用完之后,應當用CloseHandle()API加以清除。2.文件映射對象
比使用ReadFile()和WriteFile()API通過文件對象來讀取和寫入數據更為簡單的是,Windows2000還提供了一種在文件中處理數據的方法,名為內存映射文件,也稱為文件映射。文件映射對象是在虛擬內存中分派的永久或臨時文件對象區域(假使可能的話、可大到整個文件),可將其看作是二進制的數據塊,使用這類對象,可獲得直接在內存中訪問文件內容的能力。
文件映射對象提供了強大的掃描文件中數據的能力,而不必移動文件指針,對于多線程的讀寫操作來說,這一點特別有用,由于每個線程都可能想要把讀取指針移動到不同的位置——為了防止這種狀況,就需要使用某種線程同步機制保護文件。
在CreateFileMapping()API中,一個新的文件映射對象需要有一個永久的文件對象(由CreateFile()所創立)。該函數使用標準的安全性和命名參數,還有用于允許操作(如只讀)的保護標志以及大映射的最大容量,隨后可根據來自OpenFileMapping()API的其他線程或進程使用該映射——這與事件和互斥信號量的開啟進程是十分類似的。內存映射文件對象的另一個強大的應用是可請求系統創立一個運行映射的臨時文件。該臨時文件提供一個臨時的區域,用于線程或進程相互發送大量數據,而不必創立或保護磁盤上的文件。利用向創立函數中發送INVALID_HANDLE_VALUE來代替真正的文件句柄,就可創立這一臨時的內存映射文件;指令內核使用系統頁式文件建立支持映射的最大容量的臨時數據區。
為了利用文件映射對象,進程必需將對文件的查看映射到它的內存空間中,也就是說,應當將文件映射對象想像為進程的第一步,在這一步中,當查看實際上允許訪問的數據時,附加有共享數據的安全性和命名方式。為了獲得指向內存區域的指針需要調用MapViewOfFile()API,此調用使用文件映射對象的句柄作為其主要參數。此外還有所需的訪問等級(如讀-寫)和開始查看時文件內的偏移和要查看的容量。該函數返回一個指向進程內的內存的指針,此指針有多種編程方面的應用(但不超過訪問權限)。當終止文件映射查看時,必需用接收到的指針調用UnmapView()OfFile()API,然后再根據映射對象調用CloseHandle()API,從而將其清除。
4.2試驗目的
在本試驗中,通過對文件和文件映射對象的了解,來加深對Windows2000線程同步的理解。
1)回想系統進程、線程的有關概念,加深對Windows2000線程間通信的理解。2)了解文件和文件映射對象。
3)通過試驗程序,了解線程如何通過文件對象發送數據。4)了解在進程中如何使用文件對象。
5)通過分析試驗程序,了解線程如何通過文件映射對象發送數據。6)了解在進程中如何使用文件映射對象。
4.3工具/準備工作
在開始本試驗之前,請回想教科書的相關內容。
您需要做以下準備:
1)一臺運行Windows2000Professional操作系統的計算機。2)計算機中需安裝VisualC++6.0專業版或企業版。
4.4試驗內容與步驟
1.文件對象
了解線程如何通過文件對象在永久存儲介質上相互發送數據。激活并啟動一個線程,接著一個線程創立進程。每個線程從指定的文件中讀取數據,數據的增加是以創立時發送給它的數量進行的,然后將新數值寫回文件。步驟1:登錄進入Windows2000Professional。
步驟2:在“開始〞菜單中單擊“程序〞、“MicrosoftVisualStudio6.0〞“MicrosoftVisualC++6.0〞,進入VisualC++窗口。步驟3:在工具欄單擊“新建〞按鈕,編寫代碼保存為4-1.cpp。功能:演示線程通過文件對象發送數據
參考類和函數:windows.h、iostream、CreateFile()、ReadFile()、WriteFile()、CloseHandle()、CreateThread()、WaitForSingleObject()。
步驟4:單擊“Build〞菜單中的“Compile4-1.cpp〞命令,單擊“是〞按鈕確認,系統對4-1.cpp進行編譯。
步驟5:編譯完成后,單擊“Build〞菜單中的“Build4-1.exe〞命令,建立4-1.exe可執行文件。
操作能否正常進行,假使不行,原因是什么?
答:可以正常進行。
步驟6:在工具欄單擊“Executeprogram〞按鈕,執行4-1.exe程序。
運行結果(假使運行不成功,原因是什么?):
。。。。。
閱讀和分析4-3的程序,請回復以下問題:
1)使用了哪個系統API函數來創立線程實例?
答:創立線程實例使用的函數是:CreateThread()
2)文件的讀和寫操作分別使用了哪個API函數?
答:文件的讀,
ReadFile(hFile,
//要讀取的文件//緩沖區//緩沖區容量//讀取的字節數
reinterpret_cast(
答:使用CloseHandle()函數。
2.文件映射對象
在線程間使用的由頁式文件支持的文件映射對象,從中可以看出利用內存映射文件比使用駐留在磁盤上的文件對象更為簡單,其中的進程還使用了互斥信號量,以使公允地訪問文件映射對象,然后,當每個線程都釋放時,程序將文件的視圖映射到文件上并增加數據的值。步驟1:在工具欄單擊“新建〞按鈕,編寫代碼保存為4-2.cpp。實現功能:演示使用映射文件的內存交換數據的線程
參考類與函數:windows.h、iostream、WaitForSingleObject()、MapViewOfFile()、UnmapViewOfFile()、ReleaseMutex()、MakeSharedFile()、CreateFileMapping()、ZeroMemory()。
步驟2:單擊“Build〞菜單中的“Compile4-2.cpp〞命令,再單擊“是〞按鈕確認,系統對4-2.cpp進行編譯。
步驟3:編譯完成后,單擊“Build〞菜單中的“Build4-2.exe〞命令,建立4-2.exe可執行文件。
操作能否正常進行,假使不行,原因是什么?
//緩沖區容量//寫入的字節數//無重疊I/O
NULL);//無重疊I/O
3)在程序中,重置文件使用了哪一個函數?
答:能夠正常運行,但是運行結果有錯誤。
步驟4:在工具欄單擊“Executeprogram〞按鈕,執行4-2.exe程序。運行結果(假使不成功,原因是什么?):
運行結果有錯誤:
。。。。。
修改錯誤:在if語句里添加::Sleep(1500);if(nTotal==1)
{::Sleep(1500);//添加這一句
std::cout
請回復:
1)程序中用來創立一個文件映射對象的系統API函數是什么?答:運用CreateFileMapping()函數
2)在文件映射上創立和關閉文件視圖分別使用了哪一個系統函數?答:
a.創立文件試圖:MapViewOfFile()b.關閉文件視圖:UnmapViewOfFile()
3)填空:通過(CreateFileMapping())函數創立一個小型的文件映射對象(hMapping),接著,使系統API函數(CreateMutex)再創立一個保護其應用的互斥信號量(g_hMutexMapping)。然后,應用程序創立100個線程,每個都允許進行同樣的進程,即:通過互體獲得訪問權,這個操作是由語句:
g_hMutexMapping=::CreateMutex(NULL,FALSE,NULL);實現的。再通過函數(MapViewOfFile())操作將視圖映射到文件,將高32位看作有符號整數,將該數值增加(即命令:
++(*pnData);),再將新數值顯示在控制臺上,每個線程清除文件的視圖并在退出之前釋放互斥信號量的語句是:UnmapViewOfFile(pFile);
::ReleaseMutex(g_hMutexMapping),當線程完成時,應用程序關閉并退出。
;
4.5試驗總結
答:1)認識和熟悉了CreateFileMapping,UnmapViewOfFile,MapViewOfFile等API
函數。
2)對4-2.cpp,程序創立一個互斥體,這個互斥體不能被繼承,不由創立者初始化,沒有名字(根據參數決定)。然后創立進程,執行ThreadProc()函數,等待上一個進程對互斥體的使用完畢,然后創立映射,程序通過映射修改了進程的值,然后輸出,然后解除映射,釋放互斥體。
試驗5存儲管理
提高Windows2000內存性能
(試驗估計時間:50分鐘)
5.1背景知識
耗盡內存是Windows2000系統中最常見的問題之一,當系統耗盡內存時,所有進程對內存的總需求超出了系統的物理內存總量,隨后,Windows2000必需借助它的虛擬內存來維持系統和進程的運行,虛擬內存機制是Windows2000操作系統的重要組成部分,但它的速度比物理內存慢得多,因此,應當盡量避免耗盡物理內存的資源,以免導致性能下降。
解決內存不足問題的一個有效的方法就是添加更多的內存,但是,一旦提供了更多的內存,Windows2000很可能會馬上“吞食〞,而事實上,添加更多的內存并非總是可行的,也可能只是推遲了實際問題的發生,因此,應當相信,優化所擁有的內存是十分關鍵的。1.分頁過程
當Windows2000求助于硬盤以獲得虛擬內存時,這個過程被稱為分頁(paging),分頁就是將信息從主內存移動到磁盤進行臨時存儲的過程,應用程序將物理內存和虛擬內存視為一個獨立的實體,甚至不知道Windows2000使用了兩種內存方案,而認為系統擁有比實際內存更多的內存。例如:系統的內存數量可能只有16MB,但每一個應用程序依舊認為有4GB內存可供使用。
使用分頁方案帶來了好多好處,不過就是有代價的,當進程需要已經交換到硬盤上的代碼或數據時,系統要將數據送回物理內存,并在必要時將其他信息傳輸到硬盤上,而硬盤與物理內存在性能上的差異很大,例如:硬盤的訪問時間尋常為4-10ms,而物理內存的訪問時間為60us,甚至更快。
2.內存共享
應用程序經常需要彼此通信和共享信息,為了提高這種能力,Windows2000必需允許訪問某些內存空間而不危及它和其他應用程序的安全性和完整性,從性能的角度來看,共享內存的能力大大減少了應用程序使用的內存數量,運行一個應用程序的多個副本時,每一個實例都可以使用一致的代碼和數據,這意味著不必維護所加載應用程序代碼的單獨副本并使用一致的內存資源,無論正在進行多少個應用程序實例,充分支持應用程序代碼所需求的內存數量都相對保持不變。
3)未分頁合并內存與分頁合并內存
Windows2000決定了系統內存組件哪些可以以及哪些不可以交換到磁盤上,顯然,不應當將某些代碼(例如內核)交換出主內存,因此,Windows2000將系統使用的內存進一步劃分為未分頁合并內存和分頁合并內存。
分頁合并內是存儲遲早需要的可分頁代碼或數據的內存部分,雖然可以將分頁合并內存中的任何系統進程交換到磁盤上,但是它臨時存儲在主內存的這一部分,以防系統立刻需要它,在將系統進程交換到磁盤上之前,Windows2000會交換其他進程。未分頁合并內存包含必需駐留在內存中的占用代碼或數據,這種結構類似于早期MS-DOS程序使用的結構,在MS-DOS中,相對較小的終止、駐留程序在啟時加載到內存中,這些程序在系統重新啟動或關閉之前一直駐留在內存的特定部分中,例如,
防病毒程序將加載為TSR程序,以預防可能的病毒襲擊。
未分頁合并內存中包含的進程留在主內存中,并且不能交換到磁盤上,物理內存的這個部分用于內核模式操作(例如:驅動程序)和必需保存在主內存中才能有效工作的其他進程,沒有主內存的這個部分,內核組件就是可分頁的,系統本身就有變得不穩定的危險。
分派到未分頁內存池的主內存數量取決于服務器擁有的物理內存數量以及進程對系統上的內存空間的需求,不過,Windows2000將未分頁合并內存限制為256MB(在WindowsNT4中限制為128MB),根據系統中物理內存數量,繁雜的算法在啟動時動態確定Windows2000系統上的未分頁合并內存的最大數量,Windows2000內部的這一自我調理機制可以根據當前的內存配置自動調整大小,例如:假使增加或減少系統中的內存數量,那么Windows2000將自動調整未分合并內存的大小,以反映這一更改。4)提高分頁性能
只有一個物理硬盤驅動器的系統限制了優化分頁性能的能力,驅動器必需處理系統和應用程序的請求以及對分頁文件的訪問,雖然物理驅動器可能有多個分區,但是將分頁文件分布到多個分區的分頁文件并不能提高硬盤驅動器的能力。只有當一個分區沒有足夠的空間來包含整個分頁文件時,才將分頁文件放在同一個硬盤的多個分區上。
擁有多個物理驅動器的服務器可以使用多個分頁文件來提高分頁性能,關鍵是將分頁請求的負載分布到多個物理硬盤上,實際上,使用獨立物理驅動器上的分頁文件,系統可以同時處理多個分頁請求,各個物理驅動器可以同時訪問它自己的分頁文件并寫入信息,這將增加可以傳輸的信息量,多個分頁文件的最正確配置是將各個分頁文件放在擁有自己的控制器的獨立驅動器上,不過,由于額外的費用并且系統上的可用中斷很有限,因此對于大多數基于服務器的配置來說,這可能是不切實際的解決方案。分頁文件最重要的配置參數是大小,無論系統中有多少個分頁文件,假使它們的大小不適合,那么系統就可能遇到性能問題。
假使初始值太小,那么系統可能必需擴大分頁文件,以補償額外的分頁活動。當系統臨時增加分頁文件時,它必需在處理分頁請求的同時創立新的空間,這時,系統將出現大量的頁面錯誤,甚至可能出現系統失效,當系統必需在進程的工作區外部(在物理內存或分頁文件中的其他位置)查找信息時,就會出現頁面錯誤。當系統缺乏存儲資源(物理內存及虛擬內存)來滿足使用需求,從而遇到過多的分頁時,就會出現系統失效,系統將花更多的時間來分頁而不是執行應用程序。當系統失效時,Memory:Page/see計數器將持續高于每秒100頁,系統失效大大降低了系統的性能,此外,動態擴展分頁文件將導致碎片化,分頁文件將散布在整個磁盤上而不是在啟動時的連續空間中創立,從而增加了系統的開銷,使系統性能降低,因此,應當盡量避免系統增加分頁文件的大小。
提醒:在NTFS驅動器上,總是至少保存25%的空閑驅動器空間,以確??梢栽谶B續的空間中創立分頁文件。
在Windows2000使用內存數量的1.5倍作為分頁文件的最小容量,這個最小容量的兩倍作為最大容量。它減少了系統由于錯誤配置的分頁文件而崩潰的可能性,系統在崩潰之后能夠將內存轉儲寫入磁盤,所以系統分區必需有一個至少等于物理內存數量加上1的分頁文件。
5.2試驗目的
通過對Windows2000“任務管理器〞、“計算機管理〞、“我的電腦〞屬性、“系統信息〞、“系統監視器〞等程序的應用,學習提高Windows內存的性能,加深理解Windows操作系統的內存管理功能,理解操作系統存儲管理、虛擬存儲管理的知識。
5.3工具/準備工作
在開始本試驗之前,請回想教科書的相關內容。
您需要做以下準備:
需要一臺運行Windows2000Professional操作系統的計算機。
5.4試驗內容與步驟
判斷和維護Windows2000的內存性能有大量方法。步驟1:閱讀背景知識,請回復:1)什么是分頁過程?
答:分頁是指計算機操作系統借助硬盤獲得虛擬的內存空間的過程,操作系統將內存中的一部分暫時不會用到或者說已經很長時間沒用到的信息轉移到硬盤上進行臨時存儲。但是對于用戶角度來說,應用程序將物理內存和虛擬內存視為一個獨立的實體,這樣就解決了內存過小導致的系統速度變慢的問題,一定程度上提高了系統的性能。
2)什么是內存共享
答:共享內存就是多個進程可以把一段內存映射到自己的進程空間,以此來實現數據的共享以及傳輸,這也是所有進程間通信方式中最快的一種。共享內存是存在于內核級別的一種資源。在系統內核為一個進程分派內存地址時,通過分頁機制可以讓一個進程的物理地址不連續,同時也可以讓一段內存同時分派給不同的進程。共享內存機制就是通過該原理來實現的,共享內存機制只是提供數據的傳送,如何控制服務器端和客戶端的讀寫操作互斥,這就需要一些其他的輔助工具
3)什么是未分頁合并內存和分頁合并內存
Windows2000中,未分頁合并內存的最大限制是多少
答:分頁合并內是存儲遲早需要的可分頁代碼或數據的內存部分。
未分頁合并內存包含必需駐留在內存中的占用代碼或數據,未分頁合并內存中包含的進程留在主內存中,并且不能交換到磁盤上,物理內存的這個部分用于內核模式操作。Windows2000將未分頁合并內存限制為256MB,Windows2000內部的這一自我調理機制可以根據當前的內存配置自動調整大小。
4)Windows2000分頁文件默認設置的最小容量和最大容量是多少?
答:在Windows2000使用內存數量的1.5倍作為分頁文件的最小容量,這個最小容量的兩倍作為最大容量
步驟2:登錄進入Windows2000。
步驟3:查看包含多個實例的應用程序的內存需求。1)啟動想要監視的應用程序,例如:WORD。2)右鍵單擊任務欄以啟動“任務管理器〞。
3)在“Windows任務管理器〞對話框中選定“進程〞選項卡。
4)向下滾動在系統上運行的進程列表,查找想要監視的應用程序。請在表5-1中記錄:
表5-1試驗記錄
映像名稱WINWORD.EXEPID沒找到CPU01CP時間沒找到內存使用27620k“內存使用〞列顯示了該應用程序的一個實例正在使用的內存數量。5)啟動應用程序的另一個實例并觀測他的內存需求。
請描述使用其次個實例占用的內存與使用第一個實例時的內存對比狀況:
步驟4:未分頁合并內存。
估算未分頁合并內存大小的最簡單方法是使用“任務管理器〞。未分頁合并內存的估計值顯示在“任務管理器〞的“性能〞選項卡的“核心內存〞部分??倲担↘):86728分頁數:62816未分頁(K):23820
還可以使用“任務管理器〞查看一個獨立進程正在使用的未分頁合并內存數量和分頁合并內存數量。操作步驟如下:
1)單擊“Windows任務管理器〞的“進程〞選項卡,然后從“查看〞菜單中選擇“選擇列〞,顯示“進程〞選項卡的可查看選項。
2)在“選擇列〞對話框中,選定“頁面緩沖池〞選項和“非頁面緩沖池〞選項旁邊的復選框,然后單擊“確定〞按鈕。
返回Windows2000“任務管理器〞的“進程〞選項卡時,將看到其中增加顯示了各個進程占用的分頁合并內存數量和未分頁合并內存數量。
仍以方才開啟觀測的應用程序(例如:Word)為例,請在表5-2中記錄。
表5-2試驗記錄
映像名稱WINWORD.EXEPID沒找到內存使用41620k頁面緩沖池1333k非頁面緩沖池24k
從性能的角度來看,未分頁合并內存越多,可以加載到這個空間的數據就越多,擁有的物理內存越多,未分頁合并內存就越多,但未分頁合并內存被限制為256MB,因此添加超出這個限制的內存對未分頁合并內存沒有影響。
步驟5:提高分頁性能。
在Windows2000的安裝過程中,將使用連續的磁盤空間自動創立分頁文件(pagefile.sys)。用戶可以事先監視變化的內存需求并正確配置分頁文件,使得當系統
必需借助于分頁時的性能達到最高。
雖然分頁文件一般都放在系統分區的根目錄下面,但這并不總是該文件的最正確位置,要想從分頁獲得最正確性能,應當首先檢查系統的磁盤子系統的配置,以了解它是否有多個物理硬盤驅動器。
1)在“開始〞菜單中單擊“設置〞、“控制面板〞,雙擊“管理工具〞圖標,再雙擊“計算機管理〞圖標。
2)在“計算機管理〞窗口的左格選擇“磁盤管理〞管理單元來查看系統的磁盤配置。
請在表5-3中記錄有關試驗記錄
表5-3試驗記錄
卷CDLENOVO_PAPAT布局磁盤分區磁盤分區磁盤分區類型基本基本基本文件系統NIFSNIFSFAT32容量68.36G74.22G305M狀態狀態良好(系統)狀態良好狀態良好(EISA配置)
假使系統只有一個硬盤,那么建議盡可能為系統配置額外的驅動器,這是由于Windows2000最多可以支持在多個驅動器上分布的16個獨立的分頁文件,為系統配置多個分頁文件可以實現對不同磁盤I/O請求的并行處理,這將大大提高I/O請求的分頁文件性能。
步驟6:計算分頁文件的大小。
要想更改分頁文件的位置或大小配置參數,可按以下步驟進行:1)右鍵單擊桌面上的“我的電腦〞圖標并選定“屬性〞。2)在“高級〞選項卡上單擊“性能選項〞按鈕。
3)單擊對話框中的“虛擬內存〞區域中的“更改〞按鈕。請記錄:
所選驅動器(C:)的頁面文件大?。候寗悠鳎篊
可用空間(MB):60302初始大?。∕B):1524
最大值(MB):3048所選驅動器(D:)的頁面文件大小:(假使有的話)驅動器:沒有可用空間(MB):沒有初始大小(MB):沒有最大值(MB):沒有
所有驅動器頁面文件大小的總數:
允許的最小值(MB):2
推薦(MB):3057當前已分派(MB):1524
4)要想將另一個分頁文件添加到現有的配置,在“虛擬內存〞對話框中選定一個還沒有分頁文件的驅動器,然后指定分頁文件的初始值和最大值(以兆字節表示),單擊“設置〞,然后單擊“確定〞按鈕。
5)要想更改現有分頁文件的最大值和最小值,可選定分頁文件所在的驅動器,然后指定分頁文件的初始值和最大值,單擊“設置〞按鈕,然后單擊“確定〞按鈕。6)在“性能選項〞對話框中單擊“確定〞按鈕。7)單擊“確定〞按鈕以關閉“系統特性〞對話框。
步驟7:使用任務管理器。
可以使用“任務管理器〞來簡單地檢查分頁文件是否配置了正確的容量,這樣可以實時提供系統正在使用分頁文件的方式以及其他重要系統信息的確鑿描述。通過右鍵單擊任務欄運行“任務管理器〞,選定“性能〞選項卡查看實時的系統統計數據。與分頁文件大小最有關的信息位于“認可用量〞區域,這一區域顯示了認可“峰值〞是否達到或超過了認可“限制〞,以及它是否超過了系統上的物理內存數量。認可“峰值〞是指系統迄今為止向進程分派的最大物理內存和虛擬內存數量。請記錄:物理內存(KB)總數:2087084可用數:1370620系統緩存1272816:認可用量(KB)總數:959644限制:3491000
峰值:985440
當系統遇到分頁活動增加的狀況時,提交的內存數量(“認可總數〞)就會增加。一旦它達到了“認可限制〞值,系統就需要擴展分頁文件,“認可限制〞值指出在不必擴展分頁文件的狀況下可以向內存提交的虛擬內存數量,由于目標是避免擴展分頁文件,所以必需保持“認可總數〞和“認可限制〞值相差較大。假使這兩個值接近了,那么系統必需動態增加分頁文件的大小。
“任務管理器〞的“認可用量〞區域顯示的信息還說明白系統的主內存是否足以滿足系統執行的任務,假使認可“總數〞值經常超過系統中的內存數量,那么系統的物理內存可能不足。
5.5試驗總結
答:加深了對于分頁過程,內存共享,分頁合并內存,未分頁合并內存和虛擬內存的
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 自動化施工方案
- 幼兒園大班《滑梯的回憶》教案
- 建筑施工特種作業-高處作業吊籃安裝拆卸工真題庫-2
- 容錯性定義題目及答案
- 1 1 集合-2026版53高考數學總復習A版精煉
- 2023-2024學年云南省保山市高二下學期期末質量檢測數學試題(解析版)
- 2023-2024學年山東省青島市萊西市高二下學期期末考試數學試題(解析版)
- 新疆盛鼎龍新材料科技有限責任公司2500噸-年高效偶聯劑5000噸-年甲基苯基硅油及3萬噸-年硅酮膠項目環評報告
- 2025年秋三年級上冊語文同步教案 8 總也倒不了的老屋
- 物流公司和客戶合作協議
- 醫療機構審核管理制度
- 華南理工綜評機測試題(一)
- 浙江省杭州市臨平區2023-2024學年五年級下學期期末語文試卷
- 智能倉庫與倉儲管理自動化
- 2024-2025部編人教版2二年級語文下冊全冊測試卷【共10套附答案】
- 第一課能源史簡介
- 醫療器械倉庫管理課件
- 2024年火電電力職業技能鑒定考試-600MW超臨界機組運行筆試參考題庫含答案
- 2024年全國工會財務知識大賽備賽試題庫500(含答案)
- 24春國家開放大學《地域文化(本)》形考任務1-4參考答案
- 茯苓規范化生產技術規程
評論
0/150
提交評論