概论
系统调用表本质是函数指针数组
CPU切换为内核态由CPU自己完成,不由操作系统完成。CPU通过执行软中断指令让CPU运行模式由用户态切换为内核态。与中断和异常响应过程相同。
os最基本的2个特征是:并发和共享。
多道程序设计
即指在内存中装入多个程序,在CPU中交替运行。宏观上并行,微观上串行。
需要解决的问题
如何分配处理器
多道程序的内存分配问题
I/O设备如何分配
如何组织和存放大量程序和数据,方便用户使用,并保证其安全性和一致性。
微内核
微内核使用“机制与策略分离”来构造OS结构。有以下功能
进程/线程管理:
进程/线程之间通信,进程切换/调度。多处理机之间同步。
低级存储器管理:
只配置最基本的,最底层的。如va->pa的页表机制和地址变换机制。
中断和陷入处理:
捕获发生的中断和陷入事件,并进行中断响应处理,识别之后,在发送给相关的服务器处理。
进程与线程
地址空间:进程的地址空间,包含内核地址空间和用户地址空间
内核栈/系统栈/核心栈:内存中属于操作系统空间的一块区域。
用途:
保存中断现场
保存操作系统子程序之间互相调用的参数、返回值、返回点、子程序(函数)的局部变量
用户栈:用户进程空间中的一块区域,用于保存用户进程的子程序之间相互调用的参数、返回值、返回点以及子程序的局部变量
用户态进入核心态,不仅状态需要切换,所用的堆栈也需要由用户堆栈切换为系统堆栈。这个系统堆栈也是属于该进程的。
进程上下文包括三个,用户级上下文,寄存器上下文和系统级上下文 用户级上下文:指令,数据,共享内存、用户栈 寄存器上下文:程序计数器,通用寄存器,控制寄存器,状态字寄存器,栈指针(用来指向用户栈或者内存栈) 系统级上下文:pcb,主存管理信息(页表&段表)、核心栈
PCB中不包含进程地址空间大小。进程地址空间的大小保存在CPU堆栈指针寄存器。
PCB中包含进程打开文件列表指针。
SJF不一定能使平均周转时间最短。
P通过执行系统调用从键盘接受一个字符的输入,顺序是
将进程P插入阻塞队列
用户在键盘上输入字符
启动键盘中断处理程序
将字符从键盘控制器读入系统缓冲区
将进程P插入就绪队列
进程P从系统调用返回
先插入就绪再返回。
修改页表需要在内核态执行
通用寄存器清0不需要在内核态执行。
用户线程由线程库进行管理,创建和调度不需要内核的干预,而且os无法直接调度用户线程。
内核态下,CPU可执行任何指令。用户态只能执行非特权指令。
特权指令
I/O指令:
有关对I/O设备操作的指令
访问程序状态的指令
存取特殊寄存器的指令。
其他指令
中断
单级中断系统中
由硬件完成/由中断隐指令完成
-
关中断
-
保存断点
-
识别中断源
由中断处理程序完成
-
保存现场
-
中断事件处理
-
恢复现场
-
开中断
-
中断返回
互斥与同步
mutex lock互斥锁,
用来解决临界区的工具。
在进入临界区的时候获得锁,离开的时候释放锁。
缺点:忙等待,有一个进程在临界区中,任何其他进程进入临界区必须连续循环调用acquire()。多个进程共享一个cpu时,浪费了CPU周期。
互斥锁用于多处理器系统。一个线程可以在一个处理器上等待,不影响别的执行。
信号量
可以用来解决互斥和同步问题,只能被2个标准源语wait(S)和signal(S)访问。
也记作P操作和V操作。
整形信号量
表示资源数目的整形量S,wait操作只要信号量就会不断地的测试。
未遵循“让权等待”的原则,使进程处于“忙等“状态
记录型信号量
不存在“忙等”的进程同步机制。
代表资源数目的int value。
增加一个进程链表L,链接所有等待该资源的进程。
wait操作:S.value--,代表进程请求一个该类资源。S.value<0时,表示该类资源已分配完毕,进程调用block源语,进行自我阻塞。放弃处理机。
插入该类资源的等待队列S.L
遵循了让权等待原则
signal操作:表示该进程释放一个资源,使系统中可供分配的该类资源数+1,
S.value++.
若+1后,则S.L中仍有等待该资源的进程被阻塞。
还应调用wake源语。将S.L中第一个等待进程唤醒。
死锁
资源分配图
圆代表一个进程,框代表一类资源。框中的一个圆代表一类资源中的一个资源。
请求边:从进程到资源的有向边,表示该进程申请一个单位的该类资源。
分配边:从资源到进程的边,该类资源已有一个资源分配给了该进程。
死锁定理:
简化资源分配图可检测系统是否为死锁状态。
找既不阻塞也不孤立的进程(一条有向边与它相连,且该有向边对应资源的申请数量系统中已有的空闲资源数量)
空闲资源数量=资源数量-出度
只要满足这一条件,就将结点与其所有相连的边消去。
只要能消去所有的边,图就是可简化的,就不会死锁。
死锁处理策略
死锁预防:最严格的策略,可以确保系统不发生死锁。
死锁避免:银行家算法。
死锁检测:资源分配图。
内存管理
动态分区分配
使用空闲分区表进行管理。在释放内存时,分3种情况。
在回收区与插入位置后的分区相接时,不仅要修正F2大小,还要修改F2起始地址。
但在回收区与插入位置前的分区相接时,不需要修改地址,只用改大小。
最佳适应产生最多的内存碎片,因为很多小的碎片塞不进去了。
页表基址寄存器保存的是当前进程的一级页表的起始物理地址,对于多级页表来说,顶级页表就是一级页表。
文件管理
文件共享
基于索引结点的共享方式/硬链接:
文件的物理地址,其他的文件属性信息,不放在目录项中,而放在索引结点中。
文件目录中只设置文件名及指向相应结点的指针。
索引结点中有链接计数count,表示链接到本索引结点上的用户目录项的数目。
在count!=0时,不能删除文件,只能删自己目录中的相应目录项,然后count-1
count=0时,才能删除文件。
利用符号链实现文件共享/软链接
符号链的引用计数值直接复制,如果指向的文件被删除了,也不影响。
设备管理
设备独立性/设备无关性:用户在编程序时使用的设备与实际设备无关,一个程序独立与分配给它的某类设备的具体设备,即在用户程序中只指明I/O使用的设备类型即可。
I/O软件层次结构
1用户层I/O软件
实现与用户交互的接口。用户可直接调用在用户层提供的,与I/O操作有关的库函数。对设备进行操作。用户层软件必须通过一组系统调用来获取系统服务。
2.设备独立性软件
用来实现用户程序与设备驱动器的统一接口、设备命令、设备的保护及设备的分配与释放。也为设备管理和数据传送提供必要的存储空间。
3.设备驱动程序
与硬件直接相关。负责具体实现系统对设备发出的操作命令,驱动I/O设备工作的驱动程序。响应中断请求。
每类设备配置一个设备驱动程序。是I/O进程与设备驱动器之间的通信程序。通常以进程形式存在。
4.中断处理程序
用于保存被中断进程的CPU环境,转入相应的中断处理程序进行处理,处理完毕再恢复被中断进程的现场后,返回到被中断进程。
任务:
进行进程的上下文切换
对处理中断信号源进行测试
读取设备状态
修改进程状态
控制I/O设备的I/O操作是I/O控制方式所决定的
1.直接程序控制方式
2.中断驱动控制方式
3.DMA控制方式
4.通道控制方式
I/O通道是专门负责I/O的处理机,是DMA方式的发展,进一步减少CPU干预。
设备保护:是由设备独立性软件完成的。其中的表现就是检查用户是否有权使用设备。
I/O接口/I/O控制器
接收主机发送的I/O控制信号,并实现主机和外部设备之间的信息交换。
磁盘调度
SSTF(Shortest Seek Time First):最短寻找时间优先.每次寻找离当前磁头最近的磁道。
SCAN/扫描/电梯调度:会换向,而且会到达终点。
CSCAN:不会换向,会到达终点。
不会到达终点的CSCAN,SCAN称为C-LOOK,LOOK
SPOOLing技术
缓解CPU高速性和I/O设备低速性之间的矛盾,引入脱机输入/输出技术。
是os中一项将独占设备改造成共享设备的技术。利用专门的外围控制机,将低速I/O设备上的数据传送到高速磁盘上,或相反。
是一种以空间换时间的技术。
其他
系统初始化需要创建中断向量表,以实现通电自检POST
硬盘分区表在磁盘逻辑格式化之前。
分区完成后,对物理分区进行逻辑格式化(创建文件系统)。
为每个分区初始化一个特定的文件系统,并创建文件系统的根目录。