请求分页存储管理模拟实验

请求分页存储管理模拟实验
请求分页存储管理模拟实验

操作系统模拟实验

实验名称:请求分页存储管理模拟实验

实验目的:通过实验了解windows系统中的线程同步如何使用,进一步了解操作系统的同步机制。

实验内容:调用Windows API,模拟解决生产者-消费者问题;思考在两个线程函数中哪些是临界资源?哪些代码是临界区?哪些代码是进入临界区?哪些代码是退出临界区?进入临界区和退出临界区的代码是否成对出现?学习Windows API中的如何创建线程,互斥,临界区等。

程序运行结果:

源程序:

#include "stdAfx.h"

//包含头文件以支持多线程

#include "windows.h"

#include "stdio.h"

//用于标志所有的子线程是否结束

//每次子线程结束后,此值便加1。

static long ThreadCompleted = 0;

//互斥量

HANDLE mutex;

//信号量,用于生产者通知消费者

HANDLE full;

//信号量,用于消费者通知生产者

HANDLE empty;

//信号量,当所有的子线程结束后,通知主线程,可以结束。HANDLE evtTerminate;

//生产标志

#define p_item 1

//消费标志

#define c_item 0

//哨兵

#define END 10

//缓冲区最大长度

const int max_buf_size=11;

const int cur_size=10;

//缓冲区定义

int BUFFER[max_buf_size];

//放消息指针

int in=0;

//取消息指针

int out=0;

int front=0;

int tail=0;

int sleep_time=1000;

bool flag=true;

//线程函数的标准格式

unsigned long __stdcall p_Thread(void *theBuf);

unsigned long __stdcall c_Thread(void *theBuf);

//打印缓冲区内容

void PrintBuf(int buf[],int buf_size);

int main(int argc, char* argv[])

{

//初始化缓冲区

unsigned long TID1, TID2;

for(int i=0;i

BUFFER[i]=0;

//互斥量和信号量的创建,函数用法可查看MSDN

mutex=CreateMutex(NULL,false,"mutex");

full=CreateSemaphore(NULL,0,1,"full");

empty=CreateSemaphore(NULL,max_buf_size,max_buf_size,"empty");

evtTerminate = CreateEvent(NULL, FALSE, FALSE, "Terminate");

//创建一个生产者线程和消费者线程。作为本程序的扩展,你可以增加线程的数目

CreateThread(NULL,0,p_Thread,BUFFER,NULL,&TID1);

CreateThread(NULL,0,c_Thread,BUFFER,NULL,&TID2); while(flag)

{

if(getchar())

{flag=false;}

}

//等待各子线程的结束

WaitForSingleObject(evtTerminate, INFINITE);

return 0;

}

//生产者线程函数

unsigned long __stdcall p_Thread(void *theBuf)

{

while(flag)

{

Sleep(sleep_time);

//可以不要此函数,只是为了模拟缓冲区满的情况

if((front+1)%max_buf_size==tail)

{

printf("缓冲区已满,产品的线程被阻塞\n");

sleep_time+=3000;

}

WaitForSingleObject(empty,INFINITE);//先申请信号量

WaitForSingleObject(mutex,INFINITE);//再申请互斥量

/*进入临界区*/

printf("生产(线程)正在生产请等待\n");

BUFFER[in]=p_item;

in=(in+1)%cur_size;

front=(front+1)%max_buf_size;

PrintBuf(BUFFER,cur_size);

printf("我(生产者线程)已准备退出临界区\n");

//退出临界区

ReleaseMutex(mutex);

ReleaseSemaphore(full,1,0);

}

//线程结束后,将ThreadCompleted值加1

InterlockedIncrement(&ThreadCompleted);

if(ThreadCompleted ==2) SetEvent(evtTerminate);

return 0;

}

//消费者线程函数

unsigned long __stdcall c_Thread(void *theBuf)

{

while(flag)

{

Sleep(3000);

if(front==tail)

{

printf("缓冲区是空的\n");

sleep_time-=3000;

}

//P操作

WaitForSingleObject(full,INFINITE);

WaitForSingleObject(mutex,INFINITE);

printf("一个消费者进入critiction。\n");

BUFFER[out]=c_item;

out=(out+1)%cur_size;

tail=(tail+1)%max_buf_size;

PrintBuf(BUFFER,cur_size);

printf("消费者已经离开critiction\n");

//V操作

ReleaseMutex(mutex);

ReleaseSemaphore(empty,1,0);

}

//同生产者进程

InterlockedIncrement(&ThreadCompleted);

if(ThreadCompleted ==2) SetEvent(evtTerminate);

return 0;

}

//打印缓冲区

void PrintBuf(int buf[],int buf_size)

{

int i;

printf("当前缓冲区状态:\n");

for(i=0;i

printf("%d,",buf[i]);

printf("\n");

Sleep(1000);

//此函数是为了线程相临两次访问临界区时有序的打印缓冲区内容,//并不是必须的,你可以不要,但模拟的近似度就大打折扣了。

}

请求分页存储管理模拟实验

操作系统模拟实验 实验名称:请求分页存储管理模拟实验 实验目的:通过实验了解windows系统中的线程同步如何使用,进一步了解操作系统的同步机制。 实验内容:调用Windows API,模拟解决生产者-消费者问题;思考在两个线程函数中哪些是临界资源?哪些代码是临界区?哪些代码是进入临界区?哪些代码是退出临界区?进入临界区和退出临界区的代码是否成对出现?学习Windows API中的如何创建线程,互斥,临界区等。 程序运行结果:

源程序: #include "stdAfx.h" //包含头文件以支持多线程 #include "windows.h" #include "stdio.h" //用于标志所有的子线程是否结束 //每次子线程结束后,此值便加1。 static long ThreadCompleted = 0; //互斥量 HANDLE mutex; //信号量,用于生产者通知消费者 HANDLE full; //信号量,用于消费者通知生产者 HANDLE empty; //信号量,当所有的子线程结束后,通知主线程,可以结束。HANDLE evtTerminate; //生产标志 #define p_item 1 //消费标志 #define c_item 0 //哨兵 #define END 10 //缓冲区最大长度 const int max_buf_size=11; const int cur_size=10; //缓冲区定义 int BUFFER[max_buf_size]; //放消息指针 int in=0; //取消息指针 int out=0; int front=0; int tail=0; int sleep_time=1000; bool flag=true; //线程函数的标准格式 unsigned long __stdcall p_Thread(void *theBuf); unsigned long __stdcall c_Thread(void *theBuf); //打印缓冲区内容 void PrintBuf(int buf[],int buf_size);

计算机操作系统实验 源码 模拟请求分页虚拟存储管理中的硬件地址变换过程

实验报告 模拟请求分页虚拟存储管理中的硬件地址变换过程 【实验目的】 1.通过实验加深对请求分页虚拟存储器管理中的地址变换加深理解。 2.熟练使用所学知识完成地址转换过程。 【实验原理】 1. 请求分页虚拟存储管理技术是把作业地址空间的全部信息存放在磁盘上。当作业被选中运行时,,先把作业的开始几页装入主存并启动运行。为此在为作业建立页表时,应说明哪些页已在主存,哪些页不在主存。页表的格式如表1-1所示,其中,”标志”表示对应页是否已经装入主存: “1”表示对应页已经装入主存; “0”表示对应页未装入主存; “主存快号”表示该页对应的主存快号; “修改位”指示该页调入主存后是否修改过的标志。 “外存地址”指示该页所在的外存地址。 自己设计一个主存分块表。 2. 作业业执行时,指令中的逻辑地址指出参加运算的操作数(或指令)地址中的页号和页内偏移量。硬件地址转换机构按页号查页表。 若该页的标志为1 ,则表示该页已在主存,从而找到该页对应的主存块号。 根据关系式: 绝对地址=块号*块的长度+页内偏移量 计算出欲访问的主存地址。由于页号为2的整次幂,所以只要将块号与页内偏移量相拼接,放入主存地址寄存器即可。按照该地址取指令或取操作数,完成指定的操作。 3. 设计一个”地址变换”程序,模拟硬件地址变化过程。当访问的页在主存时,则形成绝对地址后,不去模拟指令的执行,而是输出被转换的地址。当访问的页不在主存时,输出”该页不在主存,产生缺页中断”,以表示产生一次缺页中断。 4. 进行缺页中断处理。中断返回后,重新执行该指令。 假定主存的每块长度为64个字节,现有一个具有8页的作业,系统为其分配了4个主存块(即m=4),且最多分4块。其中第0页至第3页已经装入主存。该作业的页表如表10—2所示。 地址变换算法框图如图10—1所示。 运行设计的地址变换程序,显示或打印运行结果。。因为只是模拟地址变换,并不

请求分页存储管理(虚拟存储)

任务四、请求分页存储管理(虚拟存储)一、实验目的 通过请求分页存储管理的设计,让学生了解虚拟存储器的概念和实现方法。进行运行时不需要将所有的页面都调入内存,只需将部分调入内存,即可运行,在运行的过程中若要访问的页面不在内存时,则需求有请求调入的功能将其调入。假如此时若内存没有空白物理块,则通过页面置换的功能将一个老的不用的页面淘汰出来,其中淘汰的算法有多种。 二、实验内容 模拟仿真请求分页调度算法,其中淘汰的算法可选下列其一 1、先进先出算法 2、最近最久算法 3、CLOCK算法 三、实验代码 #include #include using namespace std; int n; typedef struct Queue{ int time; int data; struct Queue *next; }Queue,*QueuePtr; typedef struct { QueuePtr front; QueuePtr rear; }LinkQueue; //fifo======================================= void InitQueue(LinkQueue &Q); void FiFoEnQueueRear(LinkQueue &Q,int e,vector &v); void FiFoDeQueueFront(LinkQueue &Q); inline void PrintQueue(LinkQueue &Q); void FiFoFiFoDoQueueEarly(LinkQueue &Q,int a,vector &v); void FiFoDoQueue(LinkQueue &Q,int a,vector &v); inline int PanDuan(LinkQueue &Q,int a); inline int YeMianCount(LinkQueue &Q); void fifo(); //lru============================================= void InitQueue(LinkQueue &Q); void EnQueueMid(LinkQueue &Q,int e,QueuePtr p,vector &v); void EnQueueTheFist(LinkQueue &Q,int e);

内存的存储管理段式和页式管理的区别

内存的存储管理段式和页式管理的区别 页和分段系统有许多相似之处,但在概念上两者完全不同,主要表现在: 1、页是信息的物理单位,分页是为实现离散分配方式,以消减内存的外零头,提高内存的利用率;或者说,分页仅仅是由于系统管理的需要,而不是用户的需要。 段是信息的逻辑单位,它含有一组其意义相对完整的信息。分段的目的是为了能更好的满足用户的需要。 2、页的大小固定且由系统确定,把逻辑地址划分为页号和页内地址两部分,是由机器硬件实现的,因而一个系统只能有一种大小的页面。 段的长度却不固定,决定于用户所编写的程序,通常由编辑程序在对源程序进行编辑时,根据信息的性质来划分。 3、分页的作业地址空间是维一的,即单一的线性空间,程序员只须利用一个记忆符,即可表示一地址。 分段的作业地址空间是二维的,程序员在标识一个地址时,既需给出段名,又需给出段内地址。 参考资料:/ctsn/os/skja4.htm 添加评论 炎炎1981|2009-08-2618:28:33 有0人认为这个回答不错|有0人认为这个回答没有帮助 一页式管理 1页式管理的基本原理将各进程的虚拟空间划分成若干个长度相等的页(page),页式管理把内存空间按页的大小划分成片或者页面(pageframe),然后把页式虚拟地址与内存地址建立一一对应页表,并用相应的硬件地址变换机构,来解决离散地址变换问题。页式管理采用请求调页或预调页技术实现了内外存存储器的统一管理。 它分为 1静态页式管理。静态分页管理的第一步是为要求内存的作业或进程分配足够的页面。系统通过存储页面表、请求表以及页表来完成内存的分配工作。静态页式管理解决了分区管理时的碎片问题。但是,由于静态页式管理要求进程或作业在执行前全部装入内存,如果可用页面数小于用户要求时,该作业或进程只好等待。而且作业和进程的大小仍受内存可用页面数的限制。 2动态页式管理。动态页式管理是在静态页式管理的基础上发展起来的。它分为请求页式管理和预调入页式管理。 优点:没有外碎片,每个内碎片不超过页大小。一个程序不必连续存放。便于改变程序占用空间的大小(主要指随着程序运行而动态生成的数据增多,要求地址空间相应增长,通常由系统调用完成而不是操作系统自动完成)。 缺点:程序全部装入内存。 要求有相应的硬件支持。例如地址变换机构,缺页中断的产生和选择淘汰页面等都要求有相应的硬件支持。这增加了机器成本。增加了系统开销,例如缺页中断处理机,请求调页的算法如选择不当,有可能产生抖动现象。虽然消除了碎片,但每个作业或进程的最后一页内总有一部分空间得不到利用果页面较大,则这一部分的损失仍然较大。 二段式管理的基本思想 把程序按内容或过程(函数)关系分成段,每段有自己的名字。一个用户作

佛山科学技术学院-操作系统-存储管理-实验报告

实验二存储管理 2.1背景知识 耗尽内存是Windows 2000/XP系统中最常见的问题之一。当系统耗尽内存时,所有进程对内存的总需求超出了系统的物理内存总量。随后,Windows 2000/XP必须借助它的虚拟内存来维持系统和 进程的运行。虚拟内存机制是Windows 2000/XP操作系统的重要组成部分,但它的速度比物理内存慢得多,因此,应该尽量避免耗尽物理内存资源,以免导致性能下降。 解决内存不足问题的一个有效的方法就是添加更多的内存。但是,一旦提供了更多的内存,Windows 2000/XP很可以会立即“吞食”。而事实上,添加更多的内存并非总是可行的,也可能只是推迟了实际问题的发生。因此,应该相信,优化所拥有的内存是非常关键的。 1、分页过程 当Windows 2000/XP求助于硬盘以获得虚拟内存时,这个过程被称为分页(paging)。分页就是将信息从主内存移动到磁盘进行临时存储的过程。应用程序将物理内存和虚拟内存视为一个独立的实体,甚至不知道Windows 2000/XP使用了两种内存方案,而认为系统拥有比实际内存更多的内存。例如,系统的内存数量可能只有 16MB,但每一个应用程序仍然认为有4GB内存可供使用。 使用分页方案带来了很多好处,不过这是有代价的。当进程需要已经交换到硬盘上的代码或数据时,系统要将数据送回物理内存,并在必要时将其他信息传输到硬盘上,而硬盘与物理内存在性能上的差异极大。例如,硬盘的访问时间通常大约为4-10毫秒,而物理内存的访问时间为60 us,甚至更快。 2、内存共享

应用程序经常需要彼此通信和共享信息。为了提供这种能力,Windows 2000/XP必须允许访问某些内存空间而不危及它和其他应 用程序的安全性和完整性。从性能的角度来看,共享内存的能力大大减少了应用程序使用的内存数量。运行一个应用程序的多个副本时,每一个实例都可以使用相同的代码和数据,这意味着不必维护所加载应用程序代码的单独副本并使用相同的内存资源。无论正在运行多少个应用程序实例,充分支持应用程序代码所需求的内存数量都相对保持不变。 3、未分页合并内存与分页合并内存 Windows 2000/XP决定了系统内存组件哪些可以以及哪些不可 以交换到磁盘上。显然,不应该将某些代码 (例如内核) 交换出主内存。因此,Windows 2000/XP将系统使用的内存进一步划分为未 分页合并内存和分页合并内存。 分页合并内存是存储迟早需要的可分页代码或数据的内存部分。虽然可以将分页合并内存中的任何系统进程交换到磁盘上,但是它临时存储在主内存的这一部分,以防系统立刻需要它。在将系统进程交换到磁盘上之前,Windows 2000/XP会交换其他进程。 未分页合并内存包含必须驻留在内存中的占用代码或数据。这种结构类似于早期的MS-DOS程序使用的结构,在MS-DOS中,相对较小的终止并驻留程序 (Terminate and Stay Resident,TSR) 在启动时加载到内存中。这些程序在系统重新启动或关闭之前一直驻留在内存的特定部分中。例如,防病毒程序将加载为TSR程序,以预防可能的病毒袭击。 未分页合并内存中包含的进程保留在主内存中,并且不能交换到磁盘上。物理内存的这个部分用于内核模式操作(例如,驱动程序)和必须保留在主内存中才能有效工作的其他进程。没有主内存的这个部分,内核组件就将是可分页的,系统本身就有变得不稳定的危险。

存储器管理之请求分页存储管理方式

第十六讲存储器管理之请求分页存储管理方式 1 基本概述 请求分页管理是建立在基本分页基础上的,为了能支持虚拟存储器而增加了请求调页功能和页面置换功能。 基本原理:地址空间的划分同页式;装入页时,可装入作业的一部分(运行所需)页即可运行。 2 请求分页的硬件支持 为实现请求分页,需要一定的硬件支持,包括:页表机制、缺页中断机构、地址变换机构。 2.1 页表机制 作用:将用户地址空间的逻辑地址转换为内存空间的物理地址。 因为请求分页的特殊性,即程序的一部分调入内存,一部分仍在外存,因此页表结构有所不同。如图: 说明: (1)状态位P:指示该页是否已调入内存。 (2)访问字段A:记录本页在一段时间内被访问的次数或最近未被访问的时间。 (3)修改位M:表示该页在调入内存后是否被修改过。若修改过,则换出时需重写至外存。(4)外存地址:指出该页在外存上的地址。 2.2 缺页中断机构 在请求分页系统中,每当所要访问的页面不在内存时,便产生缺页中断,请求OS将所缺的页调入内存。 缺页中断与一般中断的区别: (1)在指令执行期间产生和处理中断信号 (2)一条指令在执行期间,可能产生多次缺页中断 2.3 地址变换机构 请求分页系统的地址变换机构。是在分页系统地址变换机构的基础上,又增加了一些功能。

例:某虚拟存储器的用户空间共有32个页面,每页1KB,主存16KB。假定某时刻系统为用户的第0、1、2、3页分别分配的物理块号为5、10、4、7,试将虚拟地址0A5C和093C 变换为物理地址。 解:虚拟地址为:页号(2^5=32)5位页内位移(1K =2^10=1024)10位物理地址为物理块号(2^4=16)4位因为页内是10 位,块内位移(1K =2^10=1024)10位 虚拟地址OA5C对应的二进制为: 00010 1001011100 即虚拟地址OA5C的页号为2,页内位移为1001011100,由题意知对应的物理地址为:0100 1001011100即125C 同理求093C。略 3 内存分配策略和分配算法 在请求分页系统中,为进程分配内存时,将涉及以下三个问题: 最小物理块数的确定;物理块的分配策略;物理块的分配算法。 3.1最小物理块数的确定 概念:最小物理块数:是指能保证进程正常运行所需的最小物理块数。 确定方法:与计算机的硬件结构有关,取决于指令的格式、功能和寻址方式。 3.2物理块的分配策略 内存分配策略:固定和可变分配策略 置换策略:全局置换和局部置换 三种合适的策略如下: (1)固定分配局部置换(Fixecd Allocation,Local replacement):为每个进程分配固定数目n的物理块,在整个运行中都不改变。如出现缺页,则从中置换一页。 (2)可变分配全局置换(VariableAllocatio,Global Repalcement):分配固定数目的物理块,

计算机操作系统存储管理练习题

一、选择 1.分页存储管理的存储保护是通过( )完成的. A.页表(页表寄存器) B.快表 C.存储键 D.索引动态重定 2.把作业地址空间中使用的逻辑地址变成存中物理地址称为()。 A、加载 B、重定位 C、物理化 D、逻辑化3.在可变分区存储管理中的紧凑技术可以---------------。 A.集中空闲区 B.增加主存容量 C.缩短访问时间 D.加速地址转换 4.在存储管理中,采用覆盖与交换技术的目的是( )。 A.减少程序占用的主存空间 B.物理上扩充主存容量 C.提高CPU效率 D.代码在主存中共享 5.存储管理方法中,( )中用户可采用覆盖技术。 A.单一连续区 B. 可变分区存储管理 C.段式存储管理 D. 段页式存储管理 6.把逻辑地址转换成物理地址称为()。 A.地址分配 B.地址映射 C.地址保护 D.地址越界 7.在存分配的“最佳适应法”中,空闲块是按()。 A.始地址从小到大排序 B.始地址从大到小排序 C.块的大小从小到大排序 D.块的大小从大到小排序 8.下面最有可能使得高地址空间成为大的空闲区的分配算法是()。A.首次适应法 B.最佳适应法 C.最坏适应法 D.循环首次适应法 9.那么虚拟存储器最大实际容量可能是( ) 。 A.1024K B.1024M C.10G D.10G+1M 10.用空白链记录存空白块的主要缺点是()。 A.链指针占用了大量的空间 B.分配空间时可能需要一定的拉链时间 C.不好实现“首次适应法” D.不好实现“最佳适应法” 11.一般而言计算机中()容量(个数)最多. A.ROM B.RAM C.CPU D.虚拟存储器 12.分区管理和分页管理的主要区别是()。 A.分区管理中的块比分页管理中的页要小 B.分页管理有地址映射而分区管理没有 C.分页管理有存储保护而分区管理没有 D.分区管理要求一道程序存放在连续的空间而分页管理没有这种要求。13.静态重定位的时机是()。 A.程序编译时 B.程序时 C.程序装入时 D.程序运行时 14.通常所说的“存储保护”的基本含义是() A.防止存储器硬件受损 B.防止程序在存丢失 C.防止程序间相互越界访问 D.防止程序被人偷看 15.能够装入存任何位置的代码程序必须是( )。 A.可重入的 B.可重定位

实验六请求分页存储管理

页眉 实验六:请求分页存储管理 一.实验目的 深入理解请求页式存储管理的基本概念和实现方法,重点认识其中的地址变换、缺页中断、置换算法等实现思想。 二.实验属性 该实验为综合性、设计性实验。 三.实验仪器设备及器材 普通PC386以上微机 四.实验要求 本实验要求2学时完成。 本实验要求完成如下任务: (1)建立相关的数据结构:页表、页表寄存器、存储块表等; (2)指定分配给进程的内存物理块数,设定进程的页面访问顺序; (3)设计页面置换算法,可以选择OPT、FIFO、LRU等,并计算相应的缺页率,以比较它们的优劣; (4)编写地址转换函数,实现通过查找页表完成逻辑地址到物理地址的转换;若发生缺页则 选择某种置换算法(OPT、FIFO、LRU等)完成页面的交换; (5)将整个过程可视化显示出来。 实验前应复习实验中所涉及的理论知识和算法,针对实验要求完成基本代码编写并完成预习报告、实验中认真调试所编代码并进行必要的测试、记录并分析实验结果。实验后认真书写符合规范格式的实验报告(参见附录A),并要求用正规的实验报告纸和封面装订整齐,按时上交。 三、设计过程 3.1算法原理分析 OPT算法是未来最远出现,当当前内存中没有正要访问的页面时,置换出当前页面中在未来的访问页中最远出现的页面或再也不出现的页面。 FIFO算法是先进先出,当当前内存中没有正要访问的页面时,置换出最先进来的页面。 LRU算法是最近最久未使用,当当前内存中没有正要访问的页面时,置换出在当前页面中最近最久没有使用的页面。 3.2数据定义 int length,num_page,count,seed; //length记录访问串的长度,num_page页面数,count 记录缺页次数 页脚 页眉 存储访问,order//result记录结果int result[20][30],order[30],a[10]; 存储当前页面中的值串,a flag1等为标志变量int pos1,flag1,flag2,flag3; //pos1位置变量,//最佳void opt() char result1[30]; //记录缺页数组 void fifo() //先进先出 bool search(int n) //查找当前内存中是否已存在该页 3.3流程图与运行截图 开始

基本分页存储管理的模拟实现

基本分页存储管理的模拟实现 学院 专业 学号 学生姓名 指导教师姓名 2014年03月18日 目录

一、设计目的与内容 二、各个功能模块 三、主要功能模块流程图 四、系统测试 五、结论 六、源程序及系统文件使用说明 一、设计目的与内容 设计的目的: 操作系统课程设计是计算机专业重要的教学环节, 它为学生提供了一个既动手又动脑, 将课本上的理论知识和实际有机的结合起来, 独立分析和解决实际问题的机会。 1. 进一步巩固和复习操作系统的基础知识。 2. 培养学生结构化程序、模块化程序设计的方法和能力。 3. 提高学生调试程序的技巧和软件设计的能力。 4. 提高学生分析问题、解决问题以及综合利用C 语言进行程序设计的能力。 设计内容: 根据设计要求实现对基本分页存储管理的模拟 设计要求:

1. 2. 进程名, 进程所需页数, 也 可从文件读出。 3. 况。 所采用的数据结构: typedef struct LNode{ int f; //进程号 char name[8]; //进程名 int size; //进程大小 int n; //进程页数 int ye[100]; //页表,下标表示页号, 内容表示进程各页所在物理块 struct LNode *next; }LNode,*LinkList; 二、各个功能模块 主要功能模块流程图

四、系统测试 主界面: (显示程序的各个功能块)1、选择1, 运行界面如下:

(选择1, 输入进程名, 显示内存物理块分配情况) 2、选择2, 运行界面如下: (显示2回收进程, 若进程名输入错误, 则显示进程不存在, )3、选择3, 运行界面如下:

模拟分页式存储管理中硬件的地址转换和产生缺页中断

合肥学院 计算机科学与技术系实验报告 2011~2012学年第一学期 课程操作系统原理 课程设计名称模拟分页式存储管理中硬件的地址转换和产生缺页中断 学生姓名 学号 专业班级10计本(2)班

指导教师 2011年11月 1.实验目的: 通过实验模拟分页式存储管理中硬件的地址转换和产生缺页中断帮助理解在分页式存储管理中怎样虚拟存储器。 2.实验内容: 分页式虚拟存储系统是把作业信息的副本存放在磁盘上,当作业被选中时,可把作业的开始几页先装入主存且启动执行。作业执行时,指令中的逻辑地址指出了参加运算的操作存放的页号和单元号,硬件的地址转换机构按页号查页表,若该页对应标志为“1”,则表示该页已在主存,这时根据关系式: 绝对地址=块号×块长+单元号 计算出欲访问的主存单元地址。如果块长为2的幂次,则可把块号作为高地址部分,把单元号作为低地址部分,两者拼接而成绝对地址。若访问的页对应标志为“0”,则表示该页不在主存,这时硬件发“缺页中断”信号,由操作系统按该页在磁盘上的位置,把该页信息从磁盘读出装入主存后再重新执行这条指令。 3.实验步骤: 任务分析: (1)分页式虚拟存储系统是把作业信息的副本存放在磁盘上,当作业被选中时,可把作业 的开始几页先装入主存且启动执行。为此,在为作业建立页表时,应说明哪些页已在主存,哪些页尚未装入主存,页表的格式为:

其中,标志----用来表示对应页是否已经装入主存,标志位=1,则表示该页已经在主存,标志位=0,则表示该页尚未装入主存。 主存块号----用来表示已经装入主存的页所占的块号。 在磁盘上的位置----用来指出作业副本的每一页被存放在磁盘上的位置。 (2)作业执行时,指令中的逻辑地址指出了参加运算的操作存放的页号和单元号,硬件的地址转换机构按页号查页表,若该页对应标志为“1”,则表示该页已在主存,这时根据关系式: 绝对地址=块号×块长+单元号 计算出欲访问的主存单元地址。如果块长为2的幂次,则可把块号作为高地址部分,把单元号作为低地址部分,两者拼接而成绝对地址。若访问的页对应标志为“0”,则表示该页不在主存,这时硬件发“缺页中断”信号,由操作系统按该页在磁盘上的位置,把该页信息从磁盘读出装入主存后再重新执行这条指令。 (30设计一个“地址转换”程序来模拟硬件的地址转换工作。当访问的页在主存时,则形成绝对地址,但不去模拟指令的执行,而用输出转换后的地址来代替一条指令的执行。当访问的页不在主存时,则输出“* 该页页号”,表示产生了一次缺页中断。 (4)假定主存的每块长度为128个字节;现有一个共七页的作业,其中第0页至第3页已经装入主存,其余三页尚未装入主存;该作业的页表为: (1)概要设计: 定义页表结构体typedef struct {页号、标志、主存块号、在磁盘存储位置

分页管理实验报告

2015-2016学年第二学期 操作系统课程实验设计报告 班级网络2班 学号 201414620207 姓名韩金铖 成绩 指导教师于复兴

1、实验题目: (1)模拟请求分页存储管理中的硬件地址转换和产生却页中断的过程。 (2)采用先进先出(或LRU)算法实现分页管理的缺页调度。 2、实验目的: (1)通过实验模拟请求分页存储管理中的硬件地址转换和产生却页中断帮助理解在分页式存储管理中怎样虚拟存储器。 (2)通过采用先进先出(或LRU)算法实现分页管理的缺页调度帮助理解和掌握模拟分页式虚拟存储管理的缺页中断,帮助自己对请求分页管理的概念有一个清楚的理解。3、程序设计及实现过程: (1)请求分页储存管理是把作业的全部信息存在磁盘上,当作业被选中时,可把作业的开始几页先装入主存并启动运行。为此,在为作业建立页表时,应说明哪些页已在主存,哪些页尚未装入主存,页表格式为: 其中,标志表示对应页是否已经装入主存,“标志 = 0”表示该页尚未装入主存,“标志= 1”表示该页已在主存。 主存块号表示已装入主存的页所占用的块号。 外存地址表示该页在外存的地址。 (2)作业执行完时,指令中的逻辑地址指出了参加运算的操作数存放的页号和单元号,硬件地址转换机构按页号查页表,若该页对应的标志为“1”,则表示该页已在主存。根据关系式:绝对地址=块号*块长+单元号。 计算出欲访问的主存单元地址,将块长设成2的整次幂,可把块号作为地址寄存器的高位部分,单元号作为低位部分。两个拼接形成绝对地址。按计算出的绝对地址取操作数,完成一条指令的执行。 若访问的页对应标志为“0”,则表示不在主存,这时硬件发缺页中断信号,由操作系统按页表中的该页对应的外存地址把该页装入主存后,执行该指令。 (3)设计一个“地址变换”程序来模拟硬件的地址转换工作。当访问的页不在主存时,则形成绝对地址后不去模拟指令的执行,而用输出转换后的地址来代替一条指令的执行,当访问的页不在主存时,则输出“*”,表示产生了一次缺页中断。 该算法框图如下:

请求页式存储管理中常用页面置换算法模拟

湖南科技学院计算机与信息科学系 实验报告 实验名称请求页式存储管理中常用页面置换算法模拟 课程名称计算机操作系统所属系部班级计科0902 时间2011年12 月8 日第9、10 节地点E305 姓名王校君学号200908001230 成绩 本组成员(一人一组) 一、实验要求 1、上机前认真阅读实验内容,并编好程序; 2、上机实验后,请列出实验数据,写出实验结果; 3、完成实验报告后交任课教师。 二、实验目的 页式虚拟存储器实现的一个难点是设计页面调度(置换)算法,即将新页面调入内存时,如果内存中所有的物理页都已经分配出去,就要按某种策略来废弃某个页面,将其所占据的物理页释放出来,供新页面使用。本实验的目的是通过编程实现几种常见的页面调度(置换)算法,加深读者对页面思想的理解。三、实验环境 每人一台电脑,在下实现。 四、实验内容 (1)设计程序实现以上三种页面调度算法,要求: ①.可以选择页面调度算法类型; ②.可以为进程设置分到物理页的数目,设置进程的页面引用情况,可以从键盘输入页面序列,也可从文件中读取; ③.随时计算当前的页面调度次数的缺页中断率; ④.使用敲键盘或响应WM-TIMER的形式模仿时间的流逝; ⑤.以直观的的形式将程序的执行情况显示在计算机屏幕上; ⑥.存盘及读盘功能,可以随时将数据存入磁盘文件,供以后重复实验时使用。(2)假定进程分配到3个物理块,对于下面的页面引用序列: 7-0-1-2-0-3-0-4-2-3-0-3-2-1-2-0-1-7-0-1 请分别用先进和先出调度算法,最近最少用调度算法,最近最不常用调度算法计算缺页中断次数,缺页中断率和缺页调度次数、缺页置换率。 再假定进程分配到4、5个物理块,重复本实验。 (3)假定进程分配到3个物理块,对于下面的页面引用序列: 4-3-2-1-4-3-5-4-3-2-1-5-0-7-3-8-9-0-2-1-4-7-3-9 请分别用先进先出调度算法、最近最少用调度算法,最近最不常用调度算法计算缺页中断次数,缺页中断率和缺页调度次数、缺页置换率。 再假定进程分配到4、5个物理块,重复本实验。 (4)假定进程分配到3个物理块,使用程序的动态页面序列生成算法,生成一个页面序列,将此序列存入磁盘文件。再从磁盘文件读入该序列,用程序分别计算三种算法下的缺页中断次数、缺页中断率和缺页调度次数、缺页置换率。

请求页式存储管理系统

软件学院 操作系统实验报告 专业:软件工程 班级:RB软工互152 学号:201560160226 学生姓名:王泽华 指导教师:韩新超

实验四:请求页式存储管理 一.实验目的 深入理解请求页式存储管理的原理,重点认识其中的地址变换、缺页中断、置换算法等实现思想。 二.实验属性 该实验为综合性、设计性实验。 三.实验仪器设备及器材 普通PC386以上微机 四.实验要求 本实验要求4学时完成。 本实验要求完成如下任务: (1)建立相关的数据结构:存储块表、页表等; (2)实现基本分页存储管理,如分配、回收、地址变换; (3)在基本分页的基础上实现请求分页存储管理; (4)给定一批作业/进程,选择一个分配或回收模拟; (5)将整个过程可视化显示出来。 实验前应复习实验中所涉及的理论知识和算法,针对实验要求完成基本代码编写并完成预习报告、实验中认真调试所编代码并进行必要的测试、记录并分析实验结果。实验后认真书写符合规范格式的实验报告(参见附录A),并要求用正规的实验报告纸和封面装订整齐,按时上交。 五、实验提示 1、本实验虽然不以前面实验为基础,但建议在其界面中继续增加请求页式存储管理功能。 2、数据结构:内存分配表、页表空间(用数组实现),修改PCB结构增加页表指针、页表长度。 3、存储管理:编写内存分配、内存回收算法、页面置换算法。 4、主界面设计:在界面上增加一个请求分页内存分配按钮、请求分页内存回收按钮、装入指定进程的指定页按钮。 触发请求分页内存分配按钮,弹出作业大小输入框,输入后调用内存分配函数,在内存分配表和页表中看到分配的存储块。触发请求分页内存回收按钮,弹出进程ID输入框,输入后调用内存回收函数,在内存分配表中看到回收后的状态改变。 5、功能测试:从显示出的内存分配表和页表,可查看操作的正确与否。 六、实验步骤 (1)任务分析:

分页管理的缺页调度—LRU算法

南通大学操作系统实验课 实验报告 学生姓名 所在院系 专业 学号 指导教师 南通大学 2014年 5 月 30 日

虚拟存储器管理 采用LRU算法实现分页管理的缺页调度 一、实验目的 为了使大的进程(其地址空间超过主存可用空间)或多个进程的地址空间之和超过实际主存空间时,仍能运行,引入了虚拟存储器的概念。使进程的一部分地址空间在主存,另一部分在辅存,由操作系统实现多级存储器的自动管理,实现主存空间的自动覆盖。模拟请求分页虚拟存储器管理技术中的硬件地址变换、缺页中断以及页式淘汰算法,处理缺页中断。 通过本实验,使学生对请求分页管理的概念有一个清楚的理解。 二、实验要求 书写实验报告,应该包括以下几项内容: (1)实验题目; (2)程序中使用的数据结构及主要符号说明; (3)程序流程图和带有详细注释的源程序; (4)执行程序名,并打印程序运行时的系统状态的初值、每次调入调出的页号和运行结果;(5)通过实验后的收获与体会及对实验的改进意见和见解。 三、简要概述 当采用LRU算法时,用一个数组P构成堆栈,堆栈中各个元素为进程已在主存的页号,为了进行页面置换,可设置一个栈指针HEAD,初始化为0。假定分配给每个进程的内存块数固定不变,为M。当队列满需要淘汰时,操作系统选择栈底的元素淘汰,其他元素向下移一个位置,将新调入页放HEAD指示的栈顶。当访问的页在栈中时,还应调整页从当前位置到栈顶。采用LRU淘汰算法的流程如下所示。

四、流程图

五、结果 六、总结与感悟 经过了这学期的操作系统实验,我对操作系统实验有了全新的认识。尤其是当拿到一个任务时,如何去分析,先干什么,接着干什么,最后干什么,有了比较明确的思路。 拿到一个题目后,我们应该先对这个题目进行概要的分析、设计,分析出这个程序是干什么用的,应该实现什么功能,这些功能应该包含哪些函数。概要设计做好后,我们就要开始做详细设计,将做好的概要设计进行完善,把每个函数要实现的功能用伪代码写出来,或者是用流程图画出来,这样我们就能基本上知道每个程序应该如何实现它自身的功能,写源代码时也就不会那么盲目。 写源代码是将详细设计转化为C++代码的过程,详细设计做好后,我们只需在其基础上将一些简单的或者是用汉语代替的语句用C++语句写出来,再将一些语法错误改过来,并将概要设计和详细设计时未考虑到的东西在语句中完善,最终形成一个可执行的C++文件。刚开始的时候,我根据书上的提示自己编写好程序输入电脑,然后编译的时候,出现了许许多多各种各样的问题,回头查看程序,自己却很难找到问题所在,于是查阅各种资料,问了身边很多同学,终于将程序顺利调试出来了。通过这个系统的实现,我从输入代码跟运行调试的整个过程中学习到了很多东西,也了解到系统出现问题的时候的各种错误应该如何解决。

实验报告关于请求调页存储管理方式

《网络操作系统》 课程设计报告书 题目:请求调页存储管理方式的模拟学号: 学生姓名: 指导教师: 年月日

目录 一. 实验内容.................................................. 错误!未定义书签。 二. 实验目的.................................................. 错误!未定义书签。 三. 设计思想.................................................. 错误!未定义书签。 四. 程序流程图................................................ 错误!未定义书签。 五. 程序清单.................................................. 错误!未定义书签。 六. 运行结果及分析............................................ 错误!未定义书签。 七. 总结...................................................... 错误!未定义书签。

一、实验内容 1.假设每个页面中可存放10条指令,分配给作业的内存块数为4。 2.用C语言或C++语言模拟一个作业的执行过程,该作业共有320条指令,即它的地址空间为32页,目前它的所有页都还未调入内存。在模拟过程中,如果所访问的指令已在内存,则显示其物理地址,并转下一条指令。如果所访问的指令还未装入内存,则发生缺页,此时需记录缺页的次数,并将相应页调入内存。如果4个内存块均已装入该作业,则需进行页面置换,最后显示其物理地址,并转下一条指令。 在所有320指令执行完毕后,请计算并显示作业运行过程中发生的缺页率。 3.置换算法:请分别考虑最佳置换算法(OPT)、先进先出(FIFO)算法和最近最久未使用(LRU)算法。 4.作业中指令的访问次序按下述原则生成; 50%的指令是顺序执行的; 25%的指令是均匀分布在前地址部分; 25%的指令均匀分布在后地址部分。 具体的实现办法是: (1)在[0,319]之间随机选取一条起始执行指令,其序号为m; (2)顺序执行下一条指令,其序号为m+1条指令; (3)通过随机数,跳转到前地址部分[0,m-1]中的某条指令处,其序号为m1; (4)顺序执行下一条指令,即序号为m1+1的指令; (5)通过随机数,跳转到后地址部分[m1+2,319]中的某条指令处,其序号为m2; (6)顺序执行下一条指令,则序号为m2+1的指令; (7)重复跳转到前地址部分,顺序执行,跳转到后地址部分;顺序执行的过程,直至执行320条指令。 二、实验目的 1.通过模拟实现请求页式存储管理的几种基本页面置换算法,了解虚拟储技术的特点。2.通过对页面、页表、地址转换和页面置换过程的模拟,加深对请求调页系统的原理和实现过程的理解。 3.掌握虚拟存储请求页式存储管理中几种基本页面置换算法的基本思想和实现过程,并比较它们的效率。 三、设计思想 在进程运行过程中,若其所要访问的页面不在内存需把它们调入内存,但内存已无空闲空间时,为了保证该进程能正常运行,系统必须从内存中调出一页程序或数据,送磁盘的对换区中。但应将哪个页面调出,所以需要根据一定的算法来确定。在这一过程中,选择换出页面的算法称为页面置换算法。一个好的页面置换算法,应具有较低的页面更换频率。页面置换算法的好坏,将直接影响到系统的性能。以下分别是实验要求的两个页面置换算法的介

操作系统实验3 请求分页式存储管理

请求分页式存储管理 为简单起见。页面淘汰算法采用 FIFO 页面淘汰算法, 只将该页在页表中修改状态位。 而不再判断它是否被改写过, 也不 将它 输入进程大小(例如 5300bytes ),对页表进行初始化 系统为进程分配3个物理块(页框),块号分别为0、1、2,页框管理表(空闲块表) 任意输入一个需要访问的指令地址流(例如: 4355,输入负数结束),打印页表情况。 每访问一个地址时, 首先要计算该地址所在的页的页号, 然后查页表,判断该页是否在 主存 ——如果该页已在主存,则打印页表情况;如果该页不在主存且页框未满 (查空闲块表, 找到空闲块),则调入该页并修改页表,打印页表情况;如果该页不在主存且页框已满,则 按FIFO 页面淘汰算法淘汰一页后调入所需的页,修改页表,打印页表情况。 存储管理算法的流程图见下页。 三、实验要求 完成实验内容并写出实验报告,报告应具有以下内容: 1、 实验目的。 2、 实验内容。 3、 程序及运行情况。 4、 实验过程中出现的问题及解决方法。 #in clude #in clude int P UB[20][3]; int ABC[3][2]={{0,1},{1,1},{2,1}};// 物理块 int key=0; 一、 问题描述 设计一个请求页式存储管理方案, 并且在淘汰一页时, 写回到辅存。 二、 基本要求 页面尺寸1K , 页表结 构如下: 3635、 3642、 1140、 0087、 1700、 5200、

void output(int size){ //打印int i,j; printf(”页号\t\t物理块号\t\t状态位\n\n"); for(i=0;i20000) { printf(" 进程大小超出范围\n"); exit(0); } size%1000==0 ? size=size/1000 : size=size/1000+1; for(i=0;i

操作系统-课程设计任务(二):实验请求页式存储管理

操作系统实验报告一 姓名:学号:时间:老师: 课程设计任务(二):实验请求页式存储管理 一.目的与要求 1.用高级语言编写几个常用的存储分配算法,并设计一个存储管理的模拟程序,对各种算法进行分析比较,评测其性能优劣; 2.用FIFO,LRU.OPT页面调度算法事业页面管理; 二.原理代码: 1.先进先出FIFO页面置换算法: 该算法总是淘汰最先进入内存的页面,即选择在内存中驻留时间最久的页面予以淘汰。该算法实现简单,只需把一个进程已调入内存的页面,按先后次序链接成一个队列,并设置一个指针,称为替换指针,使它总是指向最老的页面; 2.最近最少使用页淘汰算法(LRU): 采用的是不断调整页表链的方法,即总是淘汰页表链链首的页,而把新访问的页插入链尾。如果当前调用页已在页表内,则把它再次调整到链尾。这样就能保证最近使用的页,总是处于靠近链尾部分,而不常使用的页就移到链首,逐个被淘汰,在页表较大时,调整页表链的代价也是不小的; 三.代码及运行结果: #include #include using namespace std; #define N 3 #define M 20 struct PageTable //页?表括?结á构1体? { int num; int vacancy; }; double hits; int usetable[N]; int const a = 20; int in[a]; PageTable *ppage=new PageTable[N]; int input()// { for(int i=0;i>in[i]; if(in[i]<0||in[i]>9) {cout<<"第台?<num) return 1; }

相关文档
最新文档