linux操作系統(tǒng)課程設計—時間片法和優(yōu)先數法_第1頁
已閱讀1頁,還剩17頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  《操作系統(tǒng)原理》</b></p><p><b>  課程設計報告</b></p><p>  二〇一一年十二月十二日</p><p><b>  目錄</b></p><p>  一、《操作系統(tǒng)原理》課程設計的目的與要求3</p>

2、<p><b>  1、目的3</b></p><p><b>  2、要求3</b></p><p>  二、簡述課程設計內容、主要功能和實現環(huán)境3</p><p>  1.課程設計內容3</p><p>  三、任務的分析、設計、實現和討論3</p>

3、<p>  1、任務的分析3</p><p>  2、任務的設計與實現5</p><p><b>  五、附錄11</b></p><p>  進程調度—優(yōu)先數法與簡單輪轉法</p><p>  《操作系統(tǒng)原理》課程設計的目的與要求</p><p><b>  

4、目的</b></p><p>  進程是操作系統(tǒng)最重要的概念之一,進程調度又是操作系統(tǒng)核心的主要內容。本實習要求學生獨立地用高級語言編寫和調試一個簡單的進程調度程序。調度算法可任意選擇或自行設計。任務一采用簡單輪轉法,任務二采用優(yōu)先數法等。本課題可以加深對進程調度和各種調度算法的理解。</p><p><b>  要求</b></p><

5、;p>  設計一個有n個進程并發(fā)的進程調度程序。每個進程由一個進程控制塊(PCB)表示。進程控制塊一般應該包含下述信息:進程名、進程優(yōu)先數、進程需要運行的時間、占用CPU的時間以及進程的狀態(tài)等,且可按調度算法的不同而增刪。</p><p>  調度程序應包含2種不同的調度算法,運行時可任意選一種,以利于各種算法的分析比較。</p><p>  算法應能顯示或打印各個進程的PID、狀態(tài)

6、(運行狀態(tài)R、等待狀態(tài)W等)和參數(已運行時間等)的變化情況,便于觀察諸進程的調度過程</p><p>  進程是操作系統(tǒng)最重要的概念之一,進程調度又是操作系統(tǒng)核心的主要內容。本實習要求學生獨立地用高級語言編寫和調試一個簡單的進程調度程序。調度算法可任意選擇或自行設計。任務一采用簡單輪轉法,任務二采用優(yōu)先數法等。本課題可以加深對進程調度和各種調度算法的理解。</p><p>  簡述課程設

7、計內容、主要功能和實現環(huán)境</p><p><b>  課程設計內容 </b></p><p>  進程調度是處理機管理的核心內容。本實驗要求用C語言編寫和調試一個簡單的進程調度程序。選用優(yōu)先數法或簡單輪轉法對五個進程進行調度。每個進程處于運行R(run)、就緒W(wait)和完成F(finish)三種狀態(tài)之一,并假設起始狀態(tài)都是就緒狀態(tài)W。為了便于處理,程序進程的運

8、行時間以時間片為單位計算。各進程的優(yōu)先數或輪轉時間片數、以及進程需要運行的時間片數,均由偽隨機數發(fā)生器產生。通過本實驗可以加深理解有關進程控制塊、進程隊列的概念,并體會和了解優(yōu)先數和時間片輪轉調度算法的具體實施辦法。</p><p><b>  主要功能</b></p><p>  本程序可選用優(yōu)先數法或簡單輪轉法對五個進程進行調度。每個進程處于運行R(run)、就緒

9、W(wait)和完成F(finish)三種狀態(tài)之一,并假設起始狀態(tài)都是就緒狀態(tài)W。為了便于處理,程序進程的運行時間以時間片為單位計算。</p><p><b>  實現環(huán)境</b></p><p>  本次課程設計結合算法的特點,采用Windows操作系統(tǒng)平臺。開發(fā)工具為Microsoft Visual C++6.0。</p><p>  任務

10、的分析、設計、實現和討論</p><p><b>  任務的分析</b></p><p>  本程序可選用優(yōu)先數法或簡單輪轉法對五個進程進行調度。每個進程處于運行R(run)、就緒W(wait)和完成F(finish)三種狀態(tài)之一,并假設起始狀態(tài)都是就緒狀態(tài)W。為了便于處理,程序進程的運行時間以時間片為單位計算。各進程的優(yōu)先數或輪轉時間片數、以及進程需要運行的時間片數

11、,均由偽隨機數發(fā)生器產生。</p><p>  下面介紹優(yōu)先數法和簡單輪轉法兩種進程調度算法:</p><p>  優(yōu)先數法。進程就緒鏈按優(yōu)先數大小從高到低排列,鏈首進程首先投入運行。每過一個時間片,運行進程所需運行的時間片數減1,說明它已運行了一個時間片,優(yōu)先數也減3,理由是該進程如果在一個時間片中完成不了,優(yōu)先級應該降低一級。接著比較現行進程和就緒鏈鏈首進程的優(yōu)先數,如果仍是現行進程高

12、或者相同,就讓現行進程繼續(xù)進行,否則,調度就緒鏈鏈首進程投入運行。原運行進程再按其優(yōu)先數大小插入就緒鏈,且改變它們對應的進程狀態(tài),直至所有進程都運行完各自的時間片數。</p><p>  簡單輪轉法。進程就緒鏈按各進程進入的先后次序排列,進程每次占用處理機的輪轉時間按其重要程度登入進程控制塊中的輪轉時間片數記錄項(相當于優(yōu)先數法的優(yōu)先數記錄項位置)。每過一個時間片,運行進程占用處理機的時間片數加1,然后比較占用處

13、理機的時間片數是否與該進程的輪轉時間片數相等,若相等說明已到達輪轉時間,應將現運行進程排到就緒鏈末尾,調度鏈首進程占用處理機,且改變它們的進程狀態(tài),直至所有進程完成各自的時間片。</p><p>  進程控制塊結構如下:</p><p>  進程控制塊鏈結構如下:</p><p>  其中:RUN—當前運行進程指針;</p><p>  HE

14、AD—進程就緒鏈鏈首指針;</p><p>  TAID—進程就緒鏈鏈尾指針。</p><p><b>  任務的設計與實現</b></p><p><b>  算法流程圖:</b></p><p><b>  操作過程和結果分析</b></p><p>

15、;  優(yōu)先數調度算法測試數據:</p><p>  優(yōu)先數調度算法程序運行結果截圖:</p><p><b>  圖1.1 結果截圖</b></p><p><b>  圖1.2 結果截圖</b></p><p>  簡單輪轉調度算法測試數據:</p><p>  簡單輪轉調

16、度算法程序運行結果截圖:</p><p><b>  圖2.1 結果截圖</b></p><p><b>  圖2.2 結果截圖</b></p><p><b>  圖2.3 結果截圖</b></p><p><b>  思考題的解答和討論</b><

17、/p><p>  通過以上的調度算法測試數據,得出以下不同算法的不同調度性能結果:</p><p>  《操作系統(tǒng)》課程設計小結</p><p>  當我在回首這一個星期的時候,不因虛度光陰而悔恨,也不因碌碌無為而羞恥。我想,這可能是我一學期中最豐富而有意義的一個星期了。</p><p>  從大一開始我的理論知識就比實踐知識好的多,每門課都如此

18、,實訓是我最頭疼的一件事。課本上記得很牢的東西到了實際操作的時候感覺都用不上,做個實驗就手忙腳亂的。所以我感覺,這個星期的課設不僅學到了在理論課上學不到的知識,更是讓我對自己的實踐操作有了信心。</p><p>  本次課程設計的題目之一是進程調度——優(yōu)先數法與簡單輪轉法。在多任務系統(tǒng)中,進程調度是CPU管理的一項核心工作。根據調度模式的不同,多任務系統(tǒng)有兩種類型,即非搶占式和搶占式。其中,優(yōu)先數法是非搶占式調度

19、策略,而簡單輪轉法是搶占式調度策略。進程調度算法是系統(tǒng)效率的關鍵,它確定了系統(tǒng)對資源,特別是對CPU資源的分配策略,因而直接決定著系統(tǒng)最本質的性能指標,如相應速度和吞吐量等。常用的調度算法有:先進先出法,短進程優(yōu)先法,時間片輪轉法(時間片輪轉法還分為可變時間片輪轉法和簡單循環(huán)輪轉法),優(yōu)先級調度法。簡單循環(huán)輪轉法中的時間片q是一個十分重要的因素,它的計算公式為q=t/n。q的選擇對進程調度有很大的影響。q取的太大,輪轉法就會退化成先進先

20、出算法;而取的太小,則會導致系統(tǒng)開銷增加,將時間浪費在進程切換上。所以q必須取值適中,使就緒隊列中的所有進程都能得到同樣的服務。但我們這次的實驗中暫時還沒有考慮到時間片q對算法的影響,只是測試了這個調度策略的算法。</p><p>  這次我們的實驗測試并比較了簡單輪轉法和優(yōu)先數法這兩種調度策略的性能。不同的算法有它自己不同的長處,簡單輪轉法雖然能夠使每個進程可以以相等的速度向前進展,但對于緊急進程的處理就顯然不

21、及優(yōu)先數法??墒莾?yōu)先數法的開銷較高,而且可能對于較短而且優(yōu)先級低的進程會花較長的時間等待。不過它還是具有良好的均衡性。實際應用中,經常是多種策略結合使用。如時間片輪轉法中也可以適當考慮優(yōu)先級因素,對于緊急的進程可以分配一個長一點的時間片,或連續(xù)運行多個時間片等。這樣取長補短,合理利用各種不同算法的優(yōu)勢,讓CPU的運行效率大大提高。</p><p>  人們總是在尋找更好的解決方案,讓算法的性能和開銷得到一個相對較

22、好的平衡。我在尋找這樣的一個解決方案時,同學對我說雖然老師沒有在課上講過這個策略,但其實書上有關于更好的調度策略。也就是多級反饋隊列調度。這種算法可以先用較小的時間片處理完那些用時較短的進程,而給那些用時較長的進程分配較大的時間片,以免較長的進程頻繁被中斷而影響處理機的效率。這也就是上面所提到的“多種策略結合使用,如時間片輪轉法中也可以適當考慮優(yōu)先級因素”。 </p><p>  溫故而知新,可以為師矣。這次編

23、程中所用到的C語言正是我們大一就學過的計算機語言。在平時的學習中和實訓中我們總能用到它。這樣反復的運用和考核,讓我對C語言的認識更進了一步。</p><p>  路漫漫其修遠兮,吾將上下而求索。我們對操作系統(tǒng)的學習還有很長的路要走,死鎖只是其中的一小部分。重要的是,我在實訓的這種里學到了這樣的一種精神,一種知難而上,相信努力和付出能夠帶來好的結果的精神。這種精神比刻板的知識點更加重要,能夠指引我走向更寬闊的明天。

24、</p><p><b>  附錄</b></p><p>  #include "stdio.h"</p><p>  #include "stdlib.h"</p><p>  #include "string.h"</p><p>

25、  typedef struct node</p><p><b>  {</b></p><p>  char name[10]; /*進程標識符*/</p><p>  int prio; /*進程優(yōu)先數*/</p><p>  int round; /*進程時間輪轉時間片*/</p><

26、p>  int cputime; /*進程占用CPU時間*/</p><p>  int needtime; /*進程到完成還要的時間*/</p><p>  int count; /*計數器*/</p><p>  char state; /*進程的狀態(tài)*/</p><p>  struct node *next; /*鏈指針*/&

27、lt;/p><p><b>  }PCB;</b></p><p>  PCB *finish,*ready=NULL,*tail,*run,*pfcfs,*pfcfs1; /*隊列指針*/</p><p>  int N; /*進程數*/</p><p>  /*將就緒隊列中的第一個進程投入運行*/</p>

28、<p>  void firstin()</p><p><b>  {</b></p><p>  run=ready; /*就緒隊列頭指針賦值給運行頭指針*/</p><p>  run->state='R'; /*進程狀態(tài)變?yōu)檫\行態(tài)*/</p><p>  ready=rea

29、dy->next; /*就緒對列頭指針后移到下一進程*/</p><p><b>  }</b></p><p>  /*標題輸出函數*/</p><p>  void prt1(char a)</p><p><b>  {</b></p><p>  if(tou

30、pper(a)=='P') /*優(yōu)先數法*/</p><p>  printf(" name cputime needtime priority state\n");</p><p>  else if(toupper(a)=='R')</p><p>  printf(" name

31、 cputime needtime count round state\n");</p><p><b>  }</b></p><p>  /*進程PCB輸出*/</p><p>  void prt2(char a,PCB *q)</p><p><b>  {</b&

32、gt;</p><p>  if(toupper(a)=='P') /*優(yōu)先數法的輸出*/</p><p>  printf("%-10s%-10d%-10d%-10d%c\n",q->name,q->cputime,q->needtime,q->prio,q->state);</p><p>  

33、else if(toupper(a)=='R')/*輪轉法的輸出*/</p><p>  printf("%-10s%-10d%-10d%-10d%-10d%-c\n",q->name,q->cputime,q->needtime,q->count,q->round,q->state);</p><p><b&g

34、t;  }</b></p><p><b>  /*輸出函數*/</b></p><p>  void prt(char algo)</p><p><b>  {</b></p><p><b>  PCB *p;</b></p><p>

35、  prt1(algo); /*輸出標題*/</p><p>  if(run!=NULL) /*如果運行指針不空*/</p><p>  prt2(algo,run); /*輸出當前正在運行的PCB*/</p><p>  p=ready; /*輸出就緒隊列PCB*/</p><p>  while(p!=NULL)</p>

36、<p><b>  {</b></p><p>  prt2(algo,p);</p><p>  p=p->next;</p><p><b>  }</b></p><p>  p=finish; /*輸出完成隊列的PCB*/</p><p>  w

37、hile(p!=NULL)</p><p><b>  {</b></p><p>  prt2(algo,p);</p><p>  p=p->next;</p><p><b>  }</b></p><p>  getchar(); /*壓任意鍵繼續(xù)*/<

38、/p><p><b>  }</b></p><p>  /*優(yōu)先數的插入算法*/</p><p>  void insert1(PCB *q)</p><p><b>  {</b></p><p>  PCB *p1,*s,*r;</p><p>&l

39、t;b>  int b;</b></p><p>  s=q; /*待插入的PCB指針*/</p><p>  p1=ready; /*就緒隊列頭指針*/</p><p>  r=p1; /*r做p1的前驅指針*/</p><p><b>  b=1;</b></p><p>

40、  while((p1!=NULL)&&b) /*根據優(yōu)先數確定插入位置*/</p><p>  if(p1->prio>=s->prio)</p><p><b>  {</b></p><p><b>  r=p1;</b></p><p>  p1=p1-&

41、gt;next;</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  b=0;</b></p><p>  if(r!=p1) /*如果條件成立說明插入在r與p1之間*/</p><p>&

42、lt;b>  {</b></p><p>  r->next=s;</p><p>  s->next=p1;</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {<

43、/b></p><p>  s->next=p1; /*否則插入在就緒隊列的頭*/</p><p><b>  ready=s;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  /

44、*輪轉法插入函數*/</p><p>  void insert2(PCB *p2)</p><p><b>  {</b></p><p>  tail->next=p2; /*將新的PCB插入在當前就緒隊列的尾*/</p><p><b>  tail=p2;</b></p>

45、<p>  p2->next=NULL;</p><p><b>  }</b></p><p>  void insert3()/*先來先服務*/</p><p><b>  {</b></p><p>  if (ready==NULL)</p><p&g

46、t;  { ready=pfcfs;</p><p>  ready->next=NULL;</p><p>  pfcfs1=pfcfs;</p><p><b>  }</b></p><p><b>  else</b></p><p>  {pfcfs1->

47、;next=pfcfs;</p><p>  pfcfs1=pfcfs1->next;</p><p><b>  }</b></p><p><b>  }</b></p><p>  /*優(yōu)先數創(chuàng)建初始PCB信息*/</p><p>  void create1(c

48、har alg)</p><p><b>  {</b></p><p><b>  PCB *p;</b></p><p>  int i,time;</p><p>  char na[10];</p><p>  ready=NULL; /*就緒隊列頭指針*/</

49、p><p>  finish=NULL; /*完成隊列頭指針*/</p><p>  run=NULL; /*運行隊列指針*/</p><p>  for(i=1;i<=N;i++)</p><p><b>  {</b></p><p>  p=(struct node*)malloc(si

50、zeof(PCB));</p><p>  printf("請輸入進程名稱%d\n",i);</p><p>  scanf("%s",na);</p><p>  printf("請輸入進程運行時間\n");</p><p>  scanf("%d",&

51、time);</p><p>  strcpy(p->name,na);</p><p>  p->cputime=0;</p><p>  p->needtime=time;</p><p>  p->state='w';</p><p>  p->prio=50-tim

52、e;</p><p>  if(ready!=NULL) /*就緒隊列不空調用插入函數插入*/</p><p>  insert1(p);</p><p><b>  else</b></p><p><b>  {</b></p><p>  p->next=read

53、y; /*創(chuàng)建就緒隊列的第一個PCB*/</p><p><b>  ready=p;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  printf(" 最高優(yōu)先級進程調度模擬:\n&quo

54、t;);</p><p>  printf("************************************************\n");</p><p>  prt(alg); /*輸出進程PCB信息*/</p><p>  printf("***************************************

55、*********\n");</p><p>  run=ready; /*將就緒隊列的第一個進程投入運行*/</p><p>  ready=ready->next;</p><p>  run->state='R';}</p><p>  /*輪轉法創(chuàng)建進程PCB*/</p><p

56、>  void create2(char alg)</p><p><b>  {</b></p><p><b>  PCB *p;</b></p><p>  int i,time;</p><p>  char na[10];</p><p>  ready=NU

57、LL;</p><p>  finish=NULL;</p><p><b>  run=NULL;</b></p><p>  for(i=1;i<=N;i++)</p><p><b>  {</b></p><p>  p=(struct node *)mallo

58、c(sizeof(PCB));</p><p>  printf("請輸入進程名稱%d\n",i);</p><p>  scanf("%s",na);</p><p>  printf("請輸入進程運行時間\n");</p><p>  scanf("%d",&

59、amp;time);</p><p>  strcpy(p->name,na);</p><p>  p->cputime=0;</p><p>  p->needtime=time;</p><p>  p->count=0; /*計數器*/</p><p>  p->state=

60、9;w';</p><p>  p->round=2; /*時間片*/</p><p>  if(ready!=NULL)</p><p>  insert2(p);</p><p><b>  else</b></p><p><b>  {</b><

61、/p><p>  p->next=ready;</p><p><b>  ready=p;</b></p><p><b>  tail=p;</b></p><p><b>  }</b></p><p><b>  }</b>

62、;</p><p>  printf(" 時間輪轉法進程調度模擬\n");</p><p>  printf("************************************************\n");</p><p>  prt(alg); /*輸出進程PCB信息*/</p

63、><p>  printf("************************************************\n");</p><p>  run=ready; /*將就緒隊列的第一個進程投入運行*/</p><p>  ready=ready->next;</p><p>  run->sta

64、te='R';</p><p><b>  }</b></p><p>  /*優(yōu)先數調度算法*/</p><p>  void priority(char alg)</p><p><b>  {</b></p><p>  while(run!=NULL)

65、 /*當運行隊列不空時,有進程正在運行*/</p><p><b>  {</b></p><p>  run->cputime=run->cputime+1;</p><p>  run->needtime=run->needtime-1;</p><p>  run->prio=run

66、->prio-3; /*每運行一次優(yōu)先數降低3個單位*/</p><p>  if(run->needtime==0) /*如所需時間為0將其插入完成隊列*/</p><p><b>  {</b></p><p>  run->next=finish;</p><p>  finish=run;&l

67、t;/p><p>  run->state='F'; /*置狀態(tài)為完成態(tài)*/</p><p>  run=NULL; /*運行隊列頭指針為空*/</p><p>  if(ready!=NULL) /*如就緒隊列不空*/</p><p>  firstin(); /*將就緒對列的第一個進程投入運行*/</p>

68、<p><b>  }</b></p><p>  else /*沒有運行完同時優(yōu)先數不是最大,則將其變?yōu)榫途w態(tài)插入到就緒列*/</p><p>  if((ready!=NULL)&&(run->prio<ready->prio))</p><p><b>  {</b>&

69、lt;/p><p>  run->state='W';</p><p>  insert1(run);</p><p>  firstin(); /*將就緒隊列的第一個進程投入運行*/</p><p><b>  }</b></p><p>  prt(alg); /*輸出進程P

70、CB信息*/</p><p><b>  }</b></p><p><b>  }</b></p><p>  /*時間片輪轉法*/</p><p>  void roundrun(char alg)</p><p><b>  {</b></p

71、><p>  while(run!=NULL)</p><p><b>  {</b></p><p>  run->cputime=run->cputime+1;</p><p>  run->needtime=run->needtime-1;</p><p>  run-&

72、gt;count=run->count+1;</p><p>  if(run->needtime==0)/*運行完將其變?yōu)橥瓿蓱B(tài),插入完成隊列*/</p><p><b>  {</b></p><p>  run->next=finish;</p><p>  finish=run;</p&g

73、t;<p>  run->state='F';</p><p><b>  run=NULL;</b></p><p>  if(ready!=NULL)</p><p>  firstin(); /*就緒對列不空,將第一個進程投入運行*/</p><p><b>  }&l

74、t;/b></p><p><b>  else</b></p><p>  if(run->count==run->round) /*如果時間片到*/</p><p><b>  {</b></p><p>  run->count=0; /*計數器置0*/</p

75、><p>  if(ready!=NULL) /*如就緒隊列不空*/</p><p><b>  {</b></p><p>  run->state='W'; /*將進程插入到就緒隊列中等待輪轉*/</p><p>  insert2(run);</p><p>  first

76、in(); /*將就緒對列的第一個進程投入運行*/</p><p><b>  }</b></p><p><b>  }</b></p><p>  prt(alg); /*輸出進程信息*/</p><p><b>  }</b></p><p>&l

77、t;b>  }</b></p><p>  int check_char(char algo)/*判斷輸入的字符是否有效*/</p><p>  {if (algo=='F'||algo=='f'||algo=='R'||algo=='r'||algo=='P'||algo=='p&#

78、39;)</p><p><b>  return 1;</b></p><p><b>  else</b></p><p><b>  return 0;</b></p><p><b>  }</b></p><p><

79、b>  /*主函數*/</b></p><p>  void main()</p><p><b>  {</b></p><p>  char algo; /*算法標記*/</p><p>  int len,h=0;</p><p>  char ch/*接收換行字符*/;

80、</p><p>  printf("\n***********請選擇要模擬的算法***************\n\n");</p><p>  printf("1.最高優(yōu)先數進程調度算法模擬(P/p)\n");</p><p>  printf("2.時間輪轉法進程調度算法模擬(R/r)\n");<

81、;/p><p>  printf("請輸入相應字符選擇\n\n");</p><p>  scanf("%c",&algo); /*輸入字符確定算法*/</p><p>  if(check_char(algo))/*判斷輸入的字符是否合法*/</p><p><b>  {</b&

82、gt;</p><p>  printf("請輸入進程調度個數\n");</p><p>  scanf("%d",&N); /*輸入進程數*/</p><p>  if(algo=='P'||algo=='p')</p><p><b>  {<

83、/b></p><p>  create1(algo); /*優(yōu)先數法*/</p><p>  priority(algo);</p><p>  printf("\n\n 進程已經完成.\n");</p><p><b>  }</b></p><p><b>

84、;  else</b></p><p>  if(algo=='R'||algo=='r')</p><p><b>  {</b></p><p>  create2(algo); /*輪轉法*/</p><p>  roundrun(algo);</p>&l

85、t;p>  printf("\n\n 進程已經完成.\n");</p><p><b>  }</b></p><p><b>  }</b></p><p>  else if(!check_char(algo)) printf("你輸入的字符有誤,請重新運行程序!!");&

溫馨提示

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

評論

0/150

提交評論