操作系统:是控制和管理计算机的软、硬件资源,合理地组织计算机的工作流程,以及方便用户的程序集合
1 概述
计算机硬件框图
- 运算器用来完成算术运算和逻辑运算,并将运算的中间结果暂存在运算器内。
- 存储器用来存放数据和程序。
- 控制器用来控制、指挥程序和数据的输入、运行以及处理运算结果。
- 输入设备用来将人们熟悉的信息形式转换为机器能识别的信息形式,常见的有键盘、鼠标、扫描仪等。
- 输出设备可将机器运算结果转换为人们熟悉的信息系统形式,如显示器输出、打印机输出等。
中断类别 |
说明 |
程序中断 |
由指令执行的结果产生,例如算术溢出、除数为0、执行非法的机器指令以及访问非法地址。 |
时钟中断 |
由处理机的计时器产生,允许操作系统以一定规律执行函数。 |
I/O中断 | 由I/O控制器产生,用于通知处理机一个操作的正常完成或出现了错误。 |
硬件故障中断 | 由诸如掉电或存储器奇偶错误之类的故障产生。 |
操作系统的功能
- 存储管理
- 进程管理
- 设备管理
- 文件管理
- 用户接口
任务 | 功能 | |
进程管理 | ●对处理机的分配和运行实施有效管理。 ●在多道程序环境下,处理机的分配和运行以进程为单位, ●因此对处理机的管理即对进程的管理。 |
进程控制 进程同步 进程通信 进程调度 |
存储管理 | ●方便用户使用内存 ●提高内存的利用率 ●从逻辑上扩充内存 |
内存分配 地址映射 内存保护 内存扩充 |
设备管理 | ●完成用户程序请求的I/O操作,为用户程序分配I/O设备 ●提高外部设备的利用 ●尽可能地提高输入/输出的速度 ●方便用户使用外部设备 |
设备分配 设备控制 设备无关性 |
文件管理 | ●大量的信息以文件的形式放在外存,对信息的管理也就是对文件的管理 | 文件存储空间的管理 目录管理 文件的读、写管理 文件的存取控制 |
2 进程管理
进程状态转换图
五种状态的进程状态转 双挂起状态的进程状态转换图
进程的组成
- 进程控制块PCB
- 程序段
- 数据段
- 堆栈
PCB的作用:引入PCB的作用:就是使程序能成为独立运行的单位,并可和其他进程并发执行。
用户级线程与内核级线程
调度与切换速度
用户级线程的切换,因发生在一个应用进程之间,因此不仅无须通过中断进入OS内核,而且切换的规则也比较简单。
用户级线程比内核级线程切换速度快
系统调用
用户级线程在调用系统调用时,系统将看成是其所在进程的行为。而内核级线程的系统调用是以线程为单位。因此比较轻装。
用户级线程不如内核级线程
线程执行时间
用户级线程不如内核级线程合理
3 进程同步与通信
- 同步:指多个进程中发生的事件存在着某种时序关系,它们必须按规定时序执行,以共同完成一项任务 。
- 互斥:多个进程不能同时使用同一资源。
- 临界资源:某段时间内仅允许一个进程使用的资源。
- 临界区:每个进程中访问临界资源的那段代码。
信号量和PV操作
struct semaphore {
int value;
struct PCB *queue;
}
void wait(semaphore s)
{ s.value = s.value - 1;
if (s.value < 0)
block(s.queue);
/* 将进程阻塞,并将其投入等待队列s.queue */
}
void signal(semaphore s)
{ s.value = s.value + 1;
if (s.value <= 0)
wackup(s.queue);
/* 唤醒阻塞进程,将其从等待队列s.queue 取出,投入就绪队列*/
}
进程通信
4 调度与死锁
调度算法
- 先来先服务调度算法
- 短作业(进程)优先调度算法
- 时间片轮转调度算法
- 优先权调度算法
- 多级反馈队列
产生死锁的四个必要条件
- 互斥 :一个资源一次只允许一个进程访问
- 请求保持:请求的资源未得到满足,就等待其他进程释放该资源。
- 不可抢占:不能把别人的资源抢过来。
- 循环等待:存在一个进程链,使得每个进程都占有下一个进程所需的至少一种资源。
死锁的预防-------------------------------------------------------------------------------------------------------
优点 | 缺点 | ||
互斥条件不可禁止 | |||
去掉“请求保持条件” | 采用预先静态分配方法 系统要求所有进程一次性地申请其所需的全部资源 |
方法简单 | 进程延迟运行 资源浪费 用户有时提不出他要使用的全部资源 |
去掉“不剥夺条件” | 采用资源的有序分配 令所有资源排队,并赋予不同的序号。当进程请求资源时,必须严格按递增的次序提出,从而消除了环路。 |
定好序号后,增加新设备类型受到限制。 尽管定序号时考虑大多数作业使用资源的顺序。但会发生使用顺序与规定顺序不一致的情况,造成资源浪费。 限制用户简单、自主地编程 。 |
|
去掉“循环“条件 | 占有某些资源的进程,当它有新的资源请求被拒绝时,该进程停止运行,并释放它所占有的资源。当它再次被执行时,重新申请资源。 如果一个进程请求另一个进程占有的资源,操作系统可以剥夺后者占有的资源,要求它释放资源并将资源分配给前者使用 |
该策略实现起来比较复杂,而且要付出很大代价。 反复申请、释放,使进程执行无限延迟,不仅延迟了周转时间。还增加了系统开销,降低了系统吞吐量。 |
死锁的避免-------------------------------------------------------------------------------------------------------
避免死锁是通过明智的选择,确保系统永远不会 到达死锁点 。即动态地决定是否分配资源给进程!
安全状态—与—不安全状态
- 安全状态是指系统至少存在一个安全序列<P1, P2, …, Pn>,按照这个序列为进程分配资源,直到满足最大需求,每个进程都可顺序完成。
- 若系统不存在这样一个安全序列,则系统处于不安全状态。
银行家算法就是利用了安全序列
预防和避免的区别:
- 预防:破坏4个必要条件
- 避免:不去执行会产生死锁的步骤
死锁的检测
- 超时法:超过一定时间就判断为死锁
- 事务等待图:如果等待图有环路就存在死锁
死锁的解除
剥夺资源
- 从其它进程剥夺足够数量的资源给死锁进程。
撤消进程:撤消的原则是
- 为解除死锁状态所需撤消的进程数目最小。
- 撤消进程所付出的代价最小。
鸵鸟算法
对于死锁最简单的方法就是鸵鸟算法:把头埋在沙子里,假装什么也没有发生。
就是如果发生了死锁,就不管它,让它死锁,适用于很长一段时间才会发生死锁的情况(如五年发生一次)。
5 存储管理
程序的装入与链接
- 编译:源代码——目标代码
- 链接:目标代码+所需库函数=装入模块
- 装入:将装入模块装入内存,该过程也叫做地址重定位,也称地址映射
地址空间:源程序经编译后得到的目标程序,存在于它所限定的地址范围内,此范围称地址空间。地址空间是逻辑地址的集合。
存储空间:指主存中一系列存储信息的物理单元的集合,这些单元的编号称为物理地址。存储空间是物理地址的集合。
程序的装入方式
重定位(地址映射):
- 把用户程序中的相对地址(逻辑地址)转换为主存中的绝对地址(物理地址)过程。
静态重定位:
- 编译时产生相对地址,装入程序确定要装入模块的地址,并在装入时进行重定位,程序运行中不允许在内存移动。
动态重定位:
- 编译时产生相对地址,装入程序在把装入模块装入内存时,不立即把装入模块中的相对地址转换为绝对地址,而是推迟到程序要真正执行时才进行。
静态重定位示意图 动态重定位示意图
程序的链接方式
静态链接(对应静态连接库)
- 对相对地址进行修改 变换外部调用符号
装入时动态链接
- 在装入内存时,边装入边链接 便于软件版本的修改和更新 便于实现目标模块共享
运行时动态链接(对应动态连接库)
- 运行时,用到哪个模块,再链接哪个模块,用不到的模块可不装入内存。
页式存储管理————————————————————————————————
基本原理
- 将进程的逻辑地址空间分成若干个大小相等的片,称为页面或页;
- 内存空间分成与页大小相等的若干个存储块,称为物理块或页框。
- 在为进程分配内存时,以块为单位,将进程中的若干页分别装入多个可以不相邻的块中。
页面大小的选择
页面的大小由机器的地址结构决定的。
页面的大小的权衡
- 页面较小----内存碎片小;页表过长,占用较大内存空间。
- 页面较大----页表短,占用较少内存;内存碎片大。
- 通常页面的大小要适中,在512B~4MB之间。
页式存储管理逻辑地址结构
逻辑地址被分为两部分:
- 页号
- 页内位移
例如逻辑地址1500的二进制形式为0000 0101 1101 1100 由于页的大小为1024B,故页内位移占10位,剩下6位为页号
- 逻辑地址1500对应的页号为1(二进制为0000 01)
- 页内位移为476(二进制为01 1101 1100)
页式存储管理地址变换机构
快表:由于页表放在内存,使得CPU存取一个数据时,要两次访问内存,为了提高速度,增设快表(高速缓存)。
页表的组织
现代的计算机系统都支持大的逻辑地址空间,当地址空间较大(32位或64位)如32位时,若页面大小为4KB=212B,有页表项目220=1M,又因为每个页表项占4B,故每张页表要占用4MB内存。
对页表所需地址空间采用离散分配方式来解决:两级和多级页表。
将当前需要的部分页表项调入内存,其余的页表项仍驻留在磁盘上,需要时再调入内存。
两级页表结构
段式存储管理的基本原理————————————————————————————
整个作业的地址空间被分成若干个段,每个段采用一段连续的地址空间,段的长度由相应的逻辑信息的长度决定。
段式存储管理地址变换机构
分页和分段的区别
分页和分段的目的
- 页是信息的物理单位,分页是系统管理的需要,而不是用户的需要。
- 段是信息的逻辑单位,它含一组意义完整的信息。分段是为了更好地满足用户的要求。
页和段长度
- 页的大小固定,由系统确定。
- 段的长度不固定,决定于用户所编写的程序。
地址空间
- 分页的作业地址空间是一维的,即单一的线性地址空间。
- 分段的作业地址空间是二维的,程序员在标识一个地址时,需给出段名和段内地址。
6 虚拟存储管理
请求页式存储管理的页面置换算法
最佳置换算法OPT | 置换哪些不再使用,或最长时间不使用的页。 |
先进先出置换算法FIFO | 新进入内存的页被先置换出去。 |
最近最久未使用置换算法LRU | 用“过去”的行为预测将来,置换哪些“最近最久未使用”的页 |
CLOCK置换算法 | 为每页设一访问位,再将内存中的所有页面链接成一循环队列。 |
7 设备管理
中断处理过程
- 检查CPU响应中断的条件是否满足。
- 如果CPU响应中断,则须关中断,使CPU进入不可再次响应中断的状态。
- 保存被中断进程的现场。
- 分析中断原因。
- 执行中断处理子程序。
- 恢复被中断进程的现场。
- 开中断 。
8 文件管理
9 Windows 2000/XP操作系统
特点:
- 用户态与核心态
- 微内核设计
- 可移植性
- 支持对称多处理机
- 使用面向对象的程序设计概念
微内核与单内核
微内核的优点有:
- 方便移植
- 便于维护
- 便于对内核裁剪
单(宏)内核
- 单内核的好处是简单,便于理解和实现。
- 单内核的缺点不利于移植和维护。
Linux的内核类型
Linux继承了Unix的风格,将整个操作系统看作一个大的程序,属于单内核的风格。
Linux在单内核设计的基础上加入了微内核的设计观念,形成了特有的模块机制。Linux被组织成一组相对独立的块,称作可加载模块(loadable module)。
Linux可加载模块有两个基本点重要特征:
- 动态链接
- 模块分层
进程的状态
挂起(等待,阻塞):进程在操作系统中可以定义为暂时被淘汰出内存的进程,机器的资源是有限的,在资源不足的情况下,操作系统对在内存中的程序进行合理的安排,其中有的进程被暂时调离出内存,当条件允许的时候,会被操作系统再次调回内存,重新进入等待被执行的状态即就绪态,系统在超过一定的时间没有任何动作。
- 挂起:是主动的,不是因为资源不满足,而是暂时需要停止执行
- 阻塞:市被动的,是因为资源不满足,暂时进入等待状态
进程与线程的创建与撤消
进程与线程的创建
- fork()
- vfork()
- clone()
进程与线程的撤消
- exit ()
资料地址
课件下载地址:http://www.tup.com.cn/upload/books/kj/077944-01.rar
课件密码:12146
课件下载地址:http://www.tup.com.cn/upload/books/kj/079983-01.zip
课件密码:5109
课件下载地址:http://www.tup.com.cn/upload/books/kj/071984-01.rar
课件密码:589
课件下载地址:http://www.tup.com.cn/upload/books/kj/072523-01.rar
课件密码:50430
课件下载地址:http://www.tup.com.cn/upload/books/kj/074702-01.rar
课件密码:1136
课件下载地址:http://www.tup.com.cn/upload/books/kj/070661-01.rar
课件密码:10139
课件下载地址:http://www.tup.com.cn/upload/books/kj/070662-01.rar
课件密码:1097
课件下载地址:http://www.tup.com.cn/upload/books/kj/071594-01.rar
课件密码:9613
课件下载地址:http://www.tup.com.cn/upload/books/kj/069311-01.rar
课件密码:835
课件下载地址:http://www.tup.com.cn/upload/books/kj/059357-01.rar
课件密码:794