一,内存管理四种方式。
二,连续分配管理方式。
连续分配方式:为用户分配连续的内存空间。
1.单一连续分配方式
2.固定分区分配方式
3.动态分区分配方式
4.三种连续分配方式的对比。
三,基于页式存储管理。
1.页式
为进一步提高内存利用率,尽量避免碎片的产生,引入分页思想:
①将内存分为一个个大小相等的分区,每个分区就是一个 “页框/页帧/内存块/物理块/物理页面” 每个页框有一个编号叫"页框号/页帧号/内存块号/物理块号/物理页面号",页框号从0开始。
②将进程的逻辑地址空间也分为于页框大小相等的一个个小部分,每部分称 “页/页面” ,每个页有一个编号叫 “页号/页面号” ,从0开始。
2.基本概念
1.页框/页帧/内存块/物理块/物理页面 与 页/页面 。
2.页框号/页帧号/内存块号/物理块号/物理页面号 与 页号/页面号。
3.页表(实现页号到物理块号的地址映射)
为方便在内存中找到进程每个页面所对应的物理块,系统为每个进程都建立一张页表:记录了页面在内存中对应的物理块号,页表一般存放在内存中,包括页号与块号。
4.逻辑地址A地址结构与确定页号,页内偏移量(由逻辑地址A)
由页表可知,我们只需要由逻辑地址A确定对应的页号与页内偏移量,我们就可以得到逻辑地址A在对应的物理块号中的位置。
①传统方式由逻辑地址A确定页号与页内偏移量:
注:页面大小决定了逻辑地址A中页内偏移量W占的位数。
注:页号位数决定了 一个进程最多拥有多少个页面。
②由拼接二进制方式确定页号与页内偏移量:
如果页面大小刚好是2的整次幂,则硬件可以很快将逻辑地址A,拆分成 页号P 与 页内偏移量W 假设某计算 32位 表示逻辑地址A。页面大小4KB,按字节编址。
5.基地址变换机构(具有快表)。
快表:又称相联存储器(TLB,Taranslation,lookaside buffer)是一种访问速度比内存更块的高速缓存(TLB不是内存)。
注1:p>=M 中" = " 也会产生越界,因为页号从0开始,页表项长度至少是1.
注2:页表项长度:指每个页表项占多大空间。
注3:页表长度:指有多少个页表项。
注4:系统先访问快表,若快表命中则直接访问目标页。
注5:系统先访问快表,若快表失效,则再访问慢表,并将副本放入快表。
注6:系统可同时访问快表与慢表,若快表命中则终止访问慢表。
注7:系统可同时访问快表与慢表,若快表失效,则继续访问慢表,并将副本放入快表。
6.对比基地址变换机构有无快表。
3.两级页表
普通页式管理遇到问题:
1.页表必须连续存放,因此当页表很大的时候,需要占用很多个连续的页框,这种方式就失去了意义。
2.没有必要让整个页表常驻内存,因为进程在一段时间内可能只需要访问某几个特定的页面。
为解决上述,引入多级页表:
可将长长的页表进行分组,使每个内存块刚好可以放入一个分组。
另外,要为这些离散的分组再建立一张页表,称为 页目录表 或 外层页表 或 顶层页表。
注1:若采用多级页表机制,则各级页表大小不可以超过一个页面的大小,如果只分两级,且一级页号表示的范围一个页面村放不下,则需要继续往上分。
四,基于段式存储管理。
1.段式
段式存储与页式最大区别就是:离散分配时所分配地址空间的基本单位不同。
段式:进程的地址空间按照程序自身的逻辑关系划分为若干段,每个段都有一个段名,每段从0开始。
注:(在低级语言中,程序员需使用段名来编程,但OS识别的是段号,故编译器会自动将段名转换,所以给了段名相当于给了段号)。
2.基本概念
1.段名,段号,段长,基址,段内地址。
2.地址结构,类比页式
分段系统逻辑地址结构由段号(段名)和段内地址(段内偏移量)所组成的:
3.段表
程序分多个段,各段离散地装入内存,为了保证程序能正常运行,就必须能从物理内存中找到各个逻辑段存放位置,为了高效,OS为每个进程建立一张段映射表,称段表。
注1:由于各段长度不一样,因此相比"页式"增加了段长项。
注2:每个段对应一个段表项,其中记录该段在内存的起始位置,又称基址和段的长度。
注3:各个段表项长度相同,因此K号段对应的段表项存放地址 = M + k*段表项长度。M为段表起始地址。
4.地址变换过程
注:在内存的系统区中,存放着很多用于管理软硬件资源的数据结构,包括进程控制块PCB,当一个进程要上cpu之前,进程切换相关的内核程序负责将某进程调度到cpu上并恢复相应运行环境,加载对应的PCB,这其中就包含一个非常重要的寄存器叫段表寄存器,里面存放着,进程对应的段表始址F以及段表长度M。
五,基于段页式存储管理。
1.段页式
分段存储会产生外部碎片,页式不利于实现信息的共享和保护,基于此,综合两者优点,引出段页式:
①将程序按照逻辑模块先分段,再将各段分页=内存块大小,每段中页号从0开始。
②再将内存空间分为大小相等的内存块,进程运行前将各页面分别装入中。
注:段表只有一个,页表可以有很多个。
2.基本概念
1.段号,页号,页表起始地址,段表,页表,段名,段长。
2.逻辑地址结构。
注1:段号位数决定了每个进程最多可分几个段。
注2:页号位数决定了每个段最大有多少各页。
注3:页内偏移量决定了页面大小,内存块大小。
注4:分段对用户可见,程序员给出的段名,段内地址(因此段页式为二维的地址结构。),而对段分页用户不可见,系统自动根据段内地址划分页号与页内偏移量。
段式页式二维的,页式为一维的。
3.地址变化机构