操作系統(tǒng)實(shí)驗(yàn)報(bào)告windows部分原創(chuàng)_第1頁
操作系統(tǒng)實(shí)驗(yàn)報(bào)告windows部分原創(chuàng)_第2頁
操作系統(tǒng)實(shí)驗(yàn)報(bào)告windows部分原創(chuàng)_第3頁
操作系統(tǒng)實(shí)驗(yàn)報(bào)告windows部分原創(chuàng)_第4頁
操作系統(tǒng)實(shí)驗(yàn)報(bào)告windows部分原創(chuàng)_第5頁
已閱讀5頁,還剩26頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

(windows3.1Windows“任務(wù)管理器”的進(jìn)程管理CPUCPU的句柄、線程和進(jìn)程的總數(shù),物理、核心和認(rèn)可的內(nèi)存總數(shù)(KB)等。MicrosoftWindow20005.00.2195ServicePack43.1Windows“任務(wù)管理器”的進(jìn)程管理,Windows部分(系統(tǒng)(SYSTEM)進(jìn)程有__13___個(gè),填入表3-1中。表3-1實(shí)驗(yàn)記錄 用戶名 CPU Systemidleprocess服務(wù)(SERVICE)進(jìn)程有__3__個(gè),填入表3-2中。表3-2實(shí)驗(yàn)記錄 用戶名 CPU

表3-3實(shí)驗(yàn)記錄 用戶名 CPU 注意:終止進(jìn)程時(shí)要小心。終止進(jìn)程有可能導(dǎo)致不希望發(fā)生的結(jié)果,包括數(shù)據(jù)丟失和系統(tǒng)定等。因?yàn)樵诒唤K止前,進(jìn)程將沒有機(jī)會(huì)保存其狀態(tài)和數(shù)據(jù)。如果結(jié)束應(yīng)用程序,您將丟存的數(shù)據(jù)。如果結(jié)束系統(tǒng)服務(wù),系統(tǒng)的某些部分可能無法正常工作。()CPU3.1提高Windows2000內(nèi)存性能WindowsWindowsNT4中的限制為128MB)。根據(jù)系統(tǒng)中的物理內(nèi)存數(shù)量,復(fù)雜的算法在啟動(dòng)時(shí)動(dòng)態(tài)確定頁文件。2)Windows2000使用內(nèi)存數(shù)量的1.5倍作為分頁文件的最小容量,這個(gè)最小容量的兩倍作為最大容量。它減少了系統(tǒng)因?yàn)殄e(cuò)誤配置的分頁文件而崩潰的可能性。系統(tǒng)在崩潰之后能夠?qū)?當(dāng)Windows2000求助于硬盤以獲得虛擬內(nèi)存時(shí),這個(gè)過程被稱為分頁(paging)。分3)在“Windows任務(wù)管理器”對話框中選定“進(jìn)程”選項(xiàng)卡。表5-1實(shí)驗(yàn)記錄 PID CPU 0:00:10 總數(shù)(K):56552未分頁(K):107241)單擊“Windows任務(wù)管理器”的“進(jìn)程”選項(xiàng)卡,然后從“查看”菜單中選擇“選表5-2實(shí)驗(yàn)記錄 PID 頁面緩沖池 32276K 241K 256MB在Windows2000的安裝過程中,將使用連續(xù)的磁盤空間自動(dòng)創(chuàng)建分頁文件1)在“開始”菜單中單擊“設(shè)置”–“控制面板”命令,雙擊“管理工具”圖標(biāo),再表5-3實(shí)驗(yàn)記錄

3232

.52G3M.29G所選驅(qū)動(dòng)器(C:)的頁面文件大小:初始大小(MB):384MB最大值(MB):768MB(

3.2Windows2000編程GUIWindows2000是以NT的技術(shù)構(gòu)建的,它提供了創(chuàng)建控制臺應(yīng)用程序的能力,使用戶em接庫(DLL)代碼塊,在其中包含應(yīng)用程序所使用的機(jī)器代碼和應(yīng)用程序的數(shù)據(jù)。1)一臺運(yùn)行Windows2000Professional操作系統(tǒng)的計(jì)算機(jī)。2)計(jì)算機(jī)中需安裝VisualC++6.0專業(yè)版或企業(yè)版。2.GUI應(yīng)用程序Hello.cpp清單3-1一個(gè)簡單的Windows2000控制臺應(yīng)用程序//hello項(xiàng)目#include<iostream>voidmain()std::cout<<“Hello,Windows2000”<<std::endl;C:\>CLHello.cpp運(yùn)行結(jié)果(如果運(yùn)行不成功,則可能的原因是什么?):3-2.cpp清單3-2Windows2000的GUI應(yīng)用程序//msgbox項(xiàng)目#include<windows.h> //標(biāo)準(zhǔn)的include//告訴連接器與包括MessageBoxAPI函數(shù)的user32庫進(jìn)行連接#pragmacomment(lib,“user32.lib”)//這是一個(gè)可以彈出信息框然后退出的筒單的應(yīng)用程序intAPIENTRYWinMain(HINSTANCE /*hInstance*/, /*hPrevInstance*/, /*lpCmdLine*/,int /*nCmdShow*/)::MessageBox(L,

//沒有父窗口“Hello,Windows2000”, //消息框中的文本 //消息框標(biāo)題MB_OK); //其中只有一個(gè)OK按鈕//返回0以便通知系統(tǒng)不進(jìn)入消息循環(huán)return(0)WORDC:\>CL3-2.cpp接下來是WinMain()方法。其中有四個(gè)由實(shí)際的低級入口點(diǎn)傳遞來的參數(shù)。hInstance處。句柄的數(shù)值實(shí)際上是EXE文件映像的基地址,通常為0x00400000。下一個(gè)參數(shù)(程序的名稱)是lpCmdLine參數(shù)。另外,系統(tǒng)利用nCmdShow參數(shù)告訴應(yīng)用程序如何顯示它的主窗口(選項(xiàng)包括最小化、最大化和正常)。API)Hello,Windows2000GreetingsAPI清單3-3獲得和使用進(jìn)程的句柄//prochandle項(xiàng)目#include<windows.h>#include<iostream>//確定自己的優(yōu)先權(quán)的簡單應(yīng)用程序voidmain()//從當(dāng)前進(jìn)程中提取句柄HANDLEhProcessThis=::GetCurrentProcess();//請求內(nèi)核提供該進(jìn)程所屬的優(yōu)先權(quán)類DWORDdwPriority=::GetPriorityClass(hProcessThis);//發(fā)出消息,為用戶描述該類std::cout<<“Currentprocesspriority:”;itch(dwPriority)caseHIGH_PRIORITY_CLASS:std::cout<<“High”;eak;caseNORMAL_PRIORITY_CLASS:std::cout<<“Normal”;eak;caseIDLE_PRIORITY_CLASS:std::cout<<“Idle”;eak;caseREALTIME_PRIORITY_CLASS:std::cout<<“Realtime”;eak;fault:std::cout<<“<unknown>”;eak;std::cout<<std::endl;3-3C:\>CL3-3.cpp運(yùn)行結(jié)果:HighMormalIdleRealtimeunknown清單3-4利用句柄查出進(jìn)程的詳細(xì)信息//proclist項(xiàng)目#include<windows.h>#include<tlhelp32.h>#include<iostream>DWORDGetKernelModePercentage(constFILETIME&ftKernel,constFILETIME&ftUser)//將FILETIME結(jié)構(gòu)轉(zhuǎn)化為64位整數(shù)ULONGLONGqwKernel=(((ULONGLONG)ftKernel.dwHighDateTime)<<32)+Kernel.dwLowDateTime;ULONGLONGqwUser=(((ULONGLONG)ftUser.dwHighDateTime)<<32)+User.dwLowDateTime;//將消耗時(shí)間相加,然后計(jì)算消耗在內(nèi)核模式下的時(shí)間百分比ULONGLONGqwTotal=qwKernel+qwUser;DWORDdwPct=(DWORD)(((ULONGLONG)100*qwKernel)/qwTotal);return(dwPct)//以下是將當(dāng)前運(yùn)行進(jìn)程名和消耗在內(nèi)核模式下的時(shí)間百分?jǐn)?shù)都顯示出來的應(yīng)用程序voidmain()//對當(dāng)前系統(tǒng)中運(yùn)行的進(jìn)程拍取“快照”HANDLEhSnapshot=::CreateToolhelp32Snapshot(TH32CS–SNAPPROCESS, //提取當(dāng)前進(jìn)程0); //如果是當(dāng)前進(jìn)程,就將其忽略//初始化進(jìn)程入口PROCESSENTRY32::ZeroMemory(&pe,sizeof(pe));pe.dwSize=sizeof(pe);//按所有進(jìn)程循環(huán)BOOLbMore=::Process32First(hSnapshot,&pe);ile(bMore)//打開用于讀取的進(jìn)程HANDLEhProcess=::OpenProcess(N,

//指明要得到信息 //不必繼承這一句柄pe.th32ProcessID); //要打開的進(jìn)程if(hProcess!=NULL)//找出進(jìn)程的時(shí)間FILETIMEftCreation,ftExit,ftKernelMode,ftUserMode;::GetProcessTimes( //所感興趣的進(jìn)程&ftCreation, //進(jìn)程的啟動(dòng)時(shí)間(絕對的)&ftExit, //結(jié)束時(shí)間(如果有的話)&ftKernelMode, //在內(nèi)核模式下消耗的時(shí)間&ftUserMode); //在用戶模式下消耗的時(shí)間//計(jì)算內(nèi)核模式消耗的時(shí)間百分比DWORDdwPctKernel=::GetKernelModePercentage(ftKernelMode, //在內(nèi)核模式上消耗的時(shí)間ftUserMode); //在用戶模式下消耗的時(shí)間//向用戶顯示進(jìn)程的某些信息std::cout<<“ProcessID:”<<pe.th32ProcessID<<“,EXEfile:”<<pe.szExeFile<<“,%inkernelmode:”<<dwPctKernel<<std::endl;//消除句柄::CloseHandle(hProcess);//轉(zhuǎn)向下一個(gè)進(jìn)程bMore=::Process32Next(hSnapshot,&pe);C:\>CL3-4.cpp,EXEfile:,%inkemelmode:3.2Windows2000內(nèi)存結(jié)構(gòu)1)通過實(shí)驗(yàn)了解Windows2000內(nèi)存的使用,學(xué)習(xí)如何在應(yīng)用程序中管理內(nèi)存,體會(huì)2)了解Windows2000的內(nèi)存結(jié)構(gòu)和虛擬內(nèi)存的管理,進(jìn)而了解進(jìn)程堆和Windows為1)一臺運(yùn)行Windows2000Professional操作系統(tǒng)的計(jì)算機(jī)。2)計(jì)算機(jī)中需安裝VisualC++6.0專業(yè)版或企業(yè)版。清單5-1獲取有關(guān)系統(tǒng)的內(nèi)存設(shè)置的信息//工程vmeminfo#include<windows.h>#include<iostream>#include<shlwapi.h>#include<iomanip>#pragmacomment(lib,“shlwapi.lib”)voidmain()//首先獲得系統(tǒng)信息SYSTEM_INFO::ZeroMemory(&si,sizeof(si));::GetSystemInfo(&si);//使用外殼輔助程序?qū)σ恍┏叽邕M(jìn)行格式化TCHARszPageSize[MAX_PATH];::StrFormatByteSize(si.dwPageSize,szPageSize,MAX_PATH);DWORDdwMemSize=(DWORD)si.lpMaximumApplicationAddress-(DWORD)si.lpMinimumApplicationAddress;TCHARszMemSize[MAX_PATH];::StrFormatByteSize(dwMemSize,szMemSize,MAX_PATH);//將內(nèi)存信息顯示出來std::cout<<“Virtualmemorypagesize:”<<szPageSize<<std::endl;std::cout.fill(?0?);std::cout<<“Minimumapplicationaddress:0x”<<std::hex<<std::setw(8)<<(DWORD)si.lpMinimumApplicationAddress<<std::endl;std::cout<<“Maximumapplicationaddress:0x”<<std::hex<<std::setw(8)<<(DWORD)si.lpMaximumApplicationAddress<<std::endl;std::cout<<“Totalavailablevirtualmemory:”<<szMemSize<<std::endl;運(yùn)行結(jié)果(如果運(yùn)行不成功,則可能的原因是什么?):1)虛擬內(nèi)存每頁容量為:4.00kb2)最小應(yīng)用地址:0x000100003)最大應(yīng)用地址:0x7ffeffff4)當(dāng)前可供應(yīng)用程序使用的內(nèi)存空間為:1.99GB

提示:可供應(yīng)用程序使用的內(nèi)存空間實(shí)際上已經(jīng)減去了開頭與結(jié)尾兩個(gè)64KB的保護(hù)區(qū)。虛擬內(nèi)存空)都將引發(fā)一個(gè)錯(cuò)誤陷井,從而導(dǎo)致錯(cuò)誤并終止程序的執(zhí)行。也就是說,假如用戶有一個(gè)NULL指針(地址外錯(cuò)誤并終止程序的執(zhí)行。3.3Windows2000進(jìn)程的“一生”API函數(shù)終止。通常應(yīng)用程序的框架負(fù)責(zé)調(diào)用ExitProcess()函數(shù)。對于C++運(yùn)行庫來說,表3-4CreateProcess()函數(shù)的參數(shù)參數(shù)名稱LPCTSTRlpApplivationNameLPCTSTRlpCommandLinelpProcessAttributesThreadAttributesBOOLbInheritHandleDWORDdwCreationFlageLPVOIDlpEnvironmentLPCTSTRlpCurrentDirectorySTARTUPINFOProcessInformation目的EXE執(zhí)行文件發(fā)送的參數(shù)進(jìn)程句柄的安全屬性。主要指明這一句柄是否應(yīng)該由其他程所繼承進(jìn)程的主線程的句柄的安全屬性標(biāo)志,告訴系統(tǒng)允許新進(jìn)程繼承創(chuàng)建者進(jìn)程的句柄特殊的創(chuàng)建標(biāo)志(如CREATE_SUSPENDED)的位標(biāo)記的啟動(dòng)目錄STARTUPINFO結(jié)構(gòu),包括新進(jìn)程的輸入和輸出配置的詳情ID接著是CreateProcess()函數(shù)調(diào)用所需要的三個(gè)通常使用缺省值的參數(shù)。第一個(gè)參數(shù)是向主創(chuàng)進(jìn)程發(fā)送與缺省目錄不同的新進(jìn)程使用的特殊的當(dāng)前目錄;第三個(gè)參數(shù)是首先可查看的進(jìn)程特性是系統(tǒng)進(jìn)程標(biāo)識符(PID),可利用GetCurrentProcessId()API函數(shù)來查看,與GetCurrentProcess()相似,對該函數(shù)的調(diào)用不能失敗,但返回的PID在整個(gè)系統(tǒng)中都可使用。其他的可顯示當(dāng)前進(jìn)程信息的API函數(shù)還有GetStartupInfo()和通常,一個(gè)進(jìn)程需要它的運(yùn)行期環(huán)境的信息。例如API函數(shù)GetModuleFileName()和GetCommandLine(),可以給出用在CreateProcess()中的參數(shù)以啟動(dòng)應(yīng)用程序。在創(chuàng)建應(yīng)用性能信息可通過GetProcessIoCounters()、GetProcessPriorityBoost()、GetProcessTimes()和GetProcessWorkingSetSize()API得到。以上這幾個(gè)API函數(shù)都只需要具有另一個(gè)可用于進(jìn)程信息查詢的API函數(shù)是GetProcessVersion()。此函數(shù)只需感興趣進(jìn)程的PID(進(jìn)程標(biāo)識號)。本實(shí)驗(yàn)程序清單3-6中列出了這一API函數(shù)與GetVersionEx()的1)一臺運(yùn)行Windows2000Professional操作系統(tǒng)的計(jì)算機(jī)。2)計(jì)算機(jī)中需安裝VisualC++6.0專業(yè)版或企業(yè)版。 函數(shù)開始和以調(diào)用 ExitProcess()或TerminateProcess()清單3-5創(chuàng)建子進(jìn)程//proccreate項(xiàng)目#include<windows.h>#include<iostream>#include<stdio.h>//創(chuàng)建傳遞過來的進(jìn)程的克隆過程并賦于其ID值voidStartClone(intnCloneID)//提取用于當(dāng)前可執(zhí)行文件的文件名::GetModuleFileName(NULL,szFilename,MAX_PATH);//格式化用于子進(jìn)程的命令行并通知其EXE文件名和克隆ID;::sprintf(szCmdLine,“\”%s\”%d”,szFilename,nCloneID);//用于子進(jìn)程的STARTUPINFO結(jié)構(gòu)STARTUPINFO::ZeroMemory(reinterpret_cast<void*>(&si),sizeof(si));si.cb=sizeof(si); //必須是本結(jié)構(gòu)的大小//TION//利用同樣的可執(zhí)行文件和命令行創(chuàng)建進(jìn)程,并賦于其子進(jìn)程的性質(zhì)BOOLbCreateOK=::CreateProcess(szFilename, //產(chǎn)生這個(gè)EXE的應(yīng)用程序的名稱szCmdLine, //告訴其行為像一個(gè)子進(jìn)程的標(biāo)志 //缺省的進(jìn)程安全性 //缺省的線程安全性 //不繼承句柄 //使用新的控制臺 //新的環(huán)境 //當(dāng)前目錄&si, //啟動(dòng)信息&pi); //返回的進(jìn)程信息//對子進(jìn)程釋放引用if(bCreateOK)::CloseHandle(pi.hProcess);::CloseHandle(pi.hThread);intmain(intargc,char*argv[])//確定進(jìn)程在列表中的位置intnClone(0);if(argc>1)//從第二個(gè)參數(shù)中提取克隆ID::sscanf(argv[1],“%d”,&nClone);//顯示進(jìn)程位置std::cout<<“ProcessID:“<<::GetCurrentProcessId()<<“,CloneID:“<<nClone<<std::endl;//檢查是否有創(chuàng)建子進(jìn)程的需要constintc_nCloneMax=25;if(nClone<C_nCloneMax)//發(fā)送新進(jìn)程的命令行和克隆號StartClone(++nClone)//在終止之前暫停一下(l/2秒)::Sleep(500);returnThisbuildcommandrequiresanactiveprojectworkspace.Wouldyouliketocreateadefaultprojectworkspace?main() //產(chǎn)生這個(gè)EXE的應(yīng)用程序的名稱 //告訴其行為像一個(gè)子進(jìn)程的標(biāo)志 //缺省的進(jìn)程安全性 //缺省的線程安全性 //不繼承句柄 //使用新的控制臺 //新的環(huán)境 //當(dāng)前目錄 //啟動(dòng)信息&pi); //返回的進(jìn)程信息程序運(yùn)行時(shí)屏幕顯示程序運(yùn)行時(shí)屏幕顯示的信息是:ProcessID:2384,CloneID:0符”狀態(tài)下嘗試執(zhí)行該程序,看看與在可視化界面下運(yùn)行的結(jié)果有沒有不同?為什么?本實(shí)驗(yàn)的程序中列出了用于進(jìn)程信息查詢的API函數(shù)GetProcessVersion()與步驟8:在VisualC++窗口的工具欄中單擊“打開”按鈕,在“打開”對話框中找到清單3-6使用進(jìn)程和操作系統(tǒng)的版本信息//version項(xiàng)目#include<windows.h>#include<iostream>//利用進(jìn)程和操作系統(tǒng)的版本信息的簡單示例voidmain()//提取這個(gè)進(jìn)程的ID號DWORDdwIdThis=::GetCurrentProcessId();//獲得這一進(jìn)程和報(bào)告所需的版本,也可以發(fā)送0以便指明這一進(jìn)程DWORDdwVerReq=::GetProcessVersion(dwIdThis);WORDwMajorReq=(WORD)dwVerReq>16);WORDwMinorReq=(WORD)dwVerReq&0xffff);std::cout<<“ProcessID:“<<dwIdThis<<“,requiresOS:“<<wMajorReq<<wMinorReq<<std::endl;//設(shè)置版本信息的數(shù)據(jù)結(jié)構(gòu),以便保存操作系統(tǒng)的版本信息OSVERSIONINFOEXosvix;::ZeroMemory(&osvix,sizeof(osvix));osvix.dwOSVersionInfoSize=sizeof(osvix);//提取版本信息和報(bào)告::GetVersionEx(reinterpret_cast<LPOSVERSIONINFO>(&osvix));std::cout<<“RunningonOS:“<<osvix.dwMajorVersion<<“.”<<osvix.dwMinorVersion<<std::endl;//如果是NTS(Windows2000)系統(tǒng),則提高其優(yōu)先權(quán)if(osvix.dwPlatformld==VER_PLATFORM_WIN32_NT&&osvix.dwMajorVersion>=5)//改變優(yōu)先級::SetPriorityClass(::GetCurrentProcess(), //利用這一進(jìn)程HIGH_PRIORITY_CLASS); //改變?yōu)閔igh//報(bào)告給用戶std::cout<<“TaskManagershouldnownowindicatethis”“processishighpriority.”<<std::endl;ProcessID:1492,requiresOS:00RunningonOS:5.1TaskManagershouldnownowindicatethisprocessishighpriority.是(為什么?): API可調(diào)節(jié)進(jìn)程可用的非頁面RAM的容量;還有一個(gè)只對當(dāng)前進(jìn)程可用的API函數(shù),即清單3-7指令其子進(jìn)程來“殺掉”自己的父進(jìn)程//procterm項(xiàng)目#include<windows.h>#include<iostream>#include<stdio.h>staticLPCTSTRg_szMutexName=“w2kdg.ProcTerm.mutex.Suicide”;//創(chuàng)建當(dāng)前進(jìn)程的克隆進(jìn)程的簡單方法voidStartClone()//提取當(dāng)前可執(zhí)行文件的文件名;::GetModuleFileName(NULL,szFilename,MAX_PATH);//格式化用于子進(jìn)程的命令行,指明它是一個(gè)EXE文件和子進(jìn)程::sprintf(szCmdLine,“\”%s\“child”,szFilename);//子進(jìn)程的啟動(dòng)信息結(jié)構(gòu)STARTUPINFO::ZeroMemory(reinterpret_cast<void*>(&si),sizeof(si));si.cb=sizeof(si); //應(yīng)當(dāng)是此結(jié)構(gòu)的大小//TION//用同樣的可執(zhí)行文件名和命令行創(chuàng)建進(jìn)程,并指明它是一個(gè)子進(jìn)程BOOLbCreateOK=::CreateProcess(szFilename, //產(chǎn)生的應(yīng)用程序名稱(本EXE文件)szCmdLine, //告訴我們這是一個(gè)子進(jìn)程的標(biāo)志 //用于進(jìn)程的缺省的安全性 //用于線程的缺省安全性 //不繼承句柄 //創(chuàng)建新窗口,使輸出更直觀 //新環(huán)境 //當(dāng)前目錄&si, //啟動(dòng)信息結(jié)構(gòu)&pi); //返回的進(jìn)程信息//釋放指向子進(jìn)程的引用if(bCreateOK)::

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論