第一章,引言,草草略过,大致了解了,概要如下:
对操作系统有两种观点:资源管理器观点和扩展的计算机观点。从资源管理器观点看,操作系统的任务是高效地管理整个系统的各个部分;从扩展的计算机观点看,其任务是为用户提供一台比物理计算机更易于使用的虚拟计算机。
操作系统的历史很长,从早期的代替操作员手工操作的系统,到现在的多道程序系统。
任何操作系统的核心都是一套系统调用,系统调用界定了操作系统能完成的功能。对于MINIX,其系统调用分为六大类,第一类与进程创建和终止有关。第二类处理信号。第三类针对文件读写。第四类进行目录管理。第五类对信息进行保护。第六类用于时间管理。
操作系统有若干种构造模型,常见的有整体式模型,层次式模型,虚拟机模型和客户-服务器模型。
第二章,介绍进程相关的内容,明天继续看关于MINIX如何具体实现进程,进程间通信(IPC问题),以及进程调度。
小结如下:
为了屏蔽中断的影响,操作系统提供了一个由并发运行的顺序进程所构成的概念模型。进程之间可以使用进程间通信原语来相互通信,比如信号量、管程、消息等。使用这些原语是为了保证任一时刻不会同时有两个进程进入临界区。进程的状态可以是运行、就绪、或阻塞,且当它或另一个进程执行一条进程间通信原语时可能引起状态的改变。
进程间通信原语可用来解决诸如生产者-消费者、哲学家用餐、读者-写者以及理发师睡觉等问题。但即使使用了这些原语,也必须注意避免错误和死锁。目前已经有许多种调度算法,包括时间片轮转、优先级调度、多级队列以及策略驱动的调度等。
MINIX支持进程概念,并提供了用于进程间通信的消息。消息是不加以缓冲的,所以一条SEND操作只有在接收者正在等待它时才成功。同样地,一条RECEIVE操作只有在消息已经可用时才成功。这两种操作的调用进程在操作不成功时都将阻塞。
当中断发生时,核心的最底层将构造一条消息,并将消息发送到与中断设备相关的系统任务。例如,当磁盘任务读写一块数据时,它先向硬盘控制器发出一条命令,然后调用receive并阻塞。当数据准备好之后硬盘控制器将发出一条中断。低层软件随后构造一条发给硬盘任务的消息并将其标志为就绪。当硬盘任务被再次调度运行时,它将获取该消息并进行处理。中断处理例程当然也可以直接进行一些操作,例如时钟中断处理程序更新时间。
中断可能引发任务切换。当一个进程被中断时,该进程的进程表项中将建立一个堆栈,再次启动该进程所需的全部信息都放在这个新堆栈上。通过以下操作可以再次启动任何一个进程:将栈指针指向其进程表项,然后执行一个指令序列来恢复CPU寄存器值,最后以一条iretd指令结束。调度程序决定堆栈指向哪个进程表项。
核心本身在运行时也可能发生中断。CPU检测到中断后将使用核心栈,而不是进程表中的堆栈。这样便允许中断嵌套。当后来的中断服务例程结束后,在它之前执行的中断服务例程就可以运行直到结束。在所有中断都被处理之后则可以重启动一个进程。
MINIX调度算法使用三个优先级队列。优先级最高的是系统任务;下一个是文件系统、内存管理器及其他服务器进程;最低的是用户进程。用户进程每次运行一小段时间,这样便达到时间片轮转的调度效果。但其他进程则一直运行直到阻塞或被剥夺为止。