SWJTU 操作系统实验-内存管理

本文介绍了在SWJTU操作系统实验中,如何模拟内存管理的OPT置换算法和CLOCK算法。OPT算法在页表满时选择最长时间不用的进程进行替换,而CLOCK算法则在页表满后更新进程的使用状态并按环形结构查找替换页。此外,还简要提及了Page Fault的判断方法和LRU、FIFO算法。

和之前的实验一样,仍然是模拟,这次是模拟操作系统的内存管理。

要求实现OPT置换算法与CLOCK算法。

算法具体不再赘述,参考下文。

http://blog.csdn.net/wanghao109/article/details/13003479

OPT置换概要:当页表未满时,新到达进程直接进表,表中无重复元素,,页表满后,若新到达进程不在页表中,则遍历页表中所有元素,找出距离下一次执行最远的进程进行替换。

CLOCK算法概要:

当页表未满时,若新到达进程未在页表中,进表且指针+1,若新到达进程已在页表中,指针不移动。

页表满后,若新到达进程已在页表中,将该进程使用状态改为true(注:无论该进程当前进程使用状态是true或false,都执行将使用状态改为true的操作),且指针不移动,且指针不移动,且指针不移动。参见下图所示样例。

图注:深色带星号表示true,浅色表示false。

      

(三张图都是新到进程已在页表中,体现了直接修改状态而不移动指针的特点。)

若新到达进程不在页表中,则从指针所在位置开始扫描,若指向位置使用状态为true,改为false,若指向位置使用状态为false,将新到达进程置于此位置,并将此位置的使用状态改为true(扫描过程中注意对角标取模避免越界,最开始我就栽在这里)。

 Page Fault简单粗暴版识别概要:

(必要条件:页表已满)将当前页表与前一个页表比较,若不一样,Page Fault++;

例:


下方带F的页表都与前一个页表不同。

同理:


/*
Title:OPT
Author:Uranuslight
School:SWJTU
Build Date:2017/05/26
Last revision:2017/05/26
Version:1.0
*/
#include<iostream>
#include<cstring>
#include<cmath>
#include<algorithm>
#define multiple 3
#define inf 0x3f3f3f3f
using namespace std;
int pagesize;//cin >> pagesize
int processnum;//num of process
int page[10];
int nowsize = 0;//is pageframe full?
int origin[100];
int pagefault = 0;
typedef struct
{
	int pid;
	int nexttime;
}target;
void opt(int len,int origin[100])//len processnum*multiple
{
	int existflag = 0;
	for (int i = 0; i<len; i++)
	{
		existflag = 0;
		if (nowsize != pagesize)//frame is not full
		{
			for (int j = 0; j<pagesize; j++)//check has new process existed in page already
			{
				
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值