- 1、本文档共5页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实验一进程调度算法的模拟
实验二 存储管理与页面置换算法
一、实验目的
通过模拟页式虚拟存储管理中地址转换和页面置换,了页式虚拟存储管理中地址转换和页面置换逻辑地址,程序分离出逻辑地址的页号,查找页表,输出转换后的地址若缺页则提示中断发生,按进行页面置换,并修改输出页表输出置。
本程序有两个功能:一是地址转换;二是模拟页面置换情况。将逻辑地址中的页号分离出来,查找页表,将查找到的块号与FIFO的方法置换页面。数据结构array[max][2]为页表,其中array[n][0]为页号,array[n][1]为size_PT表示系统分配给进程的块数,即页表中的页数。地址算法思想
首先初始化页表:输入分配的块数(页表的大小),然后输入初始页表中的页号和相对应的块号,初始化完成后程序输出初始化
然后是地址转换:16进制逻辑地址,程序分离出逻辑地址的页号,然后查找页表,若缺页则提示中断发生,并修改页表,然后输出转换后的地址,输出页表。
()执行情况
程序提示“please input size f the page table:”,要求分配s_PT,即页表的大小。然后根据size_PT,循环输入初始化页表里的页号和对应的用来表示下一个将会被置换的页面存放位置,初始指向页(j+1)%size_PT循环。adderss wanted to be translated (0 exit):”,要求输入要转换的逻辑地址。程序分离出页号后查找页表,查找到则直接输出转换后的地址。否则提示“intermittence occurred, page A has been replaced with page B”。(A代表被置换的页号,B代表置换后的页号。然后再输出转换后的地址(16进制)。输出转换后的地址后,程序还把转换后的页表显示出来,可以(d)结果举例
设size_PT为3,初始化页表为Page:1 block:2 ,page:3 block:5,page:6 block:3输入逻辑地址4ff(程序假设页面大小为1k即1024)。其页号为1,查找页表,不产生缺页中断,块号为2,则输出8FF,页表不变。输入逻辑地址81a则其页号为2,查找页表,产生缺页中断,此时j指向page 6,page6置换为page 2,块号为3。则输出转换后的地址为ca,页表变为Page:1 :2,page:3block:5.page:2 block:3置换后j变成(2+1)%size_PT:0,指向页表中第一项page 1页面置换模拟:page_si
(a)算法思想
输入页面序列,缺页时按FIFO的策略进行页面置换,输出置假设页表大小不超过max,输入的页面数不超过max*lO。
(b)数据结构
arrayl[max]表示简化了的页表,只包含页号,array2[max*lO]
size_PT表示分配给该进程的块数,size2表示页面序列长度。
page_rep指向下一个将被置换的页面,初始为O,指向页表的occurred
表示有4次中断发生
五、参考程序
#include “stdio.h”
#define max 100 /*定义页面数组大小的上限*/
#define size_pa 1024
void add_tran()
{
int array[max][2];/*页表,其中array[n][0]为页号,array[n][1]为块号*/
int size_PT;
int no_page,no_block;/* no_page,no_block 分别是页号和块号*/
int if_quit1; /*if_quit1退出子程序标志*/
int i,j;/*j表示下一个将被置换的页面位置*/
int add_logic,add_sys;/*逻辑地址和绝对地址*/
int if_page;/*中断标志*/
if_quit1=0;/*退出标志*/
/*初始化页表*/
printf(“\n please input size of the page table: ”);
scanf(“%d”,size_PT);
j=size_PT-1;
printf(“\n now initialize the page table, please input page number and block number \n”);
for(i=0;I=size_PT;i++){
printf(“page number:”)
scanf(“%d”,no_page);
printf(“block number:”)
scanf(“%d”,no_block);
array[i][0]=no_page;
array[i][1]=no_block;
}
printf(“initia
文档评论(0)