os 内存管理(基本分页存储管理方式)
文章目录
1.1 内存管理
操作系统对内存的划分和动态分配。// for : 支持多道程序并发执行。
1.2 内存管理的功能
(1)内存空间的分配与回收
(2)地址转换
(3)内存空间的扩充
(4)存储保护
1.3非连续配置管理方式
非连续分配允许一个程序分散地装入到不相邻的内存分区中。非连续分配管理方式根据分区的大小是否固定分为分页存储管理方式和分段存储管理方式。分页存储管理方式中,又根据运行作业时是否把作业的所有页面都装入内存才能运行分为基本分页存储管理方式和请求分页存储管理方式。
1.3.1 基本分页存储管理方式
1.3.1.1 分页存储的几个基本概念
(1)分页:把主存空间划分为大小相等且固定的块,块相对较小,作为主存的基本单元。每个进程也以块为单位进行划分,进程在执行时,以块为单位逐个申请主存中的块空间。(会产生页内碎)
(2)页:进程中的块。
(3)页框:内存中的块
逻辑地址结构:
(4)页表:为了便于在内存中找到进程的每个页面所对应的物理块,系统为每个进程建立一张页表,记录页面在内存中对应的物理块号,页表一般存放在内存中。页表是由页表项组成的,第一部分是页号,第二部分是物理内存中的块号,页表项的第二部分与逻辑地址结构的第二部分共同组成物理地址。
1.3.1.2 基本地址变换机构
地址变换机构的任务是将逻辑地址转换为内存中的物理地址,地址变换是借助页表实现的。
在系统中通常设置一个页表寄存器(PTR),存放页表在内存的始址F和页表长度M。进程未执行时,页表的始址和长度存放在进程控制块中,当进程执行时,才将页表是地址和长度存入页表寄存器。
(1)计算页号P(P=A/L)和页内偏移W(W=A%L)。
(2)比较页号P和页表长度M,若P>=M,则产生越界中断,否则继续执行。
(3)页表中页号P对应的页表项地址 = 页表起始地址F + 页号 * 页表长度,取出该页表内容b,即为物理块号。
(4)计算E = b * L + W,用得到的物理地址E去访问内存。
存在的两个主要问题:
(1)地址转换过程必须足够快,否则访存速度会降低;
(2)页表不能太大,否则内存利用率会降低。
1.3.1.3 具有快表的地址变换机构
在地址变换机构中增设了一个具有并行查找能力的高速缓冲存储器-快表,又称联想寄存器(TLB),用来存放当前访问过的若干页表项,以加速地址变换的过程。与此对应,主存中的页表也常称为慢表。
(1)CPU给出逻辑地址后,由硬件进行地址转换并将页号送入高速缓存寄存器,并将此页号与快表中的所有页号进行比较。
(2)如果找到匹配的页号,说明所要访问的页表项在快表中,则直接从中取出该页对应的页表框号,也页内偏移拼接形成物理地址。
(3)如果没有找到,则需要访问主存中的页表,在读出页表项后,应同时将其存入快表,以便后面可能的再次访问。
1.3.1.4 两级页表
1.3.2 基本分段存储管理方式
分段管理方式的提高则是考虑了用户和程序员,以满足方便编程、信息保护和共享、动态增长及动态链接等多方面的需要。
1.3.2.1 分段存储的几个基本概念
(1)分段:段式管理方式按照用户进程中的自然段划分逻辑空间。其逻辑地址由段号S与段内偏移量W两部分组成。
逻辑地址结构:
段号为16位,段内偏移量为16位,则一个作业时最多可有2^16=65535个段,最大段长为64KB。在页式系统中,逻辑地址的页号和页内偏移量对用户是透明的,但在段式系统中,段号和段内偏移量必须由用户显式提供,在高级程序设计语言中,这个工作由编译程序完成。
(2)段表:每个进程都有一张逻辑空间与内存空间映射的段表,其中每一个段表项对应进程的一个段,段表项记录该段在内存中的段的长度和起始地址。(实际上只有后两部分)
在配置了段表后,执行中的进程可通过查找段表,找到每个段所对应的内存区。
1.3.2.2 地址变换机构
实现进程从逻辑地址到物理地址的变换功能,在系统中设置了段表寄存器,用于存放段表始址F和段表长度M。
(1)从逻辑地址A取出前几位为段号S,后几位为段内偏移量W。
(2)比较段号S和段长度M,若S>=M,则产生越界中断,否则继续执行。
(3)段表中段号S对应的段表项地址 = 段表起始地址F + 段号S * 段表项长度,取出该段表项的前几位得到段长C。若段内偏移量>=C,则产生越界中断,否则继续执行。
(4)取出段表项中该段的起始地址b,计算E = b + W,用得到的物理地址E去访问内存。
1.3.2.3 段的共享与保护
在分段系统中,段的共享是通过两个作业的段表中相应表项指向被共享的段的同一个物理副本来实现的。
1.3.3 段页式管理方式
页式存储管理能有效地提高内存利用率,而分段存储管理能反映程序的逻辑结构并有利于段的共享。如果将这两种存储管理方式结合起来,就形成段页式存储管理方式。在段页式系统中,作业的地址空间首先被分成若干个逻辑段,每段都有自己的段号,然后再将每一段分成若干个大小固定的页。对内存空间的管理仍然和分页存储管理一样,将其分成若干个和页面大小相同的存储块,对内存的分配以存储块为单位。
在段页式系统中,作业的逻辑地址分为三部分:段号、页号和页内偏移。
逻辑地址结构:
在进行地址变换时,首先通过段表查到页表起始地址,然后通过页表找到页帧号,最后形成物理地址。
参考文献:
《计算机操作系统》 汤子灜