操作系統(tǒng)實(shí)驗(yàn)報告-完全版_第1頁
操作系統(tǒng)實(shí)驗(yàn)報告-完全版_第2頁
操作系統(tǒng)實(shí)驗(yàn)報告-完全版_第3頁
操作系統(tǒng)實(shí)驗(yàn)報告-完全版_第4頁
操作系統(tǒng)實(shí)驗(yàn)報告-完全版_第5頁
已閱讀5頁,還剩21頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

計算機(jī)操作系統(tǒng)》實(shí)驗(yàn)報告班級:姓名學(xué)號實(shí)驗(yàn)一進(jìn)程控制與描述一、實(shí)驗(yàn)?zāi)康耐ㄟ^對Windows2000編程,進(jìn)一步熟悉操作系統(tǒng)的基本概念,較好地理解Windows2000的結(jié)構(gòu)。通過創(chuàng)建進(jìn)程、觀察正在運(yùn)行的進(jìn)程和終止進(jìn)程的程序設(shè)計和調(diào)試操作,進(jìn)一步熟悉操作系統(tǒng)的進(jìn)程概念,理解Windows2000中進(jìn)程的“一生”二、實(shí)驗(yàn)環(huán)境硬件環(huán)境:計算機(jī)一臺,局域網(wǎng)環(huán)境;

軟件環(huán)境:Windows2000Professional、VisualC++企業(yè)版。三、實(shí)驗(yàn)內(nèi)容和步驟第一部分:程序1-lWindows2000的GUI應(yīng)用程序Windows2000Professional下的GUI應(yīng)用程序,使用VisualC++編譯器創(chuàng)建一個GUI應(yīng)用程序,代碼中包括了WinMain()方法,該方法GUI類型的應(yīng)用程序的標(biāo)準(zhǔn)入口點(diǎn)。include<>/*hInstance*/,/*/*hInstance*/,/*hPrevInstance*/,/*lpCmdLine*/,/*nCmdShow*/)HINSTANCELPSTRint{::MessageBox(NULL,“hello,Windows2000”,“Greetings”,MB_OK);return(0);}在程序1-1的GUI應(yīng)用程序中,首先需要頭文件,以便獲得傳送給WinMain()和MessageBox()API函數(shù)的數(shù)據(jù)類型定義。接著的pragma指令指示編譯器/連接器找到庫文件并將其與產(chǎn)生的EXE文件連接起來。這樣就可以運(yùn)行簡單的命令行命令CL來創(chuàng)建這一應(yīng)用程序,如果沒有pragma指令,則MessageBox()API函數(shù)就成為未定義的了。這一指令是VisualStudioC++編譯器特有的。接下來是WinMain()方法。其中有四個由實(shí)際的低級入口點(diǎn)傳遞來的參數(shù)。hInstance參數(shù)用來裝入與代碼相連的圖標(biāo)或位圖一類的資源,無論何時,都可用GetModuleHandle()API函數(shù)將這些資源提取出來。系統(tǒng)利用實(shí)例句柄來指明代碼和初始的數(shù)據(jù)裝在內(nèi)存的何處。句柄的數(shù)值實(shí)際上是EXE文件映像的基地址,通常為0x00400000。下一個參數(shù)hPrevInstance是為向后兼容而設(shè)的,現(xiàn)在系統(tǒng)將其設(shè)為NULL。應(yīng)用程序的命令行(不包括程序的名稱)是lpCmdLine參數(shù)。另外,系統(tǒng)利用nCmdShow參數(shù)告訴應(yīng)用程序如何顯示它的主窗口(選項(xiàng)包括最小化、最大化和正常)。最后,程序調(diào)用MessageBoxOAPI函數(shù)并退出。如果在進(jìn)入消息循環(huán)之前就結(jié)束運(yùn)行的話,最后必須返回0。先分析程序功能,再寫出運(yùn)行結(jié)果:Greetings2dGreetings2dHellOjWindows2000操作系統(tǒng)將當(dāng)前運(yùn)行的應(yīng)用程序看作是進(jìn)程對象。利用系統(tǒng)提供的惟一的稱為句柄(HANDLE)的號碼,就可與進(jìn)程對象交互。這一號碼只對當(dāng)前進(jìn)程有效。在系統(tǒng)中運(yùn)行的任何進(jìn)程都可調(diào)用GetCurrentProcess()API函數(shù),此函數(shù)可返回標(biāo)識進(jìn)程本身的句柄。然后就可在Windows需要該進(jìn)程的有關(guān)情況時,利用這一句柄來提供。程序1-2:獲得和使用進(jìn)程的句柄include<>include<iostream>voidmain(){HANDLEhProcessThis=::GetCurrentProcess();DWORDdwPriority=::GetPriorityClass(hProcessThis)std::cout<<“Currentprocesspriority:”;switch(dwPriority){caseHIGH_PRIORITY_CLASS:std::cout<<“High”;break;caseNORMAL_PRIORITY_CLASS:std::cout<<“Normal”;break;caseIDLE_PRIORITY_CLASS:std::cout<<“Idle”;break;caseREALTIME_PRIORITY_CLASS:std::cout<<“Realtime”break;default:std::cout<<“<unknown>”break;}std::cout<<std::endl;}程序1-2中列出的是一種獲得進(jìn)程句柄的方法。對于進(jìn)程句柄可進(jìn)行的惟一有用的操作是在API調(diào)用時,將其作為參數(shù)傳送給系統(tǒng),正如程序1-2中對GetPriorityClass()API函數(shù)的調(diào)用那樣。在這種情況下,系統(tǒng)向進(jìn)程對象內(nèi)“窺視”,以決定其優(yōu)先級,然后將此優(yōu)先級返回給應(yīng)用程序。OpenProcess()和CreateProcess()API函數(shù)也可以用于提取進(jìn)程句柄。前者提取的是已經(jīng)存在的進(jìn)程的句柄,而后者創(chuàng)建一個新進(jìn)程,并將其句柄提供出來。先分析程序功能,再寫出運(yùn)行結(jié)果:程序1-3顯示如何找出系統(tǒng)中正在運(yùn)行的所有進(jìn)程,如何利用OpenProcess()API函數(shù)來獲得每一個訪問進(jìn)程的進(jìn)一步信息。程序1-3利用句柄查出進(jìn)程的詳細(xì)信息

■-=:|■- :\DocuMentsandSetting:s\口weh、桌面1exe*ProcessID:1712,EXEFile:bufnonitoh'.exerKInkernelnode:0ProcessID:1728,EXEFile:LenRCCLient.exe,乂inkerne1mode:23ProcessID:1768,EXEFile::NOD32KUI?EXE,xinkernelnode:85ProcessID:1780,EKEFile:IGFXSBUC.EXE,兗inkernelnode:S9ProcessID:1S8B,EXEFile:CTFMON?E:?E,zinkernelmode:80ProcessID2E0,EKEfile:SQLNANGR.EXE,V.inkerne1mode:6EProcessID1012,EXEfileMDM.EKE,Y.inkerne1mode:75ProcessID1156,EKEFileSQLSSRUR.EKE,xinkernelnode:94ProcessID1124,EXEfileNOD32KRN.EXE,zinkernelmode:7ProcessID1352,EKEfileUPHCLEAN.EKE,xinkernelnode:6ProcessID1340,EXEfileCONIME.EKE,zinkepnelmode:66ProcessID3524,EXEFileMSIEHEG.SXEj.Xinkerne1mode=77ProcessID2340,EXEFileQQSetupEx.exe,7.inkernelmode:68ProcessID2520.EKEFileIEXPLORE?EXE,V.inkernelnode:63ProcessID2112,EXEFileIEKPLORE.EXE,v.inkernelnode:29ProcessID2764,EXEFileTencentUpdateSvc.uxg-kinkernelmode:85ProcessIDI2448,EKEFile:QQ.exe,Minkernelmode:58ProcessID4S0,EKEfile:rundll32界inkerne1mode:33ProcessID3£28,EXEFile:TXPlatFoi'm.exe,y.inkernelnode:50ProcessID736,EKEfile:WINWORD.EKE,zinkernelmode:81ProcessID2228,EKEfile:auclt_exe,XinIter-nelmode:30ProcessID2788,EXEfile:QQPVWizard.exe,zinkernelnode:33ProcessID3636,EXEfile:MSDEU-EXE,.7.±nJter-nelmode:57ProcessID3304,EXEFile:ucspaun.exe,zinkerne1mode:0ProcessID3476,EXEFile:1-exe,XInTtei'ne1mode:50Pressanykeytocontinue_NULL;d.NULL;e. FALSE ;f. CREATENEWCONSOLE ; szCmdLine NULL : &si ; __;程序運(yùn)行時屏幕顯示的信息是:*(此圖是最后出現(xiàn)的一個圖,在此之前連續(xù)出現(xiàn)幾個圖。)1、正在運(yùn)行的進(jìn)程.使用進(jìn)程和操作系統(tǒng)的版本信息<<<<std::endl;if==VER_PLATFORM_WIN32_NT&&>=5)::GetCurrentProcess(),HIGH_PRIORITY_CLASS);std::cout<<“TaskManagershouldnownowindicatethis”“processishighpriority.”<<std::endl;}}分析程序,寫出運(yùn)行結(jié)果:c:\*C:\PrograiFilesXBicrosof-t¥isualSludio^MyProjects\66\Debu.g\66.exe*processID:1492,requiresOS:00Ftu.nnd.ng-onOS:5.1Tas]<Manager-shouldnounonindicatethisprocessishighprior-ity.Presssenskeytocontinue當(dāng)前PID信息: 1492 當(dāng)前操作系統(tǒng)版本: RunningonOS:系統(tǒng)提示信息:TaskManagershouldnowindiatethisprocessishighpriority.程序向讀者表明了如何獲得當(dāng)前的PID和所需的進(jìn)程版本信息。為了運(yùn)行這一程序,系統(tǒng)處理了所有的版本不兼容問題。接著,程序演示了如何使用GetVersionExOAPI函數(shù)來提取OSVERSIONINFOEX結(jié)構(gòu)。這一數(shù)據(jù)塊中包括了操作系統(tǒng)的版本信息。其中,“OS:”表示當(dāng)前運(yùn)行的操作系統(tǒng)是:Windows2000‘當(dāng)前版本為OS:最后一段程序利用了操作系統(tǒng)的版本信息,以確認(rèn)運(yùn)行的是Windows2000。代碼接著將當(dāng)前進(jìn)程的優(yōu)先級提高到比正常級別高。單擊Ctrl+Alt+Del鍵,進(jìn)入“Windows任務(wù)管理器”,在“應(yīng)用程序”選項(xiàng)卡中右鍵單擊本任務(wù),在快捷菜單中選擇“轉(zhuǎn)到進(jìn)程”命令。在“Windows任務(wù)管理器”的“進(jìn)程”選項(xiàng)卡中,與本任務(wù)對應(yīng)的進(jìn)程映像名稱是(為什么):右鍵單擊該進(jìn)程名,在快捷菜單中選擇“設(shè)置優(yōu)先級”命令,可以調(diào)整該進(jìn)程的優(yōu)先級,如設(shè)置為“高”后重新運(yùn)行程序,屏幕顯示有變化嗎為什么 屏幕顯示有變化。ProcessID值由1492變?yōu)椋?152 2、終止進(jìn)程指令其子進(jìn)程來“殺掉”自己的父進(jìn)程<<std::endl;::StartClone();::Sleep(5000);std::cout<<“Tellingthechildprocesstoquit.”<<std::endl;::ReleaseMutex(hMutexSuicide);::CloseHandle(hMutexSuicide);}}voidChild(){”<<std::endl;::WaitForSingleObject(hMutexSuicide,INFINITE);std::cout<<“Childquiting.”<<std::endl;::CloseHandle(hMutexSuicide);}}intmain(intargc,char*argv[]){if(argc>1&&::strcmp(argv[1],“child”)==0){Child();}

else{Parent();}return0;}程序說明了一個進(jìn)程從“生”到“死”的整個一生。第一次執(zhí)行時,它創(chuàng)建一個子進(jìn)程,其行為如同“父親”。在創(chuàng)建子進(jìn)程之前,先創(chuàng)建一個互斥的內(nèi)核對象,其行為對于子進(jìn)程來說,如同一個“自殺彈”。當(dāng)創(chuàng)建子進(jìn)程時,就打開了互斥體并在其他線程中進(jìn)行別的處理工作,同時等待著父進(jìn)程使用ReleaseMutex()API發(fā)出“死亡”信號。然后用Sleep()API調(diào)用來模擬父進(jìn)程處理其他工作,等完成時,指令子進(jìn)程終止。當(dāng)調(diào)用ExitProcess()時要小心,進(jìn)程中的所有線程都被立刻通知停止。在設(shè)計應(yīng)用程序時,必須讓主線程在正常的C++運(yùn)行期關(guān)閉(這是由編譯器提供的缺省行為)之后來調(diào)用這一函數(shù)。當(dāng)它轉(zhuǎn)向受信狀態(tài)時,通??蓜?chuàng)建一個每個活動線程都可等待和停止的終止事件。在正常的終止操作中,進(jìn)程的每個工作線程都要終止,由主線程調(diào)用ExitProcess()。接著,管理層對進(jìn)程增加的所有對象釋放引用,并將用GetExitCodeProcess()建立的退出代碼從STILL_ACTIVE改變?yōu)樵贓xitProcess()調(diào)用中返回的值。最后,主線程對象也如同進(jìn)程對象一樣轉(zhuǎn)變?yōu)槭苄艩顟B(tài)。等到所有打開的句柄都關(guān)閉之后,管理層的對象管理器才銷毀進(jìn)程對象本身。還沒有一種函數(shù)可取得終止后的進(jìn)程對象為其參數(shù),從而使其“復(fù)活”。當(dāng)進(jìn)程對象引用一個終止了的對象時,有好幾個API函數(shù)仍然是有用的。進(jìn)程可使用退出代碼將終止方式通知給調(diào)用GetExitCodeProcess()的其他進(jìn)程。同時,GetProcessTimes()API函數(shù)可向主調(diào)者顯示進(jìn)程的終止時間?!废确治龀绦蚬δ埽賹懗鲞\(yùn)行結(jié)果:第一次執(zhí)行時,它創(chuàng)建一個子進(jìn)程,其行為如同“父親”表示:Creatingthechildprocess.用Sleep()API調(diào)用來模擬父進(jìn)程處理其他工作,等完成時,指令子進(jìn)程終止。表示:Tellingthechildprocesstoquit在熟悉源代碼的基礎(chǔ)上,利用本實(shí)驗(yàn)介紹的API函數(shù)來嘗試改進(jìn)本程序(例如使用GetProcessTimes()API函數(shù))并運(yùn)行。請描述你所做的工作:GetProcessTimesOAPI可向主調(diào)者顯示進(jìn)程終止時間四、實(shí)驗(yàn)總結(jié)進(jìn)程具有的特征:結(jié)構(gòu)特征、動態(tài)性、并發(fā)性、獨(dú)立性和異步性。對于進(jìn)程的定義可以從不同的角度來說,其中較為典型的定義有:進(jìn)程是程序的一次執(zhí)行進(jìn)程是一個程序及其數(shù)據(jù)在處理機(jī)上順序執(zhí)行時發(fā)生的活動進(jìn)程是程序在一個數(shù)據(jù)集合上運(yùn)行的過程,它是系統(tǒng)進(jìn)行資源分配和調(diào)度的一個獨(dú)立單位。對于傳統(tǒng)os中的進(jìn)程定義為:進(jìn)程是進(jìn)程實(shí)體的運(yùn)行過程,使系統(tǒng)進(jìn)行資源分配和調(diào)度的一個獨(dú)立單位。進(jìn)程有三種基本狀態(tài):就緒狀態(tài)、執(zhí)行狀態(tài)、阻塞狀態(tài)。創(chuàng)建一個進(jìn)程:(1)、申請空白的PCB(2)為進(jìn)城分配資源(3)初始化進(jìn)程控制塊(4)|(5)將進(jìn)程插入就緒隊列(5)終止一個進(jìn)程:(1) 根據(jù)被終止進(jìn)程的標(biāo)識符,從PCB集合中檢索出該進(jìn)程的PCB,從中讀出該進(jìn)程的狀態(tài)(2) 若終止進(jìn)程正處于執(zhí)行狀態(tài),應(yīng)立即中止該進(jìn)程的執(zhí)行,并置調(diào)度標(biāo)志為真,用于指示該進(jìn)程被終止進(jìn)程的后應(yīng)該重新進(jìn)行調(diào)度(3) 若該進(jìn)程還有子孫進(jìn)程,還應(yīng)該將其所有的子孫進(jìn)程終止,以防止他們成為不可控的進(jìn)程(4) 將終止進(jìn)程所擁有的全部資源,或者歸還給其父進(jìn)程,或者歸還給系統(tǒng)(5) 將終止進(jìn)程PCB從所在隊列中移除,等待其他程序來搜索信通過實(shí)驗(yàn)更清楚的了解了進(jìn)程,理解了進(jìn)程的創(chuàng)建過程和終止過程【實(shí)驗(yàn)二并發(fā)與調(diào)度一、實(shí)驗(yàn)?zāi)康脑诒緦?shí)驗(yàn)中,通過對事件和互斥體對象的了解,來加深對Windows2000線程同步的理解。通過分析實(shí)驗(yàn)程序,了解管理事件對象的API。了解在進(jìn)程中如何使用事件對象,在進(jìn)程中如何使用互斥體對象,線程如何通過文件映射對象發(fā)送數(shù)據(jù)。在LinuxRedhat操作系統(tǒng)平臺上,用pipe()創(chuàng)建一個管道文件,然后用fork()創(chuàng)建兩個生產(chǎn)進(jìn)程和兩個消費(fèi)進(jìn)程,它們之間通過pipe()傳遞消息。二、 實(shí)驗(yàn)環(huán)境硬件環(huán)境:計算機(jī)一臺,局域網(wǎng)環(huán)境;軟件環(huán)境:Windows2000Professional,LinuxRedhat操作系統(tǒng)平臺,VisualC++企業(yè)版。三、 實(shí)驗(yàn)內(nèi)容和步驟第一部分:互斥體對象本程序中顯示的類CCountUpDown使用了一個互斥體來保證對兩個線程間單一數(shù)值的訪問。每個線程都企圖獲得控制權(quán)來改變該數(shù)值,然后將該數(shù)值寫入輸出流中。創(chuàng)建者實(shí)際上創(chuàng)建的是互斥體對象,計數(shù)方法執(zhí)行等待并釋放,為的是共同使用互斥體所需的資源(因而也就是共享資源)。利用互斥體保護(hù)共享資源thread!thread:thread:thread!thread:thread:thread:=?¥36waliie:1access=2Saccess:11access:0Fi*es:s: kmytocontinumvwi.jj?trjread:82write:83read:83write:84read:84write:85read:85write:86read:86write:87read:87write:88read:S8write:89read:89write:90read:90write:91read:91write:92read:?2write:93read:93write:94read:94write:95read:95write:96read:96write:97read:97write:98read:98write:9?read:99write:100Pressan£/Iceytocontinue.(低32位)0);.(低32位)NULL); .(低32位)0); ."<<std::endl;::WaitForSingleObject(hThread,INFINITE);::Sleep(500);2^^^u-alue;Itlirc z4&-234?72valuer4thre^d^1550value5thread:;values右七丑d丄&94-4u-aIue-7tlircjlHJ4t?tUiluci84948valua=?ftllththrre-taailcls:cSrSeBMtueadlj■■■ss 祜nyke^i£□cuninueMapViewOfFile()b.

{(低32位)0);保護(hù)其應(yīng)用的互斥體(CreateMutex())。然后,應(yīng)用程序創(chuàng)建100個線程,每個都允許進(jìn)行同樣的進(jìn)程,即:通過互斥體獲得訪問權(quán),這個操作是由語句:_for(intnTotal=100;{(低32位)0);al^lrleatdh:i' vcai'leuaet:eUAt ^gd.:-+480ualue:2hreanl:3544ucilue- 3hi*eaJL:2672ucilu.e:4hi'ead:121^ualu.ex5hpead:4$04ualue:6血嚕軌4:56&@valu&:7lirea^:3540ualue:8hrefti:3820vdluc:?hrea4:5380ualue:10i'essan^keytocontinue—

Thread_Info[j].n_request=0;}erial;inFile>>Thread_Info[n_Thread].entity;inFile>>Thread_Info[n_Thread].delay;charc;(c);while(c!='\n'&&!()){inFile>>Thread_Info[n_Thread].thread_request[Thread_Info[n_Thread].n_request++];(c);}n_Thread++;erial;charTemp_entity=Thread_Info[j].entity;doubleTemp_delay=Thread_Info[j].delay;printf("\nthread%2d%c%f",Temp_serial,Temp_entity,Temp_delay);intTemp_request=Thread_Info[j].n_request;for(intk=0;k<Temp_request;k++)printf("%d",Thread_Info[j].thread_request[k]);cout<<endl;}printf("\n\n");ntity=='P')hThread「il=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)(Produce),&(Thread_Info[i]),0,NULL);elseh_Thread「il=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)(Consume),

&(Thread_Info[i]),0,NULL);}\n");printf("按任意鍵返回!\n");_getch();return0;_request;j++)if(Thread_Info[i].thread_request[j]==req)returnTRUE;returnFALSE;}n",m_serial);?n",m_serial,ProducePos);Buffer_Critical[ProducePos]=m_serial;printf("生產(chǎn)者%2d完成生產(chǎn)過程:\n",m_serial);輸人文件是:printf(" 緩沖區(qū)「%2d]:%3d\n",ProducePos,Buffer_Critical「ProducePos]);輸人文件是:課蠶觀費(fèi)者都已完成它俯珈printf("將頁%d寫回磁盤第%d塊\n",j,page「j].dnumber);5、page「j].flag=0;6、page[lnumber].flag=1;7、page[lnumber].write=0;8、page[lnumber].pnumber=page[j].pnumber;printf("淘汰主存塊%2d中的M%2d,從磁盤第%4塊中調(diào)入頁%2d\n",9、page[j].pnumber10、j11、page[lnumber].dnumber12、lnumber););}voidcommand(unsignedladdress,intwrite){unsignedpaddress,ad,pnumber,lnumber;kk:13、 lnumber=laddress>>10;14、 ad=laddress&0x3FF;if(lnumber>=page_length){printf(”不存在該頁\n");15、 page_interrupt(lnumber);}if(page[lnumber].flag==1){16、 pnumber=page[lnumber].pnumber;17、 paddress=pnumber<<10|ad;rite=1;}else{18、page_interrupt(lnumber);gotokk;}}main(){intlnumber,flag,pnumber,write,dnumber;unsignedladdress;inti;printf(”輸入頁表的信息,創(chuàng)建頁表(若頁號為一1,則結(jié)束輸入)\n");printf("輸入頁號和輔存地址:”);scanf("%d%d",&lnumber,&dnumber);i=0;while(lnumber!=-1){19、page[lnumber].lnumber=lnumber;20、 page[lnumber].dnumber=dnumber;21、 i++;printf(”輸入頁號和輔存地址:”);scanf("%d%d",&lnumber,&dnumber);}page_length=i;printf("輸入主存塊號,主存塊數(shù)要小于%d,(以一1結(jié)束):",i);scanf("%d",&pnumber);m=0;head=0;while(pnumber!=-1){if(m<=i){24、 p[m]=m;25、 page[m].pnumber=pnumber;26、 page[m].flag=1;27、 m++;}Scanf7d",&pnumber);}printf("輸入指令性質(zhì)(1-修改,0-不需要,其他-結(jié)束程序運(yùn)行)和邏輯地址:");scanf("%d%x",&write,&laddress);while(write==0||write==1){28、command(laddress,write);printf(”輸入指令性質(zhì)(1-修改,0-不需要,其他-結(jié)束程序運(yùn)行)和邏輯地址:");scanf("%d%x",&write,&laddress);}}5、程序運(yùn)行結(jié)果及簡要分析一八目芳?II_5謨0->34-I數(shù)0

一八目芳?II_5謨0->34-I數(shù)0

塊憶

創(chuàng)址業(yè)址址址存娥

地地地地地主~?

5存存存存存,a是(1-是afia該

桁邏t§啰幅邏?出入出入岀入出生文汰出■<-.'^J.■.-^J.-^J.'^J.-^J.-^J.-^J.-^J.-^J.-^J.'^J.-.H-.-".H-LITT.+J一二JI'..>.■='>.■='R-塊頁泗疑¥0的:-fs鐸中是(10-應(yīng)0-應(yīng)0-改56改阮改-:71一-1皋明雀価卑加雀以也1也1也2也仆期>=期是?1是期--IrL^,4E6首先,通過鍵盤依次輸入了4個主存塊,塊號為4,6,8,3,同時,將第0,1,2,3個頁面依次調(diào)入塊4,6,8,3中,將這4個頁面的頁號相應(yīng)地存入數(shù)組p[0],p[l],p[2],p[3]中,然后再通過鍵盤依次輸入邏輯地址:3,456,abc,2000,然后分離出邏輯地址髙六位的頁號和低10位的頁內(nèi)地址,由于前3個邏輯地址對應(yīng)的頁號在主存中,所以將這3個頁號對應(yīng)的主存塊號和頁內(nèi)地址合成為物理地址;對于最后1個邏輯地址,由于對應(yīng)的頁號不在主存中,所以要進(jìn)行缺頁處理,采用FIFO算法。實(shí)驗(yàn)總結(jié):通過本次實(shí)驗(yàn)讓我明白了許多,做事要認(rèn)真仔細(xì),頁式存儲管理怎么去執(zhí)行,掌握請調(diào)策略,放置策略,淘汰策略,怎樣進(jìn)行頁式地址轉(zhuǎn)換,選用什么置換算法最好。實(shí)驗(yàn)五設(shè)備管理模擬實(shí)驗(yàn)實(shí)驗(yàn)五設(shè)備管理模擬實(shí)驗(yàn)一、實(shí)驗(yàn)?zāi)康?)了解Windows操作系統(tǒng)中設(shè)備驅(qū)動程序的組成

理解Windows操作系統(tǒng)的設(shè)備管理機(jī)制掌握Windows操作系統(tǒng)關(guān)于設(shè)備管理的API函數(shù)的使用方法了解并掌握Windows中鼠標(biāo)、鍵盤等簡單設(shè)備的檢測方法、實(shí)驗(yàn)內(nèi)容1、源程序:#include<>#include<>#include<>#include<>voidmenu();voidquit();voiderror();voidCheckKeyboard();voidPlayMusic();voidmain(){charUserSelect;DEVMODEDevM;intiSavecaretBlinkTime=350;do{menu();UserSelect=getch();putchar(UserSelect);switch(UserSelect){case'1':能槌卜數(shù)能槌卜數(shù)4_670-Pleacsinputui*select;=4_670-£■3咅日you戸se能槌卜數(shù)能槌卜數(shù)4_670-Pleacsinputui*select;=4_670-£■3咅日you戸sePleaseinputyourselect:Japanese覆盤施昨12SystemParametersInfo(SPI_SETMOUSEBUTTONSWAP,1,0,0);Pleacsinput select:jPleaseinputyourselect:-b-b-b豐豐予::l.::l.::l.:-hA-u*ESZn胃tf.'1.'.'1.'葆-b-b-b豐豐予::l.::l.::l.:-hA-u*ESZn胃tf.'1.'.'1.'葆一-LPleaseinputijcurselect;:船標(biāo)閃爍時間喩復(fù)力1毫秒7■Jar改改犍代先律亙復(fù)叭二鼠鼠熒統(tǒng)設(shè)1?^一數(shù)個健匕匕手于型爍爍爍樂8—JHZ-44-5-6-7-M-庇K屁丄匸--習(xí)習(xí)¥卩片片乏一型錯硏託JI34_LJCU7&Pleaseinputijcurselect;:船標(biāo)閃爍時間喩復(fù)力1毫秒7■Jar改改犍代先律亙復(fù)叭二鼠鼠熒統(tǒng)設(shè)1?^一數(shù)個健匕匕手于型爍爍爍樂8—JHZ-44-5-6-7-M-庇K屁丄匸--習(xí)習(xí)¥卩片片乏一型錯硏託JI34_LJCU7&2:1貝刁舊間舊

____■

12345II!為為 改改犍光光光播B曹復(fù)叭岀扁-i-s-s-sa^?^手豐型爍ffi砥衣

丘石專牆Ple且me±npintitniJi'keled::習(xí)習(xí)和工.三刊爍爍爍K.左,勺素〕匹也戊首必片盤呑際一#習(xí)習(xí)一占日F丄easeinputiiourselect: UPleaseinput坐dui*select:ressanykeijtocontinue文件信息命令步驟1:開機(jī),登錄進(jìn)入GNOME。在GNOME登錄框中填寫指導(dǎo)老師分配的用戶名和口令并登錄。步驟2:訪問命令行。單擊紅帽子,在“GNOME幫助”菜單中單擊“系統(tǒng)工具”-“終端”命令,打開終端窗口。步驟3:使用控制字符執(zhí)行特殊功能??刂谱址脕韴?zhí)行特殊的作業(yè),如中止和啟動屏幕輸出。大多數(shù)PC鍵盤有兩個控制鍵。它們通常標(biāo)記為Ctrl,可以在鍵盤的左右下角找到。為了輸入一個控制字符序列,可按住Ctrl鍵不放,然后按下鍵盤上相應(yīng)的字符。Ctrl+C:中斷當(dāng)前活動。當(dāng)你在esh中鍵入一個不可識別的命令行(例如,$ls“),收到第2個提示符的時候,Ctrl+C也可以用于恢復(fù)shell提示符。Ctrl+Z:終止當(dāng)前活動。顯示ls命令的手冊頁面(manls),然后使用Ctrl-z中止輸出。當(dāng)你接下Ctrl+Z的時候,發(fā)生了什么事情申止當(dāng)前活動.返回終端窗口Ctrl+D:表示文件的末尾或者退出。Ctrl+D用于退出一些Linux工具程序(be、write等),退出一個終端窗口,注銷一個終端會話或者命令行登錄會話。作為一個一般的規(guī)則,當(dāng)您出現(xiàn)“死機(jī)”時,或者如果Ctrl+C不起作用,可試試Ctrl+D。例如:1) 在shell提示符下鍵入be,啟動基本的計算器工具程序。2) 把兩個數(shù)字相乘(鍵入:458*594,然后按回車鍵)。3) 按Ctrl+D退出計算器。?當(dāng)使用計算器的時候,你的提示符是什么ThisisfreesoftwarewithABSOLUTELYNOWARRANTY.Ctrl+U:擦除整個命令行。Ctrl+U最常用在:一個擦除決定不執(zhí)行的命令行的快捷方式。?如果登錄到一個遠(yuǎn)程系統(tǒng),退格鍵不起作用。它可以確保在登錄的時候,從一個“空”的用戶帳號和口令輸入開始。?因?yàn)樵诳诹钶斎氲臅r候看不見它們,當(dāng)知道自己鍵入了錯誤字符的時候,使用Ctrl+U擦除密碼,重新開始輸入。如果輸入一個命令,如ls-R/,有時候,會在按下回車鍵之前想擦除命令行。輸入一個命令,在接下回車鍵執(zhí)行命令之前按下Ctrl+U。結(jié)果是什么輸入的命令被擦除步驟4:使用f訂e命令確定文件類型。在Linux系統(tǒng)中可以找到許多類型的文件。文件類型可以通過使用file命令來確定。當(dāng)一個用戶試圖打開或閱讀一個文件的時候,這個信息很重要。確定文件類型可以幫助一個用戶決定使用哪個程序或命令來打開這個文件。這個命令的輸出最常見的是如下幾種:文本文件、可執(zhí)行文件或數(shù)據(jù)文件。1)文本文件:包括ASCII或英語文本、命令文本和可執(zhí)行的shell腳本。這種類型的文件可以使用cat或more命令讀取,可以使用vi或其他文本編輯器編輯。單擊紅帽子,在“GNOME幫助”菜單中單擊“輔助設(shè)施”-“TextEditor”命令,在文本編輯中鍵入適當(dāng)內(nèi)容并保存為test文件。使用file命令來確定test文件的文件類型。它是哪種類型的文件ASCLLtest2)可執(zhí)行(或二進(jìn)制)文件:包括32位的可執(zhí)行文件和可擴(kuò)展鏈接格式(ELF)編碼文件,和其他動態(tài)鏈接的可執(zhí)行文件。這種文件類型表示這個文件是一個命令或程序。單擊紅帽子,在“GNOME幫助”菜單中單擊“辦公”-“Writer”命令,建立一個文檔如。使用file命令確定你所建立的文件類型。它是哪種類型的文件(注意文件名部分必須包括擴(kuò)展名,如file。)可執(zhí)行文件3)數(shù)據(jù)文件:數(shù)據(jù)文件是由系統(tǒng)中運(yùn)行的應(yīng)用創(chuàng)建的。在某些情況下,文件的類型是會說明的。例如,F(xiàn)rameMaker(桌面印刷軟件)文檔。使用file命令確定dirl/coffees子目錄中beans文件的文件類型。它是什么文件類型的步驟5:使用strings命令。strings命令可以用于打印可執(zhí)行文件或者二進(jìn)制文件中的可讀字符。一些有編程背景的人,可以解釋strings產(chǎn)生的輸出。這個命令在這里只是作為一個展示可執(zhí)行文件中可打印字符的方法來介紹。strings命令必須用于讀取可執(zhí)行文件,如/usr/bin/cat。在大多數(shù)情況下,strings命令也可以給出命令的使用語法。使用strings命令查看/usr/bin/cal文件的可讀字符。列出strings命令中的一些輸出。/lib/ putsharstrerrorputs wcstombl nbstowesVerrx strrchrwesepy degettext步驟6:使用cat命令顯示文件的內(nèi)容。cat命令在屏幕上顯示一個文本文件的內(nèi)容。它常用于顯示如腳本文件(類似批處理文件)這樣的短文本文件。如果文件超過一屏的話,必須使用一個屏幕可以滾動的窗口,如GNOME環(huán)境中的終端窗口。鍵入ls/dev>dev1使用cat命令顯示主目錄中devl文件的內(nèi)容。文本的顯示出現(xiàn)了什么情況顯示出一長串字符內(nèi)容,必須按滾動條才能看到全部的內(nèi)容步驟7:使用more命令顯示文件的內(nèi)容。more命令是一個用于顯示文本文件首選的方法,因?yàn)樗鼤詣拥囊淮物@示一屏文件內(nèi)容。如果文件的信息比一屏更長,屏幕的底部顯示如下的信息:一More—(n%)(文件的n%已經(jīng)顯示)。按下回車鍵,繼續(xù)一次顯示一行信息??崭矜I將繼續(xù)一次顯示一屏內(nèi)容。使用more命令顯示主目錄中devl文件的內(nèi)容。文本的顯示出現(xiàn)了什么情況首先顯示出第一頁的內(nèi)容,按一次回車鍵則顯示下一行的內(nèi)容,按空格鍵則顯示下一頁內(nèi)容步驟8:使用head命令顯示文件的一部分。head命令用于顯示一個或多個文本文件的前n行。在默認(rèn)情況下,如果沒有給出-n選項(xiàng),將顯示前10行。當(dāng)您只想查看文件的開始的幾行,而不管文件的大小的時候,head命令是很有用的。1) 單獨(dú)使用head命令,顯示主目錄中devl文件的開始部分。顯示了多少行!顯示了10行2) 使用帶-n選項(xiàng)的head命令,顯示主目錄中dante文件的前20行。您輸入什么命令head-20dante步驟9:使用tail命令顯示文件的一部分。使用tail命令,顯示文件的最后幾行。在默認(rèn)情況下,如果沒有指定-n選項(xiàng),將顯示最后10行。當(dāng)檢查大型日志文件最近輸入內(nèi)容的時候,tail命令是很有用的。備份工具程序常把備份哪個文件和什么時候做的備份,寫到日志文件中去。一個備份日志文件中最后的輸入通常是備份文件的總數(shù)和備份是否成功完成的信息。-n選項(xiàng)顯示了文件的最后n行。單獨(dú)使用tail命令,顯示主目錄中dante文件的末端。顯示了多少行顯示了10行步驟10:通過使用WC命令,確定行數(shù)、單詞數(shù)和字符數(shù)。wc(單詞計數(shù))命令可以用于顯示文本文件的行數(shù)、單詞數(shù)、字節(jié)數(shù)或者字符數(shù)。當(dāng)確定文件特征或者當(dāng)比較兩個文件的時候,這個命令是很有用的。使用不帶選項(xiàng)的wc將給出文件的行數(shù)、字節(jié)數(shù)。使用帶一個選項(xiàng)的wc,可以確定想查看的哪一項(xiàng)內(nèi)容。使用wc命令確定主目錄中devl文件的行數(shù)、單詞數(shù)和字符數(shù)。有多少行、多少個單詞和多少個字符7520行7520個詞47288個字符步驟11:使用wc計算目錄條目的數(shù)目。使用WC和ls命令確定主目錄中條目(文件和目錄)的數(shù)目。為此,必須把ls命令的輸出導(dǎo)入到wc命令中。更多符號是豎線,和后斜線(\)在同一個鍵上。在命令行提示行下,輸入命令ls|wc-w。有多少個文件和目錄名(單詞)125步驟12:使用diff命令確定文件之間的不同之處。diff(不同)命令用于比較2個文本文件,找出在它們之間的不同之處°wc命令可以比較文件,因?yàn)樗嬎阈袛?shù)、單詞數(shù)和字符數(shù)。有可能2個文件有相同的行數(shù)、單詞數(shù)和字符數(shù),但是字符和單詞不同。diff命令可以從實(shí)際上找出文件之間的不同。這個命令的輸出把2個文本文件之間的不同一行一行的顯示出來。diff命令有2個選項(xiàng):-i和-c。-i選項(xiàng)忽略字母的大小寫,例如A和a相等。-c選項(xiàng)執(zhí)行細(xì)致的比較。單擊紅帽子,在“GNOME幫助”菜單中單擊“輔助設(shè)施”-“TextEditor”命令,創(chuàng)建兩個文件fruitl和fruit2,并鍵入適當(dāng)內(nèi)容。使用diff命令執(zhí)行細(xì)節(jié)比較,確定fruit1文件和fruit2文件之間的區(qū)別。在fruit1文件和在fruit2文件中,哪幾行是不同的在fruitl中的內(nèi)容是9apple在fruit2中的內(nèi)容是abcdefghiapplecat命令:?對fruitl文件使用cat命令。?對fruit2文件使用cat命令。?鍵入命令行catfruitlfruit2>filex。¥?對filex文件使用cat命令。上面的命令行做了什么工作將fruitl和fruit2的內(nèi)容各并在一起,成為filex的內(nèi)容可以使用哪2個命令來確定2個文件是否相同difffruitlfruit2和catfruitl.catfruit2步驟13:關(guān)閉終端窗口,注銷。2.基本的命令行文件管理步驟14:回顧Linux的文件和目錄命名規(guī)則。在本實(shí)驗(yàn)中,我們將創(chuàng)建文件和目錄,因此,在開始之前,先來回顧一下Linux文件和目錄的命名規(guī)則和指導(dǎo)方針。最大長度:組成文件和目錄名最大長度為255個數(shù)字字母字符。一般來說,應(yīng)該盡可能的保持文件名短但是仍然有意義。$2)非數(shù)字字母字符:一些非數(shù)字字母字符或者元字符是可用的:下劃線(_)、連字符號(-)和句點(diǎn)(.)。這些元字符可以在文件或目錄名中使用多次是一個有效的文件或目錄名)。盡管shell允許把星號(*)、問號()和發(fā)音符號(~)、方話號([])、&、管道[|]、引號(“”)和美元符號($)在文件名中使用,但這不是推薦的,因?yàn)檫@些字符對于shell有特殊的意義。分號(;)、小于號(〈)和大于號(〉)是不允許作為文件名的。文件名擴(kuò)展:文件名可以包含一個或多個擴(kuò)展名。擴(kuò)展名常被一個應(yīng)用追加到文件的末端。擴(kuò)展名通常是1個到3個字符,追加到文件名的末端,之前有一個句點(diǎn)(.)。當(dāng)命名文件的時候,您可以選擇使用這個規(guī)則。目錄名的擴(kuò)展名:目錄名一般不包含擴(kuò)展名,但是也沒有規(guī)則反對這一點(diǎn)。大小寫敏感:Linux文件和目錄名是大小寫敏感的。Projectl和projectl不是同一個文件。在一個目錄中,不能夠有兩個文件有著同樣的名字。一般規(guī)則都是使用小寫字母。檢查表7-1中的文件名,指出它們是否是有效或者推薦的Linux文件或目錄名,為什么是或?yàn)槭裁床皇?。?-1實(shí)驗(yàn)記錄文件名是否為Linux文件或目錄名為什么是或?yàn)槭裁床皇?2345abcde678是文件和目錄名長度沒有超過256個數(shù)字子母字符Hobbies:2不是空格不允許在文件和目錄名中使用Adcd-123是下劃線可以在文件名中使用Sales*repts*2001不是“*”可以在文件和目錄名中使用]是允許在文件和目錄名中使用

Projects〉不是Projects〉不是大于號是不允許作為文件名的步驟15:使用touch命令創(chuàng)建文件。每次創(chuàng)建一個新的字處理文檔或者電子數(shù)據(jù)表,就是正在創(chuàng)建一個新文件,應(yīng)該符合之前提到的文件命名規(guī)則。也必須擁有創(chuàng)建文件的目錄的足夠權(quán)限。使用touch命令,可以同時創(chuàng)建一個或多個文件。一些應(yīng)用要求在寫文件之前,文件必須存在。touch命令對于快速創(chuàng)建需要處理的文件很有用。也可以使用touch命令更新文件被訪問的時間和日期,使文件可以再次被備份。當(dāng)創(chuàng)建文件或目錄的時候,可以指定絕對和相對的路徑名。命令格式:touchfilename(s)1) 在主目錄中使用touch命令創(chuàng)建一個名為newfile的文件,應(yīng)該使用什么命令touchnewfile2) 使用touch命令在這個目錄中創(chuàng)建另一個叫做filenew的新文件,應(yīng)該使用什么命令touchfilenew3)輸入命令顯示practice目錄中的文件的長列表。創(chuàng)建的文件列出來了嗎列出來了'4)誰是文件的所有者student5) 和文件關(guān)連的組是什么student6) 創(chuàng)建的日期和時間是什么2010-12-089:05:497) 文件的大小是多少kb8) 使用file命令確定newfile的文件類型。它是哪一類的文件empty9) 使用touch命令同時創(chuàng)建3個文件:new1、new2和new3,應(yīng)該使用什么命令cdpracticeTouchnew1new2new310) 輸入命令顯示practice目錄中文件的長列表。創(chuàng)建的3個新文件列出來了嗎列出來了步驟16:使用mkdir命令創(chuàng)建新目錄。mkdir(創(chuàng)建目錄)命令用于創(chuàng)建目錄或文件夾。目錄可以包含其他目錄,稱為子目錄,它們可以包含文件。目錄可以使用或者絕對路徑名或者相對路徑名創(chuàng)建??梢栽谕恍兄兄付ǘ鄠€目錄名,創(chuàng)建多個新目錄。必須有創(chuàng)建目錄的足夠

溫馨提示

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

最新文檔

評論

0/150

提交評論