操作系统学习笔记(二)

内存管理的概念

绝对装入:只适用于单道处理程序。

静态重定位装入:编译器采用 逻辑地址,地址从 0 开始,装入时,翻译成静态地址。

动态重定位装入:编译器采用 逻辑地址,地址从 0 开始,装入时,有一个重定位寄存器指定偏移量,执行的时候再进行重定位。

内存保护策略

  1. 设置上下限寄存器

  2. 重定位寄存器,界地址寄存器(限长寄存器)。

内存管理:

  1. 覆盖技术,解决程序大小超过内存。 c++ 的 union

程序分成多个段,常用的常驻内存,不常用的在覆盖区。

不被同时访问的,可以共享一个覆盖区。 增加程序复杂度。

  1. 交换技术

挂起的进程,换出到外存。 兑换区磁盘里按需分配。为了提高读写效率。

连续分配管理方式

1.单一连续分配中,只适应单道程序。

实现简单,

2.固定分区分配

系统维护一个分区表。

  1. 动态分区分配

分区正好和进程一样

动态分配没有内部碎片,但有外部碎片。 需要内存整理 拼凑。 整理后需要修改 PCB。

空闲分区连、空闲飞去表、

1.首次适应算法: 从底地址开始找,找到第一个。

2.最佳适应算法:找到最小的可用空间。 空闲分区表会按照容量递 的排序。

会留下很多很小的碎片。

3.最坏适应算法:和最佳适应相反,优先使用最大的。 空闲分区表会按照容量递 的排序。

没有连续的大区域

4.相邻适应算法,和 首次适应算法 类似,只不过从上一次分配位置开始找。查找的快。

相比 首次适应更好

离散分配方式

连续分配的问题是,需要动态整理,需要维护一个空闲分区表、链。

分页管理。一个页面 4K 其实不小。

页框是内存中的坑位,页面是进程数据。

操作系统为每个进程创建页表。

进程的 PCB 中有 页表寄存器 (PTR) 记录了页表长度,页表的起始位置。

页表也作为一种数据需要保存在内存中,进程可以被换出,但页表不行,页表是连续的内存,

进程不运行时在 PCB 一运行时上寄存器 PTR。

快表的变换机构 (TLB)

局部性原理。

时间局部性,

空间局部性,

快表 (TLB) 联想寄存器,内存中的页表常常称为慢表。

先查询快表,没有 再去查询慢表,而且满表要访问2 次。查询慢表后,填充快表

两级页表:

单级页表的问题,页表过大、且要求连续存储。 4K = 2^12;

页目录表、

各级页面大小不能超过一个页面。!!

分段管理

进程中按照自身的逻辑,会划分为 多个段,方便保护,共享

内存分配原则:操作系统以段为单位进行分配。

段表也在 PCB 和页表一样,不上处理机在 PCB 上了处理机在段表寄存器。

分页 每页等长,不需要检查页内偏移

段是对用户透明的,但十分也不是。

段页式管理方式

一个进程对应一个段表, 一个段,对应一个页表。

段号 + 段内的页号 + 页内的偏移

3 次访存。

用户只需要给出 段号 段内地址就行, 段内地址 会被操作系统翻译位 段内页号 + 页内偏移的模式

虚拟内存

一次性:传统的作业必须全部装入内存才能运行。

驻留性:一旦装入,就一直被驻留内存。

虚拟内存特性:

1.多次性

  1. 对唤醒

  2. 虚拟性

缺页中断 主动中断,会进入挂起状态。

快表里的记录 一定在内存中。

页面置换算法

1 最佳置换算法 (OPT) 无法实现:

往后看,在后面需要访问的页面中,选一个最久不需要访问的。

之后最长的时间不再被使用的页面。

  1. 先进先出置换(FIFO)

每次淘汰最早进入内存的页面。

性能最差。

  1. 最近最久未使用 (LRU Last Recent Used)

  1. 时钟置换算法 (NRU)

改进型时钟置换

第一轮扫描 找出 0 0 (没访问,没修改)不改变任何置换位,

第二轮 找出 0 1 (没访问,修改) 扫描过的至 0

第三轮扫描 找出 0 0(没访问,没修改)

第四轮 找出 0 1

页面分配策略

驻留集,能够直接放进内存的页的大小,。 太小 频繁缺页,太大 进程容纳小。

进程启动,就给他分配一定量的内存。

固定:

可变:

局部置换:只能换自己进程的页。

全局置换:无限制

固定分配,局部置换 --- 可变分配、全局置换 --- 可变分配、局部置换

  1. 预调页策略: 空间局部性

  2. 请求调页方式。

抖动,页面频繁换入换出。

进程工作集:

留言:

称呼:*

邮件:

网站:

内容: