操作系統(tǒng)原理實驗報告_第1頁
操作系統(tǒng)原理實驗報告_第2頁
操作系統(tǒng)原理實驗報告_第3頁
操作系統(tǒng)原理實驗報告_第4頁
操作系統(tǒng)原理實驗報告_第5頁
已閱讀5頁,還剩46頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

《操作系統(tǒng)原理》

實驗報告班級: 姓名: 學(xué)號: 指導(dǎo)老師: 目錄:實驗題目:實驗一線程創(chuàng)建與撤銷 錯誤!未定義書簽實驗題目:實驗二線程同步 錯誤!未定義書簽實驗題目:實驗三線程互斥 錯誤!未定義書簽實驗題目:實驗四進程通信 錯誤!未定義書簽實驗題目:實驗五讀者-寫者問題 錯誤!未定義書簽實驗題目:實驗六進程調(diào)度 錯誤!未定義書簽實驗題目:實驗七存儲管理之動態(tài)鏈接庫 錯誤!未定義書簽實驗題目:實驗八存儲管理之內(nèi)存分配 錯誤!未定義書簽實驗題目:實驗九存儲管理之頁面置換算法 錯誤!未定義書簽實驗題目:實驗十設(shè)備管理 錯誤!未定義書簽實驗題目:實驗十一文件管理之文件讀寫 錯誤!未定義書簽實驗題目:實驗一線程創(chuàng)建與撤銷完成人:XXX報告日期:2018年3月31日一、實驗內(nèi)容簡要描述(1)熟悉VC++VisualStudio開發(fā)環(huán)境。(2)使用相關(guān)函數(shù)創(chuàng)建和撤銷線程。(3)在一個進程中創(chuàng)建3個線程,名字分別為threada、threadb、threadc。threada輸出“helloworld!threadb輸出“Mynameis。threadc輸出“Pleasewait…”,然后sleep5秒鐘,接著輸出“Iwakeup”。二、 程序設(shè)計1、設(shè)計思路該函數(shù)創(chuàng)建一個在調(diào)用進程的地址空間中執(zhí)行的線程。2、主要數(shù)據(jù)結(jié)構(gòu)HANDLECreateThread(LPSECURITY_ATTRIBUTESIpThreadAttributes,DWORDdwStackSize,LPTHREAD_START_ROUTINEIpStartAddress,LPVOIDlpParameter,DWORDdwCreationFlags,LPDWORDlpThreadId);VOIDExitThread(DWORDdwExitCode);VOIDSleep(DWORDdwMilliseconds);VOIDSleep(DWORDdwMilliseconds);三、實驗結(jié)果1、基本數(shù)據(jù)lpThreadAttributes:指向一個SECURITY_ATTRIBUTES勾,該結(jié)構(gòu)決定了返回的句柄是否可被子進程繼承。若lpThreadAttributes為NULL則句柄不能被繼承。在WindowsNT^該結(jié)構(gòu)的lpSecuhtyDescriptor 成員定義了新進程的安全性描述符。若lpThreadAttributes為NULL則線程獲得一個默認的安全性描述符。dwStackSize:定義原始堆棧提交時的大小(按字節(jié)計)。系統(tǒng)將該值舍入為最近的頁。若該值為0,或小于默認時提交的大小,默認情況是使用與調(diào)用線程同樣的大小。更多的信息,請看ThreadStackSize。IpStartAddress:指向一個LPTHREAD_START_ROUTlNE的應(yīng)用定義的函數(shù),該線程執(zhí)行此函數(shù)。該指針還表示潰程進程中線程的起始地址。該函數(shù)必須存在于遠程進程中。IpParameter:定義一個傳遞給該迸程的32位值。dwCreationFIags:定義控制進程倉U建的附力口標志。若定義了CREATE_SUSPENDED標志,線程創(chuàng)建時處于掛起狀態(tài),并且直到ResumeThread?數(shù)調(diào)用時d能運行。若該值為0,則該線程在創(chuàng)建后立即執(zhí)行。lpThreadId:指向一個32位值,它接收該線程的標識符。2.源程序代碼行數(shù)完成該實驗投入的時間(小時數(shù))與其他同學(xué)討論次數(shù)31113、測試結(jié)果分析口百格動磁星\i乍,提作案統(tǒng)解殂bin\Debug\testexeflellaWorld!我的專字:孫婷我的孚號114134820?Pleasewait.--Iuakeup_Pi^ocessreturned4683872<0x^778executiontime:5.029sPressanykeytocontinue.四、實驗體會1、實驗體會和收獲深入理解了線程與進程的概念,熟悉了在Windows環(huán)境下何時使用進程,何時使用線程,怎么創(chuàng)建和撤銷線程。五、源代碼#include<>#include<iostream>usingnamespacestd;DWORDWINAPIta(LPVOIDargv){cout<<"HelloWorld!\n";}DWORDWINAPItb(LPVOIDargv){cout<<"我的名字:孫婷\n";cout<<"我的學(xué)號:9\n";}DWORDWINAPItc(LPVOIDargv){cout<<"Pleasewait...\n";Sleep(5000);cout<<"Iwakeup.\n";}intmain(){HANDLEthreada,threadb,threadc;DWORDTEST;threada=CreateThread(NULL,0,ta,NULL,0,0);threadb=CreateThread(0,0,tb,0,0,0);threadc=CreateThread(0,0,tc,0,0,0);ExitThread(TEST);ExitThread(TEST);ExitThread(TEST);return0;}實驗題目:實驗二 線程同步完成人:XXX報告日期:2018年4月7日一、 實驗內(nèi)容簡要描述1)在程序中使用CreateSemaphore(NULL,0,1,"SemaphoreNam31)創(chuàng)建一個名為SemaphoreName的信號量,其初值為0。2)使用OpenSemaphore(SYNCHRONIZE]SEMAPHORE__MODIFY_STATE,NULL,"SemaphoreName1)打開該信號量。3)創(chuàng)建一個子線程,主線程創(chuàng)建子線程后調(diào)WaitForSingleObject(hHandle,INFINITE),這里等待時間設(shè)置為INFINITE表示要一直等待下去,直到該信號量被喚醒為止。4)子線程sleep5秒鐘,然后輸出“Iamover.”結(jié)束,調(diào)用ReleaseSemaphore(hHandle1,1,NULL)釋放信號量,使信號量的值加1。二、 程序設(shè)計1、設(shè)計思路A)等待一個對象WaitForSingleObjects 函數(shù)決定等待條件是否被滿足。如果等待條件并沒有被滿足,調(diào)用線程進人一個高效的等待狀態(tài),當?shù)却凉M足條件時占用非常少的處理器時間。在運行前,一個等待函數(shù)修改同步對象類型的狀態(tài)。修改僅發(fā)生在引起函數(shù)返回的對象身上。例如,信號的計數(shù)減l。WaitForSingleObject函數(shù)能等待的對象包括:Changenotification改變通告);Consoleinput(控制臺輸入);Event(事件);Job(作業(yè));Mutex(互斥對象);Process(進程);Semaphore(信號量);Thread(線程);Waitabletimer(可等待定時器)。當使用等待函數(shù)或代碼直接或間接創(chuàng)建窗口時, 一定要小心。如果一個線程創(chuàng)建了任何窗口,它必須處理進程消息。消息廣播被發(fā)送到系統(tǒng)的所有窗口。 一個線程用沒有超時的等待函數(shù)也許會引起系統(tǒng)死鎖。 間接創(chuàng)建窗口的兩個例子是DDE和COMCoInitialize。因此,如果用戶有一個創(chuàng)建窗口的線程,用MsgWaitForMultipleObjects或MsgWaitForMultipleObjectsEx函數(shù),而不要用SignalObjectAndWait函數(shù)。B)等待多個對象WaiForMultipleObjects 函數(shù)當下列條件之一滿足時返回:(1)任意一個或全部指定對象處于信號態(tài);(2)超時間隔已過。C)創(chuàng)建信號量如果成功就傳回一個handle,否則傳回NULL不論哪一種情況,GetLastError都會傳回一個合理的結(jié)果。如果指定的Semaphore名稱已經(jīng)存在,則函數(shù)還是成功的,GetLastError會傳回ERROR_ALREADY_EXISTSD)打開信號量為現(xiàn)有的一個已命名信號機對象創(chuàng)建一個新句柄。E)增加信號量的值該函數(shù)將指定信號對象的計數(shù)增加一個指定的值。2、主要數(shù)據(jù)結(jié)構(gòu)DWORDWaitForSingleObject(HANDLEhHandle,DWORDdwMilliseconds);DWORDWaitForMultipleObjects(DWORDnCountCONSTHANDLE*lpHandlesBOOLfWaitAll,DWORDdwMilliSeconds)HANDLECreateSemaphore(LPSECURITY_ATTRIBUTESlpAttributes,LONGlInitialCount,LONGlMaximumCountLPCTSTRlpName);HANDLEOpenSemaphore(DWORDdwDesiredAccessC:\U5ers\jsj\De5kt。p\testl\bin\Debug\tMtl.exeSendplioreCreateSuccess*SenaploreOpenSuccess!riiFeadlcreateSucchee*NouInThread!Ianouei*_ReleaseSemApLoFeei*F=87SenaplioveIReleaseSuccess!fc=1WaitForBin3leObjecterr=0UfiIT_OBJECT?d?eS=0我的名字,孫婷我的學(xué)號:141240209Procesereturned0<0x0> execu^ion(ime:8.005sPressanyMeytocontinue.);rc=ReleaseSemaphore(hHandle1,1,NULL);Often,acriticalsectionobjectisusedtoprotectsharedresources 。通過定義在數(shù)據(jù)段中的——個CRITICAL_SECTION吉構(gòu)實現(xiàn)。CRITICAL_SECTIONmyCritical;并且在任何線程使用此臨界區(qū)對象之前必須對它進行初始化。void InitializeCriticalSection(LPCRITICAL_SECTIONlpCriticalSection);之后,任何線程訪問臨界區(qū)中數(shù)據(jù)的時候,必須首先調(diào)用EnterCriticalSection函數(shù),申請進入臨界區(qū)(又叫關(guān)鍵代碼段,使用共享資源的任何代碼都必須封裝在此)。在同一時間內(nèi),Windows只允許一個線程進入臨界區(qū)。所以在申請的時候,如果有另一個線程在臨界區(qū)的話,EnterCriticalSection 函數(shù)會一直等待下去,直到其他線程離開臨界區(qū)才返回。EnterCriticalSection 函數(shù)用法如下:voidEnterCriticalSection(LPCRITICAL_SECTIONlpCriticalSection);當操作完成的時候,還要將臨界區(qū)交還給 Windows以便其他線程可以申請函數(shù)來完成使用。這個工作由LeaveCriticalSection函數(shù)來完成voidLeaveCriticalSection(LPCRITICAL_SECTIONIpCriticalSection);當程序不再使用臨界區(qū)對象的時候,必須使用DeleteCriticalSection函數(shù)將它刪除。voidDeleteCriticalSection(LPCRITICAL_SECTIONlpCriticalSection);b.使用互斥鎖(Interlocked)提供一種手段來保證值的遞增(減)能夠以原子操作方式來進行,也就是不中斷地進行。LONGInterlockedIncrement(LPLONGlpAddend);試結(jié)果分析C:\LI&ers\j可\Des匕Dp\test\t)in\Debug\test.exeThreadlcreatesuccess!TlipeadScreatesuccess!countinfunc2=6countinfund=7Processreturned0<0x0>execirtiontine:1?0095Pj'e£& tocontinue.四、實驗體會1、實驗體會和收獲熟練了Windows系統(tǒng)環(huán)境下線程的創(chuàng)建與撤銷,熟悉了Windows系統(tǒng)提供的線程互斥API,使用Windows系統(tǒng)提供的線程互斥API解決實際問題。五、源代碼#include<>#include<>#include<>staticintcount=5;epuei*PipeCreate£u.ccesetep-uftp-PipeConnectSuccess!er-uer-PipeRead.SuccessfftTAFaneClientis=He1Lo!Mynunber:141340209*Mynane:?孫婷LcascInputToSend.?Iio,孫瘴,eruerPipeWriteSuccess?eruerPipeConnectSuccess*erverPipeReadSucces!AiIAfi*onClient19=endIonsei*-uebeEND*1nputDataPLea&e?H&Llo!raunbei?:141340239.Mynane=-于卜婷WaitPipeSugga尊寸GallPipeSuccess!Dataff?Sfepu&risH.llo!孫婷!1raputDataPlease?endH*帕Client:tobeEND?pipe\\myPipe";charInBuffer[50]="";charOutBuffer[50]="";DWORDBytesRead,BytesWrite;hPipeHandle=CreateNamedPipe((LPCTSTR)lpName,PIPE_ACCESS_DUPLEX|FILE_FLAG_OVERLAPPED|WRITE_DAC,PIPE_TYPE_MESSAGE|PIPE_READMODE_BYTE|PIPE_WAIT,1,20,30,NMPWAIT_USE_DEFAULT_WAIT,(LPSECURITY_ATTRIBUTES)NULL); \pipe\\myPipe";charInBuffer[50]="";charOutBuffer[50]="";DWORDBytesRead;intnRetCode=0;interr=0;while(1){strcpy(InBuffer,"");strcpy(OutBuffer,"");printf("InputDataPlease!\n");scanf("%s",InBuffer);if(!strcmp(InBuffer,"end")){CallNamedPipe(lpName,InBuffer,sizeof(InBuffer),OutBuffer,sizeof(OutBuffer),&BytesRead,NMPWAIT_USE_DEFAULT_WAIT);break;}rc=WaitNamedPipe(lpName,NMPWAIT_WAIT_FOREVERg讀者擁有臨界區(qū)的所有權(quán),寫者都阻塞在臨界區(qū)對象write上。當寫者擁有臨界區(qū)對象所有權(quán)時,第一個判斷完readcount==1后,其余的讀者由于等待對readcount的判斷,阻塞在Mutex上!寫者優(yōu)先:寫者優(yōu)先和讀者優(yōu)先有相同之處,不同的地方在:一旦有一個寫者到來時,應(yīng)該盡快讓寫者進行寫,如果有一個寫者在等待,則新到的讀者操作不能讀操作,為此添加一個整型變量writecount,記錄寫者的數(shù)目,當writecount=0時才可以釋放讀者進行讀操作!為了實現(xiàn)對全局變量writecount的互斥訪問,設(shè)置了一個互斥對象Mutex3。為了實現(xiàn)寫者優(yōu)先,設(shè)置一個臨界區(qū)對象 read,當有寫者在寫或等待時,讀者必須阻塞在臨界區(qū)對象read上。讀者除了要一個全局變量readcount實現(xiàn)操作上的互斥外,還需要一個互斥對象對阻塞在read這一個過程實現(xiàn)互斥,這兩個互斥對象分別為 mutexl和mutex2。3、主要數(shù)據(jù)結(jié)構(gòu)voidRP_ReaderThread(void*p)讀者線程信息voidRP_WriterThread(void*p)寫者線程信息voidReaderPriority(char*file)讀者優(yōu)先處理函數(shù)voidWP_ReaderThread(void*p)讀者線程信息voidWriterPriority(char*file)寫者優(yōu)先處理函數(shù)三、實驗結(jié)果1、測試結(jié)果分析A.讀者優(yōu)先運行ReaderPriopity:Readerthread1sent?thereadingrequire?Readerthread1beginstopeadfile.WritertllHBjd2Sent£tlieurltIngrequire_Keaderthread3Sentstlie1*6adIngrequire_Kea.de戶thread3beginstoreadfile.Wi'itepthread5sentsthewritingpequire■R&aderthread4sentsthereadingrrequireRfintierthread4beginstoreadflie.Readerthread3finishertreadingfile.n^adcrthread1Finishedreadingfile.Hed.derthread4Finisbed1k停ad£ngfile.Writertlnread2beyinstoVritet。the£ile.Wi'iterthread2finishedWritingtothefileteptfii?ead5beginstoUrite七t>theFlie,Wi'iterthread5FinishedWritingtothefile11readerandwaiterhavefinishedoperatinressAnyKeyToContinue:B.寫者優(yōu)先運行n",m_serial);n",m_serial);TiterPvioi'ity:WriterMyiterMritei*WriterUviterWriterWriterthreadthreadthreadthreadthl'fe^dthreadthread1sentsthew尸五七]WriterMyiterMritei*WriterUviterWriterWriterthreadthreadthreadthreadthl'fe^dthreadthread1sentsthew尸五七]ngr-E(£iJiireIjegin尋to27entsthebeginsto3sentstheS£ent£the4sentstheWritetothefile,writin^iE(tuii*€*Uritetothefile,writiieccuire.unitingrequire.uritinffr-E(iuirE.WriterWriterWriterWriterWritel*Writerthread;thi'eadthreadthreadthreadthi"eadlWritertJir'ead

WriterthreadfinigticdWritingtQthefile.WriterWriterWriterWriterWritel*Writerthread;thi'eadthreadthreadthreadthi"eadlWritertJir'ead

Writerthread力egin寫tQUritetothefile.finishingrWritin^|tothefileheginstoU^itetot)?efile.finishedUi'itIngtothe£ile.beginstoUritet:othefiLe-Finish±n;rWptotliefile

finishedWritingtothefile.H11readerAndwriterhavefinishedoperatingPressarhyKeifToContinue四、實驗體會1、實驗體會和收獲Windows2000/XP提供了互斥量(mutex)、信號量(semapore)、事件(event)等三種同步對象和相應(yīng)的系統(tǒng)調(diào)用,用于線程的互斥與同步。通過對讀者寫者問題的調(diào)試,了解Windows2000/XP中的同步機制。五、源代碼#include""#include<>#include<>#include<>#include<>#include<>#include<>#defineREADER'R'n",m_serial);#defineREADER'R'n",m_serial);n",m_serial);Sleep(m_persist);n",m_serial);n",m_serial);n",m_serial);Sleep(m_persist);n",m_serial);erial;inFile>>thread_info[n_thread].entity;inFile>>thread_info[n_thread].delay;inFile>>thread_info[n_thread++].persist;();}for(inti=0;i<(int)(n_thread);i++){if(thread_info[i].entity==READER||thread_info[i].entity=='R'){h_Thread[i]=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)(RP_ReaderThread),&thread_info[i],0,&thread_ID);n");}n",m_serial);wait_for_mutex1=WaitForSingleObject(h_Mutex1,-1);Sleep(m_persist);n",m_serial);n",m_serial);n",m_serial);Sleep(m_persist);n",m_serial);erial;inFile>>thread_info[n_thread].entity;inFile>>thread_info[n_thread].delay;inFile>>thread_info[n_thread++].persist;();}for(inti=0;i<(int)(n_thread);i++){if(thread_info[i].entity==READER||thread_info[i].entity=='R'){n");}試結(jié)果分析g\testexe?C;\Usurs\jsJ\Dcktop\tus,g\testexe要創(chuàng)建的進理數(shù)目:輸入選程的調(diào)度萬玄:<P/R)器入迸程名字和進岸所需時現(xiàn)13143546進程名2優(yōu)先級46輪數(shù)8cps時間需要時間0 4進程狀態(tài)U計數(shù)器03450Q 5U044400 6U014760 3R0進程名優(yōu)先級輪數(shù)cpu時間需要時間進程狀態(tài)計數(shù)器34500 5W94144440RQ 61 2UU01O4680 4R0進程名優(yōu)先級掄數(shù)cpu時間需要時間進程狀態(tài)計數(shù)器444UU 6U14401 2W124301 3U134500 5R0進程名優(yōu)先級論數(shù)CP11時間需要時間進程狀態(tài)計數(shù)器14401 2U1243n1 3U134201 4U144400 6R0進程名優(yōu)先級論數(shù)cpu時間需要時間進程狀態(tài)計數(shù)器24301 3U1142n1 4U114101 5U114401 2B1進程名優(yōu)先級輪數(shù)cpu時|用需要時間進程狀態(tài)計數(shù)器342n1 4U144161 SU114102 12243U1 3K1進程名優(yōu)先級筋cpu時村需要時間講程狀態(tài)計的器441R1 5U114162 1U224082 2W234201 4R1陽聆優(yōu)先級輪數(shù)CDU時間需要時間講程狀態(tài)計數(shù)器14102 1U224002 2W233702 3W244101 5R1進程名優(yōu)先級輪數(shù)「P,時間需要時間進程狀態(tài)計數(shù)器94002 2U233902 3W2438U2 4U214102 1R2進程名優(yōu)先級輪數(shù)cpu時間需要時間進程狀態(tài)計數(shù)器33902 3U2438U2 4W213803 0F3C!\Uae圖國XOfrsktopt.且H\b?n\Defaug,t@ct自檢能程名程七扣々不土P程日程日優(yōu)先級38373819優(yōu)先級373b38判優(yōu)先級363E38羽先線J53834流先級333834需先級32加3d程名花丸級38程書驕呈名2G卷先級383436■先級343gZb?pu時閭22 、Lpa時間3 、cpu時間434gcpu時間444cpu時間4CRU時間34cpu時間34需要時間41S需要時間14需要時間23n3要時間3需要時間1Q3需要時間2同B需要時間0阿0署要對間0S01需要時間noe工驗入?141?朝如9,孫婷「口匚匕s寫reLuriitiil0<0x0>exccutlunLineressanyJkeytocontinue?送程狀態(tài)F法超狀態(tài)F)程狀態(tài)F也程狀態(tài)WFF立程狀態(tài)UFF能桂狀態(tài)U1FF程狀態(tài)FFF近程狀態(tài)FFF*程狀態(tài)F.79fs四、實驗體會,,回iJ1、實驗過程中遇到的問題及解決過程(1)本次試驗,思路設(shè)計不難,主要還是在利用指針處理時感覺很困難,實驗中設(shè)計了結(jié)構(gòu)指針用來指向PCB計PC叫構(gòu)中又有鏈表指針。為此必須時時防止出現(xiàn)野指針,程序崩潰。(2)在建立優(yōu)先數(shù)就緒隊列時主要運用,鏈表插入模型。但是由于本題是從建立、到完成一個就緒對列,所以必須分多種情況討論。2、實驗體會和收獲(1)本次試驗后對優(yōu)先數(shù)調(diào)度算法和時間片輪轉(zhuǎn)調(diào)度算法實現(xiàn)的過程,有了很清楚的認識、理解。設(shè)計計數(shù)器來對進程執(zhí)行狀態(tài)的時間分析, 使得進程調(diào)度這一抽象模型得到具體化。之后,便是對進程的插入(執(zhí)行完,插入到完成隊列,否則插入到就緒)和再次調(diào)度(當改進程再次滿足條件時,從就緒隊列調(diào)度到執(zhí)行隊列)重復(fù)過程。(2)通過設(shè)計PC叫構(gòu),模擬進程調(diào)度,加深了對進程的理解。(3)提高了C語言編程動手能力,在設(shè)計就緒隊列時,通過優(yōu)先數(shù)將新進程插入就緒隊列中的適當位置。要做多重判斷,但實際又是“鏈表插入”模型的運用,無論多復(fù)雜的問題,都可以分化成簡單的問題在已有的模型上處理。五、源代碼#include<>#include<>#include<>typedefstructnode{charname[20];/* 進程的名字*/intprio;/*進程的優(yōu)先級*/intround;/*分配CPU的時間片*/intcputime;/*CPU執(zhí)行時間*/intneedtime;/*進程執(zhí)行所需要的時間*/intcputime;/*CPU執(zhí)行時間*/intneedtime;/*進程執(zhí)行所需要的時間*/charstate;/*進程的狀態(tài),W--就緒態(tài),R——執(zhí)彳T態(tài),F(xiàn)——完成態(tài)*/intcount;/*記錄執(zhí)行的次數(shù)*/structnode*next;/*intcount;/*記錄執(zhí)行的次數(shù)*/structnode*next;/*鏈表指針*/}PCB;PCB*ready=NULL,*run=NULL,*finish=NULL;/*定義三個隊列,就緒隊列,執(zhí)行隊列和完成隊列*/執(zhí)行隊列和完成隊列*/intnum;voidGetFirst();/*從就緒隊列取得第一個節(jié)點*/voidOutput();/*輸出隊列信息*/voidInsertPrio(PCB*in);/*創(chuàng)建優(yōu)先級隊列,規(guī)定優(yōu)先數(shù)越小,優(yōu)先級越高*/voidInsertTime(PCB*in);/*時間片隊列*/voidInsertFinish(PCB*in);/*時間片隊列*/voidPrioCreate();/*優(yōu)先級輸入函數(shù)voidGetFirst();/*從就緒隊列取得第一個節(jié)點*/voidOutput();/*輸出隊列信息*/voidInsertPrio(PCB*in);/*創(chuàng)建優(yōu)先級隊列,規(guī)定優(yōu)先數(shù)越小,優(yōu)先級越高*/voidInsertTime(PCB*in);/*時間片隊列*/voidInsertFinish(PCB*in);/*時間片隊列*/voidPrioCreate();/*優(yōu)先級輸入函數(shù)*/voidTimeCreate();/*時間片輸入函數(shù)*/voidPriority。; voidPriority。; /*按照優(yōu)先級調(diào)度*/voidRoundRun();/*時間片輪轉(zhuǎn)調(diào)度voidRoundRun();/*時間片輪轉(zhuǎn)調(diào)度*/intmain(void)charchose;printf(” 請輸入要創(chuàng)建的進程數(shù)目:\n");scanf("%d”,&num);getchar();printf(" 輸入進程的調(diào)度方法:(P/R)\n");scanf("%c”,&chose);switch(chose){case'P':case'p':PrioCreate();Priority。;break;case'R':case'r':TimeCreate();RoundRun();break;default:break;}Output();printf("\n");printf("實驗人:9,孫婷\n");return0;}voidGetFirst()/* 取得第一個就緒隊列節(jié)點*/{run=ready;if(ready!=NULL){run->state='R';while(p!=NULL)while(p!=NULL)while(p!=NULL)while(p!=NULL)ready=ready->next;run->next=NULL;}}voidOutput()/*輸出隊列信息*/{PCB*p;p=ready;printf("進程名\t優(yōu)先級\t輪數(shù)\tcpu時間\t需要時間\t進程狀態(tài)\t計數(shù)器\n");while(p!=NULL){printf("%s\t%d\t%d\t%d\t%d\t\t%c\t\t%d\n",p->name,p->prio,p->round,p->cputime,p->needtime,p->state,p->count);p=p->next;}p=finish;while(p!=NULL){printf("%s\t%d\t%d\t%d\t%d\t\t%c\t\t%d\n",p->name,p->prio,p->round,p->cputime,p->needtime,p->state,p->count);p=p->next;}p=run;{{{{printf("%s\t%d\t%d\t%d\t%d\t\t%c\t\t%d\n",p->name,p->prio,p->round,p->cputime,p->needtime,p->state,p->count);p=p->next;}}voidInsertPrio(PCB*in)/* 創(chuàng)建優(yōu)先級隊列,規(guī)定優(yōu)先數(shù)越小,優(yōu)先級越低*/{PCB*fst,*nxt;fst=nxt=ready;if(ready==NULL)/* 如果隊列為空,則為第一個元素*/{in->next=ready;ready=in;}else/* 查到合適的位置進行插入*/{if(in->prio>=fst->prio)/* 比第一個還要大,則插入到隊頭*/{in->next=ready;ready=in;}elseif(ready==NULL)if(ready==NULL)if(ready==NULL)if(ready==NULL)while(fst->next!=NULL)/*移動指針查找第一個別它小的元素的while(fst->next位置進行插入*/{nxt=fst;fst=fst->next;}if(fst->next==NULL)/* 已經(jīng)搜索到隊尾,則其優(yōu)先級數(shù)最小,將其插入到隊尾即可*/{in->next=fst->next;fst->next=in;}else/*插入到隊列中*/{nxt=in;in->next=fst;}}}}voidInsertTime(PCB*in)/* 將進程插入到就緒隊列尾部*/{PCB*fst;fst=ready;{{while(fst->next!=NULL)while(fst->next!=NULL){{while(fst->next!=NULL)while(fst->next!=NULL)in->next=ready;ready=in;}else{while(fst->next!=NULL){fst=fst->next;}in->next=fst->next;fst->next=in;}}voidInsertFinish(PCB*in)/* 將進程插入到完成隊列尾部*/{PCB*fst;fst=finish;if(finish==NULL){in->next=finish;finish=in;}else{{{{{fst=fst->next;}in->next=fst->next;fst->next=in;}}voidPrioCreate()/* 優(yōu)先級調(diào)度輸入函數(shù)*/{PCB*tmp;inti;printf("輸入進程名字和進程所需時間:\n");for(i=0;i<num;i++){if((tmp=(PCB*)malloc(sizeof(PCB)))==NULL){perror("malloc");exit⑴;}scanf("%s",tmp->name);getchar();/*吸收回車符號*/scanf("%d”,&(tmp->needtime));tmp->cputime=0;tmp->state='W;tmp->prio=50-tmp->needtime;/* 設(shè)置其優(yōu)先級,需要的時間越多,優(yōu)先級越低*/tmp->round=0;tmp->count=0;InsertPrio(tmp);/* 按照優(yōu)先級從高到低,插入到就緒隊列*/}}voidTimeCreate()/* 時間片輸入函數(shù)*/{PCB*tmp;inti;printf(" 輸入進程名字和進程時間片所需時間:/n");for(i=0;i<num;i++){if((tmp=(PCB*)malloc(sizeof(PCB)))==NULL){perror("malloc");exit⑴;}scanf("%s",tmp->name);getchar();scanf("%d”,&(tmp->needtime));tmp->cputime=0;tmp->state='W;tmp->prio=0;tmp->round=2;/* 假設(shè)每個進程所分配的時間片是2*/tmp->count=0;InsertTime(tmp);}voidPriority。/* 按照優(yōu)先級調(diào)度,每次執(zhí)行一個時間片*/{intflag=1;GetFirst();while(run!=NULL)/*當就緒隊列不為空時,則調(diào)度進程如執(zhí)行隊列執(zhí)行*/{Output();/* 輸出每次調(diào)度過程中各個節(jié)點的狀態(tài)*/while(flag){run->prio-=3;/* 優(yōu)先級減去三*/run->cputime++;/*CPU 時間片加一*/run->needtime--;/* 進程執(zhí)行完成的剩余時間減一*/if(run->needtime==0)/* 如果進程執(zhí)行完畢,將進程狀態(tài)置為 F,將其插入到完成隊列*/{run->state='F';run->count++;/* 進程執(zhí)行的次數(shù)加一*/InsertFinish(run);flag=0;}else/* 將進程狀態(tài)置為W入就緒隊列*/run->state='W;run->count++;/*進程執(zhí)行的次數(shù)加一*/InsertTime(run);flag=0;}}flag=1;*/GetFirst();/* 繼續(xù)取就緒隊列隊頭進程進入執(zhí)行隊列*/}}voidRoundRun()/* 時間片輪轉(zhuǎn)調(diào)度算法*/{intflag=1;GetFirst();while(run!=NULL){Output();while(flag){run->count++;run->cputime++;進程執(zhí)行完畢*/進程執(zhí)行完畢*/if(run->needtime==0)/*{run->state='F';InsertFinish(run);flag=0;}elseif(run->count==run->round)/* 時間片用完*/{run->state='W;run->count=0;/* 計數(shù)器清零,為下次做準備*/InsertTime(run);flag=0;}}flag=1;GetFirst();}}實驗題目:實驗七存儲管理之動態(tài)鏈接庫完成人:XXX報告日期:2018年5月12日實驗內(nèi)容簡要描述1)編寫動態(tài)鏈接庫實現(xiàn)如下功能:①求兩個數(shù)的最大值和最小值;②求1+2+3+4+-+n(n作為一個參數(shù))。2)編寫程序,通過隱式鏈接和顯式鏈接調(diào)用動態(tài)鏈接庫。程序設(shè)計4、設(shè)計思路動態(tài)鏈接庫入口函數(shù)DllMain()函數(shù)是動態(tài)鏈接庫的入口函數(shù),函數(shù)原型如下:BOOLAPIENTRYDllMain(HANDLEhModuleDWORDul_reason_for_call,LPVOIDlpReserved)hModule:動態(tài)鏈接庫的句柄;reason_for_call:指明系統(tǒng)調(diào)用該函數(shù)的原因;lpReserved:動態(tài)鏈接庫是否需要動態(tài)加載或卸載。動態(tài)鏈接庫的導(dǎo)入與導(dǎo)出在動態(tài)鏈接庫源程序中聲明導(dǎo)出函數(shù)的代碼如下:_declspec(dllexport)MyDllFunction(intx,inty);其中關(guān)鍵字_declspec(dllexport)表示要導(dǎo)出其后的函數(shù)MyDllFunction()。如果一個動態(tài)鏈接文件中的函數(shù)還需要調(diào)用其他動態(tài)鏈接庫,此時,動態(tài)鏈接庫文件除了導(dǎo)出函數(shù)外,還需要一個導(dǎo)入函數(shù),聲明導(dǎo)入函數(shù)的代碼如下:_declspec(dllimport)DllFunction(intx,inty);動態(tài)鏈接庫的兩種鏈接方式:隱式鏈接和顯式鏈接。隱式鏈接應(yīng)用程序的源代碼只引用動態(tài)鏈接庫中包含的符號,當應(yīng)用程序運行時,加載程序隱式地將動態(tài)鏈接庫裝入到進程的地址空間中。顯式鏈接應(yīng)用程序運行時使用LoadLibrary()顯式地加載所需要的動態(tài)鏈接庫,并顯式地鏈接需要的輸出符號表。5、主要數(shù)據(jù)結(jié)構(gòu)BOOLAPIENTRYDllMain(HANDLEhModule,DWORDul_reason_for_call,LPVOIDlpReserved){returnTRUE;}intMax(intx,inty); 求最大值intMin(intx,inty); 求最小值intSum(intn);求和實驗結(jié)果.測試結(jié)果分析四、實驗體會1、實驗體會和收獲一開始用編譯時頭 文件#include"”一直編譯不通過所以換成 MicrosoftVisualStudio2010編譯,實踐理解了動態(tài)鏈接庫的原理,學(xué)會使用動態(tài)庫編寫簡單程序,最終完成實驗。五、源代碼Dll:#include""#include""extern"C"_declspec(dllexport)intMax(intx,inty);/Debug/")extern"C"_declspec(dllexport)intMax(int,int);.+1=%d",Sum(100));getchar();}實驗題目:實驗八 存儲管理之內(nèi)存分配完成人:XXX報告日期:2018年5月19日實驗內(nèi)容簡要描述1)編寫一個程序,創(chuàng)建兩個線程,一個用于內(nèi)存分配,另一個用于跟蹤內(nèi)存的分配情況并打印信息。2)將VirtualAlloc函數(shù)的參數(shù)ftAllocahonType分別改為MEM_RES或MEM_TOP_DOWNnProtect參數(shù)分另改為PAGE_GUARPAGE_NOACCESSPAGE_NOCACHE進行本實驗的各項操作,以及查看內(nèi)存分配的各個結(jié)果,分析原因。3)嘗試調(diào)換分配、回收、內(nèi)存復(fù)位、加鎖、解鎖、提交、回收的次序,查看結(jié)果,并分析原因。程序設(shè)計6、設(shè)計思路1)查看系統(tǒng)信息2)查看系統(tǒng)內(nèi)存信息3)虛擬內(nèi)存分配4)釋放虛擬空間5)虛擬空間加鎖6)虛擬空間解鎖Windows進程的虛擬地址空間中也有三種狀態(tài)的頁面:空閑頁面、保留頁面和提交頁面??臻e(Free)頁面:空閑頁面是指那些可以保留或提交的可用頁面。保留(Reserved)頁面:保留頁面是邏輯頁面已分配但沒有分配物理存儲的頁面。設(shè)置這種狀態(tài)的效果是可以保留一部分虛擬地址,這樣,如果不預(yù)先釋放這些地址,就不能被其他應(yīng)用程序(如Malloc,LocalAlloc等)的操作所使用。試圖讀或?qū)懣臻e頁面或保留頁面將導(dǎo)致頁面出錯異常。保留頁面可被釋放或提交。提交(Committed)頁面:提交頁面是物理存儲(在內(nèi)存中或磁盤上)已被分配的頁面??蓪λ右员Wo,不許訪問或允許只讀訪問,或允許讀寫訪問。提交也可以被回收以釋放存儲空間,從而變成保留頁面。在本實驗中,首先創(chuàng)建工程makefile生成隨機輸入文件,其中包含對內(nèi)存要求作的各種操作;然后創(chuàng)建工程MemoryAllocation,實現(xiàn)輸入文件所要求的各項內(nèi)存管理操作。7、主要數(shù)據(jù)結(jié)構(gòu)VOIDGetSystemInfo(LPSYSTEM_INFOIpSystemInfo);該函數(shù)返回當前系統(tǒng)的信息VOIDGlobalMemoryStatus(LPMEMORYSTATUSlpBuffer);該函數(shù)可以獲得計算機系統(tǒng)中當前使用的物理內(nèi)存和虛擬內(nèi)存的信息。LPVOIDVirtualAlloc(LPVOIDlpAddress,DWORDdwSize,DWORDflAllocationType,DWORDflProtect);該函數(shù)可以在調(diào)用進程的虛擬地址中保留或提交頁面。除非設(shè)置了MEM_RESET志,否則被這個函數(shù)分配的內(nèi)存單元被自動初始化為00BOOLVirtualFree(LPVOlDlpAddress,DWORDdwSizeDWORDdwFreeType);可以釋放或注銷調(diào)用進程虛擬空間中的頁面。BOOlVirtualLocK(LPVOIDlpAddress,DWORDdwSize);該函數(shù)可以將進程虛擬空間中的內(nèi)存加鎖。以確保后面的對該區(qū)域的存取操作不會產(chǎn)生頁面失敗。BOOlVirtualUnLock(LPVOIDlpAddress,DWORDdwSize);該函數(shù)可以將進程虛擬空間指定范圍內(nèi)的頁面解鎖,從而系統(tǒng)在必要時可以將這些頁面換出到頁面文件中。三、實驗結(jié)果1、基本數(shù)據(jù)源程序代碼行數(shù)完成該實驗投入的時間(小時數(shù))與其他同學(xué)討論次數(shù)231402、實驗結(jié)果文做^ 格式查注M*劭(H)TOC\o"1-5"\h\z0dwActiveProQ0&5QfMask 15dwAllocationGranularity 65536dwNumberOfProc6SSor& AdwOemld0dwPageSize4096dwProcesso<Type586ipMaximumApplicationAddress t)x7FFEFFFFIpMinimumApphcationAddress0x00010000wProcessorArchitecture0wProc&ssorLevel6wProGessorReviwn10759wReseived0*曹離****,曹*曹**青*河育*******前*,曹,哀喉曾曹曹河**河河河**才■清鴦'苒*再■、f*—,號*魯號曹書曹河*河,曹事長奇立力,—dwAvailPageFile 2377965568dwAvailPhys 900399104dwAvaiMrtual 21375344&4dwLength32dwMemorytoad 56dwTotaiPageFiie 418646960dwTotalPhys 2082324480dwTotafVirtual 2147352576&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&?&&&&&&&&&&&&&&&AlocaiionBase0x00010000AlocationProtect4BaseAddress 0x00010000Protect4RegionSize 65536State4096Type262144四、實驗體會1、實驗體會和收獲本次試驗讓我們從不同側(cè)面了解Windows系統(tǒng)對用戶進程的虛擬內(nèi)存空間的管理和分配方法,同時了解跟蹤程序的編寫方法 (與被跟蹤程序保持同步,使用Windows提供的信號量),對Windows分配虛擬內(nèi)存、改變內(nèi)存狀態(tài),以及對物理內(nèi)存和頁面文件狀態(tài)查詢的API函數(shù)的功能、參數(shù)限制、使用規(guī)則等有了進一步了解。五、源代碼1)tart=VirtualAlloc(NULL,*,MEM_RESERVE,PAGE_NOACCESS);traceArray[index++].size=*;cout<<"startingaddress:"<<traceArray[index-1].start<<"\t"<<"size:"<<traceArray[index-1].size<<endl;break;}case1:tart=VirtualAlloc(traceArray[index].start,traceArray[index].size,MEM_COMMIT,temp);index++;cout<<"startingaddress:"<<traceArray[index-1].start<<"\t"<<"size:"<<traceArray[index-1].size<<endl;break;}case2:tart<<"size:"<<traceArray[index].size<<endl;if(!VirtualLock(traceArray[index].start,traceArray[index++].size))cout<<GetLastError()<<endl;tart<<"\t"<<"size:<<traceArray[index].size<<endl;if(!VirtualUnlock(traceArray[index].start,traceArray[index++].size))cout<<GetLastError()<<endl;break;}tart<<"\t"<<"size:"<<traceArray[index].size<<endl;if (! VirtualFree(traceArray[index].start,traceArray[index++].size,MEM_DECOMMIT))cout<<GetLastError()<<endl;break;}tart<<"\t"<<"size:"<<traceArray[index].size<<endl;if (!VirtualFree(traceArray[index++].start,0,MEM_RELEASE))cout<<GetLastError()<<endl;break;}default:cout<<"error"<<endl;}ReleaseSemaphore(trac,1,NULL);n=i;pl[i].pfn=INVALID; 示該頁不在主存中pl[i].counter=0; ime=-1; ext=&pfc[i+1];fn=i; ext=NULL;pfc[total_pf-1].pfn=total_pf-1;freepf_head=&pfc[0]; fn==INVALID)

ime&&pl[j].pfn!=INVALID)MinT=pl[j].time;MinPn=j;}}freepf_head=&pfc〔pl[MinPn].pfn];fn=INVALID;ime=-1;fn=freepf_head->pfn;ime=CurrentTime;ime=CurrentTime;fn==INVALID)fn!=INVALID)fn!=INVALID&&pl[page[j]].counter==0)dist[page[j]]==100000)ounter=1;fn=INVALID;fn!=INVALIDounter=0;ime&&pl[j].pfn!=INVALID)MinT=pl[j].time;MinPn=j;}}freepf_head=&pfc〔pl[MinPn].pfn];fn=INVALID;ime=-1;fn=freepf_head->pfn;ime=CurrentTime;ime=CurrentTime;fn==INVALID)fn!=INVALID)fn!=INVALID&&pl[page[j]].counter==0)dist[page[j]]==100000)ounter=1;fn=INVALID;fn!=INVALIDounter=0;&&fn];}pl[page[i]].pfn=freepf_head->pfn;fn==lNVALID)fn=INVALID;swap=1;if(use[pnext->pfn]==0){fn=pnext->pfn;fn]=1;fn==lNVALID)fn=INVALID;fn=pnext->pfn;swap=1;fn=pnext->pfn;if(use[pnext->pfn]==0){?C:\Users\jsj\Desktop\test\bin\Debug\test.exeI::Winders=121601.rackspercylinder=255ectopspertrack=63iytespersector■512I:I)1000202273280CBytes>=95386?Cttb>I)processreturned1C0xl> executiontime;0.013sIg>essanykeytocontinue.IgrleaseSelectReadorUritefInput'R'roread..fU*toUrlXfj.'Q'tocult9PleAseEoputtheSecCorNumberCoReadPorR:;or>tcnt:TextContent:>NTLDR<$130 0r摩foffi^confirsf饒of麼rof詵&fnuafd-,dfwwofmof^jrnornQf?師ormef.nROfm0r鳧 r6<^J王?x睪 fm司益 c赴?af?ef<TO? 8"f蛤Ag,B+9fCr^8Fnb6,fffTOfDfOArff3^|2$fOfOf??八OfOf?2O?r?<>s4肋鴕▲&(uF?Fer?aT]Qr岫btoo彳卓9raF?:b?4F?bt?re柚f盧*frDffHexTextContcot2,bb54sqe0di092010240?l9e33030?0fffffffOb63。86OHffffFffeb12fffrff90fffffff9M00H?HH0RRRRflffffFfF8cFffffffcSffffFffSoffFfff£d8fFffffFclfffFfffed4FfffFffaffFfff&btretft^nettetffh””門??俛r”*"。"rfttrefh76b046frtfettbiioIa66fffffff7ffffffe366fffffffa34e266ffffff8be4R0ffffff80fffffff?BfrrffFfsr。erFrprrr6rfrrrrd9frrrm>eiaee66rfrrffd3fFf/rFoafrrrrcb8ffffff9B66ffffff<il4c266fffffff7ffffffcl66ffffffa352266ffffffiebh6633frrrff<i26Grffffpf?rpfffrrajrrFfrf?32rrrrr/es714ggffffffllb04G266ffffff8?e222663o52266fffffffVV。262663o5226,F(xiàn)fffffS9e2a2663?S2266fffrfff89e3a2663eS2266ffffff89e422,6ffffFfb8ffffFf9BB0R66ffffff8bo222FfffrfoS966bffffffedffFffFB457fffffffs66ffffff2e266ffFffFb8FFFffffaH00066Ffffff8be262:”手“?846946 322“fff/ffbfi 000“ e2a2F”Ffe834966ffffffa336266ffffffal2e266bfffffffcMfffrfff8424fffffffff6.7frrrrfee78 8rfffrrrfesibturrtfe67*rrrfffedsaiot7342 4 s ggfffffFfb6-18c 66FfffffB? e62Z6766ffrfff8b -18866ffffff87cSo 2 66 ffTffal5e266fftfCffbVebO33ffffffd2GGfffffFffIffFL“,6266ffffffAl 4WZ6636 5?266fffffff?3462 66ffffffr833c322B f fffffH4IdH66ffTfffB33e362 Rrfffffr84ffrCFfcS fFfffrfd66rfffff8l>Le 36 2s766fffffff9b3。46266ffffff0l2?2fffFff99ffffffbeX“fffffFfb?。9I66ffffffM22R0fffffFfeSffFfffffe766bfffffFc0fFFfFfff84fffffFfa896.766.tttfttth0le766 3。3a2tttfffoA31666 3a2tffttt>b2B0a066ffffffb??HHH66ffffffbaBB0Bffffffc8ffffffd6B66ffffffasftfFftcQtfrrrrres23aerffff^ia?2“ffffffbbfrrrrrea0。0“ffrrfb???00,loatoSelec1Recd01*UriCef1nouC'R'a*o 'U'CoUrifg.'Q'to<1uil?50 954-44S5294g24649(I33B3。00ffffffeU?80??000008060000?00?00(10000000000?80?0()00000080080000ffffFfeb12rffffF90£”「"900000000000000000fffffffScffffffcSffffffSe(FFTffd8fffffFelffFFffeO4fffffffaFFfFff8bffffffcBffffffffbffffffc83fffffffc66f 6b066fffffffb61cd0 66ffffff^4e266tftfHQbe4。。0fFfffffSfeQffFffffGffFfffd966FfFFffb810B066fFffffd3fffffFe0JFffffeb8fffFff9866ffffFfal4e266(ffffff?ffffffel66ffffffa352266fffffffb7leb06633ffffffd266fffffff? 66f£fff£s3562ffffffeS71466£fFPfF8be4a266fFFfff89e222663e52266£F「ff£89e262663e52268fFffff89e2a26€3eS2266Ffffff89e3a2663e52266fFffffS9e42266ffffffb8ffffff908a066ffffff8be222ffffffeS5f966bffffffcBffffff;8457fFfffffe66ffffffa32e266ffffffb8ffffffafl00066ffffff8be262ffffffcB46.966fffffF&332266FfffffbSfffFffhB00HffffFfSbe2a2ffffffe834966fFffffa336266ffffffal2。266bffffffcBfffffff8424fffffffB67ffffff8078 8Bfffffff85lbffffFffe6766ffffff8d501067342 4 67 66fFfffffM.48e 66fFFfff89 e6226766fffFFFSb 48866ffffff89? 2 66 fffffFal50266fffffFFb?eb06633ffffffd266fffffff?fffffffl66FffffFa366266ffffffal 4226636 Sc266ffffff?3勺62 66fffffff&33e3228 f ffffff84Id。66ffffrf833o362 RfFffffr84ffffFfcS FFfffffd66fffffffible 36 2le766ffffff8b3c46266FffffFal2a2ffffffe8ffffffbc166fffffFfb?e0266ffffffbfi220Bffffffc8ffffffffe?66bffffffc?fffffff84ffffffaS267£6rff/ffftb0le766fffrffflb3e3a2Pffr/feft31666"ffff"3a266ffffffbb2000066Ffffffb9000066fffffFba0000FrffffeSffffffdG866ffffff85ffffffcBfffffff8523066ffffffal3a266fffffffbbffffff8B00066fffffff)906。。PleaseSelectReadorUritcfInput1R1roreA<lr9U1toUrite.'Q'to(£uit9JleaseInputtheSectorHunbertoWriteto:ontent:>lea5eInputtheContenttoUnitetoDiskA:1ENGJIleaseSelectReadorUriteMnput'R'ro to toleaseInputtheSectorMwnbertoReadFoe:TextContentZ澇澇澇澇?例HoxTextContent;:d454。474a-490ffffffccffffffccffffrFccffffffccffffffccffffffccffFFffcffffffccffffffccffffffccffffffccffffffccffffffccffffffccffffffccfffffccffffffccffffffccffffffccffffffccffffffccffffffccffffffccffffffccfffffeeffffffccfrffffccrFffffccffffFFccfrffffccffffffccffffffccffPFffccFffffecffffffFceffffffccFfffffccffffffccffffffccffffffccffffffccffffffccfffffeeffffffccffffffccffffffccffffffccffffffccffffffccffffffccffffffccfffff”fffffffc

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論