第一章
-
程序接口由一组系统调用(广义指令)组成
- 书上17
- 访管指令=陷入指令=trap指令;
访管指令是在用户态使用的,所以他不可能是特权指令
系统调用的请求发生在用户态,系统调用的处理发生在核心态
用户程序通过陷入指令主动将CPU控制权还给操作系统。执行陷入之后后,CPU状态由用户态转为核心态。
第三章(内存管理)
程序的编译链接和装入
- 链接完成之后就形成了一个完整的可执行文件(即装入模块)
- 之后通过装入程序将这个可执行文件(即装入模块)装入到内存当中
- 每个装入模块的逻辑地址空间是从0开始的,但是他装入内存之后,它的实际地址并不是从0开始的
- 因此在程序执行的过程当中,需要不断地把逻辑地址转换成相应的物理地址
- 在链接完成之后形成完整的逻辑地址,在装入内存之后形成最终的物理地址
>
三种装入方式
- 可重定位装入,就是编译阶段不修改地址,装入的时候对所有的地址进行修改。而且必须一次性全部装入
- 动态运行时装入,编译和装入都不会修改为真实的物理地址,访问时通过重定位寄存器来访问真实的物理地址。
三种链接方式
内存保护
覆盖技术
基本思想:由于程序运行时并非任何时候都要访问程序及数据的各个部分(尤其是大程序),因此可把用户空间分成一个固定区和若干覆盖区。将经常活跃的部分放在固定区,其他部分按调用关系分段。首先将那些即将要访问的段放入覆盖区,其他段放在外存中,在需要调用前,系统再将其调入覆盖区,替换覆盖区中原有的段。
实现:
- 将程序的必要部分代码和数据常驻内存;
- 可选部分在其他程序模块中实现,平时存放在外存中(覆盖文件),需要用到时才装入到内存;
- 不存在调用关系的模块不必同时装入到内存,可相互覆盖。
特点:打破了必须将一个进程全部信息装入主存后才能运行的限制;但当同时运行代码大于主存时仍不能运行;内存中能更新的地方只有覆盖区的段,不在覆盖区的段会常驻内存。
连续分配管理方式
连续分配:指为每一个用户进程分配的必须是一个连续的内存空间。
外部碎片可以通过紧凑技术来解决
固定分区分配,通过分区说明表来记录每一个分区的使用情况
动态分区分配,用过空闲分区表OR空闲分区链来记录空闲块的信息
四种动态分区分配算法
循环首次适应算法又叫:临近适应算法
最坏适应算法又叫:最大适应算法