第二章 进程与线程
一个进程就是一个正在执行程序的实例。
停留在后台处理诸如电子邮件、Web页面、新闻、打印之类活动的进程,成为守护进程。
每个进程中的内容:地址空间、全局变量、打开文件、子进程、即将发生的井盖、信号与信号处理程序、账号信息
每个线程中的内容:程序计数器、寄存器、堆栈、状态。
资源管理的单位是进程而非线程。
线程企图实现的是,共享一组资源的多个线程的执行能力,以便这些线程可以为完成某一任务而共同工作。
调度程序激活机制的目标是:模拟内核线程的功能。
弹出式线程:一个消息的到达导致系统创建一个处理该消息的线程,这种线程称为弹出式线程
临界区:对共享内存进行访问的程序片段叫做临界区域,简称临界区。
屏蔽中断对于操作系统本身而言是一种有用的技术,但对用户进程则不是一种的互斥机制。
Murphy法则:任何可能出错的地方终将出错。
中断发生后,操作系统最底层的工作步骤:
- 硬件压入堆栈程序计数器等
- 硬件从中断向量装入新的程序计数器
- 汇编语言过程保存寄存器
- 汇编语言过程设置新的堆栈
- C中断服务例程运行(点新低读和缓冲输入)
- 调度程序决定下一个将运行的进程
- C过程返回至汇编代码
- 汇编语言过程开始运行新的当前进程
信号量:它使用一个整型变量来累计唤醒次数,供以后使用。它可以为0(表示没有保存下来的唤醒操作)或者正值(表示有一个或多个唤醒操作)
管程:由过程、变量及数据结构组成的一个集合。0
在不同环境中调度算法的一些目标:
所有:
- 公平——给每个进程公平的CPU份额
- 策略强制执行——看到所宣布的策略执行
- 平衡——保持系统的所有部分忙碌
批处理系统
- 吞吐量——每小时的最大作业数
- 周转时间——从提交到终止的最小时间
- CPU利用率——保持CPU始终忙碌
交互式系统
- 响应时间——快速响应请求
- 匀衡性——满足用户的期望
实时系统
- 满足截止日期——避免丢失数据
- 可预测性——在多媒体系统中避免品质降低
调度算法:
- 先来先服务
- 最短作业优先
- 最短剩余时间优先
- 轮转梯度
- 优先级调度
- 多级队列
- 最短进程优先
- 保证调度
- 彩票调度
- 公平分享调度
第三章 存储管理
地址空间是一个进程可用于寻址内存的一套地址集合。每个进程都有一个自己的地址空间,并且有一个自己的地址空间,并且这个地址空间独立于其他进程的地址空间(除了在一些特殊情况下进程需要共享他们的地址空间)
虚拟地址空间按照固定大小划分称为页面的若干单元
在物理内存中对应的单元称为页框。
转换检测缓冲区:可以减少页表的访问
页面置换算法:
- 最优页面置换算法,无法实现,仅用于对其他可能算法的性能进行比较
- 最近未使用页面置换算法
- 先进先出页面置换算法
- 第二次机会页面置换算法
- 时钟页面置换算法
- 最近最少使用页面置换算法
- 工作集页面置换算法,工作集:一个进程当前正在使用的页面的集合成为它的工作集
- 工作集时钟页面置换算法
缺页中断发生时的时间顺序:
- 硬件陷入内核,在堆栈中保存程序计数器。
- 启动一个汇编代码例程保存通用寄存器和其他易失的信息,以避免操作系统破坏,这个例程将操作系统作为一个函数来调用
- 当操作系统发现一个缺页中断时,尝试发现需要哪个虚拟页面
- 一但知道了发生却也中断的虚拟地址,操作系统检查这个地址是否有效,并检查存取与保存是否一致。如果不一致,向进程发出一个信号或杀死该进程。如果地址有效且没有保护错误发生,系统则检查是否在空闲页框。如果没有空闲页框,执行页面置换算法寻找一个页面来淘汰
- 如果选择的页面脏了,安排该页写回磁盘,并发生一次上下文切换,挂起产生缺页中断的进程,让其他进程运行直到磁盘输出结束。无论如何。该页面被标记为忙,以免因为其他原因而被其他进程占用
- 一旦页框“干净”后(无论是立刻还是在协会磁盘后),操作系统查找所需页面在磁盘上的地址,通过磁盘操作将其装入。该页面被装入后,产生缺页中断的进程仍然被挂起,并且如果有其他可以运行的用户进程,则选择另一个用户进程
- 当磁盘中断发生时,表明该页已经被装入,页表已经更新可以反映它的位置,页框也被标记为正常状态
- 回复发生缺页中断指令以前的状态,程序计数器重新指向这条指令
- 调度引发该缺页中断的进程,操作系统返回调用他的汇编语言例程
- 该例程回复寄存器和其他状态信息,返回到用户空间继续执行,就好像缺页中断没有发生过一样
控制系统复杂度的一种重要方法是把策略从机制中分离出来。
分页的点:统一的页面大小和在只使用段的一部分时不用把他的的全部调入内存
分段的优点:易于编程、模块化、保护盒共享。
Pentinum的保护机制:0.内核,1.系统调用,2.共享库,3.用户程序