主要集成了操作系统的主要算法

源代码在线查看: (三)页式存储管理方案.txt

软件大小: 23 K
上传用户: wjm197811
关键词: 集成 操作系统 算法
下载地址: 免注册下载 普通下载 VIP

相关代码

				(三)页式存储管理方案
				
				页式存储管理方案 
				
				位示图 
				
				2002(?)的北京大学主考的上机试题 
				
				内存被划分成2048块(页)。用32位字长的字存放位示图,为0的位表示该块尚未分配,为1的位表示该块已分配? 
				实习检查: 
				
				1、运行程序,由检查教师给出文件名,该文件中存有内存目前状况的位示图的数据(0和1的文件)。(程序应做提示,界面友好)。 
				2、你所编制的程序应读入数据,存放在相应的数据结构中。 
				3、显示友好的用户界面,由检查教师输入内存申请(总块数)。 
				4、根据申请和位示图状态,为用户分配内存,并建立页表。 
				5、输出位示图和页表。 
				
				
				本程序包括主要实现位示图算法,比较简单 
				
				VC++调试通过 
				
				(C)copyright by Neo 
				
				欢迎大家测试 请问题请Email:sony006@163.com 
				*/ 
				
				#include 
				#include 
				#include 
				
				const int PAGES=256; //定义总块数 
				const int WORD=32; //定义字长 
				
				const int WORDNUM=PAGES/WORD; //定义总字数 
				
				typedef struct node{ 
				char jobname[20]; 
				int num; 
				int nums[PAGES]; 
				struct node *next; 
				}jobs; 
				
				int table[WORDNUM][WORD]; 
				int freenum=0; 
				jobs *head; 
				
				//初始化函数 
				void initial(){ 
				int i,j; 
				jobs *p; 
				
				//初始化位示图 
				for(i=0;i				for(j=0;j				table[j]=0; 
				} 
				} 
				
				//初始化作业表头 
				p=new jobs; 
				strcpy(p->jobname,"null"); 
				p->num=0; 
				p->next=NULL; 
				head=p; 
				
				
				} 
				
				//读入位示图初始数据 
				void readData() 
				{ 
				int i,j; 
				FILE *fp; 
				char fname[20]; 
				
				cout				cin>>fname; 
				
				if((fp=fopen(fname,"r"))!=NULL){ 
				for(i=0;i				for(j=0;j				fscanf(fp,"%d",&table[j]); 
				if(table[j]==1) 
				freenum++; 
				} 
				} 
				cout				for(i=0;i				for(j=0;j				cout				} 
				cout				} 
				cout				
				} 
				else{ 
				cout				} 
				
				} 
				
				//新加入作业函数 
				void add() 
				{ 
				char jobname[20]; 
				int num; 
				jobs *p; 
				int i,j,k=0; 
				
				cout				cin>>jobname; 
				cout				cin>>num; 
				
				if(num				freenum-=num; 
				
				p=new jobs; 
				strcpy(p->jobname,jobname); 
				p->num=num; 
				
				for(k=0;k				i=0; 
				j=0; 
				while(table[j]==1){ 
				j=0; 
				while(table[j]==1)j++; 
				if(table[j]==1) 
				i++; 
				} 
				p->nums[k]=i*WORD+j; 
				table[j]=1; 
				} 
				
				p->next=head->next; 
				head->next=p; 
				
				} 
				else{ 
				cout				} 
				
				} 
				
				//完成作业函数 
				void finish() 
				{ 
				char jobname[20]; 
				
				jobs *p,*q; 
				int n,i,j,num,k; 
				
				cout				cin>>jobname; 
				
				p=head->next; 
				q=head; 
				
				while(p!=NULL){ 
				if(strcmp(p->jobname,jobname)){ 
				q=q->next; 
				} 
				p=p->next; 
				} 
				
				p=q->next; 
				
				num=p->num; 
				for(k=0;k				n=p->nums[k]; 
				i=n/WORD; 
				j=n%WORD; 
				table[j]=0; 
				} 
				
				freenum+=num; 
				q->next=p->next; 
				delete p; 
				
				} 
				
				
				//显示当前位示图函数 
				void view_table() 
				{ 
				int i,j; 
				cout				for(i=0;i				for(j=0;j				cout				} 
				cout				} 
				cout				} 
				
				//显示所有页表函数 
				void view_pages() 
				{ 
				jobs *p; 
				int i; 
				
				p=head->next; 
				if(p==NULL)cout				else 
				cout				while(p!=NULL){ 
				cout				cout				for(i=0;inum;i++){ 
				cout				} 
				cout				p=p->next; 
				} 
				} 
				
				//显示版权信息函数 
				void version() 
				{ 
				cout				
				cout				cout				cout				cout				cout				cout				cout				
				cout				} 
				
				
				void main() 
				{ 
				int t=1,chioce; 
				
				version(); 
				initial(); 
				
				readData(); 
				
				while(t==1){ 
				cout				cout				cout				cout				cout				cin>>chioce; 
				
				switch(chioce){ 
				case 1: 
				add(); 
				break; 
				case 2: 
				finish(); 
				break; 
				case 3: 
				view_table(); 
				break; 
				case 4: 
				view_pages(); 
				break; 
				case 0: 
				t=0; 
				break; 
				default: 
				cout				} 
				} 
				} 
							

相关资源