




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
操作系統(tǒng)內(nèi)存管理1.功能介紹1-Setmemorysize(default=1024)2-Selectmemoryallocationalgorithm3-Newprocess4-Terminateaprocess5-Displaymemoryusage0-Exit2.主要數(shù)據(jù)結(jié)構(gòu)-1內(nèi)存空閑分區(qū)的描述/*描述每一個(gè)空閑塊的數(shù)據(jù)結(jié)構(gòu)*/struct
free_block_type{
intsize;
int
start_addr;
struct
free_block_type*next;};/*指向內(nèi)存中空閑塊鏈表的首指針*/struct
free_block_type*free_block;2.主要數(shù)據(jù)結(jié)構(gòu)-2描述已分配的內(nèi)存塊/*每個(gè)進(jìn)程分配到的內(nèi)存塊的描述*/struct
allocated_block{
int
pid;intsize;
int
start_addr;charprocess_name[PROCESS_NAME_LEN];
struct
allocated_block*next;};/*進(jìn)程分配內(nèi)存塊鏈表的首指針*/struct
allocated_block*allocated_block_head=NULL;2.主要數(shù)據(jù)結(jié)構(gòu)–3常量定義#definePROCESS_NAME_LEN32/*進(jìn)程名長(zhǎng)度*/#defineMIN_SLICE10/*最小碎片的大小*/#defineDEFAULT_MEM_SIZE1024/*內(nèi)存大小*/#defineDEFAULT_MEM_START0/*起始位置*//*內(nèi)存分配算法*/#defineMA_FF1#defineMA_BF2#defineMA_WF3int
mem_size=DEFAULT_MEM_SIZE;/*內(nèi)存大小*/int
ma_algorithm=MA_FF;/*當(dāng)前分配算法*/staticint
pid=0;/*初始pid*/intflag=0;/*設(shè)置內(nèi)存大小標(biāo)志*/3.主要模塊介紹main()函數(shù)main(){charchoice;pid=0;free_block=init_free_block(mem_size);//初始化空閑區(qū)while(1){display_menu(); //顯示菜單fflush(stdin);choice=getchar(); //獲取用戶輸入switch(choice){case‘1’:set_mem_size();break; //設(shè)置內(nèi)存大小case‘2’:set_algorithm();flag=1;break;//設(shè)置算法case‘3’:new_process();flag=1;break;//創(chuàng)建新進(jìn)程case‘4’:kill_process();flag=1;break;//刪除進(jìn)程case‘5’:display_mem_usage();flag=1;break; //顯示內(nèi)存使用case‘0’:do_exit();exit(0); /釋放鏈表并退出default:break;}}}init_free_block(intmem_size);/*初始化空閑塊,默認(rèn)為一塊,可以指定大小及起始地址*/structfree_block_type*init_free_block(intmem_size){structfree_block_type*fb;fb=(structfree_block_type*)malloc(sizeof(structfree_block_type));if(fb==NULL){printf("Nomem\n");returnNULL;}fb->size=mem_size;fb->start_addr=DEFAULT_MEM_START;fb->next=NULL;returnfb;}display_menu()/*顯示菜單*/display_menu(){printf("\n");printf("1-Setmemorysize(default=%d)\n",DEFAULT_MEM_SIZE);printf("2-Selectmemoryallocationalgorithm\n");printf("3-Newprocess\n");printf("4-Terminateaprocess\n");printf("5-Displaymemoryusage\n");printf("0-Exit\n");}set_mem_size();/*設(shè)置內(nèi)存的大小*/set_mem_size(){intsize;if(flag!=0){//防止重復(fù)設(shè)置printf("Cannotsetmemorysizeagain\n");return0;}printf("Totalmemorysize=");scanf("%d",&size);if(size>0){mem_size=size;free_block->size=mem_size;}flag=1;return1;}set_algorithm()/*設(shè)置當(dāng)前的分配算法*/set_algorithm(){intalgorithm;printf("\t1-FirstFit\n");printf("\t2-BestFit\n");printf("\t3-WorstFit\n");scanf("%d",&algorithm);if(algorithm>=1&&algorithm<=3)ma_algorithm=algorithm;
//按指定算法重新排列空閑區(qū)鏈表rearrange(ma_algorithm);}rearrange(intalgorithm)/*按指定的算法整理內(nèi)存空閑塊鏈表*/rearrange(intalgorithm){switch(algorithm){caseMA_FF:rearrange_FF();break;caseMA_BF:rearrange_BF();break;caseMA_WF:rearrange_WF();break;}}/*按FF算法重新整理內(nèi)存空閑塊鏈表*/rearrange_FF(){
//請(qǐng)自行補(bǔ)充}/*按BF算法重新整理內(nèi)存空閑塊鏈表*/rearrange_BF(){
//請(qǐng)自行補(bǔ)充}/*按WF算法重新整理內(nèi)存空閑塊鏈表*/rearrange_WF(){
//請(qǐng)自行補(bǔ)充}new_process()/*創(chuàng)建新的進(jìn)程,主要是獲取內(nèi)存的申請(qǐng)數(shù)量*/new_process(){structallocated_block*ab;intsize;intret;ab=(structallocated_block*)malloc(sizeof(structallocated_block));if(!ab)exit(-5);ab->next=NULL;pid++;sprintf(ab->process_name,"PROCESS-%02d",pid);ab->pid=pid;printf("Memoryfor%s:",ab->process_name);scanf("%d",&size);if(size>0)ab->size=size;ret=allocate_mem(ab);/*從空閑區(qū)分配內(nèi)存,ret==1表示分配ok*/new_process() -cont./*如果此時(shí)allocated_block_head尚未賦值,則賦值*/if((ret==1)&&(allocated_block_head==NULL)){allocated_block_head=ab;return1;}
/*分配成功,將該已分配塊的描述插入已分配鏈表*/elseif(ret==1){ab->next=allocated_block_head;allocated_block_head=ab;return2;}elseif(ret==-1){/*分配不成功*/printf("Allocationfail\n");free(ab);return-1;}return3;}intallocate_mem(structallocated_block*ab)/*分配內(nèi)存模塊*/intallocate_mem(structallocated_block*ab){structfree_block_type*fbt,*pre;intrequest_size=ab->size;fbt=pre=free_block;
//根據(jù)當(dāng)前算法在空閑分區(qū)鏈表中搜索合適空閑分區(qū)進(jìn)行分配,分配時(shí)注意以下情況://1.找到可滿足空閑分區(qū)且分配后剩余空間足夠大,則分割//2.找到可滿足空閑分區(qū)且但分配后剩余空間比較小,則一起分配//3.找不可滿足需要的空閑分區(qū)但空閑分區(qū)之和能滿足需要,則采用內(nèi)存緊縮技術(shù),進(jìn)行空閑分區(qū)的合并,然后再分配//4.在成功分配內(nèi)存后,應(yīng)保持空閑分區(qū)按照相應(yīng)算法有序//5.分配成功則返回1,否則返回-1請(qǐng)自行補(bǔ)充。。。。。}kill_process()/*刪除進(jìn)程,歸還分配的存儲(chǔ)空間,并刪除描述該進(jìn)程內(nèi)存分配的節(jié)點(diǎn)*/kill_process(){structallocated_block*ab;intpid;printf("KillProcess,pid=");scanf("%d",&pid);ab=find_process(pid);if(ab!=NULL){free_mem(ab);/*釋放ab所表示的分配區(qū)*/dispose(ab);/*釋放ab數(shù)據(jù)結(jié)構(gòu)節(jié)點(diǎn)*/}}intfree_mem(structallocated_block*ab)/*將ab所表示的已分配區(qū)歸還,并進(jìn)行可能的合并*/intfree_mem(structallocated_block*ab){intalgorithm=ma_algorithm;structfree_block_type*fbt,*pre,*work;fbt=(structfree_block_type*)malloc(sizeof(structfree_block_type));if(!fbt)return-1;//進(jìn)行可能的合并,基本策略如下//1.將新釋放的結(jié)點(diǎn)插入到空閑分區(qū)隊(duì)列末尾//2.對(duì)空閑鏈表按照地址有序排列//3.檢查并合并相鄰的空閑分區(qū)//4.將空閑鏈表重新按照當(dāng)前算法排序
請(qǐng)自行補(bǔ)充……return1;}intdispose
(structallocated_block*free_ab)/*釋放ab數(shù)據(jù)結(jié)構(gòu)節(jié)點(diǎn)*/intdispose(structallocated_block*free_ab){structallocated_block*pre,*ab;if(free_ab==allocated_block_head){/*如果要釋放第一個(gè)節(jié)點(diǎn)*/allocated_block_head=allocated_block_head->next;free(free_ab);return1;}pre=allocated_block_head;ab=allocated_block_head->next;while(ab!=free_ab){pre=ab;ab=ab->next;}pre->next=ab->next;free(ab);return2;}display_mem_usage()/*顯示當(dāng)前內(nèi)存的使用情況,包括空閑區(qū)的情況和已經(jīng)分配的情況*/display_mem_usage(){structfree_block_type*fbt=free_block;structallocated_block*ab=allocated_block_head;if(fbt==NULL)return(-1);printf("----------------------------------------------------------\n");
/*顯
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2019-2025年軍隊(duì)文職人員招聘之軍隊(duì)文職教育學(xué)題庫(kù)與答案
- 2025年軍隊(duì)文職人員招聘之軍隊(duì)文職管理學(xué)與服務(wù)考試題庫(kù)
- 2021-2022學(xué)年廣東省廣州市白云區(qū)六校七年級(jí)(下)期中數(shù)學(xué)試卷(含答案)
- 企業(yè)級(jí)數(shù)據(jù)安全合規(guī)策略制定服務(wù)協(xié)議
- 網(wǎng)絡(luò)直播平臺(tái)合作項(xiàng)目表
- 四川省成都市武侯區(qū)2024-2025學(xué)年七年級(jí)上學(xué)期期末生物學(xué)試題(含答案)
- 湖南省岳陽(yáng)市岳陽(yáng)縣2024-2025學(xué)年七年級(jí)上學(xué)期期末生物學(xué)試題(含答案)
- 語(yǔ)言學(xué)英語(yǔ)翻譯技能測(cè)試卷
- 濕地松采脂承包合同
- 團(tuán)隊(duì)目標(biāo)與績(jī)效考核表
- 醫(yī)療垃圾的分類與處理知識(shí)培訓(xùn)
- 加油站自動(dòng)化控制系統(tǒng)
- 環(huán)境地質(zhì)學(xué)第一講-緒論課件
- DB6523-T 387-2023 蘋果小吉丁蟲監(jiān)測(cè)調(diào)查技術(shù)規(guī)程
- 汽車維修工時(shí)收費(fèi)標(biāo)準(zhǔn)(二類企業(yè))
- (醫(yī)學(xué)課件)腰椎穿刺術(shù)課件
- 參保人員轉(zhuǎn)診就醫(yī)審核意見單
- 動(dòng)物免疫接種技術(shù)課件
- 93年國(guó)際大專辯論賽經(jīng)典辯詞
- 幼兒園大班繪本故事-神奇的大蒜【幼兒教案】
- GB/T 17639-2023土工合成材料長(zhǎng)絲紡粘針刺非織造土工布
評(píng)論
0/150
提交評(píng)論