段式存储、页式存储及段页式存 详解
段式存储、页式存储及段页式存储
分段式存储方式 |
[百度百科同名词条,下同]
段式管理(segmentation),是指把一个程序分成若干个段(segment)进行存储,每个段都是一个逻辑实体(logical entity),程序员需要知道并使用它。它的产生是与程序的模块化直接有关的。段式管理是通过段表进行的,它包括段号或段名、段起点、装入位、段的长度等。此外还需要主存占用区域表、主存可用区域表。
页式管理是一种内存空间存储管理的技术,页式管理分为静态页式管理和动态页式管理。
基本原理:
将各进程的虚拟空间划分成若干个长度相等的页(page),页式管理把内存空间按页的大小划分成片或者页面(page frame),然后把页式虚拟地址与内存地址建立一一对应页表,并用相应的硬件地址变换机构,来解决离散地址变换问题。页式管理采用请求调页或预调页技术实现了内外存存储器的统一管理。
静态页式管理:
静态分页管理的第一步是为要求内存的作业或进程分配足够的页面。系统通过存储页面表、请求表以及页表来完成内存的分配工作。
页表:内存中的一块固定存储区。页式管理时每个进程至少有一个页表。
请求表:用来确定作业或进程的虚拟空间的各页在内存中的实际对应位置;
存储页面表:整个系统有一个存储页面表,其描述了物理内存空间的分配使用状况。
存储页面表有两种构成方法:
1、位示图法
2、空闲页面链表发
首先,请求表给出进程或作业要求的页面数。然后,由存储页面表检查是否有足够的空闲页面,如果没有,则本次无法分配。如果有则首先分配设置页表,并请求表中的相应表项后,按一定的查找算法搜索出所要求的空闲页面,并将对应的页好填入页表中。
首先,需要有一个装置页表始址和页表长度用的控制寄存器。系统所调度执行的进程页表始址和长度从请求表中取出送入控制寄存器中。然后,由控制寄存器页表始址可以找到页表所在位置。
静态页式管理解决了分区管理时的碎片问题。但是,由于静态页式管理要求进程或作业在执行前全部装入内存,如果可用页面数小于用户要求时,该作业或进程只好等待。而且作业和进程的大小仍受内存可用页面数的限制。
动态页式管理:
动态页式管理是在静态页式管理的基础上发展起来的。它分为请求页式管理和预调入页式管理。
请求页式管理和预调入页式管理在作业或进程开始执行之前,都不把作业或进程的程序段和数据段一次性地全部装入内存,而只装入被认为是经常反复执行和调用的工作区部分。其它部分则在执行过程中动态装入。请求页式管理与预调入页式管理的主要区别在它们的调入方式上。请求页式管理的调入方式是,当需要执行某条指令而又发现它不在内存时或当执行某条指令需要访问其它的数据或指令时.这些指令和数据不在内存中,从而发生缺页中断,系统将外存中相应的页面调入内存。
预调入方式是,系统对那些在外存中的页进行调入顺序计算。估计出这些页中指令和数据的执行和被访问的顺序,并按此顺序将它们顺次调入和调出内存。除了在调入方式上请求页式管理和预调入管理有些区别之外,其它方面这两种方式基本相同。因此,下面我们主要介绍请求页式管理。
请求页式管理的地址变换过程与静态页式管理时的相同,也是通过页表查出相应的页面号之后,由页面号与页内相对地址相加而得到实际物理地址,但是,由于请求页式管理只让进程或作业的部分程序和数据驻留在内存中,因此,在执行过程中,不可避免地会出现某些虚页不在内存中的问题。怎样发现这些不在内存中虚页以及怎样处理这种情况.是请求页式管理必须解决的两个基本问题。
第一个问题可以用扩充页表的方法解决。即与每个虚页号相对应,除了页面号之外,再增设该页是否在内存的中断位以及该页在外存中的副本起始地址。
关于虚页不在内存时的处理,涉及到两个问题。第一,采用何种方式把所缺的页调入内存。第二,如果内存中没有空闲页面时,把调进来的页放在什么地方。也就是说,采用什么样的策略来淘汰已占据内存的页。还有,如果在内存中的某一页被淘汰,且该页曾因程序的执行而被修改,则显然该页是应该重新写到外存上加以保存的。而那些未被访问修改的页、因为外存已保留有相同的副本,写回外存是没有必要的。因此,在页表中还应增加一项以记录该页是否曾被改变。
在动态页管理的流程中,有关地址变换部分是由硬件自动完成的。当硬件变换机构发现所要求的页不在内存时,产生缺页中断信号,由中断处理程序做出相应的处理。中断处理程序是由软件实现的。除了在没有空闲页面时要按照置换算法选择出被淘汰页面之外,还要从外存读入所需要的虚页。这个过程要启动相应的外存和涉及到文件系统。因此,请求页式管理是一个十分复杂的处理过程,内存的利用率的提高是以牺牲系统开销的代价换来的。
功能:需要调入页面时,选择内存中哪个物理页面被置换。称为replacement policy。
出发点:把未来不再使用的或短期内较少使用的页面调出,通常只能在局部性原理指导下依据过去的统计数据进行预测。
页面锁定(frame locking):用于描述必须常驻内存的操作系统的关键部分或时间关键(time-critical)的应用进程。实现方法为在页表中加上锁定标志位(lock bit)。
随机淘汰算法(random golongram):在系统设计人员认为无法确定哪些页被访问的概率较低时,随机地选择某个用户的页面并将其换出将是一种明智的作法。
由实验和测试发现FIPO算法和RR算法的内存利用率不高。这是因为,这两种算法都是基于CPU按线性顺序访问地址空间这一假设。事实上,许多时候.CPU不是按线性顺序访问地址空间的。
最近最久未使用页面置换算法(LRU, Least Recently Used):
选择内存中最久未使用的页面被置换。这是局部性原理的合理近似,性能接近最佳算法。但由于需要记录页面使用时间的先后关系,硬件开销太大。硬件机构如:
(1) 一个特殊的栈:把被访问的页面移到栈顶,于是栈底的是最久未使用页面。
(2) 每个页面设立移位寄存器:被访问时左边最高位置1,定期右移并且最高位补0,于是寄存器数值最小的是最久未使用页面。
(a) 最不经常使用页面淘汰算法(LFU, Least Frequently Used)
(b) 最近没有使用页面淘汰(NRU, Not Recently Used)
理想型淘汰算法(OPT,Optimal Replacement Algorithm)
该算法淘汰在访问串中将来再也不出现的或是离当前最远的位置上出现的页。它是一种理想化的算法,性能最好,但在实际上难于实现。
页式管理可以为内存提供两种方式的保护。一种是地址越界保护,另一种是通过页表控制对内存信息的操作方式以提供保护。
地址越界保护可由地址变换机构中的控制寄存器的值一一页表长度和所要访问的虑地址相比较完成。
1、由于它不要求作业或进程的程序段和数据在内存中连续存放,从而有效地解决了碎片问题。
2、动态页式管理提供了内存和外存统一管理的虚存实现方式,使用户可以利用的存储空间大大增加。这既提高了主存的利用纽,又有利于组织多道程序执行。
1、要求有相应的硬件支持。例如地址变换机构,缺页中断的产生和选择淘汰页面等都要求有相应的硬件支持。这增加了机器成本。
4、虽然消除了碎片,但每个作业或进程的最后一页内总有一部分空间得不到利用果页面较大,则这一部分的损失仍然较大。
基本原理
段页式系统的基本原理,是基本分段存储管理方式和基本分页存储管理方式原理的结合,即先将用户程序分成若干个段,再把每个段分成若干个页,并为每一个段赋予一个段名。下图示出了一个作业的地址空间和地址结构。
该作业有三个段,页面大小为4 KB。在段页式系统中,其地址结构由段号、段内页号及页内地址三部分所组成,如下图所示。
地址变换过程:
在段页式系统中,为了便于实现地址变换,须配置一个段表寄存器,其中存放段表始址和段表长TL。进行地址变换时,首先利用段号S,将它与段表长TL进行比较。若S
在段页式系统中,为了获得一条指令或数据,须三次访问内存。第一次访问是访问内存中的段表,从中取得页表始址;第二次访问是访问内存中的页表,从中取出该页所在的物理块号,并将该块号与页内地址一起形成指令或数据的物理地址;第三次访问才是真正从第二次访问所得的地址中,取出指令或数据。
显然,这使访问内存的次数增加了近两倍。为了提高执行速度,在地址变换机构中增设一个高速缓冲寄存器。每次访问它时,都须同时利用段号和页号去检索高速缓存,若找到匹配的表项,便可从中得到相应页的物理块号,用来与页内地址一起形成物理地址;若未找到匹配表项,则仍须再三次访问内存。
区别及优缺点
虚拟存储器可以分为两类:页式和段式。页式虚拟存储器把空间划分为大小相同的块,称为页面。而段式虚拟存储器则把空间划分为可变长的块,称为段。页面是对空间的机械划分,而段则往往是按程序的逻辑意义进行划分。
页式存储管理的优点是页表对程序员来说是透明的,地址变换快,调入操作简单;缺点是各页不是程序的独立模块,不便于实现程序和数据的保护。
段式存储管理的优点是消除了内存零头,易于实现存储保护,便于程序动态装配;缺点是调入操作复杂,地址变换速度慢于页式存储管理。
段式存储、页式存储及段页式存 详解相关推荐
- oracle回滚断查询,Oracle回滚段使用查询代码详解
大批量执行DML语句造成回滚段大量占用,又回退操作,如何直观查询数据回滚情况? 单机环境 查询回滚执行进度 sql;"> select /*+ rule */s.sid,r.name ...
- dsp31段最佳调音图_31段均衡器调整方法详解,音响调音师必备!
31段均衡器调整方法详解,音响调音师必备! 2018-11-29 X (插图:德国MATCH DSP调音软件主界面) 1.均衡器的调整方法: 超低音:20Hz-40Hz,适当时声音强而有力.能控制雷声 ...
- 【C语言】数据存储分类(动态、静态存储)、作用域(全局变量、局部变量)详解--(已配图,更方便理解)
目录 1.变量分类(引入存储类别) 1)存在时间看动态存储还是静态存储 2)作用域:局部变量和全局变量 1.变量分类(引入存储类别) 变量和函数都有两个属性:数据类型和数据存储类别(auto自动.st ...
- Android内部存储与外部存储(私有目录与公共目录)图文详解
目录 一.存储空间概述 二.存储空间的划分 1.存储划分 2.内部存储 2.1 内部存储概述 2.2 内部存储 - 私有目录 3. 外部存储 3.1 外部存储概述 3.2 外部存储 - 私有目录 3. ...
- C/C++程序内存布局(data段,bss段,text段)以及static关键字详解
目录 1.内存布局 1.1 data段(可读可写) 1.2 text段(只读) 1.3 bss段(可读可写) 1.4 堆区 1.5 栈区 1.6全局区/静态区 1.7 字符串常量区 1.8 代码区 1 ...
- 段式存储管理 Vs 页式存储管理 Vs 段页式存储管理
为直观说明,直接贴图! 参考资料:http://wenku.baidu.com/link?url=CP4dGtzEygjtEz7ZRxiAe7c_tDRl-p3h1Wt7_Ca1z5KB01oqmDe ...
- InnoDB 存储引擎中的表锁和行锁详解
各位对 "锁" 这个概念应该都不是很陌生吧,Java 语言中就提供了两种锁:内置的 synchronized 锁和 Lock 接口,使用锁的目的就是管理对共享资源的并发访问,保证数 ...
- 关于MySQL的存储函数(自定义函数)的定义和使用方法详解
存储函数 什么是存储函数: 封装一段sql代码,完成一种特定的功能,返回结果. 存储函数的语法: create function 函数([函数参数[,-.]]) Returns 返回类型 Begin ...
- android litepal可以指定存储目录吗,Android数据库LitePal的基本用法详解
前言 正好项目用了这种数据存储方式,特地写一篇加深印象,在我看来,LitePal是使用最简单,集成最方便的数据库,没有之一. LitePal 简介 LitePal 是一款开源的 Android 数据库 ...
- 数据在数组中存储的顺序:小端 OR 大端模式 详解
大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放: 小端模式,是指数据的高 ...
最新文章
- python读取excel画散点图-python学习之matplotlib绘制散点图实例
- node开发 npm install -g express-generator@4
- 超有用的,从此vi变得友好了
- 双系统安装 Windows8和Windows Server2012
- Java JDK11快速下载地址
- 数据结构-----二叉树,树,森林之间的转换
- [-] Handler failed to bind to x.x.x.x:port排错
- 原F1000Prime推荐:ACE2泛癌分析图谱(TCGA数据库挖掘)
- 微信小程序报Cannot read property ‘setData‘ of undefined的错误
- 现代计算机主要有哪些方面的应用,现代汉字主要应用于哪些方面;汉字的整理有哪些内容?...
- gif怎么裁剪尺寸?一键gif裁剪工具推荐
- docker-1 常用命令
- binlog2sql快速闪回
- Python学习 之 tenacity重试模块
- vue-cli3打包时图片压缩处理
- 高级密码学复习1-HUST版
- 雷达感应模块技术,在智能家电中的应用,智能传感器
- Arcmap地理配准png
- linux下使用动态壁纸
- HTML5 Canvas制作数独游戏(一)
热门文章
- Windows10的右键菜单添加“管理员取得所有权”
- 复合调味品崛起,海天还会是YYDS吗?
- MATLAB电话拨号音仿真,MATLAB电话拨号音的合成与识别
- javaScript中原型和原型链的分析深究 —————— 开开开山怪
- Spring学习总结01--Spring了解,IOC,DI
- iOS常用的第三方库
- Exception evaluating SpringEL expression: ***错误的一个解决办法
- 论文笔记:Auto-Encoding Scene Graphs for Image Captioning
- 近似算法之旅行商问题
- vue中请求拦截器梧桐刷新Token