通常把计算机硬件系统上配置的第一个大型软件称为OS。该软件满足:
多道程序设计是指:在内存中同时存放多道程序,这些程序可以并发执行(图1-3)。
与现代OS的关系:现代OS都采用了并发执行的工作流程。
类型分三种:批处理OS,分时操作OS,实时操作OS。
批处理OS特征:
分时操作OS特征:
实时操作OS特征:
系统调用包含了以下两个方面的含义:
组成:
基本特点:
顺序:处理器在开始执行一道程序后,只有在这道程序运行结束后(程序指令运行完成,或程序运行过程中出错终止运行),才能开始执行下一道程序。(DOS)
并发:在多道程序设计环境下,处理器在开始执行一道程序的第一条指令后,在这道程序完成之前,处理器可以开始执行下一道程序,同样的,更多其他的程序也可以开始运行。
一道程序在一个数据集上的一次执行过程,称为进程。
5个特征:动态、并发、独立、结构、异步(性*5)。
就绪、运行、阻塞(状态*3)。转换模型如下(p41):
PCB:进程控制块。
控制、同步、通信、调度、死锁。
创建的主要操作:
生成一个PCB——生成pid——初始化PCB各项内容——加入合适的就绪队列
阻塞:
修改PCB的进程状态——运行→阻塞。
现场保护——将处理器现场的内容保存在PCB。
将进程加入合适的等待队列。
唤醒:
从等待队列中移出进程。
修改PCB的进程状态——阻塞→就绪。
讲进程加入合适的就绪队列。
一次只能让一个进程使用的资源称为临界资源。
这里“一次”的含义:在一个进程申请、分配得到资源起,到归还资源为止的这段时间内进程对该资源的使用过程称为一次使用。
临界区是指进程对应的程序中访问临界资源的一段程序代码。
信号量的struct简化定义如下:
struct semaphore(){
int value;
PCB *bq;
}
p(s){
s.value --;
if (s.value < 0) blocked(s);
}
v(s){
s.value ++;
if (s.value <= 0) wakeup(s);
}
blocked(s):阻塞原语,把当前调用p操作的进程设置为阻塞状态并加入到信号量s对应的等待队列bq中。
wakeup(s):唤醒原语,从信号量s对应的等待队列bq中唤醒一个进程。
在信号量机制中,p、v操作定义为原语。
pv操作意义:用信号量及PV操作实现进程的同步与互斥
两个或两个以上的一组并发程序,称其具有互斥关系,是指这组进程至少共享一类临界资源。当一个进程在临界资源对应的临界区内执行时,其他要求进入相关临界区执行的进程必须等待。
…
p(s);
临界区;
v(s);
…
(s:互斥信号量)
假定生产者进程个数n,消费者进程个数m,缓冲区单元格个数k。
把PC问题分为以下四类
type | condition |
---|---|
简单PC问题 | n=m=k=1 |
一般PC问题 | n=m=1, k>1 |
复杂PC问题 | n>1, m>1, k>1 |
特殊PC问题 | n+m=3(or n+m=4), k=1 |
两个或多个进程之间交换数据的过程称为进程通信
其中提供数据的一方称为发送进程,得到数据的一方称为接收进程。
为什么需要通信?
把进程细化成若干个可以独立运行的实体,每个实体称为一个线程。
引入线程的目的
线程的类型
RR算法:设定一个时间片,作为允许进程占用的最长时间。
优先级算法:每个进程给予一个优先数,调度时选择优先级最高的进程。
对于两个处于阻塞进程的进程pi,pj,
pi的阻塞需要pj的某个操作执行才能唤醒,
pj的阻塞需要pi的某个操作执行才能唤醒。
于是谁都解不开谁,这就是死锁。
死锁产生的根本原因:系统拥有的资源数量小于各进程对资源的需求总数。
四个必要条件:
在资源分配上采取一些限制措施,来破坏死锁产生的4个必要条件之一。
(以上方法的作用都太有限。所以死锁预防其实是缺乏有效的办法的。)
在某一时刻,程序对于系统的所有进程,都可以找出一个处理器执行这些进程的顺序,按照这个顺序依次执行各个进程,每个进程都可以运行完成。
(PS:在某一时刻,若系统处于不安全状态,说明系统一定存在一组进程,他们将进入死锁状态。只有在之后的每次资源分配后都能保证系统处于安全状态,才能保证不存在进程死锁。)
假设某程序运行时需要访问临界资源R,该程序可供n个用户同时运行。设系统拥有资源R的数量为k,程序申请使用R的数量为x(每次只申请1个,申请x次)。
那么,k、x、n满足什么条件下,可以保证用户运行时不被死锁掉?
答案:当k-n(x-1) >= 1时即可。
系统一共有k个R。n个用户程序,每个程序都使用x-1次R(除掉现在在使用的这一次)
所以,剩余空间等于总数k减去总使用量n(x-1)。只要还有多出的空间,剩下的值一定大于1。死锁也就可以避免了。
由于一个作业装入到与其他地址空间不一致的存储空间,需要对其有关地址进行调整的过程称为重定位。
基本思想:操作系统启动时,根据事先的配置,把用户区分成若干个存储区域,每个区域称为一个分区,各个分区的长度可以不相等。
启动成功后,分区的个数和每个分区的长度不再改变。
程序装入时,一个分区只能分配一道程序,而一道程序也只能占用一个分区,这种分配方式也成为连续分配。
FF算法:分配到能满足程序需求的第一个空闲区
BF算法:分配到能满足程序需求的,长度最小的空闲区
WF算法:分配到能满足程序需求的,长度最大的空闲区
在分页存储管理的内存分块,进程分页的基础上,如果程序装入时,要求把程序的所有页一次性的全部装入内存,那么这种分页管理称为静态分页存储管理,简称静态分页或基本分页。
结构主要又页号、块号、外存地址、中断位P、访问位A、修改位M组成
访问位A是页面调度参数之一。针对不同的页面调度置换算法,访问位A具有不同的含义。
修改位M表示该页装入内存后是否被修改,即该页是否被执行了写操作。M=0表示没有被修改,M=1表示已经被修改。修改位M在页面调度时使用。在执行具体写操作时,M=1。
在一段较短的范围内,集中在少数的几个页之间,系统频繁的进行调入和调出操作。把这种状况称为抖动现象。
按理说随着内存的快速增加,缺页率应该下降,但是对于FIFO算法,存在个别进程,分配给内存的块数增加,缺页率不降反升。这种情况称为belady现象
P188-189
有了操作系统的文件管理,用户通过文件名访问文件内容,而无须了解文件内容在存储介质上的存放形式和存取细节,用户也就不必关心存储介质的物理特性。
这种使用方式称为文件的按名存取
连续结构
管理简单
存取速度快
存储空间连续分配,存储空间利用率不高
链接结构
非连续的存储分配,提高了存储空间的利用率
方便文件内容的增加或删除
只适合顺序存取,存取速度慢
指针信息造成物理块信息不完整,并导致数据无法控制
索引结构
非连续的存储分配,提高了存储空间的利用率
方便文件内容的增加和删除
实现随机存取
索引表占用额外的开销空间
增加检索的开销
FAT链接系统是改进的连接结构。
在FAT中每一个物理块对应一个表项,并按物理块号顺序组织。在FAT16中,一个表项占2B,FAT32为4B
以FAT16为例:
FFFFH——对应的物理块为空闲
0000H——对应的物理块为文件的最后一个块/或对应物理块已损坏不能使用
xxxxH——其他值表示该物理块的下一个物理块号
名称:用户文件目录+系统文件目录
结构简单容易实现,减少了检索的开销
解决了不同用户之间的文件重名问题
容易实现用户之间的共享
文件保护是指防止文件内容的破坏。
文件保护的主要方法是文件的备份和恢复。
文件保密是对文件存取的控制,防止文件的非法访问。
方式:存取控制矩阵,存取控制表,权能表。
数据组织方式:
字符设备、块设备
固有属性:
独占设备、共享设备
用户在程序中使用的设备与具体物理设备无关,用户或程序使用的是逻辑设备,当进程运行时,由操作系统在逻辑设备与物理设备之间建立连接,即设备的分配。把这种设备使用方法的特点称为设备独立性。
PNP:一种设备的自动配置技术,不需要用户的手工跳线等操作,插入就可以使用,并且可以在开机状态下直接操作;当设备拔出/拆卸后,系统自动取消配置。
需要硬件、软件配合完成。
在I/O操作过程中,利用一种存储部件或其中的部分(如内存的一个区域),暂时存放要交换的数据,将来再把数据传输到目标位置。这种数据暂存的技术称为缓冲技术。
目的