实验三存储管理实验

实验三存储管理实验
实验三存储管理实验

实验三存储管理实验 Pleasure Group Office【T985AB-B866SYT-B182C-BS682T-STT18】

实验三存储管理实验

一. 目的要求:

1、通过编写和调试存储管理的模拟程序以加深对存储管理方案的理解。熟悉虚存管理的各种页面淘汰算法。

2、通过编写和调试地址转换过程的模拟程序以加强对地址转换过程的了解。二.实验内容:

1、设计一个固定式分区分配的存储管理方案,并模拟实现分区的分配和回收过程。

可以假定每个作业都是批处理作业,并且不允许动态申请内存。为实现分区的分配和回收,可以设定一个分区说明表,按照表中的有关信息进行分配,并根据分区的分配和回收情况修改该表。

算法描述:

本算法将内存的用户区分成大小相等的四个的分区,设一张分区说明表用来记录分区,其中分区的表项有分区的大小、起始地址和分区的状态,当系统为某个作业分配主存空间时,根据所需要的内存容量,在分区表中找到一个足够大的空闲分区分配给它,然后将此作业装入内存。如果找不到足够大的空闲分区,则这个作业暂时无法分配内存空间,系统将调度另一个作业。当一个作业运行结束时,系统将回收改作业所占据的分区并将该分区改为空闲。

算法原程序

#include ""

#include ""

#include <>

#include <>

#define PCB_NUM 5 行程序.");

printf("\n\t\t\t0.退出程序.");

scanf("%d",&m);

switch(m)

{

case1:

break;

case0:

system("cls");

menu();

break;

default:

system("cls");

break;

}

}

void paixu(struct MemInf* ComMem,int n)

{

int i,j,t;

for(j=0; j

for(i=0; i

if(ComMem[i].size>ComMem[i+1].size)

{

t=ComMem[i].size;

ComMem[i].size=ComMem[i+1].size;

ComMem[i+1].size=t;

}

}

void paixu2()

{

int i,j,t;

for(j=0; j<4; j++)

for(i=0; i<4-j; i++)

if(pcbList[i].size>pcbList[i+1].size)

{

t=pcbList[i].size;

pcbList[i].size=pcbList[i+1].size; pcbList[i+1].size=t;

}

}

void main()

{

DD:

menu();

char ch;

int i,j,n,a=0;

struct MemInf* ComMem;

system("cls");

printf("你要分多少个分区呢,请输入数值吧:");

scanf("%d",&n);

ComMem=(struct MemInf*)malloc(n*sizeof(struct MemInf));

printf("请划分内存固定大小分区:\n");ize);

if(i==0) ComMem[i].addr=40;ddr=ComMem[i-1].addr+ComMem[i-1].size;tate=0;ize+a;

if(a>=INT)

{

printf("超出规定内存范围");

ch=getchar();

ch=getchar();

goto DD;

}

}

paixu(ComMem,n);

cbID =1;

pcbList[0].RunState =0; ize=30;

pcbList[0].RunTime =0;

pcbList[0].TolTime =5;

pcbList[1].pcbID =2;

pcbList[1].RunState =0;

pcbList[1].size=15;

pcbList[1].RunTime =0;

pcbList[1].TolTime =6;

pcbList[2].pcbID =3;

pcbList[2].RunState =0;

pcbList[2].size=50;

pcbList[2].RunTime =0;

pcbList[2].TolTime =3;

pcbList[3].pcbID =4;

pcbList[3].RunState =0;

pcbList[3].size=120;

pcbList[3].RunTime =0;

pcbList[3].TolTime =4;

pcbList[4].pcbID =5;

pcbList[4].RunState =0;

pcbList[4].size=125;

pcbList[4].RunTime =0;

pcbList[4].TolTime =9;

ch=getchar();

ch=getchar();

while(pcbList[PCB_NUM-1].RunTime < pcbList[PCB_NUM-1].TolTime)

{

{

for(j=0; j

{tate ==0&& pcbList[j].RunState==0) ize >= pcbList[j].size) tate =pcbList[j].pcbID ;

pcbList[j].RunState=1;

}

}unTime >=pcbList[j].TolTime) tate == pcbList[j].pcbID)

{

ComMem[i].state =0; unState=2; unState==1&& pcbList[i].RunTime < pcbList[i].TolTime) unTime++;

cbID,pcbList[i].size, pcbList[i].RunState,

pcbList[i].TolTime ,pcbList[i].RunTime);

printf("分区ID\t 分区大小\t 状态\n");

for(i=0; i

printf("%d\t %d\t\t %d\n",i,ComMem[i].size ,ComMem[i].state );

printf("按回车键继续...\n");

getchar(); tart=-1;

frees[i].length=0;

strcpy(frees[i].tag,"free");

occupys[i].start=-1;

occupys[i].length=0;

strcpy(occupys[i].tag,"");

}

free_quantity=0;

occupy_quantity=0;

}

void writedata() tart);

printf("输入第%d个分区的长度:\n",j);

scanf("%d",&frees[i].length);

}

if((fp=fopen(fname,"wb"))==NULL)

printf("错误,文件打不开,请检查文件名\n");

for(i=0;i

if(fwrite(&frees[i],sizeof(struct node),1,fp)!=1)

printf("文件写入错误!\n");

fclose(fp);

}

void readdata() tart<=frees[t].start)

t=j;

}

frees[free_quantity].start=frees[i].start;

frees[free_quantity].length=frees[i].length;

frees[i].start=frees[t].start;

frees[i].length=frees[t].length;

frees[t].start=frees[free_quantity].start;

frees[t].length=frees[free_quantity].length;

}

}

void view() tart,frees[i].length,frees[i].tag);

printf("\n\n已分配分区表显示如下:\n");

printf("起始地址\t长度\t占用作业名\n");

for(j=0;j

printf("%6dk\t%10dk\t%s\t\n",occupys[j].start,occupys[j].length,occupys[j].t ag);

getchar();

getchar();

}

void earliest() ength>=joblength)

f=1;

}

if(f==0)

{

printf("\n当前没有能满足你申请长度的空闲内存,请稍候再试\n");

getchar();

}

else

{ ength>=joblength)

{

t=1;

}

j++;

}

j--;

occupys[occupy_quantity].start=frees[j].start; ag,jobname); occupys[occupy_quantity].length=joblength;

occupy_quantity++;

if(frees[j].length>joblength)

{

frees[j].start+=joblength;

frees[j].length-=joblength;

}

else

{

for(i=j;i

{

frees[i].start=frees[i+1].start;

frees[i].length=frees[i+1].length;

}

free_quantity--;

}

printf("作业申请内存空间成功!\n");

getchar();

getchar();

}

}

void excellent() ength>=joblength)

f=1;

}

if(f==0)

{

printf("\n当前没有能满足你申请长度的空闲内存,请稍候再试\n");

getchar();

}

else ength>=joblength)

{

t=1;

}

j++;

}

j--;

for(i=0;i

{

if(frees[i].length>=joblength&&frees[i].length

}

occupys[occupy_quantity].start=frees[j].start; ag,jobname);

occupys[occupy_quantity].length=joblength;

occupy_quantity++;

if(frees[j].length>joblength)

{

frees[j].start+=joblength;

frees[j].length-=joblength;

}

else

{

for(i=j;i

{

frees[i].start=frees[i+1].start;

frees[i].length=frees[i+1].length;

}

free_quantity--;

}

printf("作业申请内存空间成功!\n");

getchar();

getchar();

}

}

void worst()

{

char jobname[20];

int joblength,f=0;int i,j;

printf("请输入作业名:\n");

scanf("%s",&jobname);

printf("输入作业的长度:\n");

scanf("%d",&joblength);

for(i=0;i

{

if(frees[i].length>=joblength)

f=1;

}

if(f==0)

{

printf("\n当前没有能满足你申请长度的空闲内存,请稍候再试\n");

getchar();

getchar();

}

else ength>=joblength)

{

t=1;

}

j++;

}

j--;

for(i=0;i

{

if(frees[i].length>=joblength&&frees[i].length>frees[j].length) j=i;

}

occupys[occupy_quantity].start=frees[j].start; ag,jobname);

occupys[occupy_quantity].length=joblength;

occupy_quantity++;

if(frees[j].length>joblength)

{

frees[j].start+=joblength;

frees[j].length-=joblength;

}

else

{

for(i=j;i

{

frees[i].start=frees[i+1].start;

frees[i].length=frees[i+1].length;

}

free_quantity--;

}

printf("作业申请内存空间成功!\n");

getchar();

getchar();

}

}

void main()

{

initial();

int n;

writedata();

system("cls");

readdata();

for(;;)

{

sort();

printf("************************************\n"); printf("************************************\n"); printf("** 欢迎使用可变分区存储管理系统 **\n");

printf("************************************\n"); printf("** 1.显示空闲表和分配表 **\n");

printf("** 2.首次适应算法 **\n");

printf("** 3.最佳适应算法 **\n");

printf("** 4.最坏适应算法 **\n");

printf("** 0.退出系统 **\n"); printf("************************************\n"); printf("************************************\n"); printf("请输入您要选择的项目:\n");

scanf("%d",&n);

for(;;)

{

if(n<0||n>4)

{

printf("没有这个选项,请重新输入!");

scanf("%d",&n);

}

else

break;

}

switch(n)

{

case0:printf("感谢您的使用!再见!\n");exit(0);

case1:view();break;

case2:earliest();break;

case3:excellent();break;

case4:worst();break;

}

system("cls");

}

}

测试结果:

使用首次适应算法的结果:

使用最佳适应算法:

使用最坏适应算法:

内存过满:

3、编写并调试一个段页式存储管理的地址转换的模拟程序。

首先设计好段表、页表,然后给出若干个有一定代表性的地址,通过查找段表页表后得到转换的地址。

要求打印转换前的地址,相应的段表,页表条款及转换后的地址,以便检查。

代码实现

#include

#include

using namespace std;

typedef struct Quick

{

int qs;um>>ss[ss1].flag>>ss[ss1].plen>>ss[ss1].psta;

cout<<"请初始化第"<

for(int sss1=0; sss1

{

page[ss1][sss1].num=sss1;

cout<<"请输入该段第"<

"<

cin>>page[ss1][sss1].flag>>page[ss1][sss1].block;

}

}

um=bn;

cout<<"请输入第"<

cin>>work[bn].str;

}

lag!=1||page[][].flag!=1)

{

cout<<"该页不在内存请输入一页在内存中的作为快表,请输入要作为快表的段号和页号"<

cin>>>>;

}

=page[][].block;

menu();

}

void change()

{

cout<<"请输入要转化的逻辑地址,段号s,段内页号p,页内偏移地址

d(B)"<

int snum,pnum,dnum;

cin>>snum>>pnum>>dnum;

lock].str<

cout<<"物理地址是"<<*bbs*1024+dnum<

menu();

}

lag==0)

{

cout<<"缺段中断"<

menu();

}

else

{

len-1)

{

cout<<"缺页中断"<

menu();

}

else

{

if(pnum>=0&&pnum<=ss[ssnum].plen-1)

{

if(page[ssnum][pnum].flag==0)

{

cout<<"缺页中断"<

menu();

}

else

{

cout<<"找到该页"<<"查询页表后对应块号"<

cout<<"该块内存的数据是

"<

cout<<"转化得到的物理地址是:

"<

menu();

}

}

}

}

}

}

}

}

实验结果:

四、实验总结

本次实习内容存储管理,通过编写和调试存储管理的模拟程序加深了对存储管理方案的理解。熟悉虚存管理的各种页面淘汰算法。对算法有了更深刻的理解,就是动手能力太差。

实验三:存储管理

实验三:存储管理 IMB standardization office【IMB 5AB- IMBK 08- IMB 2C】

一、实验名称 实验三:存储管理 [1]Windows Server 2003内存结构 [2] Windows Server 2003虚拟内存 二、 [1]实验目的 1)通过实验了解windows Server 2003内存的使用,学习如何在应用程序中管理内存、体会Windows应用程序内存的简单性和自我防护能力。 2)了解windows Server 2003的内存结构和虚拟内存的管理,进而了解进程堆和windows为使用内存而提供的一些扩展功能。 三、 [1]实验内容 四、 [1]实验步骤 Windows提供了一个API即GetSystemInfo() ,以便用户能检查系统中虚拟内存的一些特性。程序5-1显示了如何调用该函数以及显示系统中当前内存的参数。 步骤1:登录进入Windows Server 2003 。 步骤2:在“开始”菜单中单击“程序”-“Microsoft Visual Studio 6.0”–“Microsoft Visual C++ 6.0”命令,进入Visual C++窗口。 步骤3:在工具栏单击“打开”按钮,在“打开”对话框中找到并打开实验源程序。 程序5-1:获取有关系统的内存设置的信息 步骤4:单击“Build”菜单中的“Compile ”命令,并单击“是”按钮确认。系统对进行编译。 步骤5:编译完成后,单击“Build”菜单中的“Build ”命令,建立可执行文件。 操作能否正常进行如果不行,则可能的原因是什么 答:操作能正常进行。 _____________________________________________________ 步骤6:在工具栏单击“Execute Program” (执行程序) 按钮,执行程序。 运行结果 (分行书写。如果运行不成功,则可能的原因是什么?) : 1) 虚拟内存每页容量为: 2) 最小应用地址: 0x00010000 3) 最大应用地址为: 0x7ffeffff 4) 当前可供应用程序使用的内存空间为: 5) 当前计算机的实际内存大小为: 阅读和分析程序5-1,请回答问题:

四川大学 操作系统上机实验 实验五 Windows虚拟存储器管理

实验报告 实验名称:Windows虚拟存储器管理 实验时间:2013年5月27日 实验人员:____郑笑凡___(姓名)__1143041243__(学号)____2011____(年级) 实验目的:1、了解Windows 2000/XP的内存管理机制,掌握页式虚拟存储技术。 2、理解内存分配原理,特别是以页面为单位的虚拟内存分配方法。 3、学会使用Windows 2000/XP下内存管理的基本API函数 实验环境:windows xp 实验步骤: 1、下载virtumem.cpp; 2、建立工程,将virtumen.cpp加入; 3、编译工程,观察结果,确信六种状态都出现至少一次,必要时可改程 序,方便观察结果; 4、看懂程序,按要求另写一段小程序; 5、编译,执行,观察结果。 6,总结。 实验陈述: 1、基础知识: pagefile.sys文件的位置在:__安装的系统盘根目录下____________________________________此文件的作用:____实现物理内存的扩展__________________________________________________ 改变此文件大小的方法:右击”我的电脑”,依次选择”属性”—“高级”—“性能选项”— “更改”_______________________________________ 虚拟地址空间中的页面分为:提交页面,保留页面,空闲页面 页面的操作可以分为:保留、提交、回收、释放、加锁 2、编程准备. 页面属性是在结构体MEMORY_BASIC_INFORMATION_的字段AllocationProtect 和字段中Protect体现出来的。 简述VirtualFree,VirtualPtotect,VirtualLock,VirtualUnlock,VirtualQuery的作用:_ VirtualFree:__释放虚存___________________________________________________ VirtualPtotect:_保留虚存_________________________________________________ VirtualLock:___加锁虚存_________________________________________________ VirtualUnlock:_解锁虚存________________________________________________ VirtualQuery:____查询虚存_______________________________________________ 3、编程 1)将virtumem.cpp加入工程,编译,执行。 是否能编译成功?是 请描述运行结果:

南京中医药大学虚拟存储器管理实验

实验三虚拟存储管理 实验性质:验证 建议学时:3 实验目的: 存储管理的主要功能之一是合理的分配空间。请求页式管理是一种常用的虚拟存储管理技术。本实验的目的是请求页式存储管理中页面置换算法模拟设计,了解虚拟存储技术的特点,掌握请求页式存储管理的页面置换方法。 预习内容: 阅读教材《计算机操作系统》第四章,掌握存储器管理相关概念和原理。 实验内容: (1)通过随机数产生一个指令序列,共320条指令。指令的地址按下述原则生成: ①50%的指令是顺序执行的; ②25%的指令是均匀分布在前地址部分; ③25%的指令是均匀分布在后地址部分。 具体的实施方法是: ①在[0,319]的指令地址之间随机选取一起点m; ②顺序执行一条指令,即执行地址为m+1的指令; ③在前地址[0,m+1]中随机选取一条指令并执行,该指令的地址为m’; ④顺序执行一条指令,其地址为m’+1; ⑤在后地址[m’+2,319]中随机选取一条指令并执行; ⑥重复上述步骤,直至执行320次指令。 (2)将指令序列变换成页地址流。 设:①页面大小为1K; ②用户内存容量为10块到32块; ③用户虚存容量为32K; 在用户虚存中,按每页存放10条指令排列虚存地址,即320条指令在虚存中的存放方式为: 第0条~第9条指令为第0页(对应的虚存地址为[0,9]); 第10条~第19条指令为第1页(对应的虚存地址为[10,19]); …… 第310条~第319条指令为第31页(对应的虚存地址为[310,319]); 按以上方式,用户指令可组成32页。 (3)计算并输出下述各种算法在不同的内存容量下的缺页率。 ①先进先出的算法(FIFO); ②最近最少使用算法(LRU); ③最佳淘汰法(OPT):先淘汰最不常用的页地址; ④最少访问页面算法(LFU)。 缺页率=(页面失效次数)/(页地址流长度)= 缺页中断次数/ 320 在本实验中,页地址流的长度为320,页面失效次数为每次访问相应指令时,该指令所对应的页不在内存的次数。

实验三存储管理实验

实验三存储管理实验 Pleasure Group Office【T985AB-B866SYT-B182C-BS682T-STT18】

实验三存储管理实验 一. 目的要求: 1、通过编写和调试存储管理的模拟程序以加深对存储管理方案的理解。熟悉虚存管理的各种页面淘汰算法。 2、通过编写和调试地址转换过程的模拟程序以加强对地址转换过程的了解。二.实验内容: 1、设计一个固定式分区分配的存储管理方案,并模拟实现分区的分配和回收过程。 可以假定每个作业都是批处理作业,并且不允许动态申请内存。为实现分区的分配和回收,可以设定一个分区说明表,按照表中的有关信息进行分配,并根据分区的分配和回收情况修改该表。 算法描述: 本算法将内存的用户区分成大小相等的四个的分区,设一张分区说明表用来记录分区,其中分区的表项有分区的大小、起始地址和分区的状态,当系统为某个作业分配主存空间时,根据所需要的内存容量,在分区表中找到一个足够大的空闲分区分配给它,然后将此作业装入内存。如果找不到足够大的空闲分区,则这个作业暂时无法分配内存空间,系统将调度另一个作业。当一个作业运行结束时,系统将回收改作业所占据的分区并将该分区改为空闲。 算法原程序 #include "" #include "" #include <>

#include <> #define PCB_NUM 5 行程序."); printf("\n\t\t\t0.退出程序."); scanf("%d",&m); switch(m) { case1: break; case0: system("cls"); menu(); break; default: system("cls"); break; } } void paixu(struct MemInf* ComMem,int n) { int i,j,t; for(j=0; jComMem[i+1].size) { t=ComMem[i].size; ComMem[i].size=ComMem[i+1].size; ComMem[i+1].size=t; } } void paixu2() { int i,j,t; for(j=0; j<4; j++) for(i=0; i<4-j; i++) if(pcbList[i].size>pcbList[i+1].size) { t=pcbList[i].size; pcbList[i].size=pcbList[i+1].size; pcbList[i+1].size=t; } } void main() { DD: menu();

操作系统实验五虚拟存储器管理

操作系统实验 实验五虚拟存储器管理 学号1115102015 姓名方茹 班级11 电子A 华侨大学电子工程系

实验五虚拟存储器管理 实验目的 1、理解虚拟存储器概念。 2、掌握分页式存储管理地址转换盒缺页中断。 实验内容与基本要求 1、模拟分页式存储管理中硬件的地址转换和产生缺页中断。 分页式虚拟存储系统是把作业信息的副本存放在磁盘上,当作业被选中时,可把作业的开始几页先装入主存且启动执行。为此,在为作业建立页表时,应说 明哪些页已在主存,哪些页尚未装入主存。作业执行 时,指令中的逻辑地址指出了参加运算的操作存放的页号和单元号,硬件的地址转 换机构按页号查页表,若该页对应标志为“ 1”,则表示该页 已在主存,这时根据关系式“绝对地址 =块号×块长 +单元号”计算出欲访问的主 存单元地址。如果块长为 2 的幂次,则可把块号作为高地址部分,把单元号作为低 地址部分,两者拼接而成绝对地址。若访问的页对 应标志为“ 0”,则表示该页不在主存,这时硬件发“缺页中断”信号, 有操作系统按该页在磁盘上的位置,把该页信息从磁盘读出装入主存后 再重新执行这条指令。设计一个“地址转换”程序来模拟硬件的地址转 换工作。当访问的页在主存时,则形成绝对地址,但不去模拟指令的执 行,而用输出转换后的地址来代替一条指令的执行。当访问的页不在主 存时,则输出“ * 该页页号”,表示产生了一次缺页中断。 2、用先进先出页面调度算法处理缺页中断。 FIFO 页面调度算法总是淘汰该作业中最先进入主存的那一页,因此可以用一个数组来表示该作业已在主存的页面。假定作业被选中时, 把开始的 m 个页面装入主存,则数组的元素可定为m 个。 实验报告内容 1、分页式存储管理和先进先出页面调度算法原理。 分页式存储管理的基本思想是把内存空间分成大小相等、位置固定

操作系统实验之内存管理实验报告

学生学号 实验课成绩 武汉理工大学 学生实验报告书 实验课程名称 计算机操作系统 开 课 学 院 计算机科学与技术学院 指导老师姓名 学 生 姓 名 学生专业班级 2016 — 2017 学年第一学期

实验三 内存管理 一、设计目的、功能与要求 1、实验目的 掌握内存管理的相关内容,对内存的分配和回收有深入的理解。 2、实现功能 模拟实现内存管理机制 3、具体要求 任选一种计算机高级语言编程实现 选择一种内存管理方案:动态分区式、请求页式、段式、段页式等 能够输入给定的内存大小,进程的个数,每个进程所需内存空间的大小等 能够选择分配、回收操作 内购显示进程在内存的储存地址、大小等 显示每次完成内存分配或回收后内存空间的使用情况 二、问题描述 所谓分区,是把内存分为一些大小相等或不等的分区,除操作系统占用一个分区外,其余分区用来存放进程的程序和数据。本次实验中才用动态分区法,也就是在作业的处理过程中划分内存的区域,根据需要确定大小。 动态分区的分配算法:首先从可用表/自由链中找到一个足以容纳该作业的可用空白区,如果这个空白区比需求大,则将它分为两个部分,一部分成为已分配区,剩下部分仍为空白区。最后修改可用表或自由链,并回送一个所分配区的序号或该分区的起始地址。 最先适应法:按分区的起始地址的递增次序,从头查找,找到符合要求的第一个分区。

最佳适应法:按照分区大小的递增次序,查找,找到符合要求的第一个分区。 最坏适应法:按分区大小的递减次序,从头查找,找到符合要求的第一个分区。 三、数据结构及功能设计 1、数据结构 定义空闲分区结构体,用来保存内存中空闲分区的情况。其中size属性表示空闲分区的大小,start_addr表示空闲分区首地址,next指针指向下一个空闲分区。 //空闲分区 typedef struct Free_Block { int size; int start_addr; struct Free_Block *next; } Free_Block; Free_Block *free_block; 定义已分配的内存空间的结构体,用来保存已经被进程占用了内存空间的情况。其中pid作为该被分配分区的编号,用于在释放该内存空间时便于查找。size表示分区的大小,start_addr表示分区的起始地址,process_name存放进程名称,next指针指向下一个分区。 //已分配分区的结构体 typedef struct Allocate_Block { int pid; int size; int start_addr; char process_name[PROCESS_NAME_LEN]; struct Allocate_Block *next; } Allocate_Block; 2、模块说明 2.1 初始化模块 对内存空间进行初始化,初始情况内存空间为空,但是要设置内存的最大容量,该内存空间的首地址,以便之后新建进程的过程中使用。当空闲分区初始化

操作系统实验三(题目四)实验报告_李旦兰_20083308

操作系统实验三 实验报告 姓名李旦兰学号20083308 班级软件0802 指导教师那俊 实验名称存储管理 开设学期2010 – 2011第一学期 评定成绩 评定人签字 评定日期 东北大学软件学院2010年11月

实验三_B 一.实验题目 用高级语言编写和调试一个简单的文件系统,模拟文件管理的工作过程。(题目四)二.实验目的 (1)进一步认识虚拟存储器的工作原理; (2)进一步认识文件系统的内部功能以及内部实现; (3)深入理解操作系统中文件系统的理论知识,加深对教材中的重要算法的理解; (4)掌握操作系统的原理及实现方法,提高综合运用各专业课知识的能力。 三.实验内容以及要求 (1)设计一个支持n个用户的简单二级文件系统,每个用户可保存m个文件,用户在一次运行中只能打开一个文件; (2)采用二级或二级以上的多级文件目录管理; (3)对文件应设置存取控制保护方式,如“只能执行”、“允许读”、“允许写等”;(4)系统的外部特征应接近于真实系统,可设置下述文件操作命令:Login 用户登录;Dir 列出文件目录; Create 建立文件;Delete 删除文件; Read 读文件;Write 写文件;Open 打开文件; Close 关闭文件。 (5)通过键盘使用该文件系统,系统应显示操作命令的执行结果。 四.实验环境 操作系统:Windows 7 开发语言:VC++ 开发工具:Microsoft Visual C++ 2008 Express Edition 五.程序设计思想 通过阅读实验指导书,整理出实验大体的思路,确定实体以及它们之间的关系。实体关系有三张表(主文件目录,用户文件目录以及打开文件目录)、命令服务和用户构成。用户负责输入命令。命令服务实现命令检查以及调用相关模块执行相应的命令功能。 (1)主文件目录(MFD),包括用户名和文件目录指针; struct user MFD[1]={{"0",0}};//MFD(用户名文件目录指针) (2)用户文件目录(UFD),包括文件名、保护码以及文件长度; struct file UFD[10];//用户文件目录(UFD-文件名保护码文件长度) (3)打开文件目录(AFD),包括打开文件名、打开保护码以及读写指针。采用数组形式存储打开的文件,数组每个元素保存一个打开文件的信息 struct file AFD[5]={{"0",0,0,0},{"0",0,0,0},{"0",0,0,0},{"0",0,0,0},{"0",0,0,0}};//运行文件目录(AFD)——一次运行用户可以打开个文件 在此模拟文件管理系统中可以实现的操作有: (1)用户登录:login,用户通过登录从而使用系统功能; (2)创建文件:create,创建一个指定名字的新文件,即在目录中增加一项,不考虑

实验三 存储管理指导

实验三存储管理 实验目的 1) 加深对存储管理的理解; 2) 掌握几种页面置换算法; 3) 通过实验比较各种置换算法的优劣。 实验要求 1) 编写程序完成实验内容; 2) 对测试数据进行分析; 3) 撰写实验报告。 实验内容 1) 定义为进程分配的物理块数; 2)定义进程运行所需访问的页面号; 3)定义页的结构; 4)模拟两种页面置换算法; 5)计算页面置换算法的命中率; 6)比较两种算法的优劣。 实验原理 1.虚拟存储 基于局部性原理,应用程序在运行之前,没有必要全部装入内存,仅须将那些当前要运行的少数页面或段先装入内存便可运行,其余部分暂留在盘上。程序在运行时,如果它所要访问的页(段)已调入内存,便可继续执行下去;但如果程序所要访问的页(段)尚未调入内存(称为缺页或缺段),此时程序应利用OS所提供的请求调页(段)功能,将它们调入内存,以使进程能继续执行下去。如果此时内存已满,无法再装入新的页(段),则还须再利用页(段)

的置换功能,将内存中暂时不用的页(段)调至盘上,腾出足够的内存空间后,再将要访问的页(段)调入内存,使程序继续执行下去。 2.页面置换算法 1)最佳(Optimal)置换算法 最佳置换算法是由Belady于1966年提出的一种理论上的算法。其所选择的被淘汰页面,将是以后永不使用的,或许是在最长(未来)时间内不再被访问的页面。采用最佳置换算法,通常可保证获得最低的缺页率。但由于人们目前还无法预知一个进程在内存的若干个页面中,哪一个页面是未来最长时间内不再被访问的,因而该算法是无法实现的,但可以利用该算法去评价其它算法。 2)最近最久未使用(LRU)置换算法 FIFO置换算法性能之所以较差,是因为它所依据的条件是各个页面调入内存的时间,而页面调入的先后并不能反映页面的使用情况。最近最久未使用(LRU)的页面置换算法,是根据页面调入内存后的使用情况进行决策的。由于无法预测各页面将来的使用情况,只能利用“最近的过去”作为“最近的将来”的近似,因此,LRU置换算法是选择最近最久未使用的页面予以淘汰。该算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历的时间t,当须淘汰一个页面时,选择现有页面中其t值最大的,即最近最久未使用的页面予以淘汰。 LRU置换算法虽然是一种比较好的算法,但要求系统有较多的支持硬件。为了了解一个进程在内存中的各个页面各有多少时间未被进程访问,以及如何快速地知道哪一页是最近最久未使用的页面,须有两类硬件之一的支持:寄存器或栈。 a)寄存器 为了记录某进程在内存中各页的使用情况,须为每个在内存中的页面配置一个移位寄存器,可表示为R=R n-1R n-2R n-3… R2R1R0当进程访问某物理块时,要将相应寄存器的R n-1位置成1。此时,定时信号将每隔一定时间(例如100 ms)将寄存器右移一位。如果我们把n位寄存器的数看做是一个整数,那么,具有最小数值的寄存器所对应的页面,就是最近最久未使用的页面。 b)栈 可利用一个特殊的栈来保存当前使用的各个页面的页面号。每当进程访问某页面时,便将该页面的页面号从栈中移出,将它压入栈顶。因此,栈顶始终是最新被访问页面的编号,而栈底则是最近最久未使用页面的页面号。

虚拟存储器管理实验报告

淮海工学院计算机科学系实验报告书 课程名:《操作系统》 题目:虚拟存储器管理 页面置换算法模拟实验 班级: 学号: 姓名:

一、实验目的与要求 1.目的: 请求页式虚存管理是常用的虚拟存储管理方案之一。通过请求页式虚存管理中对页面置换算法的模拟,有助于理解虚拟存储技术的特点,并加深对请求页式虚存管理的页面调度算法的理解。 2.要求: 本实验要求使用C语言编程模拟一个拥有若干个虚页的进程在给定的若干个实页中运行、并在缺页中断发生时分别使用FIFO和LRU算法进行页面置换的情形。其中虚页的个数可以事先给定(例如10个),对这些虚页访问的页地址流(其长度可以事先给定,例如20次虚页访问)可以由程序随机产生,也可以事先保存在文件中。要求程序运行时屏幕能显示出置换过程中的状态信息并输出访问结束时的页面命中率。程序应允许通过为该进程分配不同的实页数,来比较两种置换算法的稳定性。 二、实验说明 1.设计中虚页和实页的表示 本设计利用C语言的结构体来描述虚页和实页的结构。 在虚页结构中,pn代表虚页号,因为共10个虚页,所以pn的取值范围是0—9。pfn代表实页号,当一虚页未装入实页时,此项值为-1;当该虚页已装入某一实页时,此项值为所装入的实页的实页号pfn。time项在FIFO算法中不使用,在LRU中用来存放对该虚页的最近访问时间。 在实页结构中中,pn代表虚页号,表示pn所代表的虚页目前正放在此实页中。pfn代表实页号,取值范围(0—n-1)由动态指派的实页数n所决定。next是一个指向实页结构体的指针,用于多个实页以链表形式组织起来,关于实页链表的组织详见下面第4点。 2.关于缺页次数的统计 为计算命中率,需要统计在20次的虚页访问中命中的次数。为此,程序应设置一个计数器count,来统计虚页命中发生的次数。每当所访问的虚页的pfn项值不为-1,表示此虚页已被装入某实页内, 此虚页被命中,count加1。最终命中率=count/20*100%。 3.LRU算法中“最近最久未用”页面的确定 为了能找到“最近最久未用”的虚页面,程序中可引入一个时间计数器countime,每当要访问 一个虚页面时,countime的值加1,然后将所要访问的虚页的time项值设置为增值后的当前

操作系统实验内存分配

精心整理西安邮电大学 (计算机学院) 课内实验报告 1. (1 (2 (3 原因,写出实验报告。 2.实验要求: 1)掌握内存分配FF,BF,WF策略及实现的思路; 2)掌握内存回收过程及实现思路; 3)参考本程序思路,实现内存的申请、释放的管理程序,调试运行,总结程序设计中出现的问题并找出原因,写出实验报告。

3.实验过程: 创建进程: 删除其中几个进程:(默认以ff首次适应算法方式排列) Bf最佳适应算法排列方式: wf最差匹配算法排列方式: 4.实验心得: 明 实验中没有用到循环首次适应算法,但是对其他三种的描述还是很详细,总的来说,从实验中还是学到了很多。 5.程序源代码: #include #include #include #include

#define PROCESS_NAME_LEN 32 //进程名长度 #define MIN_SLICE 10 //最小碎片的大小#define DEFAULT_MEM_SIZE 1024 //内存大小 #define DEFAULT_MEM_START 0 //起始位置 /*内存分配算法*/ #define MA_FF 1 #define MA_BF 2 #define MA_WF 3 /*描述每一个空闲块的数据结构*/ struct free_block_type { }; /* /* { }; /* /* void display_menu(); int set_mem_size(); void set_algorithm(); void rearrange(int algorithm); int rearrange_WF(); int rearrange_BF(); int rearrange_FF(); int new_process(); int allocate_mem(struct allocated_block *ab);

操作系统实验五虚拟存储器管理

. 操作系统实验 实验五虚拟存储器管理 学号 1115102015 姓名方茹 班级 11电子A 华侨大学电子工程系

实验五虚拟存储器管理 实验目的 1、理解虚拟存储器概念。 2、掌握分页式存储管理地址转换盒缺页中断。 实验内容与基本要求 1、模拟分页式存储管理中硬件的地址转换和产生缺页中断。 分页式虚拟存储系统是把作业信息的副本存放在磁盘上,当作业被选中时,可把作业的开始几页先装入主存且启动执行。为此,在为作业 建立页表时,应说明哪些页已在主存,哪些页尚未装入主存。作业执行 时,指令中的逻辑地址指出了参加运算的操作存放的页号和单元号,硬 件的地址转换机构按页号查页表,若该页对应标志为“1”,则表示该页 已在主存,这时根据关系式“绝对地址=块号×块长+单元号”计算出欲 访问的主存单元地址。如果块长为2 的幂次,则可把块号作为高地址部 分,把单元号作为低地址部分,两者拼接而成绝对地址。若访问的页对 应标志为“0”,则表示该页不在主存,这时硬件发“缺页中断”信号, 有操作系统按该页在磁盘上的位置,把该页信息从磁盘读出装入主存后 再重新执行这条指令。设计一个“地址转换”程序来模拟硬件的地址转 换工作。当访问的页在主存时,则形成绝对地址,但不去模拟指令的执 行,而用输出转换后的地址来代替一条指令的执行。当访问的页不在主 存时,则输出“* 该页页号”,表示产生了一次缺页中断。 2、用先进先出页面调度算法处理缺页中断。 FIFO 页面调度算法总是淘汰该作业中最先进入主存的那一页,因此可以用一个数组来表示该作业已在主存的页面。假定作业被选中时, 把开始的m 个页面装入主存,则数组的元素可定为m 个。 实验报告内容 1、分页式存储管理和先进先出页面调度算法原理。 分页式存储管理的基本思想是把内存空间分成大小相等、位置固定

【VR虚拟现实】实验虚拟存储器

实验9、Windows虚拟内存 1 背景知识 在Windows环境下,4GB的虚拟地址空间被划分成两个部分:低端2GB提供给进程使用,高端2GB提供给系统使用。这意味着用户的应用程序代码,包括DLL以及进程使用的各种数据等,都装在用户进程地址空间内(低端2GB)。用户过程的虚拟地址空间也被分成三部分: 1)虚拟内存的已调配区(committed):具有备用的物理内存,根据该区域设定的访问权限,用户可以进行写、读或在其中执行程序等操作。 2)虚拟内存的保留区(reserved):没有备用的物理内存,但有一定的访问权限o 3)虚拟内存的自由区(free):不限定其用途,有相应的PAGE_NOACCESS权限。 与虚拟内存区相关的访问权限告知系统进程可在内存中进行何种类型的操作。例如,用户不能在只有PAGE_READONLY权限的区域上进行写操作或执行程序;也不能在只有PAGE_EXECUTE权限的区域里进行读、写操作。而具有PAGE_NOACCESS权限的特殊区域,则意味着不允许进程对其地址进行任何操作。 在进程装入之前,整个虚拟内存的地址空间都被设置为只有PAGE_NOACCESS权限的自由区域。当系统装入进程代码和数据后,才将内存地址的空间标记为已调配区或保留区,并将诸如EXECUTE、READWRITE和READONLY的权限与这些区域相关联。 如表1所示,给出了MEMORY_BASIC_INFORMATION的结构,此数据描述了进程虚拟内存空间中一组虚拟内存页面的当前状态,其中State项表明这些区域是否为自由区、已调配区或保留区;Protect项则包含了Windows系统为这些区域添加了何种访问保护;Type项则表明这些区域是可执行图像、内存映射文件还是简单的私有内存。

实验4内存管理资料讲解

实验 4 内存管理

实验4内存管理 学校:FJUT 学号:3131903229 班级:计算机1302姓名:姜峰 注:其中LFU和NRU算法运行结果可能与其他人不同,只是实现方式不同,基本思路符合就可以。 .实验学时与类型 学时:2,课外学时:自定 实验类型:设计性实验二.实验目的 模拟实现请求页式存储管理中常用页面置换算法,理会操作系统对内存的 调度管理。 三?实验内容 要求:各算法要给出详细流程图以及执行结果截图。 假设有一程序某次运行访问的页面依次是: 0,124,3,4,5,1,2,5,1,2,3,4,5,6 ,请给出采用下列各页面置换算法时页面的换进换出情况,并计算各调度算法的命中率(命中率二非缺页次数/总访问次数),初始物理内存为空,物理内存可在4?20页中选择。 (1)FIFO :最先进入的页被淘汰; (2)LRU :最近最少使用的页被淘汰; (3)OPT :最不常用的页被淘汰;(选做) ⑷LFU :访问次数最少的页被淘汰(LFU)。(选做)

源代码: #i nclude #include #in elude #i nclude #defi ne MAXNUM 100 struct Phy_Memory{ //定义一个物理内存结构体 char Page; int time; }; char *OutPut; struct Phy_Memory *Phy_Page; void Print(char *PageStr,int Phy_PageNum,int absence){ // 打印图解函数int i,j; for(i=0;iPage!=*Temp;i++); if(i

存储管理实验报告.doc

存储管理实验报告

北方工业大学 《计算机操作系统》实验报告 实验名称存储管理实验序号 2 实验日期2013.11.27实验人 一、实验目的和要求 1.请求页式存储管理是一种常用的虚拟存储管理技术。本实验目的 是通过请求页式存储管理中页面置换算法的模拟设计,了解虚拟存储 技术的特点,掌握请求页式存储管理的页面置换算法。 二、相关背景知识 1.随机数产生办法 关于随机数产生办法, Linux 或 UNIX 系统提供函数 srand() 和 rand() ,分 别进行初始化和产生随机数。 三、实验内容 (1).通过随机数产生一个指令序列,共320条指令。指令的地址按下述原则生成: 1.50% 的指令是顺序执行的; 2.25% 的指令是均匀分布在前地址部分; 3.25% 的指令是均匀分布在后地址部 分;具体的实施方法是: 1.在[0, 319]的指令地址之间随机选取一起点 m; 2.顺序执行一条指令,即执行地址为 m+1 的指令; 3.在前地址[0,m+1]中随机选取一条指令并执行,该指令的地址为m’; 4.顺序执行一条指令,其地址为 m’+1; 5.在后地址 [m ’+2, 319]中随机选取一条指令并执行; 6.重复上述步骤 1~5,直到执行 320 次指令。 (2)将指令序列变换成页地址流,设 1.页面大小为 1K ; 2.用户内存容量为 4 页到 32 页; 3.用户虚存容量为 32K 。 在用户虚存中,按每 K 存放 10 条指令排列虚存地址,即 320 条指令在虚存 中存放的方式为: 第 0 条至第 9 条指令为第 0 页(对应虚存地址为 [0, 9]); 第 10 条至第 19 条指令为第 1 页(对应虚存地址为 [10, 19]); 第 310 条至第 319 条指令为第 31 页(对应虚存地址为 [310,319]); 按以上方式,用户指令可以组成 32 页。 (3)计算并输出下述各种算法在不同内存容量下的命中率。

虚拟存储器管理 面置换算法模拟实验

淮海工学院计算机工程学院实验报告书 课程名:《操作系统原理A 》 题目: 虚拟存储器管理 页面置换算法模拟实验 班级: 软件*** 学号: 20**1228** 姓名: ****

一、实验目的与要求 1.目的: 请求页式虚存管理就是常用的虚拟存储管理方案之一。通过请求页式虚存管理中对页面置换算法的模拟,有助于理解虚拟存储技术的特点,并加深对请求页式虚存管理的页面调度算法的理解。 2.要求: 本实验要求使用C语言编程模拟一个拥有若干个虚页的进程在给定的若干个实页中运行、并在缺页中断发生时分别使用FIFO与LRU算法进行页面置换的情形。其中虚页的个数可以事先给定(例如10个),对这些虚页访问的页地址流(其长度可以事先给定,例如20次虚页访问)可以由程序随机产生,也可以事先保存在文件中。要求程序运行时屏幕能显示出置换过程中的状态信息并输出访问结束时的页面命中率。程序应允许通过为该进程分配不同的实页数,来比较两种置换算法的稳定性。 二、实验说明 1.设计中虚页与实页的表示 本设计利用C语言的结构体来描述虚页与实页的结构。 在虚页结构中,pn代表虚页号,因为共10个虚页,所以pn的取值范围就是0—9。pfn代表实页号,当一虚页未装入实页时,此项值为-1;当该虚页已装入某一实页时,此项值为所装入的实页的实页号pfn。time项在FIFO算法中不使用,在LRU中用来存放对该虚页的最近访问时间。 在实页结构中中,pn代表虚页号,表示pn所代表的虚页目前正放在此实页中。pfn代表实页号,取值范围(0—n-1)由动态指派的实页数n所决定。next就是一个指向实页结构体的指针,用于多个实页以链表形式组织起来,关于实页链表的组织详见下面第4点。 2.关于缺页次数的统计 为计算命中率,需要统计在20次的虚页访问中命中的次数。为此,程序应设置一个计数器count,来统计虚页命中发生的次数。每当所访问的虚页的pfn项值不为-1,表示此虚页已被装入某实页内, 此虚页被命中,count加1。最终命中率=count/20*100%。 3.LRU算法中“最近最久未用”页面的确定 为了能找到“最近最久未用”的虚页面,程序中可引入一个时间计数器countime,每当要访问一个虚页面时,countime的值加1,然后将所要访问的虚页的time项值设置为增值后的当前countime 值,表示该虚页的最后一次被访问时间。当LRU算法需要置换时,从所有已分配实页的虚页中找出

实验三 虚拟存储器管理

实验三虚拟存储器管理 一、实验目的 为了使大的进程(其地址空间超过主存可用空间)或多个进程的地址空间之和超过实际主存空间时,仍能运行,引入了虚拟存储器的概念。使进程的一部分地址空间在主存,另一部分在辅存,由操作系统实现多级存储器的自动管理,实现主存空间的自动覆盖。模拟请求分页虚拟存储器管理技术中的硬件地址变换、缺页中断以及页式置换算法,处理缺页中断。 通过本实验,使学生对请求分页存储管理的概念有一个清楚的理解。 二、实验内容 1、模拟请求分页存储管理中的硬件地址变换的过程 (1)请求分页虚拟存储器管理技术是把进程地址空间的全部信息存放在磁盘对换区上。当进程被选中运行时,先把进程的开始几页装入主存并启动运行。为此在为进程建立页表时,应说明哪些页已在主存,哪些页不在主存。页表的格式如表1 所示。 在表1中 ①"标志位"表示对应页是否已经装入主存的标志: "0"表示对应页未装入主存;"1"表示对应页已装入主存。 ②"主存块号"表示该页对应的主存块号。 ③"修改位"指示该页进主存后是否修改过的标志。 ④"外存地址"表示该页所在的外存地址。 设计一个主存分块表,假定分配给进程的主存块数为M,且该进程开始的M页已装入主存。 (2)进程执行时,指令中的逻辑地址指出指令或操作数的地址中的页号和页内地址。硬件地址转换机构按页号查页表。 ①若该页的有效位为"1" ,表示该页已在主存,从而找到该页对应的主存块号。根据如下的关系式,计算出欲访问的主存地址: 绝对地址=块号×块的长度+页内地址 由于页的大小为2 的整次幕,所以只要将块号与页内地址相拼接,放入主存地址寄存器,形成绝对地址。不去模拟指令的执行,而是输出被转换的地址即可。 ②若该页的有效位为"0" ,对应的页不在主存,由硬件产生缺页中断,转操作系统处理。这里不去设计缺页处理程序,仅输出"*该页号的页不在主存,产生缺页中断"即可,以表示产生了一次缺页中断。 假定主存的每块长度为128个字节。现有一个具有8页的进程,系统为它分配了4 个主存块(即m=4)。其中第0~3页已经装入主存。该进程的页表如表2 所示,进程执行的指令序列如表3 所示,地址变换算法流程如图1所示。

操作系统 内存管理实验报告

同组同学学号: 同组同学姓名: 实验日期:交报告日期: 实验(No. 4 )题目:编程与调试:内存管理 实验目的及要求: 实验目的: 操作系统的发展使得系统完成了大部分的内存管理工作,对于程序员而言,这些内存管理的过程是完全透明不可见的。因此,程序员开发时从不关心系统如何为自己分配内存,而且永远认为系统可以分配给程序所需的内存。在程序开发时,程序员真正需要做的就是:申请内存、使用内存、释放内存。其它一概无需过问。本章的3个实验程序帮助同学们更好地理解从程序员的角度应如何使用内存。 实验要求: 练习一:用vim编辑创建下列文件,用GCC编译工具,生成可调试的可执行文件,记录并分析执行结果,分析遇到的问题和解决方法。 练习二:用vim编辑创建下列文件,用GCC编译工具,生成可调试的可执行文件,记录并分析执行结果。 练习三:用vim编辑创建下列文件,用GCC编译工具,生成可调试的可执行文件,记录并分析执行结果。 改编实验中的程序,并运行出结果。 实验设备:多媒体电脑 实验内容以及步骤: 在虚拟机中编写好以下程序: #include #include #include int main(void) { char *str; /* 为字符串申请分配一块内存*/ if ((str = (char *) malloc(10)) == NULL) { printf("Not enough memory to allocate buffer\n"); return(1); /* 若失败则结束程序*/ } /* 拷贝字符串“Hello”到已分配的内存空间*/ strcpy(str, "Hello"); /* 显示该字符串*/ printf("String is %s\n", str); /* 内存使用完毕,释放它*/ free(str); return 0; } 调试过后得出的结果截图如下:(由图可看出我将此程序以aa.c为文件名保存,调试后出现aa1文件,调试结果出现语句“String is Hello”)

操作系统-实验六虚拟存储器实验报告

计算机与信息工程学院实验报告 一、实验内容 实验一:模拟分页式存储管理中硬件的地址转换和产生缺页中断。 [提示] (1)分页式虚拟存储系统是把作业信息的副本存放在磁盘上,当作业被选中时,可把作业的开始几页先装入主存且启动执行。为此,在为作业建立页表时,应说明哪些页 其中,标志----用来表示对应页是否已经装入主存,标志位=1,则表示该页已经在主存,标志位=0,则表示该页尚未装入主存。 主存块号----用来表示已经装入主存的页所占的块号。 在磁盘上的位置----用来指出作业副本的每一页被存放在磁盘上的位置。 (2)作业执行时,指令中的逻辑地址指出了参加运算的操作存放的页号和单元号,硬件的地址转换机构按页号查页表,若该页对应标志为“1”,则表示该页已在主存,这时根据关系式: 绝对地址=块号×块长+单元号 计算出欲访问的主存单元地址。如果块长为2的幂次,则可把块号作为高地址部分, 把单元号作为低地址部分,两者拼接而成绝对地址。若访问的页对应标志为“0”,则表示该页不在主存,这时硬件发“缺页中断”信号,有操作系统按该页在磁盘上 的位置,把该页信息从磁盘读出装入主存后再重新执行这条指令。

(3)设计一个“地址转换”程序来模拟硬件的地址转换工作。当访问的页在主存时,则形成绝对地址,但不去模拟指令的执行,而用输出转换后的地址来代替一条指令的执行。当访问的页不在主存时,则输出“* 该页页号”,表示产生了一次缺页中断。 该模拟程序的算法 (4)假定主存的每块长度为128个字节;现有一个共七页的作业,其中第0页至第3页已经装入主存,其余三页尚未装入主存;该作业的页表为: (5)运行设计的地址转换程序,显示或打印运行结果。因仅模拟地址转换,并不模拟指令的执行,故可不考虑上述指令序列中的操作。 实验二:用先进先出(FIFO)页面调度算法处理缺页中断。 [提示]: (1)在分页式虚拟存储系统中,当硬件发出“缺页中断”后,引出操作系统来处理这个中断事件。如果主存中已经没有空闲块,则可用FIFO页面调度算法把该作业中最先进入主存的一页调出,存放到磁盘上,然后再把当前要访问的页装入该块。调出和装入后都要修改页表页表中对应页的标志。 (2)FIFO页面调度算法总是淘汰该作业中最先进入主存的那一页,因此可以用一个数组来表示该作业已在主存的页面。假定作业被选中时,把开始的m个页面装入主存,则数组的元素可定为m个。例如: P[0],P[1],….,P[m-1] 其中每一个P[i](i=0,1,….,m-1)表示一个在主存中的页面号。它们的初值为:P[0]:=0,P[1]:=1,….,P[m-1]:=m-1 用一指针k指示当要装入新页时,应淘汰的页在数组中的位置,k的初值为“0”。 当产生缺页中断后,操作系统选择P[k]所指出的页面调出,然后执行: P[k]:=要装入页的页号 k:=(k+1) mod m 再由装入程序把要访问的一页信息装入到主存中。重新启动刚才那条指令执行。

相关文档
最新文档