一、内存的基本知识
1.什么是内存?有什么作用?
内存可存放数据。程序执行前先放到内存才能被CPU处理——缓和CPU和硬盘之间的速度矛盾。
给内存的存储单元编址。如果计算机按字节编址,则每个存储单元大小为1字节。即1B=8b(8个二进制位)
2.进程运行的基本原理
(1)指令的工作原理:操作码+若干参数
(2)程序经过编译、链接后生成的指令中指明的地址是逻辑地址(相对于进程起始地址而言的地址,因此又叫相对地址);
链接完成后,生成装入模块,模块装入内存后的地址称作物理地址(又叫绝对地址)
(3)地址转换的实现:
装入有三种方式:
绝对装入:编译时就知道要装在内存的哪个地方,因此编译时就将逻辑地址写为物理地址
可重定位装入:在装入时,将所有的逻辑地址变为物理地址
动态重定位:执行时再把逻辑地址变为物理地址。(需要重定位寄存器)
(4)从写程序到程序运行的过程:
二、内存管理的概念
(2)内存空间的扩充:
覆盖和交换:覆盖是同一个进程,后来的段占用前面的段,交换是另外一个进程挤占另外一个进程
(1)内存空间的分配与回收
-内部碎片:分配给进程的内存区域中,某些部分没有用上。
-外部碎片:内存中某些空闲分区由于太小而难以利用
1-----连续分配管理方式:
单一连续分配:同时只能有一个用户位于内存,且失去并发性会产生内部碎片(有的空间没有用上)。
固定分区分配:划分若干固定大小分区(大小可相等,可不相等),每个分区装入一道作业。
动态分区分配:不会预先划分内存,而是在进程装入内存时,根据进程大小动态建立分区。释放空间时,相邻的空闲分区要进行合并
但动态分区分配也存在他的问题。
1.系统用什么样的数据结构记录内存的使用情况?
空闲分区表:分区大小、起始地址、状态
2.当很多空闲分区都能满足需求时,应该选择哪个分区?
分配算法:
1.首次适应算法:按地址的顺序依次查找,直到第一个合适的(不仅最简单,而且最好最快)
2.最佳适应算法:按容量递增形成链表,然后从小至大查找
3.最坏适应算法:按容量递减形成链表,然后从小至大查找
4.临近适应算法:
2-------!!!!!非连续分配管理
基本分页存储管理:
《1》什么是分页:将内存空间分为一个个大小相等的分区(称为页框或页帧),将进程的逻辑地址空间也分为与页框大小相等的部分(称为页或页面),页可以不连续的存放到页框当中。
《2》页表:注意欧,页号从0开始为了知道进程的每个页面在内存中存放的位置,操作系统要为每个进程建立一张页表。页表一般放在PCB中,记录了相应的映射关系。页表里的每一项都叫做页表项
问题一:计算每个页表项应为多少字节。
页表项的字节数,应保证整个内存块都能被记录在页表内。
依题,可以有2的20次方个页。因此页表项的数目应能大于2的20次方。所以页表项应为20b,至少为3B。
问题二:如何实现地址转换
虽然各页面是离散存放的,但页面内部是连续的。逻辑地址对应物理地址=对应页面的起始地址+页内偏移量。
简而言之:类似IP分配,前多少位是页面号,后面为页内偏移量
《3》基本地址变换机构
页表寄存器(页表起始地址F+页表项数M)。
1.根据逻辑地址计算出页号、页表偏移量;
2.判断页号是否越界(若越界则产生越界中断);
3.查询页表,找到页号对应的页表项,再根据页表项找到相应的页面;
4.用页面起始地址和页内偏移量得到物理地址;
5.访问目标单元;
注意,给出内存大小后就默认给出了页号长度
页面大小为1K=2的十次方,页内偏移量占十位
2500=2048+452,所以该地址对应的页号是2,查找页表,其对应的内存块是8,
所以物理地址是1024*8+452=8644。
《4》具有快表的地址变换(类似ARP协议中的地址对应)(快表位于高速缓存中)
快表中直接存储页号对应的物理地址,进程访问时先去块表查询,如查找到直接进行访问;如未查找到,去主存中查找慢表,并同时将查找记录写入快表。
《5》两级页表
目的:便于索引
顶级页表最多一个页面
基本分段存储管理
分页管理是从计算机的角度考虑的,目的是提高内存的利用率,提升计算机的性能。分页通过硬件实现,对用户完全透明。分段管理则考虑了用户和程序员,以满足方便编程、信息保护和共享、动态增长和动态链接等要求
如一个程序由程序段、数据段、PCB组成,可将其分为三段,并分配逻辑地址(段内连续,段间不必连续)。
段页式存储管理