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

下載本文檔

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

文檔簡介

1、 操作系統(tǒng)實驗報告 學(xué)生學(xué)院 計算機學(xué)院 專業(yè)班級 12級網(wǎng)絡(luò)1班 學(xué) 號 3112006345 學(xué)生姓名 沙宇豐 指導(dǎo)教師 李敏 2015 年 01月 07日目錄1 實驗一 進程調(diào)度2 實驗二 作業(yè)調(diào)度3 實驗三 存儲管理 實驗一 進程調(diào)度(實現(xiàn)了最高優(yōu)先級優(yōu)先,時間片輪轉(zhuǎn),多級反饋隊列三種算法 )1、 實驗?zāi)康?編寫并調(diào)試一個模擬的進程調(diào)度程序,采用最高優(yōu)先數(shù)優(yōu)先算法,時間片輪轉(zhuǎn)算法,多級反饋隊列算法對進程進行調(diào)度。以加深對進程的概念及進程調(diào)度算法的理解 2:實驗原理每個進程有一個進程控制塊( PCB)表示。進程控制塊可以包含如下信息:進程名、到達時間、需要運行時間、已運行時間、進程狀態(tài)等

2、等。 每個進程的狀態(tài)可以是就緒 W(Wait)、運行R(Run)兩種狀態(tài)之一。 就緒進程獲得 CPU后都只能運行一個時間片。用運行時間加1來表示。 如果運行一個時間片后,進程的已占用 CPU時間已達到所需要的運行時間,則撤消該進程,如果運行一個時間片后進程的已占用CPU時間還未達所需要的運行時間,也就是進程需要繼續(xù)運行,此時應(yīng)分配時間片給就緒隊列中排在該進程之后的進程,并將它插入就緒隊列隊尾。 3:實驗內(nèi)容,方法首先對于:最高優(yōu)先數(shù)算法: 最高優(yōu)先數(shù)算法的基本思想是把cpu分配給就緒隊列中優(yōu)先數(shù)最高的進程。而我采用優(yōu)先數(shù)動態(tài)變化的方式,進程在沒獲得一次cpu時間后其優(yōu)先數(shù)就減一,然后對各個進程

3、的優(yōu)先數(shù)進行重新排序。繼續(xù)把cpu分配給優(yōu)先數(shù)最高的進程。進程的剩余時間為0時就退出隊列。首先用create()函數(shù)創(chuàng)建鏈表并對其初始化,然后對鏈表按照優(yōu)先級大小進行排序,然后把排序后的鏈表放進processing()函數(shù)中進行處理,讓其占有一個時間片執(zhí)行,若進程任然未完成,則把該進程放進insert()函數(shù)中插入就緒隊列中。用disp()函數(shù)進行進程的顯示。4:流程圖:5:重要函數(shù)和數(shù)據(jù)結(jié)構(gòu)的說明:Struct PCB對進程結(jié)構(gòu)體進行定義Create()函數(shù)進行鏈表的初始化Processing()函數(shù)對整個鏈表的循環(huán)進行處理Sort()函數(shù)對優(yōu)先級進行動態(tài)排序:Disp()函數(shù)對結(jié)果進行顯示

4、struct PCB *sort(struct PCB *head)/*遞增排序函數(shù):入口參數(shù):鏈表的頭指針,此為鏈表中的排序函數(shù)*/struct PCB *p,*q;int temp;for(p=head;p!=NULL;p=p->next)for(q=p->next;q!=NULL;q=q->next)if(p->prio<q->prio) /通過對鏈表里面的數(shù)據(jù)進行互換達到重新排序temp=q->prio;q->prio=p->prio;p->prio=temp;temp=q->name;q->name=p->

5、name;p->name=temp;temp=q->run;q->run=p->run;p->run=temp;temp=q->rest;q->rest=p->rest;p->rest=temp;return head; 5:實驗效果::6:實驗總結(jié): 對于最高優(yōu)先數(shù)優(yōu)先的算法,在設(shè)計好進程控制塊鏈表后,就要對優(yōu)先級進行排序,優(yōu)先數(shù)動態(tài)變化和鏈表的循環(huán)是比較花時間處理的,如上圖所顯示,優(yōu)先級在進程每執(zhí)行一個時間片后減一,實現(xiàn)動態(tài)變化,開始在這兩部分總是出問題,經(jīng)過耐心的處理還是把問題很好的解決了。對于第二個:時間片輪轉(zhuǎn)算法, 3:實驗方法,

6、步驟:基本思想:所有就緒進程按fcfs排成一個隊列,總是把處理機分配給隊首的進程,各進程占用的cpu時間片相同,如果運行進城用完時間片后還未完成,就把它送進就緒隊列的末尾,把處理機重新分配給隊首的集成。直至所有的進程運行完畢。4:流程圖 :4:重要的函數(shù)和數(shù)據(jù)結(jié)構(gòu):Struct PCB對進程結(jié)構(gòu)體進行定義 Create()函數(shù)進行鏈表的初始化 Insert()函數(shù)把未完成的進程插入就緒隊列的末尾 Processing()函數(shù)對鏈表循環(huán)進行處理 Disp()函數(shù)對結(jié)果進行顯示其中insert()函數(shù)對進程插入就緒隊列末尾是比較重要的 void insert(struct PCB *p) stru

7、ct PCB *p1,*p2; p2=p1=p; p2=(struct PCB *)malloc(sizeof(struct PCB); while(p1->next)p1=p1->next; p1->next=p2; p2->state="就緒中" p2->name=p->name; p2->run=p->rest; p2->queue=(p->queue)+1;p2->rest=p->rest; p2->fragement=2; p2->next=NULL; :5: 實驗效果::6:實驗

8、總結(jié):如上圖所示,進程在一個時間片執(zhí)行完后進程,剩余時間為0,退出隊列,進程2在執(zhí)行完一個時間片后仍然未完成,進入就緒隊列末尾,以此類推,直至三個進程都完成,這個時間片輪轉(zhuǎn)算法比較簡單,只需要處理好把未完成的進程插入就緒隊列末尾即可,把已完成的從就緒隊列中釋放。調(diào)試過程中總是會出現(xiàn)bug,但需要我們耐心一個個解決。 第三個:多級隊列反饋算法::3:實驗方法,步驟:其思想是:當(dāng)一個新進程進入內(nèi)存后,首先將它放入第一個隊列的末尾,按fcfs的原則排隊等待,當(dāng)輪到該進程執(zhí)行,如能在該時間片內(nèi)完成,則撤出系統(tǒng),倘若在時間片內(nèi)未完成,則放進第二個隊列的末尾,按同樣的fcfs原則等待執(zhí)行。首先用creat

9、e()函數(shù)創(chuàng)建鏈表并對其初始化,然后把鏈表放進processing()函數(shù)中進行處理,若任然未完成,則把該進程放進insert()函數(shù)中插入下 一隊列。4:流程圖:4:重要的函數(shù)和數(shù)據(jù)結(jié)構(gòu): struct PCB對進程結(jié)構(gòu)體進行定義 Create()函數(shù)進行鏈表的初始化 Insert()函數(shù)把未完成的進程插入下一個就緒隊列的末尾 Processing()函數(shù)對鏈表循環(huán)進行處理 Disp()函數(shù)對結(jié)果進行顯示Insert()函數(shù)把進程插入下一個就緒隊列 void insert(struct PCB *p) struct PCB *p1,*p2; p2=p1=p; p2=(struct PCB *

10、)malloc(sizeof(struct PCB); while(p1->next)p1=p1->next; p1->next=p2; p2->state="就緒中" p2->name=p->name; p2->run=p->rest; p2->queue=(p->queue)+1;p2->rest=p->rest; p2->fragement=2*(p->fragement); p2->next=NULL; void processing(struct PCB *head) /對占

11、有cpu時間的進程進行系列的處理 struct PCB *p1,*p2,*p3; int n=0; p1=head; while(p1) p1->rest=p1->rest-p1->fragement; if(p1->rest<0)p1->rest=0; p1->state="運行中" disp(p1); if(p1->rest=0) printf("ttt進程%d已完成n",p1->name); if(p1->rest>0)insert(p1); p1=p1->next; 5:實驗

12、效果:6:實驗總結(jié): 對于這個多級隊列反饋,我在結(jié)構(gòu)體pcb的定義中增加了一個表示隊列序號的queue來從邏輯上標(biāo)識不同的隊列,:和讓時間片的大小呈指數(shù)增長的變量fragement,如上圖所示,進程1在第一個時間片運行完后任然未完成,則進入第二個就緒隊列,它的時間片大小變?yōu)榱?,使得進入下個隊列的進程能獲得較大的時間片??梢姡嗉壏答侁犃心軌虮容^好的適應(yīng)長作業(yè)和短作業(yè)的需求。 實驗二 作業(yè)調(diào)度 (實現(xiàn)了單道和多道)一:實驗?zāi)康模壕帉懖⒄{(diào)試作業(yè)調(diào)度的模擬程序,了解作業(yè)調(diào)度在操作系統(tǒng)中的作用,以加深對作業(yè)調(diào)度算法的理解。二:實驗內(nèi)容和要求: 1、為單道批處理系統(tǒng)設(shè)計一個作業(yè)調(diào)度程序(1)、編寫并調(diào)

13、試一個單道處理系統(tǒng)的作業(yè)調(diào)度模擬程序。(2)、作業(yè)調(diào)度算法:分別采用先來先服務(wù)(FCFS)、響應(yīng)比高者優(yōu)先(HRN)的調(diào)度算法。 (3)、由于在單道批處理系統(tǒng)中,作業(yè)一投入運行,它就占有計算機的一切資源直到作業(yè)完成為止,因此調(diào)度作業(yè)時不必考慮它所需要的資源是否得到滿足,它所占用的 CPU時限等因素。(4)、每個作業(yè)由一個作業(yè)控制塊JCB表示,JCB可以包含如下信息:作業(yè)名、提交時間、所需的運行時間、所需的資源、作業(yè)狀態(tài)、鏈指針等等。作業(yè)的狀態(tài)可以是等待W(Wait)、運行R(Run)和完成F(Finish)三種狀態(tài)之一。每個作業(yè)的最初狀態(tài)總是等待W。(5)、對每種調(diào)度算法都要求打印每個作業(yè)開始

14、運行時刻、完成時刻、周轉(zhuǎn)時間、帶權(quán)周轉(zhuǎn)時間,以及這組作業(yè)的平均周轉(zhuǎn)時間及帶權(quán)平均周轉(zhuǎn)時間,并比較各種算法的優(yōu)缺點。3、實驗設(shè)計方案及原理1、編寫并調(diào)試一個單道處理系統(tǒng)的作業(yè)等待模擬程序。 已知它們進入系統(tǒng)的時間、估計運行時間。分別采用先來先服務(wù)(FCFS),最短作業(yè)優(yōu)先(SJF)、響應(yīng)比高者優(yōu)先(HRN)的調(diào)度算法,計算出作業(yè)的平均周轉(zhuǎn)時間和帶權(quán)的平均周轉(zhuǎn)時間 。 對每種調(diào)度算法都要求打印每個作業(yè)開始運行時刻、完成時刻、周轉(zhuǎn)時間、帶權(quán)周轉(zhuǎn)時間,以及這組作業(yè)的平均周轉(zhuǎn)時間及帶權(quán)平均周轉(zhuǎn)時間,并比較各種算法的優(yōu)缺點。對于先來先服務(wù)fcfs調(diào)度算法:流程圖:重要的函數(shù)和數(shù)據(jù)結(jié)構(gòu):Struct fcf

15、s 定義結(jié)構(gòu)體Print()函數(shù)對到來的作業(yè)進行初始化并進行顯示Sort()函數(shù)對作業(yè)按照到來的作業(yè)的時間先后進行排序Deal()函數(shù)對先來先服務(wù)原則對作業(yè)進行系列處理Main()函數(shù)進行對各個函數(shù)的串接。定義結(jié)構(gòu)體:struct fcfschar name10;float arrivetime;float servicetime;float starttime;float finishtime;float zztime;float dqzztime;Deal函數(shù)按照fcfs原則處理各個作業(yè),是本程序的重要函數(shù)void deal(fcfs *p,int N) int k; for(k=0;k&

16、lt;=N-1;k+) if(k=0) pk.starttime=pk.arrivetime; pk.finishtime=pk.arrivetime+pk.servicetime; else pk.starttime=pk-1.finishtime; pk.finishtime=pk-1.finishtime+pk.servicetime; for(k=0;k<=N-1;k+) pk.zztime=pk.finishtime-pk.arrivetime; pk.dqzztime=pk.zztime/pk.servicetime; 4:實驗效果:5:實驗總結(jié):對于先來先服務(wù)算法,如圖所示

17、:在就緒隊列中按照時間到達先后挑選要進行的作業(yè),各個作業(yè)的運行順序分別是2 1 3;fcfs原則只考慮到了到達的時間先后,而未考慮作業(yè)要求的時長,這是個不足之處。在調(diào)試過程中遇到了不少bug,需要我們細(xì)心調(diào)試。短作業(yè)優(yōu)先調(diào)度算法流程圖:重要的函數(shù)和數(shù)據(jù)結(jié)構(gòu):Struct sjf定義結(jié)構(gòu)體Print()函數(shù)對到來的作業(yè)進行初始化并進行顯示Sort()函數(shù)對作業(yè)按照到來的作業(yè)的時間先后進行排序Deal()函數(shù)按照最短作業(yè)優(yōu)先服務(wù)原則對作業(yè)進行系列處理運行階段中deal函數(shù)按照短作業(yè)優(yōu)先原則對作業(yè)進行處理void deal(sjf *p,int N) int k; for(k=0;k<=N-1

18、;k+) if(k=0) pk.starttime=pk.arrivetime; pk.finishtime=pk.arrivetime+pk.servicetime; else pk.starttime=pk-1.finishtime; pk.finishtime=pk-1.finishtime+pk.servicetime; for(k=0;k<=N-1;k+) pk.zztime=pk.finishtime-pk.arrivetime; pk.dqzztime=pk.zztime/pk.servicetime; 實驗效果圖:實驗總結(jié):對于短作業(yè)調(diào)度算法:如圖所示,優(yōu)先選擇短作業(yè),參

19、考了幾個作業(yè)調(diào)度的范例,作業(yè)調(diào)度實踐起來并不難,但需要慢慢調(diào)試。和同學(xué)討論了設(shè)計思路之后就開始做了,雖然有小錯誤,但是經(jīng)過反復(fù)調(diào)試也修正了BUG。高響應(yīng)比優(yōu)先調(diào)度算法:流程圖: 3:重要的函數(shù)和數(shù)據(jù)結(jié)構(gòu):Struct zgxyb定義結(jié)構(gòu)體Print()函數(shù)對到來的作業(yè)進行初始化并進行顯示Sort()函數(shù)對作業(yè)按照到來的作業(yè)的時間先后進行排序Deal()函數(shù)按照高響應(yīng)比優(yōu)先原則對作業(yè)進行系列處理Deal()函數(shù)中對在運行時各個作業(yè)的周轉(zhuǎn)時間,開始時間,完成時間等變量進行處理,使得響應(yīng)比高者總是先執(zhí)行。void deal(struct zgxyb *p,int N) int k; for(k=0;

20、k<=N-1;k+) if(k=0) pk.starttime=pk.arrivetime; pk.finishtime=pk.arrivetime+pk.servicetime; else pk.starttime=pk-1.finishtime; pk.finishtime=pk-1.finishtime+pk.servicetime; for(k=0;k<=N-1;k+) pk.zztime=pk.finishtime-pk.arrivetime; pk.dqzztime=pk.zztime/pk.servicetime; :4:實驗效果5:實驗總結(jié):在高響應(yīng)比調(diào)度算法中,當(dāng)

21、一個作業(yè)執(zhí)行完,就要重新對已經(jīng)到來的在就緒中的作業(yè)進行其相應(yīng)比的計算,然后選取最高響應(yīng)比的作業(yè),循環(huán)直至所有作業(yè)完畢,該算法既照顧了短作業(yè),有考慮到了作業(yè)到達的先后次序。多道批::1:實驗?zāi)康模?編寫并調(diào)試一個作業(yè)調(diào)度的模擬批處理作業(yè)調(diào)度。作業(yè)調(diào)度算法,分別采用先來先服務(wù)和短作業(yè)優(yōu)先調(diào)度算法、在批處理系統(tǒng)中歐,要假定系統(tǒng)中具有各種資源及數(shù)量,調(diào)度作業(yè)必須考慮 到給個資源的要求2:實驗方法,步驟:假定系統(tǒng)可提供給用戶的主存空間共100kb,并有5臺磁帶機,假定程序已經(jīng)把一批作業(yè)放入輸入井先來先服務(wù)算法:按照作業(yè)進入輸入井的順序先后挑選作業(yè),先進入者先挑選,若系統(tǒng)中的資源尚不能滿足先進入作業(yè)的要求

22、,那么順序挑選作業(yè)。短作業(yè)優(yōu)先算法,總是按作業(yè)運行時間來挑選作業(yè),每次按時間最短且能滿足的作業(yè)先進入主存。當(dāng)作業(yè)執(zhí)行完,做好釋放資源的工作。3:重要的函數(shù)和數(shù)據(jù)結(jié)構(gòu):struct jcb/*定義進程控制塊PCB*/void insertInToReady()/把作業(yè)順序放入隊列中void sortByIntime()/*按提交時間進行先后排序*/void sortByNtime()/*按提交時間進行先后排序*/void intJCB()/*初始化一個作業(yè)*/int space()/*求作業(yè)隊列的長度*/void display()/*顯示所有作業(yè)的基本信息*/void running()/*建

23、立進程就緒函數(shù)(進程運行時間到,置就緒狀態(tài))*/void FCFS()void SJF()Int main()void insertInToReady()/把作業(yè)順序放入隊列中JCB *next;if (ready = NULL)p->link = ready;ready = p;elsenext = ready;while (next->link != NULL)next = next->link;next->link = p;void sortByIntime()/*按提交時間進行先后排序*/JCB *first, *second, *finish = NULL;i

24、nt insert;while (ready != NULL)insert = 0;p = ready;ready = p->link;p->link = NULL;if (finish = NULL) | (p->intime) < (finish->intime)/*提交時間最小者,插入隊首*/p->link = finish;finish = p;else/*比較提交時間,插入適當(dāng)?shù)奈恢弥?/first = finish;second = first->link;while (second != NULL)if (p->intime) &l

25、t; (second->intime)/*若插入作業(yè)比當(dāng)前作業(yè)提交時間*/*插入到當(dāng)前作業(yè)前面*/p->link = second;first->link = p;second = NULL;insert = 1;else/*插入作業(yè)提交時間最大,則插入到隊尾*/first = first->link;second = second->link;if (insert = 0) first->link = p;ready = finish;void sortByNtime()/*按提交時間進行先后排序*/JCB *first, *second, *finish

26、 = NULL;while (ready != NULL)int insert = 0;p = ready;ready = p->link;p->link = NULL;if (finish = NULL) | (p->ntime) < (finish->ntime)/*需求時間最小者,插入隊首*/p->link = finish;finish = p;else/*比較需求時間,插入適當(dāng)?shù)奈恢弥?/first = finish;second = first->link;while (second != NULL)if (p->ntime) <

27、; (second->ntime)/*若插入作業(yè)比當(dāng)前作業(yè)需求時間*/*插入到當(dāng)前作業(yè)前面*/p->link = second;first->link = p;second = NULL;insert = 1;else/*插入作業(yè)需求時間最大,則插入到隊尾*/first = first->link;second = second->link;if (insert = 0) first->link = p;ready = finish;void FCFS()int sort = 0;/作業(yè)被選中執(zhí)行的次序char ch;sortByIntime();/按進入時

28、間進行排序while (!isALLjobDONE()p = ready;while (p != NULL)if (p->state = W)/找正在等待的作業(yè)if (p->needmem < mem &&p->needtapenum < tapenum)/資源滿足作業(yè)的需求ch = getchar();sort+;/作業(yè)被選中執(zhí)行的次序/占用資源mem = mem - p->needmem;tapenum = tapenum - p->needtapenum;p->state = R;/作業(yè)狀態(tài)為正在運行printf("

29、;作業(yè)%c被選中執(zhí)行的次序為%d:n",p->user,sort);display();printf("任何鍵繼續(xù).");ch = getchar();elseprintf("作業(yè)%s請求失敗n",p->name);running();/運行作業(yè)p = p->link;printf("n全部作業(yè)已經(jīng)完成n");display();ch = getchar();void SJF()int sort = 0;/作業(yè)被選中執(zhí)行的次序char ch;sortByNtime();/按需要運行時間進行排序while (

30、!isALLjobDONE()p = ready;while (p != NULL)if (p->state = W)/找正在等待的作業(yè)if (p->needmem < mem &&p->needtapenum < tapenum)/資源滿足作業(yè)的需求ch = getchar();sort+;/作業(yè)被選中執(zhí)行的次序/占用資源mem = mem - p->needmem;tapenum = tapenum - p->needtapenum;p->state = R;/作業(yè)狀態(tài)為正在運行printf("作業(yè)%c被選中執(zhí)行的次

31、序為%d:n", p->user, sort);display();printf("任何鍵繼續(xù).");ch = getchar();elseprintf("作業(yè)%s請求失敗n", p->name);running();/運行作業(yè)p = p->link;printf("n全部作業(yè)已經(jīng)完成n");display();ch = getchar();5:實驗效果:6: 實驗總結(jié):多道批處理比起單道批,需要多考慮作業(yè)對資源的需求,fcfs和sjf的算法的實現(xiàn)跟前面都沒有太大的不同。 實驗三: 存儲管理實驗一:實驗?zāi)康?/p>

32、:通過編寫并調(diào)試存儲管理的模擬程序以加深對存儲管理方案的理解,首席虛擬存儲管理的各種頁面淘汰算法通過編寫并調(diào)試地址轉(zhuǎn)換過程的模擬程序以加深地址轉(zhuǎn)換過程的了解。二:實驗內(nèi)容和要求1、產(chǎn)生一個需要訪問的指令地址流,它是一系列需要訪問的指令的地址。為不失一般性,你可以適當(dāng)?shù)兀ㄓ萌斯ぶ付ǖ胤椒ɑ蛴秒S機數(shù)產(chǎn)生器)生成這個序列,使得 50的指令是順序執(zhí)行的。25的指令均勻地散布在前地址部分,25的地址是均勻地散布在后地址部分。2、指定合適的頁面尺寸(例如以 1K或2K為1頁); 3、指定內(nèi)存頁表的最大長度,并對頁表進行初始化; 4、 每訪問一個地址時,首先要計算該地址所在的頁的頁號,然后查頁表,判斷該頁是

33、否在主存如果該頁已在主存,則打印頁表情況;如果該頁不在主存且頁表未滿,則調(diào)入一頁并打印頁表情況;如果該頁不足主存且頁表已滿,則按 FIFO頁面淘汰算法淘汰一頁后調(diào)入所需的頁,打印頁表情況; 逐個地址訪問,直到所有地址訪問完畢。三:實驗方法和步驟1:設(shè)計一個固定式分區(qū)分配的存儲管理方案,并模擬實現(xiàn)分區(qū)的分配和回收。假定每個作業(yè)都是批處理作業(yè),并且不允許動態(tài)申請內(nèi)存。為實現(xiàn)分區(qū)的分配和回收,可以假定一個分區(qū)說明表,按照表中的有關(guān)信息進行分配;固定式分區(qū)分配的存儲管理1:重要的函數(shù)和數(shù)據(jù)結(jié)構(gòu):typedef struct Memory 該結(jié)構(gòu)體定義可用分區(qū)鏈表節(jié)點。allocMem()函數(shù)分配內(nèi)存空

34、間Release()函數(shù)釋放內(nèi)存空間Check()函數(shù)檢查用戶輸入的合法性bool release(MEM *pm, int base, int size)/釋放內(nèi)存空間 MEM *p = pm; if(!check(pm, base ,size) return false; while(p->next) if(base + size <= p->next->base) break; p = p->next; if(base = p->base + p->size)/低地址相鄰 if(p ->next && p->next-

35、>base = base + size)/釋放區(qū)上下都相鄰 p->size += size + p->next->size; temp = p->next; p->next = p->next->next; free(temp); else/僅與地地址相鄰 p->size += size; else if (p->next && p->next->base = base +size)/僅高地址相鄰 p->next->base = base; p->next->size += size

36、; else/釋放區(qū)上下與空閑區(qū)都不相鄰 temp = getMEM(); temp->size = size; temp->base = base; temp->next = p->next; p->next = temp; return true; int allocMem(MEM *pm, int size)/分配內(nèi)存空間 MEM *p = pm; int base; while(p->next) if(p->next->size >= size) break; p = p->next; if(!p->next) return -1; if(p->next->size = size)/空閑分區(qū)大小剛好等于所需分區(qū) base = p->next->base; p->next = p->next->next; else p->next->size -= size; base = p->next->base; p-&g

溫馨提示

  • 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)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論