操作系统课程设计-缺页中断c++源码|精品课程网站设计|课程设计网报告总结心得
#include
#includeclass List;class item{public: friend class List;private: item(int p=0,int s=0,int b=0,int l=0){page=p;sign=s;block=b;locate=l;next=NULL;} item *next; int page; int sign; int block; int locate;};class List{public: List(){list=0;} List(int p=0,int s=0,int b=0,int l=0){list=new item(p,s,b,l);} int check(int p); int insert(int p,int s,int b,int l); int print(); int append(int p,int s,int b,int l); int length(); void reverse();private: item *list; item *end();};int List :: print(){ if(list==0) return 0; cout<<"页号 标志 主存块号 磁盘地址"<page<<" "<sign<<" "<block<<" "<locate<next; } cout<next=pt; } return 1;}item *List::end(){ item *prv,*pt; for(prv=pt=list;pt;prv=pt,pt=pt->next) ; return prv;}int List::insert(int p,int s,int b,int l){ item *pt=new item(p,s,b,l); pt->next=list; list=pt; return 1;}
int List::length(){ int cnt=0; item *pt=list; for(;pt;pt->next,cnt++) ; return cnt;}int List::check(int p){ item *pt=list; int a=-1; for(;pt;pt=pt->next) { if(pt->page==p&&pt->sign==1) a=pt->block; } return a;}void List::reverse(){ item *pt,*prv,*tmp; prv=NULL; pt=list; list=end(); while(pt!=list) { tmp=pt->next; pt->next=prv; prv=pt; pt=tmp; } list->next=prv;}int checkp(int n);int main(){ List list(0,1,5,11); list.append(1,1,8,12); list.append(2,1,9,13); list.append(3,1,1,21); list.append(4,0,-1,22); list.append(5,0,-1,23); list.append(6,0,-1,121); //list.reverse(); list.print(); char a[12]={'+','+','*','I','O','-','M','+','I','O','+','I'}; int b[12]={70,50,15,21,56,40,53,23,37,78,1,84}; int m=0,n,j; for(int i=0;i<12;i++) { cout<<"*************************"<<"第"<>n; m=list.check(n); j=checkp(n); if(j==1) { if(m!=-1) cout<<"该指令的物理地址为:"<
else if(m!=-1&&j==0) { cout<<"该页所在的主存块号为:"<
} return 1;}int checkp(int n){ int a=0; int k=1; for(int c=(int)sqrt(double (n))+2;c>=1;c--) { if(n==k) a=1; else k=k*2; } return a;}