操作系统基本分页存储管理方式

操作系统基本分页存储管理方式

连续分配内存方式会形成许多“碎片”,通过紧凑的方式将碎片拼接成一块大的空间,但是拼接过程系统开销太大。如果允许将一个进程直接分散地装入到许多不相邻的分区中,那么就不需要再进行“紧凑”。基于这一思想而产生了离散分配方式。如果离散分配的基本单位是页,则称为分页存储管理方式;如果离散分配的基本单位是段,则称为分段存储管理方式。

在分页管理方式中,如果不具备页面对换功能(将处于阻塞状态且优先级低的进程对换到外存),则称为基本的分页存储管理方式,或称为纯分页存储管理方式,它不具有支持实现虚拟存储器的功能,它要求把每个作业全部装入内存后才能运行。

1、页面与页表

1.1、页面

a)、页面和物理块

分页存储管理是将一个进程的逻辑地址空间分成若干个大小相等的片,称为页面或者页,并为各页加以编号0、1、2...。相应地,把内存空间分成与页面相同大小的若干个存储块,称为(物理)块或页框,也加以编号0、1、2...。在为进程分配内存时,以块为单位将进程中的若干个页面分别装入到多个可以不相邻接的物理块中。由于进程的最后一页经常装不满一块而形成了不可利用的碎片——“页内碎片”。

b)、页面大小

在分页系统中的页面其大小适应中。页面若太小,一方面虽然可使内存碎片减小,从而减小了内存碎片的总空间,有利于提高内存利用率,但是另一方面也会使每个进程占用较多的页面,导致进程页表过长,占用大量内存,反而降低页面换进换出的效率。然而如果选择的页面较大,虽然可以减小页表的长度,提供页面换进换出的速度,但却又会使页内碎片增大。因此,页面的大小应选择适中,且页面大小应该是2的幂,通常为512B~8KB。

1.2、地址结构

分页地址中的地址结构如下:

0~11位为页内地址,即每页的大小为2^12=4KB;12~31位为页号,地址空间最多允许有2^20=1M页。

对于某特定机器,其地址结构是一定的。若给定一个逻辑地址空间中的地址为A,每页的大小为L,则页号P=A/L和页内地址d=A%L。

1.3、页表

在分页系统中,允许将进程的各个页离散地存储在内存不同的物理块中,但系统应该保证进程的正确运行,即能在内存中找到每个页面所对应的物理块。系统又为每个进程建立了一张页表,其记录着相应页在内存中对应的物理块号。进程在执行时,通过查找页表找到内存中对应的物理块号。可见,页表的作用的实现从页号到物理块号的地址映射。

2、地址变换机构

为了能将用户地址空间中的逻辑地址 变换为内存空间的物理地址,在系统中必须设置地址变换机构。其基本任务是实现从逻辑地址到物理地址的转换。即将逻辑地址中的页号转换为内存中的物理块号,借助页表来实现。

2.1、基本的地址变换机构

页表的功能可以由一组专门的寄存器来实现。一个页表项用一个寄存器。由于寄存器成本高,数量少,因此页表大多驻留在内存中。在系统中只设置一个页表寄存器PTR(Page-Table Register),在其中存放页表在内存的起始地址和页表的长度。平时,进程未执行时,页表起始地址和页表长度是存放在本进程的PCB中,当调度程序调度该进程时,才将其放入页表寄存器中。因此,在单处理机环境下,虽然系统中可以运行多个进程,但只需一个页表寄存器。

当进程要访问某个逻辑地址中的数据时,分页地址变换机构会自动将有效地址(相对地址)分为页号和页内地址两部分,再以页号为索引去检索页表,查找操作由硬件执行。在执行检索之前,先将页号与页表长度进行比较,如果页号大于等于页表长度,则表示本次所访问的地址已超越进程的地址空间。系统将产生一地址越界中断。如果没有越界,则将页表起始地址与页号和页表项长度的乘积相加,使从而到该表项在页表中的位置,于是可从中得到该页的物理块号,将之装入物理地址寄存器中。与此同时,再将有效地址寄存器中的页内地址送入物理地址寄存器的块内地址字段中。这样便完成了从逻辑地址到物理地址的变换。

2.2、具有快表的地址变换机构

由于页表存放在内存中,这使CPU在存取一个数据时,都要两次访问内存:第一次是访问内存的页表,从中找到指定页的物理块号,再将块号与页内偏移量W拼接,形成物理地址;第二次访问内存时,才是从第一次所得地址中获得所需数据(或向此地址写入数据)。因此,采用这种方式将使计算机的处理速度降低近一半。

为了提高地址变换速度,可在地址变换机构中增设一个具有并行查询能力的特殊高速缓冲寄存器,又称为“联想寄存器”——“块表”,用来存放当前访问的那些页表项。此时的地址变换过程是:在CPU给出有效地址后,由地址变换机构自动地将页号P送入高速缓冲寄存器,并将此页号与高速缓存中的所有页号进行比较,若其中有与此相匹配的页号,便表示所要访问的页表在快表中。直接从快表中读出该页所对应的物理块号,并送到物理地址寄存器中。如果在快表中未找到对应的页表项,则还需在访问内存中的页表,找到后把页表项中读出的物理块号送地址寄存器;同时,再将此页表项存入快表的一个寄存器单元中。从新修改快表。,如果联想寄存器已满,则 OS 必须找到一个老的且已被认为不再需要的页表项,将它换出。

3、两级和多级页表

现代的大多数计算机系统,都支持非常大的逻辑地址空间(2^32~2^64)。在这样的环境下,页表就变得非常大,要占用相当大的内存空间。采用的解决方法:

a)、采用离散分配方式来解决难以找到一块连续的大内存空间的问题;

b)、只将当前需要的部分页表项调入内存,其余的页表项仍然留在磁盘上,需要时在调入。

3.1、两级页表(Two_Level Page Table)

对于要连续的内存空间来存放页表的问题,可利用将页表进行分页,并离散地将各个页面分别存放在不同的物理块中的办法加以解决,同样也要为离散分配的页表再建立一张页表,称为外层页表,在每个页表项中记录了页表页面的物理块号。

在外层页表的每个页表项中,所存放的是某页表分页的首地址。我们可以利用外层页表和页表这两级页表,来实现从进程的逻辑地址到内存中物理地址间的变换。为了地址变换实现上的方便起见,在地址变换机构中同样需要增设一个外层页表寄存器,用于存放外层页表的始址,并利用逻辑地址中的外层页号,作为外层页表的索引,从中找到指定页表分页的始址,再利用 P2 作为指定页表分页的索引,找到指定的页表项,其中即含有该页在内存的物理块号,用该块号和页内地址 d 即可构成访问的内存物理地址。

3.2、多级页表

多级页表原理和二级页表一样,用来处理更大的页表划分问题。

以上内容参考汤小丹  梁红兵等编著的《计算机操作系统》第4章 第4节

操作系统基本分页存储管理方式,布布扣,bubuko.com

时间: 2024-12-20 13:26:50

操作系统基本分页存储管理方式的相关文章

操作系统之基本分页存储管理方式

时间:2014.07.18 地点:基地 --------------------------------------------------------------------------- 一.连续分配方式缺点 连续分配方式的主要缺点是会形成许多碎片,尽管我们可以通过紧凑的方法将碎片拼接成可用的大块空间,但这样须付出很大的开销. --------------------------------------------------------------------------- 二.离散分配方

操作系统基本分段存储管理方式

操作系统基本分段存储管理方式 引入分段存储管理方式的目的:满足程序员在编程和使用上多方面的要求.这种存储管理方式已经成为当今所有存储管理方式的基础. 1.分段存储管理方式的引入 主要满足用户和程序员以下需求: 1).方便编程 用户把自己的作业按照逻辑管理划分为若干段,每个段都是从0开始编址,并有自己的名字和长度.因此,希望要访问的逻辑地址是由段名(段号)和段内偏移量(段内地址)决定的. LOAD1,[A] | <D>;//将分段A中D单元内的值读入寄存器1 STORE1,[B] | <C

内存管理-基本分页管理方式

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

分页式存储管理方式AND请求分页式存储管理

先说下什么是页(页面):就是将用户的程序的的地址空间分成固定大小的区域,称为”页“,或者”页面“ 之后将这些页离散的放进内存中,这样解决了内存的碎片问题 记得老师上课说了下这两个概念不能混,现在区分下: 在第4章存储器管理,学习了分页式存储管理方式(是为了解决内存的碎片问题) 在第5章虚拟存储器,学习了请求分页式管理方式(除了解决碎片问题外,又“扩充”了内存的大小(虚拟)) 在这里为了使得固定数目的内存来运行较多的进程,增加了调页功能和页面置换功能. (在这可以看书或者笔记上的例题更好理解) 请

【操作系统总结】存储器管理-程序的装入与连接,连续分配存储管理方式

程序的装入与连接 程序要经过编译,链接,装入才能运行 绝对转入方式 将程序装入事先指定的地址,程序装入以后逻辑地址与实际内存地址相同.要求程序员非常熟悉内存地址 可重定位方式 根据内存的具体情况将程序装入适当的位置,把装入时对程序和数据的地址修改过程称为重定位. 动态运行时的装入方式 程序对换的时候内存是改变的 可重定位不允许程序运行时在内存中移动位置.动态运行时的装入程序在把装入模块装入内存后,并不立即把装入模块转换程物理地址,而是吧这中地址转换推迟到程序真正要求执行时进行. 程序的链接 静态

操作系统——动态分区分配方式模拟

这里直接给出代码,如果不理解请参考左万历版<计算机操作系统教程>,先在给出四中模拟算法. 1.   设计目的 了解动态分区分配中使用的数据结构和分配算法,并进一步加深对动态分区存储管理方式及其实现过程的理解. 2.   设计内容 1)用C语言实现采用首次适应算法的动态分区分配过程alloc()和回收过程free().其中,空闲分区通过空闲分区链表来管理,在进行内存分配时,系统优先使用空闲区低端的空间. 2)假设初始状态如下,可用的内存空间为640KB,并有下列的请求序列: 作业1申请130KB

常见的分页实现方式

1.MySql查询语句: --------  select * from t_student limit 0,10   从第一条开始查,查十条 2.PostgreSQL查询语句: select * form t_student limit 10 offset 0 3.Oracle查询语句 select * from ( select s.*, rownum rn from (select * from t_student) s where rownum<=10 ) where rn>=1; 4

SQL两种简单分页查询方式

以前我们或许都用过了linq的skip and take方式进行分页查询,但是很少自己写sql的分页查询,因为大多数时候,我们都是在调用别人的方法. 最近看到一个文档,感觉方法里面实现的分页查询进入数据库调用的时候,实际最底层调用的还是SQL的分页查询,例如,我们用linq写个分页查询,转成sql表达式后发现: 实际调用的时候,才发现SQL底层是这样进行分页的. 下面,本文主要是介绍两种SQL的分页查询. 一,TOP方式 ----第一种分页查询方式:TOP方式 declare @page int

包管理 ----- Linux操作系统rpm包安装方式步骤

Linux操作系统rpm包安装方式步骤 2016年08月04日 07:00:26 阅读数:17140 转自 : http://os.51cto.com/art/201003/186467.htm 特别值得一提的是Linux操作系统有很多值得学习的地方,这里我们主要介绍Linux操作系统,包括介绍Linux操作系统等方面.Linux操作系统软件安装方法总结 一.rpm包安装方式步骤: 引用: 1.找到相应的软件包,比如soft.version.rpm,下载到本机某个目录: 2.打开一个终端,su