




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、齊齊哈爾大學(xué)操作系統(tǒng)課程綜合實(shí)踐題目:段頁式存儲(chǔ)算法班級: 計(jì)本131 姓名: 學(xué)號:指導(dǎo)教師:2016年 6月0 / 26段頁式存儲(chǔ)算法摘要:分頁和分段存儲(chǔ)管理方式都各有其優(yōu)缺點(diǎn),分頁系統(tǒng)能有效地提高內(nèi)存利用率,而分段系統(tǒng)則能很好滴滿足用戶需要。對兩種存儲(chǔ)管理方式“各取所長”,則可以將兩者結(jié)合成一種新的存儲(chǔ)管理方式系統(tǒng)。這種新系統(tǒng)既具有分段系統(tǒng)的便于實(shí)現(xiàn)、分段可共享、易于保護(hù)、可動(dòng)態(tài)鏈接等一系列優(yōu)點(diǎn),又能像分頁系統(tǒng)那樣很好地解決內(nèi)存的外部碎片問題,以及可為各個(gè)分段離散的分配內(nèi)存等問題。把這種結(jié)合起來形成的新系統(tǒng)稱為“段頁是系統(tǒng)”。關(guān)鍵字:存儲(chǔ)分配;內(nèi)存塊; 進(jìn)程 一、實(shí)訓(xùn)內(nèi)容與目的1、內(nèi)容
2、編寫程序完成段頁式虛擬存儲(chǔ)管理存儲(chǔ)分配、地址重定位和缺頁中斷處理。(1)為一個(gè)進(jìn)程的內(nèi)存申請(多少個(gè)段,每個(gè)段多大)分配內(nèi)存,當(dāng)一個(gè)進(jìn)程(完成)結(jié)束時(shí)回收內(nèi)存;(2)對一個(gè)給定邏輯地址,判斷其是否缺段、缺頁,若不缺段、不缺頁,則映射出其物理地址;(3)若缺段則進(jìn)行缺段中斷處理,若缺頁則進(jìn)行缺頁中斷處理。假定內(nèi)存64K,內(nèi)存塊(頁框)大小為1K,進(jìn)程邏輯地址空間最多4個(gè)段,每個(gè)段最大16K,進(jìn)程駐留集大小為8頁。假設(shè)進(jìn)程運(yùn)行前未預(yù)先裝入任何地址空間,頁面淘汰策略采用局部(駐留集內(nèi))置換策略。輸出每次存儲(chǔ)分配/回收時(shí),內(nèi)存自由塊分布情況、相關(guān)進(jìn)程的段表和頁表信息。2. 目的(1)加深理解段頁式虛擬
3、存儲(chǔ)管理的概念和原理。(2)掌握段頁式存儲(chǔ)管理中存儲(chǔ)分配(和回收)方法;(3)深入了解段頁式虛擬存儲(chǔ)管理中地址重定位(即地址映射)方法。(4)深入理解段頁式虛擬存儲(chǔ)管理中缺段、缺頁中斷處理方法。二、主要設(shè)計(jì)思路和流程圖1、設(shè)計(jì)思路(1)內(nèi)存大小為64K,頁框大小為1K,駐留集最多放8個(gè)頁,在初始時(shí)所有塊都空閑,并輸出空閑狀態(tài)和所有可用的空閑塊。(2)進(jìn)程、段表和頁表均用結(jié)構(gòu)體數(shù)組存儲(chǔ),其中每個(gè)進(jìn)程對應(yīng)一個(gè)段表,每個(gè)段表可以有一個(gè)或多個(gè)頁表。每次查詢一個(gè)頁時(shí),要通過進(jìn)程號找相應(yīng)的段,通過段號找到該頁。(3)給出一個(gè)功能菜單,用戶可以選擇“創(chuàng)建進(jìn)程”、“結(jié)束進(jìn)程”、“查看內(nèi)存”或地址映射。(4)當(dāng)
4、用戶選擇“創(chuàng)建進(jìn)程”時(shí),現(xiàn)輸入此次內(nèi)存的總需求,即段號和相應(yīng)的頁數(shù),并保存在一個(gè)全局的二維數(shù)組中,用于后面每個(gè)進(jìn)程空間申請的數(shù)量的檢查。用戶分別輸入進(jìn)程號,每個(gè)進(jìn)程需要的段數(shù),段號和相應(yīng)的頁號,并標(biāo)記好是否要調(diào)入駐留集。輸入完成后,系統(tǒng)進(jìn)行內(nèi)存空間和駐留集空間的檢查,若均未滿,則分配成功;如果內(nèi)存已滿,則此次分配失??;如果駐留集已滿,則修改溢出部分的標(biāo)志位(即P位)。(5)分配好空間后,將輸出每個(gè)進(jìn)程相應(yīng)的段表和頁表項(xiàng)。(6)當(dāng)用戶選擇“結(jié)束進(jìn)程”時(shí),清空該進(jìn)程的段表和頁表,修改標(biāo)志位,釋放掉在內(nèi)存中的空間。(7)當(dāng)用戶選擇“查看內(nèi)存”時(shí),輸出當(dāng)前在內(nèi)存中的進(jìn)程個(gè)數(shù)、已用的內(nèi)存塊數(shù)和空閑的內(nèi)存
5、塊數(shù),并顯示所用可用的空閑塊。(8)當(dāng)用戶選擇“地址映射”時(shí),先輸入想查找的進(jìn)程號,在檢驗(yàn)正確的情況下,輸入段號和段內(nèi)偏移量,判斷段的標(biāo)志位,若該段不在駐留集中,則為虛段,進(jìn)行缺段中斷處理;若在駐留集中,檢驗(yàn)偏移量是否越界,在不越界的前提下,根據(jù)偏移量計(jì)算頁號并判斷頁的標(biāo)志位,若該頁不在駐留集中,則為虛頁,進(jìn)行缺頁中斷處理,若在駐留集中,則計(jì)算出相應(yīng)的物理地址并輸出。2.程序流程圖(1)總體流程圖Menu();Init()othersExit;choice4132Finish_Pro()Check_Mem()Addr_Exchange()Apply_Mem()是否缺段、頁頁Alloc_Mem(
6、)否給出物理地址是FIFO_Strategy() Print_Table() Print_Table()(2) 進(jìn)程創(chuàng)建流程圖Input seg_sum_numInput seg_sumi0,seg_sumi0輸入段號和相應(yīng)的頁數(shù)Input pro_numprocessCount += pro_numpro_numpro_num <= 0 | pro_num > Pro_sum_sizepro_num >= 0 && pro_num < Pro_sum_sizei = 0 , i < pro_numInput P_id;I
7、nput Processesi.Snum;i+;Int j = 0 , j < Processesi.SnumInput Processesi.Segmentsj.seg_id;Input Processesi.Segmentsj.is_p;J+;Processesi.Segmentsj.is_p01Int k = 0 ; k < Processesi.Segmentsj.Pnum ;k+Input Processesi.Segmentsj.Pagesk.page_id;Input Processesi.Segmentsj.Pagesk.is_p;Int k = 0 ; k <
8、; Processesi.Segmentsj.Pnum ;k+Input Processesi.Segmentsj.Pagesk.page_id;Input Processesi.Segmentsj.Pagesk.is_p;Alloc_Mem()Print_Table()(3) 地址映射流程圖Input pro_id輸入映射的進(jìn)程號Input s_id , offset輸入段號和段內(nèi)偏移量段地址越界地址映射失敗段地址未越界FIFO_Strategy()該段為虛段該段為實(shí)段根據(jù)段表查頁表,找到頁框號該頁為虛頁FIFO_Strategy()計(jì)算出物理地址輸出物理地址三、主要數(shù)據(jù)結(jié)構(gòu)及其說明1、進(jìn)程
9、、段表及頁表的存儲(chǔ)(使用結(jié)構(gòu)體數(shù)組)/自定義頁表 struct Pageint block;int is_p; /記錄是否想調(diào)入內(nèi)存int page_id ; /記錄頁號int frame_id ; /記錄頁框號int p_p ; /修改位,表示對應(yīng)的頁是否在內(nèi)存中,0表示不在,1表示在int p_m ; /修改位,表示對應(yīng)的頁的內(nèi)容從上一次裝入到內(nèi)存中到現(xiàn)在是否改變,0表示沒有改變,1表示有;/自定義段表 struct Segmentint Pnum; /記錄頁數(shù)Page PagesMem_Size; int is_p; /記錄是否想調(diào)入內(nèi)存int seg_id ; /記錄段號int p ;
10、/頁表指針,指向相應(yīng)頁的起始地址int s_p ; /修改位,表示對應(yīng)的段是否在內(nèi)存中,0表示不在,1表示在int s_m ; /修改位,表示對應(yīng)的段的內(nèi)容從上一次裝入到內(nèi)存中到現(xiàn)在是否改變,0表示沒有改變,1表示有;/自定義進(jìn)程結(jié)構(gòu)體struct Processint pro_id ;/記錄進(jìn)程號int IsInMem;/記錄進(jìn)程是否在內(nèi)存int Total;/記錄某進(jìn)程所需的總頁數(shù)int Snum; /記錄該進(jìn)程的段數(shù)Segment Segments10;/進(jìn)程數(shù)組的定義 Process ProcessesPro_sum_size; Segment SegmentsSeg_sum_size
11、; Page PagesMem_Size; 2、使用一維數(shù)組存儲(chǔ)駐留集int Res_Set Res_Set_Size;3、函數(shù)介紹 Init(); /最初的內(nèi)存初始化 Apply_Mem();/手工輸入進(jìn)程個(gè)數(shù)、段數(shù)以及段內(nèi)地址的賦值函數(shù) Alloc_Mem(); /系統(tǒng)分配內(nèi)存 Check_Mem(); /查看內(nèi)存 Finish_Pro(); /手動(dòng)結(jié)束進(jìn)程,釋放相應(yīng)空間 Print_Table();/段表和頁表的打印 Addr_Exchange(); /地址轉(zhuǎn)換函數(shù) FIFO_Strategy(); /先進(jìn)先出策略處理中斷 Menu();/一個(gè)功能菜單函數(shù)一、 程序運(yùn)行時(shí)的初值和運(yùn)行結(jié)果
12、1、輸入:(1)創(chuàng)建進(jìn)程:1. 共三個(gè)段,其中1號段8個(gè)頁,2號段8個(gè)頁,3號段8個(gè)頁。2. 創(chuàng)建兩個(gè)進(jìn)程:P1:2個(gè)段,1號段,調(diào)入內(nèi)存,共5個(gè)頁,1、2、4、5頁調(diào)入駐留集,3號頁不調(diào)入;2號段,不調(diào)入,兩個(gè)頁,分別為2號頁和6號頁。P2:1個(gè)段,3號段,調(diào)入內(nèi)存,共5個(gè)頁,1、2、3、4、5,全部調(diào)入駐留集。 (2)地址映射:P2: 3 123P1: 1 2050P1: 2 256 2、運(yùn)行結(jié)果輸入進(jìn)程號和相應(yīng)的內(nèi)存需求后,顯示每個(gè)進(jìn)程的段表和頁表:(此時(shí)駐留集已滿?。┎榭磧?nèi)存,結(jié)果如下:進(jìn)行地址映射:結(jié)束進(jìn)程,釋放空間:四、結(jié)束語經(jīng)過了兩周的學(xué)習(xí)和實(shí)驗(yàn),我終于完成了段頁式存儲(chǔ)算法,從開
13、始做到系統(tǒng)實(shí)現(xiàn),再到論文的完成,每一步對我來說都是新的嘗試與挑戰(zhàn)。在這段時(shí)間,我學(xué)到了很多知識也有很多感受,查看相關(guān)的資料和書籍,讓自己頭腦中段頁是存儲(chǔ)管理的概念逐漸清晰,了解了段式存儲(chǔ)、頁式存儲(chǔ)以及段頁式存儲(chǔ)的的優(yōu)缺點(diǎn)。使自己非常稚嫩作品一步步完善起來,每一次改進(jìn)都是我學(xué)習(xí)的收獲,每一次試驗(yàn)的成功都會(huì)讓我興奮好一段時(shí)間。這次做論文的經(jīng)歷也會(huì)使我終身受益,我感受到做論文是要真真正正用心去做的一件事情,是真正的自己學(xué)習(xí)的過程和研究的過程,沒有學(xué)習(xí)就不可能有研究的能力,沒有自己的研究,就不會(huì)有所突破,那也就不叫論文了。希望這次的經(jīng)歷能讓我在以后學(xué)習(xí)中激勵(lì)我繼續(xù)進(jìn)步。參考文獻(xiàn)1 計(jì)算機(jī)操作系統(tǒng)(實(shí)驗(yàn)
14、指導(dǎo)書),滕艷平等編,哈爾濱工業(yè)大學(xué)出版社,2008年9月2操作系統(tǒng)習(xí)題解答與實(shí)驗(yàn)指導(dǎo)(第二版),張明等編,中國鐵道出版社,2007年12月3操作系統(tǒng)實(shí)驗(yàn)教程,張麗芬等編,清華大學(xué)出版社,2006年4操作系統(tǒng)學(xué)習(xí)輔導(dǎo),張獻(xiàn)忠編,清華大學(xué)出版社,2004年五、 源程序#define _CRT_SECURE_NO_DEPRECATE#include <stdio.h>#include <stdlib.h>#include <stdbool.h>#define Mem_Size 64#define Block_Size 1#define Res_Set_Size
15、8 /駐留集空間為8個(gè)頁#define Pro_sum_size 5 /定義全局變量int blockMem_Size; / 內(nèi)存塊狀態(tài)標(biāo)志數(shù)組,0:空閑,1:使用int seg_sumMem_Size2; /建立總的段數(shù)的二維數(shù)組int processCount = 0; / 記錄當(dāng)前進(jìn)程數(shù)int pageTotal; /總頁數(shù)int count = 0; /記錄進(jìn)程已經(jīng)占用的內(nèi)存塊數(shù)int in_mem_seg = 0;/記錄調(diào)入內(nèi)存的段數(shù)int in_mem_page = 0;/記錄調(diào)入內(nèi)存的段數(shù)int seg_sum_num = 0 ;/需要的總段數(shù)int seg_Pnum = 0;
16、/記錄每個(gè)段需要的內(nèi)存int i_min , j_min ,k_min , t_min;/在LRU算法中記錄使用時(shí)間最久的進(jìn)程號、段號、頁號和該/頁在駐留集中的位置bool flag = true ;int pro_num = 0;/每一次進(jìn)行進(jìn)程申請的進(jìn)程數(shù)量/自定義頁表struct Pageint block;int is_p; /記錄是否想調(diào)入內(nèi)存int page_id ; /記錄頁號int frame_id ; /記錄頁框號int p_p ; /修改位,表示對應(yīng)的頁是否在內(nèi)存中,0表示不在,1表示在int p_m ; /修改位,表示對應(yīng)的頁的內(nèi)容從上一次裝入到內(nèi)存中到現(xiàn)在是否改變,0表
17、示沒/有改變,1表示有;/自定義段表struct Segmentint Pnum; /記錄頁數(shù)struct Page PagesMem_Size; int is_p; /記錄是否想調(diào)入內(nèi)存int seg_id ; /記錄段號int p ;/頁表指針,指向相應(yīng)頁的起始地址int s_p ; /修改位,表示對應(yīng)的段是否在內(nèi)存中,0表示不在,1表示在int s_m ; /修改位,表示對應(yīng)的段的內(nèi)容從上一次裝入到內(nèi)存中到現(xiàn)在是否改變,0 表/示沒有改變,1表示有;/自定義進(jìn)程結(jié)構(gòu)體struct Processint pro_id ;/記錄進(jìn)程號int IsInMem;/記錄進(jìn)程是否在內(nèi)存int Tot
18、al;/記錄某進(jìn)程所需的總頁數(shù)int Snum; /記錄該進(jìn)程的段數(shù)struct Segment Segments10;/進(jìn)程數(shù)組的定義 struct Process Processes5; struct Segment Segments10; struct Page PagesMem_Size; int Res_Set Res_Set_Size;/內(nèi)存空間使用輸出void Menu();void FIFO_Strategy(); /先進(jìn)先出策略void Check_Mem(); /查看內(nèi)存void Init(); /進(jìn)行初始化void Alloc_Mem(); /分配內(nèi)存void Apply
19、_Mem();/進(jìn)程個(gè)數(shù)、段數(shù)以及段內(nèi)地址的賦值函數(shù)void Addr_Exchange(); /地址轉(zhuǎn)換函數(shù)void Finish_Pro(); /手動(dòng)結(jié)束進(jìn)程,釋放相應(yīng)空間void Print_Table();/段表和頁表的dayinvoid FIFO_Strategy()int p_id , s_id ,pa_id;int t , i , j , k;int temp1 = 0 , temp2 = 0 ;if(in_mem_page = Res_Set_Size)for(i = 0 ; i < processCount ; i+)for(j = 0 ; j < Process
20、esi.Snum ;j+)for(k = 0 ; k < Processesi.Segmentsj.Pnum ; k+)if(Processesi.Segmentsj.Pagesk.frame_id = Res_Set0)Processesi.Segmentsj.Pagesk.p_p = 0;else if(Processesi.Segmentsj.Pagesk.p_p = 1)temp1+;if(temp1 = 0)Processesi.Segmentsj.s_p = 0;printf("段S%d已經(jīng)被調(diào)出內(nèi)存!n",Processesi.Segmentsj.seg
21、_id);in_mem_seg-;temp2-;else if(Processesi.Segmentsj.s_p = 1)temp2+;if(temp2 = 0)Processesi.IsInMem = 0;printf("進(jìn)程%d已經(jīng)被調(diào)出內(nèi)存!n",P_id);printf("被淘汰的頁框號為:%dn",Res_Set0);for(t = 1 ; t < Res_Set_Size ; t+)Res_Sett-1 = Res_Sett;for(i = 0 ; i < processCount ; i+)for(j
22、= 0 ; j < Processesi.Snum ; j+)for(k = 0 ; k < Processesi.Segmentsj.Pnum ; k+)if(Processesi.Segmentsj.Pagesk.frame_id = Res_Set0 | Processesi.Segmentsj.Pagesk.frame_id = Res_Set1|Processesi.Segmentsj.Pagesk.frame_id = Res_Set2|Processesi.Segmentsj.Pagesk.frame_id = Res_Set3|Processesi.Segments
23、j.Pagesk.frame_id = Res_Set4|Processesi.Segmentsj.Pagesk.frame_id = Res_Set5|Processesi.Segmentsj.Pagesk.frame_id = Res_Set6)Processesi.Segmentsj.Pagesk.p_p = 1;elseProcessesi.Segmentsj.Pagesk.p_p = 0;Res_SetRes_Set_Size-1 = -1;in_mem_page-;printf("請輸入您想要調(diào)入內(nèi)存的進(jìn)程號和相應(yīng)的段號、頁號,中間用空格隔開:n");scanf
24、("%d %d %d", &p_id , &s_id , &pa_id);for(i = 0 ; i < processCount ; i+) if(P_id = p_id) for(j = 0 ; j < Processesi.Snum ; j+) if(Processesi.Segmentsj.seg_id = s_id) for(k = 0 ; k < Processesi.Segmentsj.Pnum ; k+)if(Processesi.Segmentsj.Pagesk.page_id = pa_
25、id) if(Processesi.Segmentsj.Pagesk.p_p = 0)printf("頁%d已經(jīng)成功調(diào)入內(nèi)存!n", Processesi.Segmentsj.Pagesk.page_id);Processesi.Segmentsj.Pagesk.p_p = 1;in_mem_page+;Res_Setin_mem_page-1 = Processesi.Segmentsj.Pagesk.frame_id;Print_Table();elseprintf("頁%d已經(jīng)在內(nèi)存中了!n",Processesi.Segmentsj.Pagesk
26、.page_id);Menu();void Check_Mem()int k,i;printf("n內(nèi)存總量:%d 塊 n已用空間:%d 塊n剩余空間:%d 塊n進(jìn)程總數(shù):%d 個(gè)n", Mem_Size, count, Mem_Size-count, processCount);if (flag && count < Mem_Size)printf("下面是可用的空閑塊:n");for (k = 0 , i = 0 ; k < Mem_Size ; k+)if (blockk = 0)printf("%2d &qu
27、ot;, k, +i);if (i = 10)putchar('n');i = 0;putchar('n');Menu();void Init()int i;/ 初始化內(nèi)存狀態(tài)標(biāo)志數(shù)組for (i = 0 ; i < Mem_Size ; i+)blocki = 0;/ 初始化駐留集for (i = 0 ; i < 30 ; i+)Res_Seti = -1;printf("-n");printf("初始化結(jié)果如下:n");Check_Mem();flag = false;void Print_Table()i
28、nt i,j,k;for(i = 0 ; i < processCount ; i+) printf("進(jìn)程p%d已經(jīng)分配好內(nèi)存!n",P_id); Processesi.IsInMem = 1; printf("該進(jìn)程的段表內(nèi)容如下:n"); for(j = 0 ; j < Processesi.Snum ; j+) printf("段號: 段的長度: 頁的起始地址: P位: M位:n"); printf("%dt%dtt%dtt%dt%dn",Processesi.Segm
29、entsj.seg_id,Processesi.Segmentsj.Pnum,Processesi.Segmentsj.p,Processesi.Segmentsj.s_p,Processesi.Segmentsj.s_m); printf("該段的頁表內(nèi)容如下:n"); printf("頁號: 頁框號: P位: M位:n"); for(k = 0 ; k < Processesi.Segmentsj.Pnum ; k+) printf("%dt%dt%dt%dtn",Processesi.Segmentsj.Pagesk.pa
30、ge_id,Processesi.Segmentsj.Pagesk.frame_id,Processesi.Segmentsj.Pagesk.p_p,Processesi.Segmentsj.Pagesk.p_m); void Alloc_Mem()int i,j,k,t;printf("nn*n");for(i = 0 ; i < pro_num ; i+)Processesi.Total = 0;if(count+Processesi.Total > Mem_Size) for(j = 0 ; j < Processesi.Snum ; j+) Pro
31、cessesi.Total += Processesi.Segmentsj.Pnum;printf("內(nèi)存空間不足,進(jìn)程p%d及以后的內(nèi)存分配失敗!",i+1);break;break; else for(j = 0 ; j < Processesi.Snum ; j+) Processesi.Segmentsj.p = count ;if( Processesi.Segmentsj.is_p = 1) Processesi.Segmentsj.s_p = 1; else Processesi.Segmentsj.s_p = 0; for(k = 0 ; k <
32、 Processesi.Segmentsj.Pnum ; k+)Processesi.Segmentsj.Pagesk.frame_id = count; blockcount = 1;if(Processesi.Segmentsj.Pagesk.is_p = 1) Processesi.Segmentsj.Pagesk.p_p = 1; Res_Setin_mem_page = Processesi.Segmentsj.Pagesk.frame_id; in_mem_page+;elseProcessesi.Segmentsj.Pagesk.p_p = 0;count+; if(in_mem
33、_page > Res_Set_Size)printf("駐留集已滿!頁框號為%d以后的頁沒能進(jìn)入駐留集。n",Res_SetRes_Set_Size-1);for(t = Res_Set_Size ; t < in_mem_page ; t+)for(j = 0 ; j < Processesi.Snum ; j+)for( k = 0 ; k < Processesi.Segmentsj.Pnum ; k+)if(Res_Sett = Processesi.Segmentsj.Pagesk.frame_id)Processesi.Segments
34、j.Pagesk.p_p = 0;in_mem_page = Res_Set_Size; printf("nn"); Print_Table();Menu();void Apply_Mem()int i,is,ts,j,tp,ip; int l = 0;int temp_count = 0;/輸入內(nèi)存總需求(多少段,每個(gè)段多大)printf("現(xiàn)記錄您需要的總內(nèi)存大?。簄");printf("請輸入您需要的總段數(shù):");scanf("%d",&seg_sum_num);printf("請輸入段號和
35、相應(yīng)的頁數(shù),中間用空格隔開:n");for (i = 0 ; i < seg_sum_num ; i+)scanf("%d %d",&seg_sumi0,&seg_sumi1);getchar();printf("nn");printf("進(jìn)程內(nèi)存空間申請!n"); printf("請輸入進(jìn)程的數(shù)目(大于0,小于等于5的整數(shù)):"); scanf("%d",&pro_num);processCount += pro_num;while(pro_num<
36、;=0 | pro_num > Pro_sum_size) printf("您輸入的進(jìn)程個(gè)數(shù)超出閾值!n");printf("請輸入進(jìn)程的數(shù)目(大于0,小于等于5的整數(shù)):"); scanf("%d",&pro_num);processCount += pro_num; for(is = 0 ; is < pro_num ; is+) printf("n*n");printf("請輸入第%d個(gè)進(jìn)程的進(jìn)程號:", is+1);scanf("%d",&
37、P_id);printf("請輸入進(jìn)程p%d的段數(shù):",P_id);scanf("%d",&Processesis.Snum);while(Processesis.Snum > seg_sum_num )printf("您輸入的段數(shù)超值!n");printf("請輸入進(jìn)程p%d的段數(shù):",P_id);scanf("%d",&Processesis.Snum);printf("請輸入
38、該進(jìn)程需要的段號和是否需要調(diào)入內(nèi)存,中間用空格可開(1->是/0->否):n");for(ts = 0 ; ts < Processesis.Snum ; ts+)scanf("%d %d",&Processesis.Segmentsts.seg_id , &Processesis.Segmentsts.is_p);Processesis.Segmentsts.s_m = 0;getchar();for(j = 0 ; j < Processesis.Snum ; j+)printf("請輸入段S%d所需的頁數(shù):&
39、quot;,Processesis.Segmentsj.seg_id);scanf("%d",&Processesis.Segmentsj.Pnum);while(Processesis.Segmentsj.Pnum > seg_sumj1)printf("您輸入的頁數(shù)超值!n");printf("請輸入段S%d所需的頁數(shù):",Processesis.Segmentsj.seg_id);scanf("%d",&Processesis.Segmentsj.Pnum);for(tp = 0 ; t
40、p < Processesis.Snum ; tp+)if(Processesis.Segmentstp.is_p = 1)printf("請輸入段S%d中的頁號和是否需要調(diào)入內(nèi)存,中間用空格可開(1->是/0->否):n",Processesis.Segmentstp.seg_id);for(ip = 0 ; ip < Processesis.Segmentstp.Pnum ; ip+)scanf("%d %d",&Processesis.Segmentstp.Pagesip.page_id , &Process
41、esis.Segmentstp.Pagesip.is_p);Processesis.Segmentstp.Pagesip.p_m = 0;getchar();elseprintf("請輸入段S%d中的頁號(中間用空格隔開):n",Processesis.Segmentstp.seg_id);for(ip = 0 ; ip < Processesis.Segmentstp.Pnum ; ip+)scanf("%d",&Processesis.Segmentstp.Pagesip.page_id);Processesis.Segmentstp.
42、Pagesip.p_m = 0;getchar();Alloc_Mem();void Finish_Pro()int p_id;int i , j , k;printf("請輸入您想結(jié)束的進(jìn)程號:");scanf("%d",&p_id);for(i = 0 ; i < processCount ; i+)if(P_id = p_id && Processesi.IsInMem != 1)printf("該進(jìn)程不在內(nèi)存中!n");break;else if(Processesi.p
43、ro_id = p_id && Processesi.IsInMem = 1) Processesi.IsInMem = 0;for(j = 0 ; j < Processesi.Snum ; j+)if(Processesi.Segmentsj.s_p = 1)Processesi.Segmentsj.s_p = 0 ;in_mem_seg-;for(k = 0 ; k < Processesi.Segmentsj.Pnum ; k+)if(Processesi.Segmentsj.Pagesk.p_p = 1)Processesi.Segmentsj.Pages
44、k.p_p = 0;in_mem_page-; blockProcessesi.Segmentsj.Pagesk.frame_id = 0;count-; processCount-;printf("進(jìn)程%d已經(jīng)成功退出內(nèi)存了!n",P_id);break;Menu();void Addr_Exchange()int p_id,s_id,offset;int i ,j , k;int address;printf("請輸入進(jìn)程號:");scanf("%d",&p_id);for(i = 0 ; i < processCount ; i+)if(P_id = p_id
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 新工科背景下時(shí)空數(shù)據(jù)挖掘教學(xué)的創(chuàng)新實(shí)踐
- 2025 二年級語文下冊《彩色的夢》創(chuàng)意寫作課件
- 推動(dòng)煤電行業(yè)減污降碳實(shí)施方案
- 2025至2030中國沙灘毛巾行業(yè)產(chǎn)業(yè)運(yùn)行態(tài)勢及投資規(guī)劃深度研究報(bào)告
- 2025至2030中國止推墊圈行業(yè)市場深度研究及發(fā)展前景投資可行性分析報(bào)告
- 2025至2030中國棉花行業(yè)市場發(fā)展分析及發(fā)展前景與投資風(fēng)險(xiǎn)報(bào)告
- 2025至2030中國有機(jī)茶行業(yè)深度研究及發(fā)展前景投資評估分析
- 2025至2030中國月子會(huì)所行業(yè)市場發(fā)展分析及前景趨勢與投資機(jī)會(huì)報(bào)告
- 2025至2030中國智能水產(chǎn)品行業(yè)產(chǎn)業(yè)運(yùn)行態(tài)勢及投資規(guī)劃深度研究報(bào)告
- 2025至2030中國無麩質(zhì)蛋白棒行業(yè)市場深度研究及發(fā)展前景投資可行性分析報(bào)告
- 部編版語文二年級下冊第4單元童心童趣大單元整體作業(yè)設(shè)計(jì)
- SYB創(chuàng)業(yè)培訓(xùn)游戲模塊2課件
- 娛樂場所文明服務(wù)責(zé)任書
- 獸醫(yī)傳染病學(xué)(山東聯(lián)盟)智慧樹知到答案章節(jié)測試2023年青島農(nóng)業(yè)大學(xué)
- 鋼結(jié)構(gòu)防腐油漆施工方案
- 第五講社會(huì)建設(shè)
- GB/T 35273-2020信息安全技術(shù)個(gè)人信息安全規(guī)范
- GB/T 20303.1-2006起重機(jī)司機(jī)室第1部分:總則
- GB 18068-2000水泥廠衛(wèi)生防護(hù)距離標(biāo)準(zhǔn)
- 教師調(diào)動(dòng)登記表(模板)
- 《長方形和正方形》 完整版課件
評論
0/150
提交評論