操作系统——存储

存储管理: 存储管理的主要任务是完成存储空间的分配和回收。

存储空间的分配方式:

     1. 单一连续分配  不分区,适用于单用户,单任务的操作。

     2. 固定分区分配  系统将内存分成大小不等的区域,可以同时装入多个程序。但是,内存分完后,区域大小固定不变。这样,使系统缺乏灵活性。例如64k的内存分配了10k,22k,32k的区域,但是,当要执行35k的程序时,却无法完成了。

     3. 可变分区分配   程序装入内存时,由四种分配算法决定将它装入哪块儿内存。

                最佳适应算法:将程序放到和它大小接近的内存区。

                最差适应算法:将程序放到一个最大的内存区。

                首次适应法:将程序放到首次发现的合适的内存区。

                首次循环适应法:继上次的位置出开始寻找合适的内存区。

存储管理有两种方式:

1. 实存管理  :不能执行超过系统内存大小的程序。实存管理是对内存进行分块儿,将程序放入合适的内存中执行。

         2. 虚存管理  :可以执行超过系统内存大小的程序。虚存管理是对内存和程序都进行分块儿。

       

       实存管理比较简单,上面的概念已经基本将实存概述清楚,实存管理主要是将内存分配成不同的区域,然后通过不同的适应算法,将程序装入合适的内存。

       实存常见的考题:根据要执行的进程的大小和系统内存分配情况,求系统为进程分配内存采用的是哪种算法。

       

             所以,系统采用的是最差适应算法。

 

        虚存管理相对于实存管理要复杂一些。虚存管理分为页式存储、段式存储、段页式存储

        1. 页式存储

           

            将程序分页,将内存分块,内存分页大小应该和程序分配的区域大小一样。

            页表包含页号和页内地址,主要记录程序的每页对应内存的哪块儿区域。

           习题确定程序在内存中的物理地址。

                    ( 物理地址 = 页表中页号对应的块号  + 逻辑地址的页内地址.)

         

        (1)  确定页表中页号对应的块号地址。

              将逻辑地址8644转换为二进制数10 0001 1100 0100 ,14位。已知页面大小为4k,即12位,所以,页内地址有12位。14位—12位,那么,剩下的两位就是页号的地址了。页号的二进制地址为10,转换成十进制为2,已知页号2对应的页内地址为8,即1000。

第一步完成,求出页表中页号对应的块号地址。1000

       (2)  确定逻辑地址的页内地址

              已经求出页内地址为0001 1100 0100。

       (3)  物理地址=页表中页号对应的块号地址+逻辑地址中的页内地址。

               结果为1000 0001 1100 0100即十进制33220

2. 段式存储

从用户角度出发,将程序分成多个段。

和页式存储相比:页式存储中任何一个页的大小相等,其大小由系统决定。

                             段式存储中段的大小不等,其大小由其完成的功能决定。

                             段式存储的段长比页式存储的页号要大的多。

        物理地址=基址+位移量

 

           3. 段页式存储

            段页式存储,先将程序分段,再进行分页。一个程序有一个段表,每个段对应一个页表。

             

      

 

 

        最后为三种存储的优缺点比较。

    后面还讲了页面置换算法、局部性原理,这两个概念不太清楚。段页式存储也只是了解了一点点。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
#include<stdio.h> #include<string.h> #include<iostream.h> const int MAXSIZE=1000;//定义最大页面数 const int MAXQUEUE=3;//定义页框数 typedef struct node { int loaded; int hit; }page; page pages[MAXQUEUE]; //定义页框表 int queue[MAXSIZE]; int quantity; //初始化结构函数 void initial() { int i; for(i=0;i<MAXQUEUE;i++) { pages[i].loaded=-1; pages[i].hit=0; } for(i=0;i<MAXSIZE;i++) { queue[i]=-1; } quantity=0; } //初始化页框函数 void init() { int i; for(i=0;i<MAXQUEUE;i++) { pages[i].loaded=-1; pages[i].hit=0; } } //读入页面流 void readData() { FILE *fp; char fname[20]; int i; cout<<"请输入页面流文件名:"; cin>>fname; if((fp=fopen(fname,"r"))==NULL) { cout<<"错误,文件打不开,请检查文件名"; } else { while(!feof(fp)) { fscanf(fp,"%d ",&queue[quantity]); quantity++; } } cout<<"读入的页面流:"; for(i=0;i<quantity;i++) { cout<<queue[i]<<" "; } } //FIFO调度算法 void FIFO() { int i,j,p,flag; int absence=0; p=0; cout<<endl<<"----------------------------------------------------"<<endl; cout<<"先进先出调度算法(FIFO)页面调出流:"; for(i=0;i<quantity;i++) { flag=0; for(j=0;j<MAXQUEUE;j++) { if(pages[j].loaded==queue[i]) { flag=1; } } if(flag==0) { if(absence>=MAXQUEUE) { cout<<pages[p].loaded<<" "; } pages[p].loaded=queue[i]; p=(p+1)%MAXQUEUE; absence++; } } absence-=MAXQUEUE; cout<<endl<<"总缺页数:"<<absence<<endl; } //最近最少使用调度算法(LRU) void LRU() { int absence=0; int i,j; int flag; for(i=0;i<MAXQUEUE;i++) { pages[i].loaded=queue[i]; } cout<<endl<<"----------------------------------------------------"<<endl; cout<<"最近最少使用调度算法(LRU)页面流:"; for(i=MAXQUEUE;i<quantity;i++) { flag=-1; for(j=0;j<MAXQUEUE;j++) { if(queue[i]==pages[j].loaded) { flag=j; } } //CAUTION pages[0]是队列头 if(flag==-1) { //缺页处理 cout<<pages[0].loaded<<" "; for(j=0;j<MAXQUEUE-1;j++) { pages[j]=pages[j+1]; } pages[MAXQUEUE-1].loaded=queue[i]; absence++; } else { //页面已载入 pages[quantity]=pages[flag]; for(j=flag;j<MAXQUEUE-1;j++) { pages[j]=pages[j+1]; } pages[MAXQUEUE-1]=pages[quantity]; } } cout<<endl<<"总缺页数:"<<absence<<endl; } //显示 void version() { cout<<" /*******************虚拟存储管理器的页面调度****************/"<<endl; cout<<endl; } void main() { version(); initial(); readData(); FIFO(); init(); LRU(); init(); init(); }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值