上海大學操作系統(二)實驗報告(全)_第1頁
上海大學操作系統(二)實驗報告(全)_第2頁
上海大學操作系統(二)實驗報告(全)_第3頁
上海大學操作系統(二)實驗報告(全)_第4頁
上海大學操作系統(二)實驗報告(全)_第5頁
已閱讀5頁,還剩35頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、評分: SHANGHAI UNIVERSITY操作系統實驗報告學 院 計算機工程與科學專 業 計算機科學與技術學 號 學生姓名 計算機操作系統實驗一報告實驗一 題目 : 操作系統的進程調度姓名 : 張佳慧 學號 :12122544 實驗日期 : 2015.1實驗環境 : Microsoft Visual Studio實驗目的 :進程是操作系統最重要的概念之一, 進程調度又是操作系統核心的主要內容。 本實習要求學生獨立地用高級語言編寫和調試一個簡單的進程調度程序。調度算法可任意選擇或自行設計。例如,簡單輪轉法和優先數法等。本實習可加深對于進程調度和各種調度算法的理解。實驗內容:1、設計一個有n個

2、進程工行的進程調度程序。每個進程由一個進程控制塊(PCB)表示。進程控制塊通常應包含下述信息:進程名、進程優先數、進程需要運行的時間、占用CPU的時間以及進程的狀態等,且可按調度算法的不同而增刪。2、調度程序應包含23種不同的調度算法,運行時可任意選一種,以利于各種算法的分析比較。3、系統應能顯示或打印各進程狀態和參數的變化情況,便于觀察諸進程的調度過程。操作過程:1、本程序可選用優先數法或簡單輪轉法對五個進程進行調度。每個進程處于運行R(run)、就緒W(wait)和完成F(finish)三種狀態之一,并假設起始狀態都是就緒狀態W。為了便于處理,程序進程的運行時間以時間片為單位計算。進程控制

3、塊結構如下:進程控制塊結構如下: PCB進程標識數鏈指針優先數/輪轉時間片數占用 CPU 時間片數進程所需時間片數進程狀態進程控制塊鏈結構如下:其中:RUN當前運行進程指針;HEAD進程就緒鏈鏈首指針;TAID進程就緒鏈鏈尾指針。2、 算法與框圖(1) 優先數法。進程就緒鏈按優先數大小從高到低排列,鏈首進程首先投入運行。每過一個時間片,運行進程所需運行的時間片數減 1,說明它已運行了一個時間片,優先數也減 3,理由是該進程如果在一個時間片中完成不了, 優先級應該降低一級。 接著比較現行進程和就緒鏈鏈首進程的優先數,如果仍是現行進程高或者相同,就讓現行進程繼續進行,否則,調度就緒鏈鏈首進程投入運

4、行。 原運行進程再按其優先數大小插入就緒鏈, 且改變它們對應的進程狀態,直至所有進程都運行完各自的時間片數。(2) 簡單輪轉法。進程就緒鏈按各進程進入的先后次序排列,進程每次占用處理機的輪轉時間按其重要程度登入進程控制塊中的輪轉時間片數記錄項 (相當于優先數法的優先數記錄項位置) 。每過一個時間片,運行進程占用處理機的時間片數加 1,然后比較占用處理機的時間片數是否與該進程的輪轉時間片數相等, 若相等說明已到達輪轉時間, 應將現運行進程排到就緒鏈末尾,調度鏈首進程占用處理機,且改變它們的進程狀態,直至所有進程完成各自的時間片。(3) 程序框圖運行結果:Priority算法:Round Robi

5、n算法:實驗代碼:/操作系統實驗-進程調度#include <cstdio>#include <ctime>#include <cstring>#include <cstdlib>const long n=5;struct pcbtype/進程控制塊結構long id, priority, runtime, totaltime;char status;/R, W, F -> 運行,就緒,完成PCBn+1;long linkn+1;/鏈表結構long RUN, HEAD, TAIL;/選擇算法long ChooseAlgo()char s12

6、8;printf("Please type the Algorithm(PriorityRound Robin):");gets(s);if (s0='P' | s0='p')return 1;return 0;/初始化void init()long i;for (i=1; i<=n; i+)PCBi.id = i;PCBi.priority = rand()%4+1;PCBi.runtime = 0;PCBi.totaltime = rand()%8+1;PCBi.status = 'W'/顯示進程調度狀況void s

7、howit()long i;printf("=n");printf("%-25s","ID");for (i=1; i<=n; i+) printf("%4ld", PCBi.id);printf("n%-25s","PRIORITY/TURNTIME");for (i=1; i<=n; i+) printf("%4ld", PCBi.priority);printf("n%-25s", "CPUTIME"

8、;);for (i=1; i<=n; i+) printf("%4ld", PCBi.runtime);printf("n%-25s", "ALLTIME");for (i=1; i<=n; i+) printf("%4ld", PCBi.totaltime);printf("n%-25s","STATUS");for (i=1; i<=n; i+) printf("%4c", PCBi.status);printf("n=n&

9、quot;);if (RUN != -1) printf("RUNNING PROCESS: %ldn", RUN);else printf("RUNNING PROCESS: NULLn");printf("WAITING QUEUE: ");for (i=HEAD; i!=-1; i=linki) printf("%ld ", i);printf("nn");/優先數調度算法void main_priority()long i, j, k; long sortn+1;init();/設置就緒

10、鏈for (i=1; i<=n; i+)sorti = i;for (i=1; i<=n; i+) /根據優先數排序for (j=n; j>i; j-)if (PCBsortj.priority > PCBsortj-1.priority)k=sortj; sortj=sortj-1; sortj-1=k;HEAD=sort1;for (i=1; i<n; i+)linksorti = sorti+1;TAIL = sortn;linkTAIL = -1;RUN = -1;/就緒鏈設置完畢RUN = HEAD;PCBRUN.status = 'R'

11、HEAD = linkHEAD;/運行鏈首進程while (RUN != -1)showit();PCBRUN.totaltime-;PCBRUN.priority -= 3; /優先級減3PCBRUN.runtime+;if (PCBRUN.totaltime = 0)/進程運行完成PCBRUN.status='F'RUN = HEAD;if (HEAD != -1)HEAD = linkHEAD;PCBRUN.status='R'elseif (HEAD != -1 && PCBRUN.priority < PCBHEAD.priori

12、ty)k=HEAD;PCBRUN.status = 'W'/尋找等待鏈中的合適位置while (k!=TAIL && PCBlinkk.priority > PCBRUN.priority)k=linkk;if (k = TAIL)linkk = RUN;/插入鏈尾之后TAIL = RUN;linkRUN = -1;RUN = HEAD;HEAD = linkHEAD;PCBRUN.status = 'R'elselinkRUN = linkk;/插入鏈中linkk = RUN;RUN = HEAD;/鏈首進程開始運行HEAD = link

13、HEAD;PCBRUN.status = 'R'showit();/輪轉調度算法void main_round_robin()long i;init();/設置就緒鏈HEAD = 1;for (i=1; i<n; i+)linki = i+1;TAIL = n; linkTAIL = -1;RUN = -1;/就緒鏈設置完畢RUN = HEAD;PCBRUN.status = 'R'HEAD = linkHEAD;/運行首進程while (RUN != -1)showit();PCBRUN.totaltime-;PCBRUN.runtime+;if (PC

14、BRUN.totaltime = 0)/進程運行完成PCBRUN.status = 'F'RUN = HEAD;if (HEAD != -1)HEAD = linkHEAD;PCBRUN.status = 'R'elseif (HEAD != -1 && PCBRUN.runtime % PCBRUN.priority=0)/輪轉時間到 PCBRUN.status='W'/插入鏈尾linkTAIL=RUN;linkRUN=-1;TAIL=RUN;RUN=HEAD;/鏈首進程開始運行HEAD=linkHEAD;PCBRUN.stat

15、us='R'showit();/主函數int main()long algo;srand(time(NULL);algo = ChooseAlgo();if (algo = 1)main_priority();/優先數法elsemain_round_robin();/簡單輪轉法printf("SYSTEM FINISHEDn");return 0;實驗體會: 通過寫代碼的過程更加清晰地了解了兩種算法的思想和用處,對算法的了解加深的同事也鍛煉了寫代碼的能力。計算機操作系統實驗三報告實驗三 題目 : 請求頁式存儲管理姓名 : 張佳慧 學號 :12122544 實

16、驗日期 : 2015.1實驗環境 : Microsoft Visual Studio實驗目的 :近年來,由于大規模集成電路(LSI)和超大規模集成電路(VLSI)技術的發展,使存儲器的容量不斷擴大,價格大幅度下降。但從使用角度看,存儲器的容量和成本總受到一定的限制。所以,提高存儲器的效率始終是操作系統研究的重要課題之一。虛擬存儲技術是用來擴大內存容量的一種重要方法。學生應獨立地用高級語言編寫幾個常用的存儲分配算法,并設計一個存儲管理的模擬程序,對各種算法進行分析比較,評測其性能優劣,從而加深對這些算法的了解。實驗內容 :為了比較真實地模擬存儲管理,可預先生成一個大致符合實際情況的指令地址流。然

17、后模擬這樣一種指令序列的執行來計算和分析各種算法的訪問命中率。 本實驗采用頁式分配存儲管理方案, 并通過分析計算不同頁面淘汰算法情況下的訪問命中率來比較各種算法的優劣。 另外也考慮到改變頁面大小和實際存儲器容量對計算結果的影響, 從而可為算則好的算法、合適的頁面尺寸和實存容量提供依據。 實驗是按下述原則生成指令序列的:(1) 50%的指令是順序執行的。(2) 25%的指令均勻散布在前地址部分。(3) 25%的指令均勻散布在后地址部分。示例中選用最佳淘汰算法(OPT)和最近最少使用頁面淘汰算法(LRU)計算頁面命中率。公式為假定虛存容量為 32K,頁面尺寸從 1K 至 8K,實存容量從 4 頁至

18、 32 頁。(1)最佳淘汰算法(OPT)這是一種理想的算法,可用來作為衡量其他算法優劣的根據,在實際系統中是難以實現的,因為它必須先知道指令的全部地址流。 由于本示例中已預生成了全部的指令地址流, 故可計算出最佳命中率。該算法的準則是淘汰已滿頁表中不再訪問或是最遲訪問的的頁。 這就要求將頁表中的頁逐個與后繼指令訪問的所有頁比較,如后繼指令不在訪問該頁,則把此頁淘汰,不然得找出后繼指令中最遲訪問的頁面淘汰。可見最佳淘汰算法要花費比較長的運算時間。(2)最近最少使用頁淘汰算法(LRU)這是一種經常使用的方法,有各種不同的實施方案,這里采用的是不斷調整頁表鏈的方法,即總是淘汰頁表鏈鏈首的頁,而把新訪

19、問的頁插入鏈尾。如果當前調用頁已在頁表內,則把它再次調整到鏈尾。這樣就能保證最近使用的頁,總是處于靠近鏈尾部分,而不常使用的頁就移到鏈首,逐個被淘汰,在頁表較大時,調整頁表鏈的代價也是不小的。操作過程 :編寫程序:#include <iostream>#include <process.h>#include <cstdlib>#include <algorithm>#include <ctime>#include <cstdlib>#include <cstring>#include <cstdio>

20、;#include <cmath>using namespace std;int adress32;/全局變量數組,地址流int p;/全局變量p是一共有多少地址流void init()/初始化函數, int t;srand(time(0);/隨機產生指令序列 p=12+rand()%32; cout<<"地址流個數 P="<<p<<endl;cout<<"隨機產生的地址流序列n"for(int i=0,j=0;i<p;i+,j+)t=1+rand()%9;adressi=t;/將隨機產生

21、的指令數存入頁面流 printf("a%d=%d ",i,t); j=j%5; if(i<10) printf(" "); if(j=4) printf("n");cout<<endl;void OPT(int n) /FIFO算法,n是M的值int e,q=p,m=n-1;int flag;int flag1;int queye=0;int leaflink32; memset(leaflink,0,sizeof(leaflink);for(int x=0;x<q;x+)e=x;flag=0;for(int

22、i=0;i<n;i+)if(leaflinki=adressx)flag=1;flag1=i;printf("有相同n");break;if(flag=0) int k=0; for(int j=0;j<m;j+)/0 1 2leaflinkk=leaflinkk+1; k+; leaflinkm=adresse; if(e>=m) queye+; if(flag=1) int temp10=0; for(int i=0;i<=m;i+) for(int a=e+1;a<q;a+) if(leaflinki=adressa) tempi+; i

23、nt index=0; for(int i=0;i<m;i+) int min=temp0; if(min>tempi) min=tempi; index=i; int l=leaflinkindex; leaflinkindex=leaflink0; leaflink0=l; for(int j=0;j<n;j+) printf("leaflink%d=%d ",j,leaflinkj); cout<<endl; cout<<"M="<<n<<"時FIFO的命中率為:"

24、;<<(1-(double)queye/p)*100<<"%"<<" "<<endl;void LRU(int n)/LRU算法int i;int m=n-1;int q=p;int e;int queye=0;int flag;int flag1;int y;int leaflink32;memset(leaflink,0,sizeof(leaflink);for(int x=0;x<q;x+)flag=0;e=x;for(i=0;i<n;i+)if(leaflinki=adressx)fla

25、g=1;flag1=i;printf("X=%d,lru%d = adress%d=%d ,flag= 1n",x,i,x,adressx);break;if(flag=0) int k=0;for(int j=0;j<m;j+)/0 1 2leaflinkk=leaflinkk+1; k+;leaflinkm=adresse;queye+;else if(flag=1) y=flag1;for(int j=0;j<m;j+)leaflinkflag1=leaflinkflag1+1;flag1+; leaflink3=adresse;printf("

26、發現相同后,改變leaflink%d=%dn",m,leaflink3); for(int j=0;j<n;j+) printf("leaflink%d=%d ",j,leaflinkj); cout<<endl;cout<<"發生替換次數:"<<queye<<endl;cout<<"M="<<n<<"時LRU的命中率為:"<<(1-(double)queye/p)*100<<"%&

27、quot;<<endl;int main()init();char c;printf("請輸入選擇算法(O:最佳淘汰 L:最近最少使用):");cin>>c;if(c='O')for(int i=3;i<4;i+)OPT(i);else if(c='L') for(int i=4;i<5;i+) LRU(i); cout<<endl; return 0;運行結果:最近最少使用:最佳淘汰:實驗體會 : 通過這次實驗,我了解了采用頁式分配存儲管理方案,并對頁式分配存儲管理的兩個算法最佳淘汰算法和最近

28、最少使用頁淘汰算法有了更深入的了解,為之后的學習奠定了基礎。計算機操作系統實驗四報告實驗四 題目 : 文件操作與管理姓名 : 張佳慧 學號 :12122544 實驗日期 : 2015.1實驗環境 : Microsoft Visual Studio實驗目的 :隨著社會信息量的極大增長, 要求計算機處理的信息與日俱增, 涉及到社會生活的各個方面。因此,文件管理是操作系統的一個極為重要的組成部分。學生應獨立地用高級語言編寫和調試一個簡單的文件系統, 模擬文件管理的工作過程。 從而對各種文件操作命令的實質內容和執行過程有比較深入的了解,掌握它們的實施方法,加深理解課堂上講授過的知識。實驗內容:1.要求

29、:(1)實際一個 n 個用戶的文件系統,每個用戶最多可保存 m 個文件。(2)限制用戶在一次運行中只能打開 l 個文件。(3)系統應能檢查打入命令的正確性,出錯要能顯示出錯原因。(4)對文件必須設置保護措施,如只能執行,允許讀、允許寫等。在每次打開文件時根據本次打開的要求,再次設置保護級別,即可有二級保護。(5)對文件的操作至少應有下述幾條命令:creat 建立文件。delete 刪除文件。open 打開文件。close 關閉文件。read 讀文件。write 寫文件。2.示例:(1)程序采用二級文件目錄,即設置了主文件目錄(MFD)和用戶文件目錄(UFD) 。前者應包含文件主(即用戶)及他們

30、的目錄區指針;后者應給出每個文件主占有的文件目錄,即文件名,保護碼,文件長度以及他們存放的位置等。另外為打開文件設置了運行文件目錄(AFD) ,在文件打開時應填入打開文件號,本次打開保護碼和讀寫指針等。3.算法與框圖(1)因系統小,文件目錄的檢索使用了簡單的線性搜索,而沒有采用 Hash 等有效算法。(2)文件保護簡單實用了三位保護碼,對應于允許讀、允許寫和運行執行,如下所示: 1 1 1允許寫 允許讀 允許執行如對應位為 0,則不允許。實驗源碼:#include <iostream>#include <cstdlib>#include <algorithm>

31、;#include <ctime>#include <cstring>#include <cstdio>#include <cmath>using namespace std;struct UFD int fname; int len; int procode3;ufd10;struct MFD int user; UFD p5;mfd10;int main() int x,n=10,flag1=1,flag2=1,flag3=1; if(flag1) for(int i=0;i<10;i+) ufdi.fname=i; int t=100

32、+rand()%900; ufdi.len=t; for(int j=0;j<3;j+) codej=rand()%2; srand(unsigned)time(NULL); bool f10; for(int i=0;i<10;i+) mfdi.user=i; memset(f,0,sizeof f); for(int j=0;j<5;j+) int t; do t=rand()%10; while(ft); ft=1; mfdi.pj=ufdt; while(n-&&flag2) cout<<"input user:&

33、quot;<<endl; cin>>x; if(x<0|x>=10) cout<<"try again"<<endl; break; for(int j=0;j<5;j+) cout<<mfdx.pj.fname<<" "<<mfdx.pj.len<<" "<<code0<<code1<<code2<<endl

34、; cout<<"input the command:"<<endl; cout<<"creat 1; delete 2; open 3; bye 4; close 5; read 6; write 7"<<endl; int s,index,flag=1; while(flag) cin>>s; switch(s) case 1: if(flag3) cout<<"輸入你要創建的文件的名字:"<<endl; cin>>mfdx.p0.fn

35、ame; cout<<"輸入你要創建的文件的長度:"<<endl; cin>>mfdx.p0.len; cout<<"輸入你要創建的文件的權限:"<<endl; for(int i=0;i<3;i+) cin>>codei; for(int j=0;j<5;j+) cout<<mfdx.pj.fname<<" "<<mfdx.pj.len<<" "<<

36、code0<<code1<<code2<<endl; cout<<"input the command:"<<endl; else cout<<"輸入你要創建的文件的名字:"<<endl; cin>>mfdx.pindex.fname; cout<<"輸入你要創建的文件的長度:"<<endl; cin>>mfdx.pindex.len; c

37、out<<"輸入你要創建的文件的權限:"<<endl; for(int i=0;i<3;i+) cin>>codei; for(int j=0;j<5;j+) cout<<mfdx.pj.fname<<" "<<mfdx.pj.len<<" "<<code0<<code1<<code2<<endl;

38、 cout<<"input the command:"<<endl; break; case 2: flag3=0; cout<<"輸入要刪除的文件:"<<endl; int t; cin>>t; for(int i=0;i<5;i+) if(mfdx.pi.fname=t) index=i; mfdx.pi.fname=0; mfdx.pi.len=000; memset(code,0,sizeof(code); for(int j=0;j&l

39、t;5;j+) cout<<mfdx.pj.fname<<""<<mfdx.pj.len<<" "<<code0<<code1<<code2<<endl; cout<<"input the command:"<<endl; break; case 3: cout<<"輸入要打開的文件:"<<endl; int

40、 file; cin>>file; for(int i=0;i<5;i+) if(mfdx.pi.fname=file) if(code2=0) cout<<"你沒有權限"<<endl; else cout<<"可以打開"<<endl; cout<<"input the command:"<<endl; break; case 4: for(int j=0;j<5;j+) cout<<mfdx.pj.fna

41、me<<""<<mfdx.pj.len<<" "<<code0<<code1<<code2<<endl; cout<<"goodbye"<<endl; flag=0; flag2=0; flag1=0; break; case 5: flag=0; flag1=0; break; case 6: cout<<"輸入要讀的文件:"&l

42、t;<endl; int file1; cin>>file1; for(int i=0;i<5;i+) if(mfdx.pi.fname=file1) if(code1=0) cout<<"你沒有權限"<<endl; else cout<<"可以讀"<<endl; cout<<"input the command:"<<endl; break; case 7: cout<<"輸入要寫的文件:&qu

43、ot;<<endl; int file2; cin>>file2; for(int i=0;i<5;i+) if(mfdx.pi.fname=file2) if(code0=0) cout<<"你沒有權限"<<endl; else cout<<"可以寫"<<endl; cout<<"input the command:"<<endl; break; return 0;實驗結果:實驗體會:本次實驗主要是模擬了一下文

44、件系統, 文件是我們平時接觸最多也是最廣的形式, 即便是不會計算機的人們也可以通過這種操作文件來很方便地完成操作, 而本次實驗讓我了解到了文件系統的內部實現,雖然僅僅是通過 C+模擬的,但還是讓我對它的原理有了更好的理解,也是對我們上課的內容的一個鞏固。計算機操作系統實驗六報告實驗六 題目 : FAT 文件系統實驗姓名 : 張佳慧 學號 :12122544 實驗日期 : 2015.1實驗環境 : win95 虛擬機實驗目的 :從系統分析的角度出發,了解 FAT 文件系統的組織結構和文件的存儲方式。進一步理解操作系統文件管理的基本思想。實驗內容 :1.了解 3 吋軟盤的 FAT 文件系統結構。2

45、.察看文件分配表的簇號鏈。3.察看文件目錄表中文件目錄結構。4.了解用簇號鏈映射的文件鏈式存儲結構。5.分析目錄文件的組成。實驗步驟 :1. 進入 DEBUG 環境,裝入 FAT 文件系統結構。執行命令:L 0 0 0 21說明:將 0 號驅動器中,邏輯扇區號從 0 開始的共 21H 個扇區讀入內存,放在 DS:0000 為起始的地址中。2觀察 1.44M 軟盤中 FAT12 文件系統結構。執行命令:D 0000連續執行 D 命令,每次顯示 128 個字節,可見文件系統結構。FAT 文件系統結構如下:邏輯扇區號其中:Boot 引導程序FAT 文件分配表FDT 文件目錄表1.44M 軟盤邏輯扇號

46、與物理扇區的對應關系邏輯扇號 0 # 0 道 0 面 1 扇邏輯扇號 1 H 11H 0 道 0 面 2 18 扇邏輯扇號 12 H 23H 0 道 1 面 1 扇18 扇邏輯扇號 24 H 35H 1 道 0 面 1 扇18 扇軟盤有兩面,每面 80 個磁道,每個磁道 18 個扇區,每個扇區 512 個字節,所以軟盤的容量是 2*80*18*512 = 1474560, 1474560/1024/1024 大約為 1.44M。3分析文件分配表結構,了解用簇鏈映射的文件的鏈式存儲結構。執行命令:D 200思考: 上面屏幕顯示首簇號為 003 的文件共包括幾個扇區?它分布在哪幾個物理扇區上?答:

47、首簇號為 003 的文件共包括 2 個扇區,它分布在 0 道 0 面 2、3 扇。4觀察 1.44M 軟盤中文件目錄表 FDT 以及文件目錄結構執行命令:L 0 0 0 21說明:將邏輯扇區 0H 開始的共 21H 個物理扇區裝入 DS:0000H 起始的內存。執行命令:D 2600說明:顯示從 2600H 地址開始的 FDT 文件表。思考:計算 1.44M 的軟盤根目錄最多可以容納多少文件?答: 1.44MB軟盤的文件目錄表FDT共14個扇區, 每個文件的目錄登記項占用 32個字節,用作目錄的一個扇區(512 字節)最多只能裝入 512/32=16 個文件。因此,1.44MB 軟盤的根目錄下

48、最多可建文件或子目錄 224 個。上圖屏幕顯示的文件的目錄項中標示該文件的首簇號在何處?該文件是什么屬性?答:首簇號在第 2 行的 1A1B 字節處,首簇號為 002,該文件屬于歸檔文件。書上顯示的文件首簇號在第 6 行的 1A1B 字節處,首簇號為 091,屬歸檔文件。書上面的屏幕顯示第 12 行目錄項表示的是什么項目?答:第 12 目錄項表示卷標。5觀察 1.44M 軟盤中文件目錄表的長文件名目錄結構思考:書上面屏幕顯示的 23 行是什么目錄項?答:長名的第一項,也是最后一項。若有一個文件名共長 34 個字符,要占多少目錄項?答:四個目錄項,三個長目錄項和一個短目錄項。6自己動手做:觀察測試軟盤的 FDT 區,找到名為 BAK 的文件目錄。該文件是什么類型的文件?文件放在磁盤的哪個位置?占用幾個存儲單位?調出其內容看看。該文件為

溫馨提示

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

評論

0/150

提交評論