操作系统之存储管理

一、实验目的 
  连续内存分配方式会形成许多“碎片”,虽然可以通过“紧凑”方法将许多碎片拼接成可用的大块空间,但须为之付出很大开销。如果允许将一个进程直接分散地装入到许多不相邻接的分区中,则无需再进行“紧凑”。基于这一思想而产生了离散分配方式。
如果离散分配的基本单位是页,则称为分页存储管理方式;如果离散分配的基本单位是段,则称为分段存储管理方式。  
在分页存储管理方式中,如果不具备页面兑换功能,则称为基本的分页存储管理方式,或称为纯分页存储管理方式,它不具备支持虚拟存储器的功能,它要求把每个作业全部装入内存后方能运行。
本实验通过程序模拟操作系统的基本分页存储管理方式,进一步理解这一内存分配方式的原理和特点,加深对理论知识的掌握。

二、实验要求 
 1、用C语言或Java语言编写程序模拟操作系统对内存的基本分页存储管理方式  
2、程序要能正确对“内存”进行“分配”和“回收”,能接受用户的输入,显示内存的分配情况,并有一定的容错能力。  
3、每个人独立按时完成实验内容。 
三、实验内容 
  本实验假定内存空间已经按块划分,目标程序无需关心内存块大小等底层细节,只需按算法对内存块进行分配即可。程序应该实现以下功能:
  1、内存初始化。假定内存块共有N个,初始化后的内存空间应该有一部分已经被使用,这可以用随机数或程序内部的其他算法完成。
  2、程序应该能接受用户输入的进程信息,并为之分配内存,返回分配结果(成功或失败),注意,此处应该考虑到不合法的输入并进行相应处理。
  3、程序能回收用户指定的进程所占用的内存空间,因此,程序可能需要为每个进程分配一个唯一的进程号并给出详细的提示信息。
  4、能直观合理地显示内存分配情况。
  5、程序界面友好,便于操作和查看运行结果。

#include <iostream>
using namespace std;
#define INVALID -1 //定义结构类型
struct pl_type
{ //页表结构
    int pn;        //页号
    int fn;        //页帧号
    int time;      //访问时间
 };
    struct fl_type
    { //页帧结构
        int pn; //页号
        int fn; //页帧号
        struct fl_type *next;//链接指针
    };
        //定义结构变量
        pl_type pl[512];
        fl_type fl[512],*free_head,*busy_head,*busy_tail;
        int page[512];   //访问串(存放每条指令的页号)
        int TOTAL_PAGES; //访问串长度
        int diseffect;    //页故障数
        //初始化函数:初始化页表和页帧链
        //形参total_pf为分配给用户进程的内存页帧数
        void initialize(int total_pf)
        {
            int i;
        diseffect=0; //页故障数初始化为0
        //建立空页表
        for(i=0;i<512;i++)
        {
            pl[i].pn=i;        //页号
            pl[i].fn=INVALID; //页帧号为-1,(开始时,页还未装入到页帧)
       pl[i].time=-1;
        }        //建立空闲页帧链
        for(i=0;i<total_pf;i++)
        {
            fl[i-1].next=&fl[i]; //建立fl[i-1]和fl[i]间的链接
            fl[i-1].fn=i-1;
        }
        fl[total_pf-1].next=NULL;  //链表末尾为空指针
        fl[total_pf-1].fn=total_pf-1; //末尾结点的页帧号
        free_head=&fl[0];  //空闲页帧链头指针指向fl[0]
        }
        void LRU(int total_pf)
        {
            int i,j,min,minj,present_time;
            present_time=0;
            initialize(total_pf);
            for(i=0;i<TOTAL_PAGES;i++)
            {
                if(pl[page[i]].fn==INVALID)
                {  //页故障
                    diseffect++;
                    if(free_head==NULL)
                    { //无空闲页帧
                        min=32767;
                        for(j=0;j<TOTAL_PAGES;j++)
                        { //找time的最小值
                            if(min>pl[j].time && pl[j].fn!=INVALID)
                            {
                                min=pl[j].time;
                                minj=j;
                            }
                        }
                        free_head=&fl[pl[minj].fn]; //腾出一页帧
                        pl[minj].fn=INVALID;
                        pl[minj].time=-1;
                        free_head->next=NULL;
                    }
                    pl[page[i]].fn=free_head->fn; //有空闲页帧,改为有效
                    pl[page[i]].time=present_time; //time置为当前时间
                    free_head=free_head->next;  //空闲页帧链头指针前移
                }
                else
                    pl[page[i]].time=present_time; //time置为当前时间
                present_time++;
            }
        cout<<"LRU:"<<diseffect<<"("<<(float)diseffect/TOTAL_PAGES<<")";
        }
        void getRefstring(void)
        {
            int i;
            cout<<"输入的访问串以‘-1‘结束!"<<endl;
            cout<<"请输入访问串:";
            for(i=0;i<512;i++)
            {
                cin>>page[i];
                if(page[i]==-1)
                    break;
            }
            TOTAL_PAGES=i;  //访问串大小
            cout<<"访问串大小:"<<i<<endl<<"访问串为:";
            for(i=0;i<TOTAL_PAGES;i++)
                cout<<page[i]<<" ";
                 cout<<endl<<endl;
        }
        int main()
        {
            int f;
            getRefstring();
            for(f=2;f<=TOTAL_PAGES;f++)
            { //页帧数从3个页帧到TOTAL_PAGES个页帧
                cout<<"若分配给进程"<<f<<"页帧,页故障数(缺页率):";
                LRU(f);
                cout<<endl;
            }
        system("pause");
        return 0;
        } 

四 结论与体会

这次是最后一次的作业了,程序代码到现在我还是很多不懂,这次的作业加深了对存储管理方面的理解。

时间: 2025-01-05 04:09:57

操作系统之存储管理的相关文章

操作系统之存储管理(续)

在"操作系统概论-存储管理"中已经讲解了单用户存储管理,固定用户存储管理,可变分区存储管理,页式虚拟存储管理等内容.以及它们一步一步改进的过程,下面主要说一下页式存储,段式存储和段页式存储的区别与关系. 页式存储: 将一个进程的地址空间划分成若干个大小相等的区域,称为页.相应地,将主存空间划分成与页相同大小的若干个物理块.在为进程分配主存时,将进程中若干个页分别装入多个不相邻的块中. 因为块的大小=页的大小,所以块内位移量=页内位移量 所以只需求出块号即可 页式存储管理的地址变换 过程

计算机操作系统之存储管理

以下是本人大学学计算机操作系统的笔记.有版权的,转载请注明出处. 存储管理:就是对内存的管理. 内存管理提高存储器的利用率以及从逻辑上扩充存储器. 存储管理功能: 内存的回收与分配,地址变换(程序中的逻辑地址与内存中的物理地址之间的转换),内存扩充(借助虚拟技术或覆盖技术从逻辑上扩充内存容量),内存保护(保证进入内存的各道作业都在自己的存储空间运行,互不干扰) 虚拟内存 以往的存储管理技术必须将作业全部装入内存才能执行且作业常驻内存直到运行结束,难以满足较大作业或较多作业进入内存执行.所以为了能

实验五 操作系统之存储管理

一.实验目的 连续内存分配方式会形成许多“碎片”,虽然可以通过“紧凑”方法将许多碎片拼接成可用的大块空间,但须为之付出很大开销.如果允许将一个进程直接分散地装入到许多不相邻接的分区中,则无需再进行“紧凑”.基于这一思想而产生了离散分配方式. 如果离散分配的基本单位是页,则称为分页存储管理方式:如果离散分配的基本单位是段,则称为分段存储管理方式. 在分页存储管理方式中,如果不具备页面兑换功能,则称为基本的分页存储管理方式,或称为纯分页存储管理方式,它不具备支持虚拟存储器的功能,它要求把每个作业全部

操作系统存储管理实验课程设计报告

操作系统报告 存储管理 姓名: 郑兆涵                                     专业: 计算机科学与技术(嵌入式方向) 一.设计目的.意义 本次实验针对:(1)存储管理实验,(2)主存储器空间的分配和回收实验,两个实验进行学习. (1)存储管理实验:本实验的目的是通过请求页式存储管理中页面置换算法模拟设计,了解虚拟存储技术的技术特点,掌握请求页式存储管理的页面置换算法. (2)主存储器空间的分配和回收实验:本实验的目的是理解在不同的存储管理方式下应怎样实现主存空间

操作系统-存储器管理部分

存储器历来都是计算机系统中重要的组成部分.仍然是一种宝贵而又稀缺的资源. 如何对它加以有效的管理,不仅直接影响到存储器的利用效率,而且会影响系统的性能. 存储器的管理的主要对象是内存.在计算机执行时,几乎每一条指令都会涉及到对存储器的访问. 存储器的三个理想条件(这三个条件从现在技术来讲是不可能同时达到的) 1.对存储器的访问速度要跟得上处理机的运行速度. 2.要求存储器要有很大的容量. 3.而且存储器的造价应该很低. 在现代计算机系统当中无一例外的采用了多层结构的存储器系统. 存储器的多层结构

原:计算机的多维学习方法

一.多维之360度学习方法: 纵下:(老码识途):图灵机---机器码---汇编---中级语言---托管汇编(虚拟机中.中间平台等)----高级语言 计算机结构+内存管理+底层机制(内存模式.对象模型)+编程范式+质量管理(安全.优化.异常.陷阱等) 理解计算机结构及原理(理解主动的CPU.总线.内存.指令器).编译器 理解数据库原理.虚拟机机制.操作系统.存储管理.内存管理.编译原理等 理解数据结构和控制原理 纵上:OO思想.设计模式.UML.软件工程.多学几种不同思想的语言等 横左:专业方案平

存储系统(4)-------虚拟存储

1.目的 将一部分磁盘空间作为主存,价格.容量接近辅存,速度接近主存. 2.工作原理 CPU给出虚拟地址,进行内部转换,判断改地址是否在主存中 若在,从主存中提取数据 若不在,进行外部地址转换(利用外页表,外段表,通常由软件实现) 外部转换计算出辅存地址,并使用替换算法,进行数据的调入调出 备注: ? CPU通过MMU支持操作系统进行存储管理的相关工作 ? MMU完成虚拟地址到物理地址的转换 3.地址转换 页式 . 段式 . 段页式 1).页式 ? 思想:用固定大小的页描述逻辑空间和物理空间 ?

【课程分享】深入探究IBM AIX高级系统管理(LVM、HACMP双机互备)

课程讲师:丸子 课程分类:其他 适合人群:高级 课时数量:53课时 更新程度:完毕 用到技术:AIX.LVM.HACMP 涉及项目:AIX系统管理 对这个课程感兴趣的,可以加我好友2059055336分享资源 AIX(Advanced Interactive eXecutive)是IBM基于AT&T Unix System V开发的一套类UNIX操作系统,运行在IBM专有的Power系列芯片设计的小型机硬件系统之上.它符合Open group的UNIX 98行业标准(The Open Group

《精解Windows 10》

<精解Windows 10>全面深入讲解Windows 10操作系统的使用方法.本书共计14章内容.第一章简述Windows 10操作系统的一些变革:第二章介绍Modern 2.0界面的体验以及Cortana:第三章介绍传统桌面下的一些改进功能:第四章介绍全新的Microsoft Edge浏览器:第五章介绍安装操作系统的方式和方法:第六章介绍Windows 10操作系统在存储管理方面的内容:第七章介绍文件系统:第八章介绍虚拟化:第九章介绍Windows云网络:第十章介绍操作系统的一些常规设置,