操作系统理论 第四章(存储器管理)—第五节(存储管理方式(上))

写在前面:

  1. 本系列笔记主要以《计算机操作系统(汤小丹…)》为参考,大部分内容出于此书,笔者的工作主要是挑其重点展示,另外配合下方视频链接的教程展开思路,在笔记中一些比较难懂的地方加以自己的一点点理解(重点基本都会有标注,没有任何标注的难懂文字应该是笔者因为强迫症而加进来的,可选择性地忽略)。
  2. 视频链接:操作系统(汤小丹等第四版)_哔哩哔哩_bilibili

一、概述

        连续分配方式会形成许多“碎片”,虽然可通过“紧凑”方法将许多碎片拼接成可用的大块空间,但须为之付出很大开销。如果允许将一个进程直接分散地装入到许多不相邻接的分区中,便可充分地利用内存空间,基于这一思想而产生了离散分配方式。

        根据在离散分配时所分配地址空间的基本单位的不同,可将离散分配分为以下三种:

        ①分页存储管理方式:在该方式中,将用户程序的地址空间分为若干个固定大小的区域,称为“页”或“页面”,相应地也将内存空间分为若干个物理块或页框,页和块的大小相同,这样可将用户程序的任一页放入任一物理块中,实现了离散分配。

        ②分段存储管理方式:它把用户程序的地址空间分为若干个大小不同的段,每段可定义一组相对完整的信息,在存储器分配时以段为单位,这些段在内存中可以不相邻接,所以也同样实现了离散分配。

        ③段页式存储管理方式:这是分页和分段两种存储管理方式相结合的产物,它同时具有两者的优点。

二、分页存储管理的基本原理

1、页面和物理块

        分页存储管理将一个进程的逻辑地址空间分成若干个大小相等的片,称为页面或页,并为各页加以编号,从0开始。同时把内存空间分成与页面相同大小的若干个存储块,称为块或页框,同样也为它们加以编号,从0开始。

        在为进程分配内存时,以块为单位将进程的若干个页分别装入到多个可以不相邻的物理块中,由于进程的最后一页经常装不满一块,而形成不可利用的“页内碎片”。

        在分页系统中,若选择过小的页面大小,虽然一方面可以减小内存碎片,起到减少内存碎片总空间的作用,有利于内存利用率的提高,但另一方面却会造成每个进程占用较多的页面,从而导致进程的页表过长,占用大量内存,而且还会降低页面换进换出的效率。然而,如果选择的页面过大,虽然可以减少页表的长度,提高页面换进换出的速度,但却又会使页内碎片增大。因此,页面的大小应选择适中,且页面大小应是2的幂。(页面大小由机器的地址结构所决定的,即由硬件所决定)

2、地址结构

        分页地址中的地址结构如下所示,它包含两部分内容:前一部分为页号P,后一部分为位移量W,即页内地址。下图中的地址长度为32位,其中0~11位为页内地址,即每页的大小为4KB;12~31位为页号,即地址空间最多允许有1M页。

        对某特定机器,其地址结构是一定的,若给定一个逻辑地址空间中的地址为A,页的大小为L,则页号P和页内地址d可按下式求得,其中INT是取整函数,MOD是取余函数。

3、页表

        在分页系统中,允许将进程的各个页离散地存储在内存的任一物理块中,为保证进程仍然能够正确地运行,即能在内存中找到每个页面所对应的物理块,系统又为每个进程建立了一张页面映像表,简称页表。

        在进程地址空间内的所有页依次在页表中有一页表项,其中记录了相应页在内存中对应的物理块号,在配置了页表后,进程执行时通过查找该表即可找到每页在内存中的物理块号。可见,页表的作用是实现从页号到物理块号的地址映射

        由上图可见,各个页面在内存中不必连续存放,可以放到不相邻的各个页框中,不过各页表项就需要按顺序连续地存放在内存中。

三、分页存储管理中的地址变换机构

        为了能将用户地址空间的逻辑地址变换为内存空间的物理地址,在系统中必须设置地址变换机构。地址变换机构实现从逻辑地址到物理地址的转换,由于页内地址与物理地址是一 一对应的,因此,地址变换机构的任务是借助于页表,将逻辑地址中的页号转换为内存中的物理块号

1、基本的地址变换结构

(1)硬件配置:

        页表的功能可以由一组专门的寄存器来实现,一个页表项用一个寄存器,但寄存器成本高,系统页表可能很大,所以页表大多常驻内存

        在系统中只设置一个页表寄存器PTR,在其中存放页表在内存中的始址和页表的长度,平时进程没有执行时,页表的始址和页表长度存放在进程的PCB中,当调度到进程时,才将这两个数据装入到页表寄存器中。

(2)工作过程:

①当进程要访问某个逻辑地址中的数据时,分页地址变换机构会自动地将有效地址(相对地址)分为页号和页内地址两部分,再以页号为索引去检索页表。查找操作由硬件执行。

②在执行检索之前,先将页号与页表长度进行比较,如果页号大于或等于页表长度,则表示本次所访问的地址已超越进程的地址空间,于是这一错误将被系统发现,并产生一地址越界中断。

③若未出现越界错误,则将页表始址与页号和页表项长度的乘积相加,便得到该表项在页表中的位置,于是可从中得到该页的物理块号,将之装入物理地址寄存器中,与此同时,再将有效地址寄存器中的页内地址送入物理地址寄存器的块内地址字段中(逻辑地址中的页内地址可以直接作为物理地址中的块内地址),这样便完成了从逻辑地址到物理地址的变换

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

(1)由于页表是存放在内存中的,CPU在每存取一个数据时,需要两次访问内存:

①第一次:访问页表,找到指定页的物理块号,将块号与页内偏移量拼接形成物理地址。

②第二次:从第一次所得地址中获得所需数据,或向此地址中写入数据。

(2)由于CPU在每存取一个数据时需要两次访存,采用这种方式(使用基本的地址变换结构)将使计算机的处理速度降低近1/2,为了提高地址变换速度,可在地址变换机构中增设一个具有并行查寻能力的特殊高速缓冲寄存器,称为“联想存储器”或“快表”

(3)具有快表的地址变换机构的地址变换过程:

①在CPU给出有效地址后,由地址变换机构自动地将页号P送入高速缓冲寄存器,并将此页号与高速缓存中的所有页号进行比较。

若其中有与此相匹配的页号,便表示所要访问的页表项在快表中(称为“快表命中”),于是可直接从快表中读出该页所对应的物理块号,并送到物理地址寄存器中。如在快表中未找到对应的页表项(称为“快表未命中”),则还须再访问内存中的页表,找到后,把从页表项中读出的物理块号送往地址寄存器,同时再将此页表项存入快表的一个寄存器单元中,亦即重新修改快表,但如果联想寄存器已满,则OS必须找到一个老的且已被认为是不再需要的页表项,将它换出

(4)增设快表后,如果CPU在存取一个数据时快表命中,则只需一次访存,如果快表未命中,则需要两次访存

四、两级和多级页表

1、单级页表的不足

(1)现代计算机系统都支持非常大的逻辑地址空间,那么页表就非常大,需占用较大的地址空间。例如一个具有32位逻辑地址空间的分页系统,规定页面大小为4KB,则每个进程页表的页表项可达1M个,若每个页表项占用一个字节,则每个进程的页表就要占据1MB的内存空间,而且要求连续存放,显然这是不现实的。

(2)为了解决上述问题,可以采用这样两个方法:

①对于页表所需的内存空间,可采用离散分配方式,以解决难以找到一块连续的大内存空间的问题。

②只将当前需要的部分页表项调入内存,其余的页表项仍驻留在磁盘上,需要时再调入。

2、两级页表

(1)将页表分页,并离散地将各个页面分别存放在不同的物理块中,同时为离散分配的页表再建立一张页表,称为外层页表,其每个页表项记录了页表页面的物理块号

(2)为了方便实现地址变换,在地址变换机构,同样需要增设一个外层页表寄存器用于存放外层页的始址,并利用逻辑地址中的外层页号作为外层页表的索引,从中找到指定页表分页的始址,再利用P作为指定页表分页的索引,找到指定的页表项,其中即含有该页在内存的物理块号,用该块号P和页内地址d即可构成访问的内存物理地址

(3)上述方法用离散分配空间解决了大页表无需大片存储空间的问题,但并未减少页表所占的内存空间。解决方法是把当前需要的一批页表项调入内存,以后再根据需要陆续调入。在采用两级页表结构的情况下,对正在运行的进程,必须将其外层页表调入内存,而对页表则只需调入一页或几页,这就需要在外层页表项中增设一个状态位S,用于表示该页表是否调入内存。

3、多级页表

(1)将外层页表再进行分页,也就是将各分页离散地装入到不相邻接的物理块中,再利用第2级的外层页表来映射它们之间的关系,这就是多级页表结构(需要说明的是,多级页表不止三级)。

(2)假设没有快表机构,N级页表访问一个逻辑地址需要N+1次访存

  • 12
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
《基于嵌入式实时操作系统的程序设计技术 第2版》是一本关于嵌入式实时操作系统(RTOS)程序设计的技术手册。该书以嵌入式系统的特点为基础,详细介绍了使用RTOS进行程序设计的方法和技术。以下是本书的主要内容回答。 本书的第一章介绍了嵌入式系统和实时操作系统的基本概念以及它们的特点和应用领域。同时还介绍了一个实时操作系统的基本组成部分,包括任务管理器、中断服务例程和资源管理器等。 第二章详细介绍了嵌入式实时操作系统的任务管理和调度技术。其中包括任务的创建、销毁和切换等操作,以及不同的调度算法和优先级设置。 第三章讨论了嵌入式实时操作系统的中断服务例程设计和处理。该章重点介绍了中断服务例程的编写和中断的嵌套处理,以及中断的优先级和中断控制器的配置。 第四章探讨了嵌入式实时操作系统的通信和同步技术。该章介绍了进程间通信(IPC)和任务间同步的方法和技术,包括信号量、消息队列和邮箱等。 第五章介绍了嵌入式实时操作系统的定时器和时钟管理技术。其中包括定时器的配置和使用,以及时钟的同步和校准等。 第六章讨论了嵌入式实时操作系统的内存管理和存储技术。该章介绍了内存的分配和回收方法,以及存储器的管理和保护技术。 最后一章总结了全书的内容,提供了一些实际案例和应用实例,以帮助读者更好地理解和应用所学的嵌入式实时操作系统的程序设计技术。 总体而言,《基于嵌入式实时操作系统的程序设计技术 第2版》通过详细介绍了嵌入式实时操作系统的各个方面,为读者提供了一个全面了解和掌握嵌入式实时操作系统程序设计的技术手册。无论是初学者还是有经验的嵌入式系统开发者,都能从中获得宝贵的知识与经验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Zevalin爱灰灰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值