概论

系统调用表本质是函数指针数组

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设备操作的指令

访问程序状态的指令

存取特殊寄存器的指令。

其他指令

中断

单级中断系统中

由硬件完成/由中断隐指令完成

  1. 关中断

  2. 保存断点

  3. 识别中断源

    由中断处理程序完成

  4. 保存现场

  5. 中断事件处理

  6. 恢复现场

  7. 开中断

  8. 中断返回

互斥与同步

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软件层次结构

alt

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设备上的数据传送到高速磁盘上,或相反。

alt 是一种以空间换时间的技术。

其他

系统初始化需要创建中断向量表,以实现通电自检POST

硬盘分区表在磁盘逻辑格式化之前。

分区完成后,对物理分区进行逻辑格式化(创建文件系统)。

为每个分区初始化一个特定的文件系统,并创建文件系统的根目录。