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

时间:2024.4.26

一 目的与要求

(1) 请求页式虚存管理是常用的虚拟存储管理方案之一。

(2) 通过请求页式虚存管理中对页面置换算法的模拟,加深理解虚拟存储技术的特点。

(3) 模拟页式虚拟存储管理中硬件的地址转换和缺页中断,并用先进先出调度算法(FIFO)处理缺页中断.

二 实验内容或题目

(1) 本实验要求使用C语言编程模拟一个拥有若干个虚页的进程在给定的若干个实页中运行、并在缺页中断发生时分别使用FIFO和LRU算法进行页面置换的情形。

(2) 虚页的个数可以事先给定(例如10个),对这些虚页访问的页地址流(其长度可以事先给定,例如20次虚页访问)可以由程序随机产生,也可以事先保存在文件中。

(3) 要求程序运行时屏幕能显示出置换过程中的状态信息并输出访问结束时的页面命中率。

(4)程序应允许通过为该进程分配不同的实页数,来比较两种置换算法的稳定性。

三 实验步骤与源程序

(1)实验步骤

1、理解好相关实验说明。

2、根据实验说明,画出相应的程序流程图。

3、按照程序流程图,用C语言编程并实现。

(2)流程图如下:

① 虚页和实页结构

                虚页结构                                 实页结构

在虚页结构中,pn代表虚页号,因为共10个虚页,所以pn的取值范围是0—9。pfn代表实页号,当一虚页未装入实页时,此项值为-1;当该虚页已装入某一实页时,此项值为所装入的实页的实页号pfn。time项在FIFO算法中不使用,在LRU中用来存放对该虚页的最近访问时间。

在实页结构中中,pn代表虚页号,表示pn所代表的虚页目前正放在此实页中。pfn代表实页号,取值范围(0—n-1)由动态指派的实页数n所决定。next是一个指向实页结构体的指针,用于多个实页以链表形式组织起来,关于实页链表的组织详见下面第4点。

② 程序流程图如下:

 

(3)源程序如下:

#include<iostream.h>

#define  M  40

int N;

struct Pro

{

        int num,time;

};

int Input(int m,Pro p[M])

{  

        cout<<"请输入实际页数:";

        do

        {

                cin>>m;

                if(m>M)cout<<"数目太多,请重试"<<endl;

                else break;

        }while(1);

        //cout<<"请输入各页面号:";

        for(int i=0;i<m;i++)

        {

            cout<<"第"<<i<<"个页面号为:";

            cin>>p[i].num;

            p[i].time=0;

        }

        return m;

}

void print(Pro *page1)//打印当前的页面

{

        Pro *page=new Pro[N];

        page=page1;

        for(int i=0;i<N;i++)cout<<page[i].num<<"  ";

        cout<<endl;

}

int  Search(int e,Pro *page1  )

{

        Pro *page=new Pro[N];

        page=page1;

        for(int i=0;i<N;i++)if(e==page[i].num)return i;

        return -1;

}

int Max(Pro *page1)

{

        Pro *page=new Pro[N];

        page=page1;

        int e=page[0].time,i=0;

        while(i<N)//找出离现在时间最长的页面

        {

                if(e<page[i].time)e=page[i].time;

                i++;

        }

    for( i=0;i<N;i++)if(e==page[i].time)return i;

       

        return -1;

}

int Compfu(Pro *page1,int i,int t,Pro p[M])

{

        Pro *page=new Pro[N];

        page=page1;

        int count=0;

        for(int j=i;j<M;j++)

        {

                if(page[t].num==p[j].num )break;

                else count++;

        }

        return count;

       

}

int main()

{  

        cout<<"可用内存页面数:";

        cin>>N;       

        Pro p[M];

        Pro *page=new Pro[N];

        char c;

        int m=0,t=0;

        float n=0;

        m=Input(m,p);         

        do{               

                for(int i=0;i<N;i++)//初试化页面基本情况

                {

                        page[i].num=0;

                        page[i].time=2-i;

                }    

                 i=0;

                 cout<<"************************"<<endl;

                 cout<<"*****f:FIFO页面置换*****"<<endl;

                cout<<"*****l:LRU页面置换******"<<endl;

                cout<<"*****o:OPT页面置换******"<<endl;

                cout<<"*****按其它键结束*******"<<endl;

                 cout<<"************************"<<endl;

                cout<<"请选择操作类型(f,l,o):";

                cin>>c;      

                if(c=='f')//FIFO页面置换

                {

                        n=0;

                        cout<<"页面置换情况:   "<<endl;

                        while(i<m)

                        {

                                if(Search(p[i].num,page)>=0)i++;//找到相同的页面

                                else

                                { 

                                        if(t==N)t=0;

                                        else

                                        {

                                                n++;//

                                                page[t].num=p[i].num;

                                                print(page);

                                                t++;

                                        }

                                }

                        }

                        cout<<"缺页次数:"<<n<<" 缺页率:"<<n/m<<endl;            

                }

                if(c=='l')//LRU页面置换

                {    n=0;

                cout<<"页面置换情况:   "<<endl;

                while(i<m)

                {   

                        int k;

                        k=t=Search(p[i].num,page);

                        if(t>=0)

                               

                                page[t].time=0;

                       

                        

                        else

                        { 

                                n++;

                                t=Max(page);

                               

                                page[t].num=p[i].num;

                                page[t].time=0;

                        }

                        if(t==0){page[t+1].time++;page[t+2].time++;}

                        if(t==1){page[2].time++;page[0].time++;}

                        if(t==2){page[1].time++;page[0].time++;}

                        if(k==-1)   print(page);                               

                        i++;

                }

                cout<<"缺页次数:"<<n<<"    缺页率:"<<n/m<<endl;

                }

                if(c=='o')//OPT页面置换

                {

                        n=0;

                        while(i<m)

                        {

                                if(Search(p[i].num,page)>=0)i++;

                                else

                                {

                                        int temp=0,cn;

                                        for(t=0;t<N;t++)

                                        {

                                                if(temp<Compfu(page,i,t,p))

                                                {

                                                        temp=Compfu(page,i,t,p);

                                                        cn=t;

                                                }

                                        }

                                        page[cn]=p[i];

                                        n++;

                                        print(page);

                                        i++;

                                }

                        }

                        cout<<"缺页次数:"<<n<<"    缺页率:"<<n/m<<endl;

                }             

        }while(c=='f'||c=='l'||c=='o');             

        return 0;

});  

四 测试数据与实验结果

五 结果分析与实验体会

通过上机,我了解了许多关于操作系统的专业知识。无论是在批处理系统还是分时系统中,用户进程数一般都多于处理机数、这将导致它们互相争夺处理机。另外,系统进程也同样需要使用处理机。这就要求进程调度程序按一定的策略,动态地把处理机分配给处于就绪队列中的某一个进程,以使之执行。

进程调度的具体功能可总结为如下几点:(1)记录系统中所有进程的执行情况;(2)选择占有处理机的进程;3)进行进程上下文切换。

进程调度有以下两种基本方式:

非剥夺方式:分派程序一旦把处理机分配给某进程后便让它一直运行下去,直到进程完成或发生某事件而阻塞时,才把处理机分配给另一个进程。

剥夺方式:当一个进程正在运行时,系统可以基于某种原则,剥夺已分配给它的处理机,将之分配给其它进程。剥夺原则有:优先权原则、短进程、优先原则、时间片原则。

实现进程有许多的算法,例如:先进先出算法,最短CPU运行期优先调度算法,轮转法,简单轮转法,多级队列方法,多级反馈队列等等。

这次的实验使我懂得了进程调度的概念方法和基本的实现方法,达到了实验的目的。在实验编程中也遇到了许多的困难,通过查阅资料并且不断的调试程序,最终完成了。在今后的课堂学习和上机实验中要更加努力的学习和掌握这门专业课。


第二篇:操作系统内存储器空间的管理的实验报告


安徽师范大学

           学院实验报告

专业名称   软件工程

实 验 室   2#201

实验课程  操作系统实验

实验名称 内存储器空间的管理

姓    名 

学    号  

同组人员 

实验日期  2013/6/7

更多相关推荐:
《操作系统》存储管理实验报告

《操作系统》存储管理实验报告____大学____学院实验报告

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

北京邮电大学操作系统实验实验报告实验日期20xx1220实验名称存储管理一实验目的2二实验内容2三实验分析2对于伙伴算法2对于虚拟存储区和内存工作区的不同算法3四编程实现3伙伴算法3原理3伙伴的概念3内存的释放...

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

同组同学学号同组同学姓名注实验内容及步骤项目的内容如果较多可以加附页

北邮大三上-操作系统-存储管理实验报告

操作系统实验三存储管理实验班级:学号:姓名:目录1.实验目的...22.实验内容...2(1)通过随机数产生一个指令序列,共320条指令...2(2)将指令序列变换成为页地址流...2(3)计算并输出下述各种算…

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

实验四操作系统存储管理实验报告一实验目的存储管理的主要功能之一是合理地分配空间请求页式管理是一种常用的虚拟存储管理技术本实验的目的是通过请求页式管理中页面置换算法模拟设计了解虚拟存储技术的特点掌握请求页式存储管...

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

实验报告12345678910111213

东华大学操作系统存储管理实验报告

东华大学计算机学院操作系统实验报告实验名称存储管理问题姓名姜元杰学号111310228班级计算机1102指导老师李继云报告日期20xx112操作系统实验报告一实验概述1实验目标存储管理的主要功能之一是合理地分配...

存储管理--可变分区管理 操作系统 实验报告

实验三存储管理一实验目的通过编写和调试存储管理的模拟程序以加深对存储管理方案的理解通过编写和调试模拟程序以加强对虚拟存储管理的了解二实验题目设计一个可变式分区分配的存储管理方案并模拟实现分区的分配和回收过程对分...

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

Linux操作系统实验报告 存储管理试验,内容附图。

操作系统实验报告 文件管理系统 源程序

操作系统实验报告操作系统实验报告题目班级文件管理系统20xx年12月21日1操作系统实验报告目录一实践内容311实验内容32实验原理43实验要求4二实验的目的及意义4三详细设计531功能设计532结构设计633...

操作系统实验报告

操作系统实验报告,内容附图。

《操作系统》实验报告三_页式虚拟存储管理中地址转换和缺页中断55

注可根据实际情况加页

操作系统存储管理实验报告(30篇)