操作系统os内存管理实验

合集下载

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

操作系统“内存管理”实验报告
initpcb();
initpart();
printf("\t****************Hale Waihona Puke ***********MENU**
**************************\n");
printf("\t************** Enter: r 请求分配内存**************\n");
%d\n",pcbl->PCBelem[i].name,pcbl->
PCBelem[i].address,pcbl->PCBelem[i].len);
}
printf("当前的空闲分区有:\n");
printf("address length\n");
for(i=0;i<maxPart;i++)
{
if(partl->Partelem[i].valid==1)
for(i=1;i<maxPart;i++)
{
partl->Partelem[i].address=0;
partl->Partelem[i].len=0;
partl->Partelem[i].valid=0;
}
partl->sum=1;
}
voidrequest(charname,intlen)//进程name请求len大小的内存
printf("\t************** Enter: s 结束进程 **************\n");
printf("\t************** Enter: p 打印分配情况**************\n");

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

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

实验三:内存管理班级:学号:姓名:一、实验目的1.通过编写和调试存储管理的模拟程序以加深对存储管理方案的理解;2.熟悉虚存管理的页面淘汰算法;3.通过编写和调试地址转换过程的模拟程序以加强对地址转换过程的了解。

二、实验要求1.设计一个请求页式存储管理方案(自己指定页面大小),并予以程序实现。

并产生一个需要访问的指令地址流。

它是一系列需要访问的指令的地址。

为不失一般性,你可以适当地(用人工指定地方法或用随机数产生器)生成这个序列。

2.页面淘汰算法采用FIFO页面淘汰算法,并且在淘汰一页时,只将该页在页表中抹去。

而不再判断它是否被改写过,也不将它写回到辅存。

3.系统运行既可以在Windows,也可以在Linux。

三、实验流程图图1 页式存储管理程序参考流程四、实验环境硬件设备:个人计算机。

系统软件:windows操作系统,Visual C++6.0编译环境。

五、实验结果说明:模拟产生35个指令地址,随机产生20个指令地址进行排队,假设主存中共有10个工作集页帧。

将前9个指令调入内存,因为前9个指令中,页号为13的指令有两个,所以调入内存中共有8页。

此时主存中还有两个空闲帧。

此时按刚才随机顺序进行访问指令工作。

前9页因都在主存中可直接调用。

第10个随机地址为页号为5的指令,也在主存中,也可直接调用。

页号为24,3因不在主存中,需要调用进主存。

此时主存已满。

然后主存需要进行调用页号为27号的指令,因主存已满,需要执行FIFO算法,将最先进入主存的页号为30的指令调出,将27号放入第1000000帧。

以后需要调用的页面按照存在就无需调用,否则按FIFO原则进行调页工作。

六、实验感想七、实验代码#include <iostream>#include <iomanip>#include <stdlib.h>#include <time.h>#include <vector>#include <queue>//#include <algorithm>using namespace std ;#define PAGETABLE_NUM 35 //模拟进程的页表表项数量;#define AVAILABLEFRAME_NUM 10 //主存中固定工作集页帧的数量;#define RANDOMNUMBER_NUM 20 //产生随机指令地址的数量;structPageTableEntry{unsignedintFrameNum ;boolPressent ;};voidInitRandomAddr(vector<unsigned int>&RandomAddr) ;voidInitIdleFrameQueue(queue<unsigned int>&IdleFrameQueue) ;voidInitPageTable(vector<PageTableEntry>&PageTable, vector<unsigned int>&RandomAddr, queue<unsigned int>&IdleFrameQueue, queue<unsigned int>&AvtiveFrameQueue) ;voidSetPTE(PageTableEntry&PTE) ;int main(){int a ;//初始化RANDERNUMBER_NUM条随机的32位指令地址;vector<unsigned int>RandomAddr(RANDOMNUMBER_NUM) ;InitRandomAddr(RandomAddr) ;//初始化FIFS指针;vector<unsigned int>::iterator FIFS_pintor ;FIFS_pintor = RandomAddr.begin() ;//初始空闲帧队列;queue<unsigned int>IdleFrameQueue, ActiveFrameQueue ;InitIdleFrameQueue(IdleFrameQueue) ;//初始进程页表(模拟进程初始时,工作集已经使用至少10个页帧);vector<PageTableEntry>PageTable(PAGETABLE_NUM) ;InitPageTable(PageTable, RandomAddr, IdleFrameQueue, ActiveFrameQueue) ;//Testcout<<" 开始访问指令地址\n" ;vector<unsigned int>::iterator pt_RandomAddr ;for(pt_RandomAddr = RandomAddr.begin(); pt_RandomAddr != RandomAddr.end(); pt_RandomAddr++ ){unsignedintPageNum = (*pt_RandomAddr) >> 12 ;cout<<"地址:0x"<<hex<<*pt_RandomAddr<<dec<<"\t页号:"<<PageNum;if ( PageTable[PageNum].Pressent == 0 ) //该页不在主存中;{cout<<"\t该页不在主存,";if (IdleFrameQueue.empty()) //工作集空闲页帧已用完;{cout<<"执行FIFO淘汰算法\t";//FIFS算法淘汰一页;unsignedintFrame_Num ;Frame_Num = ActiveFrameQueue.front() ;ActiveFrameQueue.pop() ;PageTable[(*FIFS_pintor) >> 12].Pressent = 0 ; //标记此页已经被置换出主存;//置换进新页;PageTable[PageNum].FrameNum = Frame_Num ;PageTable[PageNum].Pressent = 1 ;ActiveFrameQueue.push(Frame_Num) ;//移动FIFS指针;FIFS_pintor++ ;}else{cout<<"调入所需页到空闲页\t";//调入当前所需的页到空闲页中;unsignedintFrame_Num ;Frame_Num = IdleFrameQueue.front() ;IdleFrameQueue.pop() ;PageTable[PageNum].FrameNum = Frame_Num ;PageTable[PageNum].Pressent = 1 ;ActiveFrameQueue.push(Frame_Num) ;}}elsecout<<"\t该页在主存";cout<<"\t帧号:"<<PageTable[PageNum].FrameNum<<endl ;}return 0 ;}voidInitRandomAddr(vector<unsigned int>&RandomAddr){cout<<" 生成随机指令地址\n" ;vector<unsigned int>::iterator pd ;srand( (unsigned)time( NULL ) );for(pd = RandomAddr.begin(); pd != RandomAddr.end(); pd++ ){//产生随机页号0~PAGETABLE_NUM - 1;unsignedint High_20 = rand() % PAGETABLE_NUM ;//产生随机偏移量0~4095 ;unsignedint Low_12 = rand() % 4096 ;unsignedintAddr = (High_20 << 12) | Low_12 ;*pd = Addr ;cout<<"随机指令地址:0x"<<setw(8)<<setfill('0') <<setiosflags(ios::uppercase | ios::fixed)<<hex<<*pd<<"\t页号:"<<dec<<High_20<<"\t偏移量:0x"<<hex<<Low_12<<dec<<endl ;}}voidInitIdleFrameQueue(queue<unsigned int>&IdleFrameQueue){//帧号从0~1048575,这里取1000000~1000016;for ( unsigned intFrameNum = 1000000; FrameNum< 1000000 + AVAILABLEFRAME_NUM; FrameNum++ )IdleFrameQueue.push(FrameNum) ;}voidInitPageTable(vector<PageTableEntry>&PageTable, vector<unsigned int>&RandomAddr, queue<unsigned int>&IdleFrameQueue, queue<unsigned int>&AvtiveFrameQueue){cout<<" 初始化页表; \n" ;for_each(PageTable.begin(), PageTable.end(), SetPTE) ;unsignedintPage_Num, Frame_Num ;for ( int count = 0; count < 9; count++){while(true){Page_Num = RandomAddr[count] >> 12 ;if ( PageTable[Page_Num].Pressent != 0 )break ;Frame_Num = IdleFrameQueue.front() ;IdleFrameQueue.pop() ;PageTable[Page_Num].FrameNum = Frame_Num ; //设置页帧号;PageTable[Page_Num].Pressent = 1 ; //标记页帧在主存中;AvtiveFrameQueue.push(Frame_Num) ; //记录活动页帧;cout<<"将模拟进程的第"<<Page_Num<<"页初始化至主存中,帧号为:"<<Frame_Num<<endl;}}cout<<endl ;}voidSetPTE(PageTableEntry&PTE){PTE.FrameNum = PTE.Pressent = 0 ; }。

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

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

操作系统存储管理实验报告一、实验目的本次实验的目的是通过编写一段程序,实现对内存的分配和回收操作,并验证算法的正确性和性能。

二、实验内容1.实现首次适应算法首次适应算法是一种动态分配的内存管理算法,通过从低地址往高地址内存块,找到第一个满足需求的空闲块进行分配。

具体实现过程如下:(1)初始化内存空间,设置内存块的大小和地址范围;(2)编写一个函数,实现内存的分配操作,根据需求大小找到第一个合适的空闲块,并在其前后设置相应的标志位;(3)编写一个函数,实现内存的回收操作,根据释放块的地址,将其前后的标志位进行合并;(4)模拟应用程序的运行,测试内存的分配和回收操作。

2.实现最佳适应算法最佳适应算法是一种动态分配的内存管理算法,通过整个内存空间,找到最小的满足需求的空闲块进行分配。

具体实现过程如下:(1)初始化内存空间,设置内存块的大小和地址范围;(2)编写一个函数,实现内存的分配操作,遍历整个内存空间,找到满足需求且大小最小的空闲块进行分配;(3)编写一个函数,实现内存的回收操作,根据释放块的地址,将其前后的标志位进行合并;(4)模拟应用程序的运行,测试内存的分配和回收操作。

三、实验结果1.首次适应算法经过测试,首次适应算法能够正确地进行内存的分配和回收操作,并且算法的性能良好。

尽管首次适应算法在分配过程中可能会产生碎片,但是由于它从低地址开始,可以在较短的时间内找到满足需求的空闲块。

在实际应用中,首次适应算法被广泛采用。

2.最佳适应算法经过测试,最佳适应算法能够正确地进行内存的分配和回收操作,并且算法的性能较好。

最佳适应算法会整个内存空间,找到大小最小的满足需求的空闲块。

因此,在分配过程中不会产生很多的碎片,但是算法的执行时间较长。

四、实验总结通过本次实验,我们成功地实现了首次适应算法和最佳适应算法,并对算法的正确性和性能进行了验证。

两种算法在内存的分配和回收过程中都表现出良好的性能,可广泛应用于实际场景中。

os课程设计实验

os课程设计实验

os课程设计实验一、教学目标本课程的教学目标是使学生掌握操作系统的基本原理和关键技术,能够熟练使用操作系统,并具备一定的操作系统设计和实现能力。

具体来说,知识目标包括了解操作系统的概念、结构和功能,掌握进程管理、内存管理、文件系统、输入/输出系统等基本原理和技术;技能目标包括能够使用操作系统进行日常工作和学习,具备基本的操作系统故障排除和性能优化能力;情感态度价值观目标包括培养学生对操作系统的兴趣和好奇心,培养学生认真负责、团队合作的精神。

二、教学内容根据课程目标,本课程的教学内容主要包括操作系统的概念、结构、功能及其关键技术。

具体包括:第一章操作系统概述,介绍操作系统的定义、发展历程、作用和基本组成;第二章进程管理,介绍进程的概念、状态、控制以及调度算法;第三章内存管理,介绍内存的概念、分配策略和回收算法;第四章文件系统,介绍文件和目录的结构、存储设备的管理以及文件系统的实现;第五章输入/输出系统,介绍输入/输出设备的管理、中断处理和设备驱动程序。

三、教学方法为了达到课程目标,本课程将采用多种教学方法,包括讲授法、讨论法、案例分析法和实验法等。

讲授法用于向学生传授操作系统的理论知识,使学生掌握基本概念和原理;讨论法用于引导学生深入思考操作系统的问题,培养学生的分析问题和解决问题的能力;案例分析法用于使学生了解操作系统的实际应用,提高学生的实践能力;实验法用于训练学生的动手能力,使学生熟练掌握操作系统的使用和维护技巧。

四、教学资源为了支持教学内容和教学方法的实施,我们将选择和准备适当的教学资源。

教材方面,我们选择《操作系统原理与实践》作为主教材,辅助以《操作系统设计与实现》等参考书;多媒体资料方面,我们将收集和制作与操作系统相关的PPT、视频等资料,以便更直观地展示操作系统的原理和实现;实验设备方面,我们将准备计算机实验室,使学生能够通过实际操作来加深对操作系统的理解和掌握。

五、教学评估本课程的评估方式包括平时表现、作业、考试等,旨在全面、客观、公正地反映学生的学习成果。

操作系统 实验二 windows内存管理实验

操作系统 实验二 windows内存管理实验

实验二windows内存管理实验一.问题描述内存管理是操作系统的主要任务之一,地址转换是其中的重要内容,本实验主要研究windows的地址转译过程。

通过这次实验了解windows内存管理策略及基本的数据结构,理解windows的地址过程。

通过任意给出一个虚拟地址,可以从windbg 观察相关数据并找到其物理地址。

二.Windows地址转译过程原理1.Windows内存管理器:Windows的内存管理器主要由Windows执行体中的虚存管理程序负责,并由环境子系统负责与具体API相关的一些用户态特征的实现。

有两个任务:地主转换;变换。

2.Windows内存管理策略:Windows采用页式虚拟存储管理技术管理内存,页面是硬件级别上的最小保护单位。

根据硬件体系结构的不同,页面尺寸被分为两种大页面:4KB小页面:4MB通常的PC机,一般都为小页面。

3、Windows虚拟地址空间布局Windows系统的虚拟地址空间布局,默认情况下,32位的windows 系统中每个用户进程可以占有2GB的私有地址空间,操作系统占有另外的2GB。

如下:4、X86虚拟地址转译X86虚拟地址转译是指进程的虚拟地址空间映射到实际物理页面的过程,Windows系统中地址转译过程如下:关键的数据结构如下:页目录:每个进程都有一个页目录,进程页目录的地址被保存在内核地址块(KPROCESS)中。

在windows中,它被映射到虚拟地址0xC0300000。

由cr3可以知道该进程页目录的位置。

页目录由页表项构成。

页表:进程的页目录指向页表。

每个页表只占一个页面,含有1024个PTE,一个PTE为4字节,包含两个主域:PFN,即为数据所在的物理页面的页面帧编号。

虚拟地址结构:x86系统上,一个32位虚拟地址结构被解释成三个独立的部分:页目录索引,页表索引和字节索引,如下:由于页目录项有1024个,因此页目录索引为10位,一个页表中含有1024个PTE,因此页表索引也为10位;字节索引为12位,正好表示一页内容。

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

操作系统内存管理实验报告
件,调试结果出现语句“String is Hello”)
#include <stdio.h>
#include <malloc.h>
t;
int main(void)
{
char *str; /*为字符串申请分配一块内存*/
if ((str = (char *) malloc(10)) == NULL)
根据练习二改编程序如下:
#include <stdio.h>
#include <malloc.h>
#include <string.h>
int main(void)
{
char *str;
/*为字符串申请分配一块内存*/
if ((str = (char *) malloc(20)) == NULL)
{
同组同学学号:
同组同学姓名:
实验日期:交报告日期:
实验(No. 4)题目:编程与调试:内存管理
实验目的及要求:
实验目的:
操作系统的发展使得系统完成了大部分的内存管理工作,对于程序员而言,这些内存管
理的过程是完全透明不可见的。因此,程序员开发时从不关心系统如何为自己分配内存,
而且永远认为系统可以分配给程序所需的内存。在程序开发时,程序员真正需要做的就
printf("String is %s\n Address is %p\n", str, str);
/*重分配刚才申请到的内存空间,申请增大一倍*/
int main(void)
{
char *str;
/*为字符串申请分配一块内存*/
if ((str = (char *) malloc(10)) == NULL)

操作系统实验-内存管理

操作系统实验-内存管理

操作系统实验-内存管理操作系统实验内存管理在计算机系统中,内存管理是操作系统的核心任务之一。

它负责有效地分配和管理计算机内存资源,以满足各种程序和进程的需求。

通过本次操作系统实验,我们对内存管理有了更深入的理解和认识。

内存是计算机用于存储正在运行的程序和数据的地方。

如果没有有效的内存管理机制,计算机系统将无法高效地运行多个程序,甚至可能会出现内存泄漏、内存不足等严重问题。

在实验中,我们首先接触到的是内存分配策略。

常见的内存分配策略包括连续分配和离散分配。

连续分配是将内存空间视为一个连续的地址空间,程序和数据被依次分配到连续的内存区域。

这种方式简单直观,但容易产生内存碎片,降低内存利用率。

离散分配则将内存分成大小相等或不等的块,根据需求进行分配。

其中分页存储管理和分段存储管理是两种常见的离散分配方式。

分页存储管理将内存空间划分为固定大小的页,程序也被分成相同大小的页,通过页表进行映射。

分段存储管理则根据程序的逻辑结构将其分成不同的段,如代码段、数据段等,每个段有不同的访问权限和长度。

接下来,我们研究了内存回收算法。

当程序不再使用分配的内存时,操作系统需要回收这些内存以便再次分配。

常见的内存回收算法有首次适应算法、最佳适应算法和最坏适应算法。

首次适应算法从内存的起始位置开始查找,找到第一个满足需求的空闲区域进行分配;最佳适应算法则选择大小最接近需求的空闲区域进行分配;最坏适应算法选择最大的空闲区域进行分配。

为了更直观地理解内存管理的过程,我们通过编程实现了一些简单的内存管理算法。

在编程过程中,我们深刻体会到了数据结构和算法的重要性。

例如,使用链表或二叉树等数据结构来表示空闲内存区域,可以提高内存分配和回收的效率。

在实验中,我们还遇到了一些实际的问题和挑战。

比如,如何处理内存碎片的问题。

内存碎片是指内存中存在一些无法被有效利用的小空闲区域。

为了解决这个问题,我们采用了内存紧缩技术,将分散的空闲区域合并成较大的连续区域。

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

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

操作系统内存管理实验报告操作系统内存管理实验报告引言:操作系统是计算机系统中的核心软件,负责管理计算机系统的各种资源,其中内存管理是操作系统的重要功能之一。

内存管理的目标是有效地管理计算机的内存资源,提高计算机系统的性能和可靠性。

本实验旨在通过设计和实现一个简单的内存管理系统,加深对操作系统内存管理原理的理解,并通过实践来加深对操作系统的认识。

一、实验背景计算机内存是计算机系统中的重要组成部分,它用于存储程序和数据。

在操作系统中,内存被划分为多个不同的区域,每个区域有不同的用途和访问权限。

内存管理的主要任务是为进程分配内存空间,并进行合理的管理和调度,以提高系统的性能和资源利用率。

二、实验目的本实验旨在通过设计和实现一个简单的内存管理系统,加深对操作系统内存管理原理的理解,并通过实践来加深对操作系统的认识。

具体目标包括:1. 设计和实现一个简单的内存分配算法,实现内存的动态分配和回收;2. 实现内存的地址映射机制,实现虚拟地址到物理地址的转换;3. 实现内存保护机制,确保进程之间的内存隔离和安全性;4. 实现内存的页面置换算法,提高内存的利用率和性能。

三、实验设计与实现1. 内存分配算法为了实现内存的动态分配和回收,我们设计了一个简单的内存分配算法。

该算法根据进程的内存需求和剩余内存空间的大小,选择合适的内存块进行分配。

当进程结束或释放内存时,将已使用的内存块标记为空闲状态,以便下次分配。

2. 地址映射机制为了实现虚拟地址到物理地址的转换,我们设计了一个地址映射机制。

该机制使用页表来记录虚拟地址与物理地址的映射关系。

当进程访问内存时,操作系统根据页表将虚拟地址转换为物理地址,并进行内存访问。

3. 内存保护机制为了确保进程之间的内存隔离和安全性,我们实现了一个简单的内存保护机制。

该机制通过设置每个进程的访问权限,限制进程对内存的读写操作。

只有获得相应权限的进程才能访问内存,确保进程之间的数据安全和隔离。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
{
pb[f]=p[n];
time[f]=0;
sum++;
f=-1;
}
}
for(m=0;m<i && pb[m]!=-1;m++)
//物理块中现有页面停留时间+1
time[m]++;
}
r=1-(float)sum/320;
printf("\t\t%6.4 f ",r);
}
void LRU() //最近最少使用算法
{
//随机产生一条指令
s=rand()%320+0;
//顺序执行一条指令
a[n]=s+1;
//执行前地址指令M`
s=rand()%(a[n]+1);
a[n+1]=s+1;
s=rand()%(319-a[n+1])+(a[n+1]+1);
a[n+2]=s;
}
for (n=0;n<320;n++)
//得到指令想对的页数
if(pb[m]==-1)
{
f=m;
break;
}
if (g!=-1)
{
time[g]=0;
g=-1;
}
else
{
if (f==-1)
{
max=time[0];
for (m=0;m<i;m++)
if (time[m]>max)
{
k=m;
max=time[m];
}
pb[k]=p[n];
time[k]=0;
40分
说明:
评阅教师:
日期:年月日
实验内容
1.目的和要求
存储管理的主要功能之一是合理地分配空间。请求页式管理是一种常用的虚拟存储管理技术。
本实验的目的是通过请求页式存储管理中页面置换算法模拟设计,了解虚拟存储技术的特点,掌握请求页式管理的页面置换算法。
2.实验内容
1.过随机数产生一个指令序列,共320条指令。其地址按下述原则生成:
xx
xx
《操作系统》实验报告
专业班级
xx
实验地点
xx
学生学号
xx
指导教师
xx
学生姓名
xx
实验时间
xx
实验项目
内存管理
实验类别
操作性()验证性()设计性(√)综合性()其它()
实验目的及要求
实验目的:
存储管理的主要功能之一是合理地分配空间。本实验的目的是通过请求页式存储管理中页面置换算法模拟设计,了解虚拟存储技术的特点,掌握请求页式管理的页面置换算法。
①50%的指令是顺序执行的;
②25%的指令是均匀分布在前地址部分;
③25%的指令是均匀分布在后地址部分;
2.指令序列变换成页地址流
3.计算并输出下述各种算法在不同内存容量下的命中率。
实验的代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
//应对出现页面使用次数同样少的情况
if (time[m]==min)
t++;
if (t>1)
//使用次数同样少,将次数相同的页面按照LRU进行页面置换
{
max_lru=time_lru[k];
for (m=0;m<i &&time[m]==min;m++)
if (time_lru[m]>max_lru)
{
int time[32];
int max;
initialization();
for(m=0;m<i;m++)
time[m]=m+1;
for(n=0;n<320;n++)
{
k=0;
for (m=0;m<i;m++)
if (pb[m]==p[n])
{
g=m;
break;
}
for(m=0;m<i;m++)
{
k=m;
max_lru=time_lru[m];
}
}
pb[k]=p[n];
time_lru[k]=0;
sum++;
}
}
else
{
pb[f]=p[n];
time_lru[f]=0;
sum++;
f=-1;
}
}
for(m=0;m<i && pb[m]!=-1;m++)
time_lru[m]++;
}
r=1-(float)sum/320;
g=-1;
else
{ //找到最先进入内存的页面
if (f==-1)
{
max=time[0];
for(m=0;m<i;m++)
if(time[m]>max)
{
max=time[m];
k=m;
}
pb[k]=p[n];
//该物理块中页面停留时间置零
time[k]=0;
//缺页数+1
sum++;
}
else
//计算一定时间间隔内物理块中页面使用次数
for (h=n-1;h>=n-51;h--)
if (pb[m]==p[h])
time[m]++;
min=time[0];
for (m=0;m<i;m++)
if (time[m]<min)
{
min=time[m];
k=m;
}
for (m=0;m<i;m++)
实验要求:
1、过随机数产生一个指令序列,共320条指令。
2、指令序列变换成页地址流
3、计算并输出下述各种算法在不同内存容量下的命中率。
成绩评定表
类别
评分标准
分值
得分
合计
上机表现
积极出勤、遵守纪律
主动完成实验设计任务
30分
需求设计
比较规范、基本正确
功能达到实验要求
30分
实验报告
及时递交、填写规范
内容完整、体现收获
//在未到达”一定时间”的要求时,先采用LRU进行页面置数
for (m=0;m<i;m++)
if (time_lru[m]>max_lru)
{
k=m;
max_lru=time_lru[m];
}
pb[k]=p[n];
time_lru[k]=0;
sum++;
}
else
{
for (m=0;m<i;m++)
//S表示产生的随机数,i表示五路快数
int s,i;
int m,n,h;
int k,g,f;
int sum;
float r;
//page页数
int p[320];
//执行的指令
int a[320];
//physical block用户内存容量(物理块)
int pb[32];
void initialization();
time[m]=m+1;
for(n=0;n<320;n++)
{
k=0;
for(m=0;m<i;m++)
//表示内存中已有调入的页面
if(pb[m]==p[n])
{
g=m;
break;
}
for(m=0;m<i;m++)
//用户内存中空的物理块
if(pb[m]==-1)
{
f=m;
break;
}
if(g!=-1)
initialization();
int time_lru[32],time[32],min,max_lru,t;
for (m=0;m<i;m++)
{
time[m]=0;
time_lru[m]=m+1;
}
for (n=0;n<320;n++)
{
k=0;
t=1;
for (m=0;m<i;m++)
if (pb[m]==p[n])
sum++;
}
else
{
pb[f]=p[n];
time[f]=0;
sum++;
f=-1;
}
}
for (m=0;m<i && pb[m]!=-1;m++)
time[m]++;
}
r=1-(float)sum/320;
printf("\t\t%6.4f",r);
}
voidOPT() //最少访问页面算法
{
void FIFO();
void LRU();
voidOPT();
void line();
void start();
void end();
void main()
{
start();
//以计算机当前时间作为随机种子
srand((int) time (NULL));
相关文档
最新文档