




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上洛陽理工學(xué)院實(shí)驗(yàn)報(bào)告系別計(jì)算機(jī)系班級(jí)學(xué)號(hào)姓名課程名稱計(jì)算機(jī)操作系統(tǒng)實(shí)驗(yàn)日期2015/10/26實(shí)驗(yàn)名稱分區(qū)內(nèi)存管理成績實(shí)驗(yàn)?zāi)康模?過本次實(shí)驗(yàn),加深對(duì)進(jìn)程概念的理解,進(jìn)一步掌握進(jìn)程狀態(tài)的轉(zhuǎn)變及進(jìn)程調(diào)度策略。實(shí)驗(yàn)條件:計(jì)算機(jī)一臺(tái),軟件vc+6.0一、實(shí)驗(yàn)?zāi)康耐ㄟ^這次實(shí)驗(yàn),加深對(duì)內(nèi)存管理的認(rèn)識(shí),進(jìn)一步掌握內(nèi)存的分配、回收算法的思想。二、實(shí)驗(yàn)原理設(shè)計(jì)程序模擬內(nèi)存的動(dòng)態(tài)分區(qū)內(nèi)存管理方法。內(nèi)存分區(qū)使用分區(qū)(說明)表進(jìn)行管理,采用最先適應(yīng)算法從分區(qū)表中尋找空閑區(qū)進(jìn)行分配,內(nèi)存回收時(shí)不考慮與相鄰空閑區(qū)的合并。假定系統(tǒng)的內(nèi)存共640K,初始狀態(tài)為操作系統(tǒng)本身占用40K。t1時(shí)刻,為作業(yè)
2、A、B、C分配80K、60K、100K、的內(nèi)存空間;t2時(shí)刻作業(yè)B完成;t3時(shí)刻為作業(yè)D分配50K的內(nèi)存空間;t4時(shí)刻作業(yè)C、A完成;t5時(shí)刻作業(yè)D完成。要求編程序分別輸出t1、t2、t3、t4、t5時(shí)刻內(nèi)存的空閑分區(qū)。三、實(shí)驗(yàn)內(nèi)容#include<stdio.h>#include<malloc.h>#include<stdlib.h>#include<conio.h>#define maxPCB 10#define maxPart 10#define TRUE 1#define FALSE 0typedef struct PCB_type ch
3、ar name; /進(jìn)程名int address, len, valid; /進(jìn)程所占分區(qū)起止、長度、該P(yáng)CB有效標(biāo)識(shí)(1有效,0無效)PCB;typedef struct seqlist PCB PCBelemmaxPCB; / maxPCB為系統(tǒng)中允許的最多進(jìn)程數(shù) int total; /系統(tǒng)中實(shí)際的進(jìn)程數(shù) PCBseql;typedef struct Partitionint address, len, valid; /分區(qū)起址、長度、有效標(biāo)識(shí)(1空閑,0已分配) Part;typedef struct Partlist Part PartelemmaxPart; / maxPart為系
4、統(tǒng)中可能的最多分區(qū)數(shù) int sum; /系統(tǒng)中實(shí)際的分區(qū)數(shù)Partseql;int length = 640 ;/系統(tǒng)有640 的空閑 PCBseql *pcbl;Partseql *partl;void initpcb(PCBseql *vpcbl,int adr); /初始化進(jìn)程表vpcblvoid getprint(); void initpart(); /初始化分區(qū)表vpartlvoid request (char name, int len); /進(jìn)程name請(qǐng)求len大小的內(nèi)存void release(char name); /回收name進(jìn)程所占內(nèi)存空間void print()
5、; /輸出內(nèi)存空閑分區(qū)/*void printp()int i;for(i=0;i<(pcbl->total);i+) printf("%cn",pcbl->PCB); */void initpcb(PCBseql *vpcbl,int adr) /初始化進(jìn)程表vpcbl int i=1; PCB *pcbelem; int tel; char c; pcbelem=vpcbl->PCBelem; while(TRUE) printf("請(qǐng)輸入第%d進(jìn)程名稱",i+); vpcbl->total+; sc
6、anf("%c",&(pcbelem->name); printf("請(qǐng)輸入進(jìn)程所需內(nèi)存"); scanf("%d",&tel); pcbelem->len=tel; pcbelem->address=adr+tel; pcbelem->valid=1; pcbelem+; printf("是否要繼續(xù)輸入進(jìn)程(Enter-是 Esc-否)n"); fflush(stdin); c = getch(); fflush(stdin); if(c=27) break; void i
7、nitpart() char c,name; int len; printf("請(qǐng)輸入你的操作 R.請(qǐng)求內(nèi)存;P.輸出空閑分區(qū); S. 強(qiáng)制進(jìn)程結(jié)束;(N/n).退出n"); fflush(stdin); c= getchar(); fflush(stdin); while(c!='N'|c!='n') if(c='R'|c='r') fflush(stdin); /做輸入的時(shí)候要清空緩沖區(qū) printf("請(qǐng)輸入請(qǐng)求內(nèi)存進(jìn)程的名稱,長度"); scanf("%c,%d"
8、,&name,&len); request(name,len); /進(jìn)程請(qǐng)求內(nèi)存 else if(c='P'|c='p') printf("t*VIEW begin*n"); getprint(); printf("t*VIEW end *n"); else if(c='S'|c='s') printf("請(qǐng)輸入想要回收的進(jìn)程名稱n"); scanf("%c",&name); release(name); printf(&quo
9、t;請(qǐng)輸入你的操作R.請(qǐng)求內(nèi)存;P.輸出空閑分區(qū); S.強(qiáng)制進(jìn)程結(jié)束 n"); fflush(stdin); c= getchar(); fflush(stdin); void init4IOS(int tem) Part *newPart = &partl->Partelem0; tem = tem>0?(tem<length?tem:length):0; newPart->address = 0; newPart->len = tem ; newPart->valid = 1; partl->sum+; printf("
10、->已為操作系統(tǒng)分配了%d kb內(nèi)存n",tem); newPart = &partl->Partelem1; newPart->address = tem ; length=tem = length -tem; tem = tem<0?(0):tem; newPart->len = tem ; newPart->valid = 0; partl->sum+; printf("->為操作系統(tǒng)分配后剩余的內(nèi)存%d kb內(nèi)存n",tem); int getTagByPcb(char name) int i=0;
11、for(;i<(pcbl->total);i+) if(name = pcbl->PCB) return i; return pcbl->total+1; /分配出去就會(huì)產(chǎn)生一個(gè)碎片 將元素后移動(dòng)一位 void ArrayToRightOne(int i) int leng=partl->sum; while(leng>i) partl->Partelemleng.address = partl->Partelemleng-1.address; partl->Partelemleng.len = partl->Pa
12、rtelemleng-1.len; partl->Partelemleng.valid = partl->Partelemleng-1.valid; leng-; partl->sum+; int findBylen(int len) int i=0; while(i<partl->sum) if (partl->Partelemi.valid=0) if (len<=partl->Partelemi.len) return i; i+; return 0; void request(char name,int len) char tem; in
13、t i; /是name進(jìn)程的下標(biāo) int temBylen; int temByPcb ; temByPcb=getTagByPcb(name); while (temByPcb>pcbl->total) printf("找不到進(jìn)程%c,重新輸入Y/N",name); fflush(stdin); tem = getchar(); if(tem='Y') fflush(stdin); /做輸入的時(shí)候要清空緩沖區(qū) printf("請(qǐng)輸入請(qǐng)求內(nèi)存進(jìn)程的名稱,長度"); scanf("%c,%d",&na
14、me,&len); if (len>pcbl->PCBelemtemByPcb.len) printf("您請(qǐng)求的容量大于您進(jìn)程最大要求量%d,",pcbl->PCBelemtemByPcb.len); return; if (tem='N') return ; /找到一塊len內(nèi)存 if(findBylen(len)=0) /sort2part(); /收集內(nèi)存 代碼沒寫 if(i=findBylen(len)=0) printf("警告內(nèi)存已滿無法分配n"); /分配出去就會(huì)產(chǎn)生一個(gè)碎片 將元素后移動(dòng)一位 1
15、0 / 16 ArrayToRightOne(i); /直接對(duì)partl->Partelemi賦值 并加入一個(gè)碎片 temBylen = partl->Partelemi.len-len; partl->Partelemi.len = len; partl->Partelemi.valid = 1; /新的碎片 partl->Partelemi+1.address = partl->Partelemi.address+partl->Partelemi.len; partl->Partelemi+1.len =temBylen; partl->
16、;Partelemi+1.valid=0; /更新pcb的狀態(tài)和容量 pcbl->PCBelemtemByPcb.address = partl->Partelemi.address; pcbl->PCBelemtemByPcb.len = pcbl->PCBelemtemByPcb.len-len ;/更新pcb的len pcbl->PCBelemtemByPcb.valid = 1 ; void release(char name) int i=0; int adress,len; if( getTagByPcb(name)<0) printf(&quo
17、t;找不到進(jìn)程名%cn",name); return ; else if(pcbl->PCBelemgetTagByPcb(name).valid=0) printf("%c還沒有運(yùn)行請(qǐng)先運(yùn)行n",name); printf("現(xiàn)在正回收%c的內(nèi)存n",name); adress = pcbl->PCBelemgetTagByPcb(name).address; len = pcbl->PCBelemgetTagByPcb(name).len; while (i<partl->sum) if (adress=par
18、tl->Partelemi.address) partl->Partelemi.valid=0; i+; void getprint() int i; printf("-空閑分區(qū)begin-n"); for (i=0;i<partl->sum;i+) if (partl->Partelemi.valid=0) printf("第%d塊空閑內(nèi)存起止為%d,容量為%dn",i,partl->Partelemi.address,partl->Partelemi.len); printf("-空閑分區(qū)end-n&q
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 校園卡通系統(tǒng)合同書
- 合伙投資協(xié)議書宗旨
- 施工合同安全消防施工合同
- 旅游管理與服務(wù)心理學(xué)試題集及答案詳解
- 手房抵押買賣合同
- 建筑行業(yè)施工期間意外傷害免責(zé)合同
- 住院醫(yī)師規(guī)范化培訓(xùn)協(xié)議書
- 木門采購與安裝合同
- 人工智能技術(shù)服務(wù)合作安全合同
- 智能制造工廠合作協(xié)議
- 蒙臺(tái)梭利教學(xué)法PPT完整全套教學(xué)課件
- 2022-2023學(xué)年高一下學(xué)期月考語文試卷含參考答案
- 智能化模塑研發(fā)與制造中心項(xiàng)目生產(chǎn)經(jīng)營方案
- 2023版押品考試題庫必考點(diǎn)含答案
- 電力建設(shè)工程施工技術(shù)管理導(dǎo)則
- E4A使用手冊(cè)資料
- 國家自然科學(xué)基金預(yù)算模板
- 高一物理必修一綜合測試題含答案
- 內(nèi)科學(xué)系統(tǒng)性紅斑狼瘡題庫
- 萬達(dá)廣場室內(nèi)步行街裝設(shè)計(jì)任務(wù)書
- 人音版五年級(jí)下冊(cè)音樂《巴塘連北京》課件
評(píng)論
0/150
提交評(píng)論