- 1、本文档共13页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第2部分、请求分页式存储管理的地址转换过程实现:
●基本要求:在第1部分实验基础上实现进程的分页式内存分配和地址转换过程,并进一步实现请求分页式存储分配和地址转换过程。页面置换算法至少应实现先进先出(FIFO)、最近最久未使用(LRU)等算法。
●参考学时:16学时
●实验提示:
建立一个位示图,用来模拟内存的分配情况,位示图的位数与设定的物理块个数相同。程序启动时可利用一组随机0和1填充位示图,表示内存已被占用情况。
假设内存容量为64K,块大小为1K,则共有64个块,对应的位示图可能的值如下:
第0字节1 0 1 1 0 0 1 1第2字节1 1 1 0 0 1 1 1
第0字节
1 0 1 1 0 0 1 1
第2字节
1 1 1 0 0 1 1 1
第4字节
0 0 0 1 1 1 1 1
第6字节
1 1 1 1 1 0 0 0
第1字节
0 1 1 0 1 1 0 0
第3字节
1 0 0 0 0 1 1 1
第5字节
0 1 1 1 0 0 1 1
第7字节
0 0 0 0 0 0 0 1
创建进程时输入进程大小,并根据程序中设定的物理块大小为进程分配物理块,同时建立页表。例如,在上图基础上,若要建立一个大小为5000字节的进程,则:
计算出该进程共有“向上取整(5000/1024)=5”个页,需要占用5个内存块;
建立空的页表,即长度为5的一维整数数组;
从位示图中找出前5个“0”位在整个位示图中的位置号(即i字节j位为0,则该位的位置为8*i+j),并将这些号依次填入页表中,同时把前5个“0”改为“1”,以示对应内存块已经分配。
输入当前执行进程所要访问的逻辑地址,并将其转换成相应的物理地址。
进程退出时,根据其页表内容向位示图反向回填“1”。
扩充页表,将其变成支持请求和置换功能的二维页表(增加存在位等)。创建进程时可装入固定的前三页(或键盘输入初始装入页数,不同进程的装入个数可以不同),其余页装入到置换空间内(置换空间大小应为内存空间大小的1.5倍,对其还需建立独立的位示图)。
分别采用FIFO和LRU置换算法对地址转换过程中遇到的缺页现象进行页面置换,可将多次地址转换过程中所涉及到的页号视为进程的页面访问序列,从而计算置换次数和缺页率。
import java.util.Vector;
import java.io.*;
class Process{
Page []PageTable;
VectorPage PageQueue;
private int size;
private int Pagecount;
private String name;
double visit;
double replacement;
public void setPage(Page []PageTable) {
this.PageTable=new Page[PageTable.length];
for(int i=0;iPageTable.length;i++) {
this.PageTable[i]=PageTable[i];
}
}
public int getPageBlock(int PageNum) {
return PageTable[PageNum].getBlockNum();
}
public void setSize(int size) {
this.size=size;
}
public void setPagecount(int Pagecount) {
this.Pagecount=Pagecount;
}
public int getPagecount() {
return Pagecount;
}
{
visit=0;
replacement=0;
}
public Process() {
}
public Process(String name){
this.name=name;
}
public String toString(){
return name;
}
}
class Page {
int flag;
int blockNum;
int writed;//xiu gai wei
int accessfield;//fang wen zi duan
int swapsapce_blockno;//wai cun dizhi
int t;
{
blockNum=0;
writed=0;
accessfield=0;
t=0;
}
public Page() {
flag=1;
swapsapce_blockno=-1;
}
p
文档评论(0)