首页 > 软考总结——虚存管理

软考总结——虚存管理



存储管理是操作系统的重要职能之中的一个,主要任务是对内存空间进行分配与回收。

因为计算机内存容量有限(如今一般都是32位或64位系统),而外存储设备的容量增长速度很快,比如移动硬盘已经到了T的级别,这时假设要訪问这块儿移动硬盘内的大数据,我们的计算机就有点力不从心了。

。。故在此基础上发展了虚拟存储系统。

 

虚存理念:利用有限资源尽可能的运行大程序。对用户程序和内存进行分块,将用户程序一块块拿到内存中来,一个运行完后释放内存,下一个继续运行。

 

虚拟存储通过将执行进程訪问的地址(逻辑地址、虚拟地址)与主存的物理地址(实际地址)分开,从而使得提供大于物理地址的逻辑地址空间成为可能。

 

虚存管理的组织结构例如以下图示

    





1.页式存储组织

    

       

    系统划分,逻辑地址=页号+页内地址。



    基本思想:内存分为固定大小的页。



    基本原理:将各进程的虚拟空间划分为若干个长度相等的页,把内存空间以与页相等的大小划分为大小相等的片或页面。採用请求调页或预调页技术实现内外存统一管理。





        已知程序逻辑地址为14位且前三位为011,页面大小2K,採用页式存储。



    已知逻辑地址14位,每一个页面2K=2^11,所以页内地址11位,页号为3位。

又前三位为011变为十进制为3,相应的物理块号为b。地址变换步骤例如以下图所看到的

       

      



    长处:利用率高,产生的内存碎片小,内存间分配及管理简单。



    缺点:要有对应的硬件支持,添加了系统开销。

请求调页的算法选择不当,有可能产生抖动现象。



2.段式存储组织

    



从用户角度划分,逻辑地址=段号+段内地址。



基本思想:程序按逻辑单位分成基本独立的段。



基本原理:系统为每个作业建立一个段表。其内容包含段号与内存起始地址的相应关系、段长和状态等。

   

    地址变换过程与页式变换同理,例如以下图所看到的

     





长处:便于多道程序共享内存,便于对存储器的保护,各段程序改动互不影响



缺点:内存利用率低。内存碎片浪费大。

     

3.段页式存储组织



   



逻辑地址=基号+段号+页号+页内地址



一个段表+一组页表。



段页式存储组织是段式存储组织和页式存储组织的组合。这样能够充分利用两者的长处,实存等分为页。程序按逻辑模块分成段。当中,基号作为用户标志号存在。

    



地址变换过程公式:



    (((x+s+p*2^n +d



当中,X表示基号,(x)表示基寄存器中地址为x的单元的内容。S为段号。P表示页号,d表示页内地址。n表示页内地址的位数。



 长处:空间浪费小,存储共享easy、存储保护easy、能动态连接。



缺点:因为软件的添加。复杂性和开销添加。须要的硬件以及占用的内存添加,运行速度大大下降。



 

页面置换算法(从要运行的元素自身開始算起)



在開始页面置换之前,要了解一个概念,页面置换是相对缺页现象来讲的。缺页,简单的来理解,就是因为实际主存是小于虚存的。因此可能会发生主存中已满,而要使用的页不在主存中,这时就会出现缺页现象。

 

      最优算法



             查看后面的序列,最后被使用的元素被替换掉



      随机算法



             随机淘汰,没有一定的约束性。



      先进先出



             最先进入主存的元素先被淘汰。



      近期最少使用算法



             查看前面的序列,最后被訪问的元素被替换掉







      



初始keyword  

2

4

6

5

3

4

2

最优置换

2

2

2

2

2

2

2

 

 

4

4

4

4

4

4

 

 

 

6

5

3

3

3

缺页(*

*

*

*

*

*

 

 



 解析:



    主存初始加入页2,4,6,直接依次放入就可以,可是都会出现缺页现象。



加入页5。主存中没有5。所以会出现缺页现象,依据最优置换的规定,5后面又依次出现了34,2所以6被替换掉。



加入页3。主存中没有3。出现缺页现象。3后面出现了42,5被替换掉



加入页4。主存中2,4,3包括3。没有缺页现象。不用进行最优置换。





初始keyword  

2

4

6

5

3

4

2

先进先出

2

2

2

5

2

2

2

 

 

4

4

4

3

3

3

 

 

 

6

6

6

4

4

缺页(*

*

*

*

*

*

*

 



解析:



主存初始加入页2,4,6,直接依次放入就可以。可是都会出现缺页现象。



加入页5,主存中没有5,所以会出现缺页现象,依据先进先出的规定。主存中已有页出现顺序为2,4,6,所以2被替换掉



加入页3,主存中没有3。出现缺页现象。主存中已有页出现顺序为4,6,5,所以4被替换掉



加入页4,主存中没有4。出现缺页现象。主存中已有页出现顺序为6,2,3,所以6被替换掉



加入页2,主存中有2。没有缺页现象。







总结:



没有学不会的知识,仅仅有不愿意学的知识。再简单的知识点,不学习不总结。也掌握不好;再难的知识点,仅仅要想学、愿意学、会学,那么也能够掌握。

点滴积累吧!









转载于:https://www.cnblogs.com/claireyuancy/p/6964824.html

更多相关:

  • 51 三菱PLC可读不可写Q:MT8102IQ和三菱Q系列PLC通讯,屏无法写入PLC,但是可以读取PLC的状态和数值?A:PLC程序中"允许RUN中写入"打钩,程序下载重启后解决。52 控制不了输入点Q:触摸屏做了三菱PLC的X点的元件,但是控制不了X输出?A:是的,PLC端X点无法通过触摸屏控制输出,屏上只能做X点的显示。53 M...

  • 传统方法(仅适用于普通项目):   1、在vscode中安装 Live Server 插件: 2、安装成功后,vscode右下角会有 Go Live 标识点击: 3、cmd ipconfig 查询自己电脑的ip地址: 4、复制地址替换端口前的地址(http://127.0.0.1:8080修改为http://192.168....

  • ngx_http_geo_module模块,默认情况下,nginx会加载,除非人为的 --without-http_geo_module。 这个模块提供了一个非常好用的geo指令,可以用它来创建变量,诞生其值依赖于客户端IP地址。 ngx_http_geo_module 模块官网地址 http://nginx.org/en...

  • uboot启动Linux内核过程分为4大步骤: 问题2: uboot阶段DDR的分区的问题 上述步骤2和步骤4中,有将uboot/kernel拷贝纸DDR的步骤,具体要拷贝到DDR的什么位置呢? 分清楚这两个概念: 链接地址:链接时指定的地址(指定方式为:Makefile中用-Ttext,或者链接脚本) 运行地址:程序实际运行...

  • 在Linux系统中,以32bit x86系统来说,进程的4GB内存空间(虚拟地址空间)被划分成为两个部分 ------用户空间和内核空间,大小分别为0-3G,3-4G。        用户进程通常情况下,只能访问用户空间的虚拟地址,不能访问到内核空间。          每个进程的用户空间存放用户的程序和代码(堆栈,数据区,代码区等)...

  • 更多内容,欢迎关注微信公众号:全菜工程师小辉~前言在笔者上一篇博客,详解了NIO,并总结NIO相比BIO的效率要高的三个原因,彻底搞懂NIO效率高的原理。这篇博客将针对第三个原因,进行更详细的讲解。首先澄清,零拷贝与内存直接映射并不是Java中独有的概念,并且这两个技术并不是等价的。零拷贝零拷贝是指避免在用户态(User-space)...

  • 一、预备知识—程序的内存分配  一个由c/C++编译的程序占用的内存分为以下几个部分  1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈,如果还不清楚,那么就把它想成数组,它的内存分配是连续分配的,即,所分配的内存是在一块连续的内存区域内.当我们声明变量时,那么编译器...

  • 我的爱机是一台ThinkPad T420,原装三星DDR 1333 4G内存一根,还剩一根内存位置,最近趁京东6.18促销,准备增加一根物理内存。为了确保兼容性,觉得仍然选购DDR 1333 4G内存,于是购买了金士顿这款,比如DDR3 1600的还贵。 这个安装过程完全参照该内存的网页提示进行 这里简单记录一下,以备...

  • 陪伴我多年的老本ThinkPad T420渐渐垂垂老矣, 我想更新一下可以更新的部分, 比如将2.5寸HDD更换为SSD, 将单条4G内存再增加一根, 凡此种种想法, 可能最后归结为如何获取该笔记本的硬件配置信息, 在windows下面使用鲁大师之类的检测软件, 也许很好搞定,但是在Ubuntu 14.04平台上如果办到呢? 很简单...

  • 一.内存错误出现的场景 这几天在重构ATS插件代码的过程中遇到了烦人的内存泄露问题, 周五周六连续两天通过走查代码的方法,未能看出明显的导致内存错误的代码, 同时也觉得C和C++混合编程得到一个动态库, 在一个.cpp主文件中,即用new又用malloc来动态分配内存, 可能会导致内存错误.后来网上调研和查资料发现, new和mal...