请求分页式存储管理的地址转换过程实现Word文档下载推荐.docx
- 文档编号:18153701
- 上传时间:2022-12-13
- 格式:DOCX
- 页数:17
- 大小:30.45KB
请求分页式存储管理的地址转换过程实现Word文档下载推荐.docx
《请求分页式存储管理的地址转换过程实现Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《请求分页式存储管理的地址转换过程实现Word文档下载推荐.docx(17页珍藏版)》请在冰豆网上搜索。
publicvoidsetPage(Page[]PageTable){
this.PageTable=newPage[PageTable.length];
for(inti=0;
i<
PageTable.length;
i++){
this.PageTable[i]=PageTable[i];
}
}
publicintgetPageBlock(intPageNum){
returnPageTable[PageNum].getBlockNum();
publicvoidsetSize(intsize){
this.size=size;
}
publicvoidsetPagecount(intPagecount){
this.Pagecount=Pagecount;
publicintgetPagecount(){
returnPagecount;
{
visit=0;
replacement=0;
publicProcess(){
publicProcess(Stringname){
this.name=name;
publicStringtoString(){
returnname;
}
classPage{
intflag;
intblockNum;
intwrited;
//xiugaiwei
intaccessfield;
//fangwenziduan
intswapsapce_blockno;
//waicundizhi
intt;
blockNum=0;
writed=0;
accessfield=0;
t=0;
publicPage(){
flag=1;
swapsapce_blockno=-1;
publicPage(intflag,intswapsapce_blockno){
this.flag=flag;
this.swapsapce_blockno=swapsapce_blockno;
publicintgetBlockNum(){
returnblockNum;
publicintgetFlag(){
returnflag;
classOS2{
publicstaticVector<
Process>
ready,blocked;
publicstaticProcessrunning;
publicstaticBufferedReaderbr;
staticint[][]a=newint[8][8];
staticint[][]d=newint[10][10];
//置换空间
staticintcount=0;
publicOS2(){
ready=newVector<
();
blocked=newVector<
br=newBufferedReader(newInputStreamReader(System.in));
for(inti=0;
a.length;
for(intj=0;
j<
a[i].length;
j++){
if(Math.random()<
0.5){
a[i][j]=0;
}
else{
a[i][j]=1;
}
d.length;
d[i].length;
d[i][j]=0;
d[i][j]=1;
System.out.println("
位示图----------------"
);
print(a);
System.out.println("
置换空间--------------"
print(d);
publicstaticvoidgo(){
while(true){
======================================================================="
1:
进程创建"
2:
进程到时"
3:
进程阻塞"
4:
进程唤醒"
5:
进程结束"
6:
逻辑地址转换为物理地址"
7:
查看页表"
8:
显示位示图和置换空间"
9:
查看置换次数和缺页率"
0:
退出-->
"
try{
inti=Integer.parseInt(br.readLine());
switch(i){
case0:
System.exit(0);
case1:
createNewProcess();
break;
case2:
switchCurrentProcess();
case3:
blockCurrentProcess();
case4:
wakeupBlockedProcess();
case5:
terminateCurrentProcess();
case6:
transform();
case7:
showPage();
case8:
System.out.println("
print(a);
System.out.println("
print(d);
break;
case9:
look();
catch(Exceptione){
System.out.println(e);
执行进程:
+(running==null?
none"
:
running));
System.out.print("
就绪进程:
printList(ready);
阻塞进程:
printList(blocked);
}
publicstaticvoidprintList(Vectorv){
v.size();
i++)
System.out.print(v.elementAt(i)+"
\t"
System.out.println();
publicstaticvoidcreateNewProcess(){
try{
System.out.print("
进程名称:
Stringname=br.readLine();
Processprocess=newProcess(name);
ready.add(process);
进程大小:
doublesize=Integer.parseInt(br.readLine());
intnumPage=0;
numPage=(int)Math.ceil(size/1024);
process.setPagecount(numPage);
Page[]P=newPage[numPage];
process.PageQueue=newVector<
st:
for(inti=0;
for(intj=0;
if(a[i][j]==0){
if(count<
3){
//Pagep1=newPage();
//P[count]=p1;
P[count]=newPage();
P[count].blockNum=8*i+j;
process.PageQueue.add(P[count]);
P[count].t=3-count;
count++;
a[i][j]=1;
if(count==numPage){
breakst;
}
}
else{
for(intm=0;
m<
m++){
for(intn=0;
n<
d[m].length;
n++){
if(d[m][n]==0){
//Pagep2=newPage();
//P[count]=p2;
P[count]=newPage(0,-1);
P[count].blockNum=-1;
P[count].swapsapce_blockno=8*m+n;
count++;
d[m][n]=1;
if(count==numPage){
count=0;
breakst;
}
}
}
}
}
if(running==null){
running=(Process)ready.elementAt(0);
ready.removeElementAt(0);
process.setPage(P);
publicstaticvoidswitchCurrentProcess(){
if(running!
=null)
ready.add(running);
if(ready.size()>
0){
else
running=null;
publicstaticvoidblockCurrentProcess(){
=null){
blocked.add(running);
0){
else{
publicstaticvoidwakeupBlockedProcess(){
if(blocked.size()>
//running=(Process)blocked.elementAt(0);
ready.add((Process)blocked.elementAt(0));
blocked.removeElementAt(0);
if(running==null){
running=(Process)ready.elementAt(0);
ready.removeElementAt(0);
//blocked=null;
publicstaticvoidterminateCurrentProcess(){
whileExit();
elseif(blocked.size()>
running=(Process)blocked.elementAt(0);
publicstaticvoidtransform(){
try{
if(running!
System.out.print("
输入逻辑地址:
intLogicAdds=Integer.parseInt(br.readLine());
intPageNumber=LogicAdds/1024;
if(PageNumber>
running.getPagecount()-1){
while(true){
//if(PageNumber>
System.out.println("
逻辑地址超出范围,请重新输入:
LogicAdds=Integer.parseInt(br.readLine());
PageNumber=LogicAdds/1024;
if(PageNumber<
=running.getPagecount()-1){
break;
}
//}
intoffset=LogicAdds%1024;
intPageBlockNum=running.getPageBlock(PageNumber);
++running.PageTable[PageNumber].accessfield;
++running.visit;
if(running.PageTable[PageNumber].getFlag()==0){
++running.replacement;
请选择你所想要置换的算法(提示:
1代表FIFO算法,2代表LRU算法):
intch=Integer.parseInt(br.readLine());
if(ch==1){
System.out.println("
正在FIFO置换算法,对地址进行转换"
Fifo(PageNumber);
正在LRU置换算法,对地址进行转换"
Lru(PageNumber);
intPhyAdds=(running.getPageBlock(PageNumber))*1024+offset;
物理地址:
+PhyAdds);
else{
}
else{
norunningprocess"
catch(Exceptione){
publicstaticvoidwhileExit(){
running.PageTable.length;
if(running.PageTable[i].flag==1){
intm=running.PageTable[i].blockNum/8;
intn=running.PageTable[i].blockNum%8;
a[m][n]=0;
intm=running.PageTable[i].swapsapce_blockno/8;
intn=running.PageTable[i].swapsapce_blockno%8;
d[m][n]=0;
publicstaticvoidFifo(intPageNumber){
running.PageTable[PageNumber].blockNum=((Page)running.PageQueue.elementAt(0)).blockNum;
st:
for(inti=0;
for(intj=0;
if(d[i][j]==0&
&
running.PageQueue.size()>
d[i][j]=1;
((Page)running.PageQueue.elementAt(0)).flag=0;
((Page)running.PageQueue.elementAt(0)).blockNum=-1;
((Page)running.PageQueue.elementAt(0)).writed=0;
((Page)running.PageQueue.elementAt(0)).accessfield=0;
((Page)running.PageQueue.elementAt(0)).swapsapce_blockno=8*i+j;
((Page)running.PageQueue.elementAt(0)).t=0;
running.PageQueue.removeElementAt(0);
running.PageQueue
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 请求 分页 存储 管理 地址 转换 过程 实现