Minix3进程概述

介绍Minix3中的系统组织结构及进程实现。

概述

  • UNIX 的内核是一个部分模块的单块程序
  • MINIX 是微内核结构,是一组进程的集合,内核功能较少,进程之间以及用户进程之间使用进程级通信机制(IPC)进行通信Minix3进程概述
  • 内部结构

    • Minix3进程概述
    • 注意:内核层的 system task 是系统任务,第二第三层统称为系统进程 system process
    • 除了第一层为内核层,其他层都是user mode
    • 进程都潜在有一定特权,这是第二层、第三层、第四层内的进程的不同之处。
  • kernel call 与system call的区别
    • 内核调用(kernel call)是由系统服务提供的以使驱动程序和服务器完成工作的低层函数。例如读硬件的I/O端口。
    • system call 是用POSIX规范定义的高层调用,如read、fork和unlink,这些调用供第四层的用户程序使用。
    • 用户程序包含很多POSIX调用,但不包含内核调用。

内核层(Kernel)

多数用 C 写,汇编负责内核直接与硬件交互的最底层部分。

主要功能是为上层驱动程序和服务提供一组特权内核调用

内核

  • 进程调度,负责进程在就绪态、运行态、阻塞态之间转换
  • 处理进程间的消息
  • 支持对 I/O 端口和中断的访问,在处理器中需要使用特权内核模式(kernel mode),这些指令在用户指令中是没有的。

时钟任务

  • 类似设备驱动程序,与产生时钟信号的硬件交互
  • 只提供内核接口,用户不能访问

系统任务

  • 为驱动程序和服务器提供内核调用,用户进程不可调用
  • 包括读写 I/O 端口、跨地址空间复制数据

设备驱动程序(Device Drives)

  • 请求系统任务代表它们读写 I/O 端口
  • 请求系统任务将读取的数据副本到另一个地址空间
  • 实现操作系统工作一:管理资源

服务器进程(server processes)

进程管理器(Process Manage)

  • 执行所有涉及或者终止进程的MINIX3系统调用,例如fork,exec和wait。
  • 还负责执行与信号有关的系统调用,例如alarm和kill
  • 管理内存,如发出brk系统调用。

文件系统(File System)

  • 执行文件系统的调用,如read,mount和chdir。
  • 实现操作系统工作二:通过实现系统调用提供一个扩展的计算机(PM & FS)

信息服务器(information server)

  • 负责提供其他驱动程序和服务器的调试和状态信息的工作。

再生服务器(reincarnation server)

  • 启动或者重启那些不与内核一起加载到内存的设备驱动程序。

网络服务器(network server)

  • 可以通过驱动程序来请求I/O。

用户进程(user processes)

  • 如shell程序、编辑器、编译器和用户程序。
  • 系统进程比用户进程拥有更高的执行优先级
  • Init进程
    • 在系统引导时启动
  • Daemon 守护进程
    • 周期性运行或总是等待某个事件的后台进程

MINIX3 中的进程管理

MINIX3 的启动

软盘

只有第一个分区可以引导(引导块,boot block),由它装入引导程序(bootstrap),引导程序很小,并装入一个更大的程序boot,由boot装入操作系统。

boot block -> bootstrap -> boot -> boot image

硬盘

可能包含很多分区,第一个扇区包含主引导记录。

主引导记录(master boot record)= 第1个扇区内的一小段程序(用于选择活动分区)+ 磁盘分区表(partition table)

程序部分被执行以读入分区表并选择活动分区,活动分区的第一个扇区有一个引导程序,被装入并执行以查找启动程序boot。

master boot record -> partition table -> active parttition -> boot block (扇区1) -> bootstrap-> boot -> boot image

在 BIOS 中设置启动盘的搜索顺序

  • 软盘启动
  • 硬盘启动
    • 程序部分被执行读入分区表并选择活动分区,活动分区第一个扇区中的引导程序被装入执行并以查找并启动程序boot

boot

  • 是MINIX3的磁极装入程序,不仅可以装入操作系统,而且作为一个金控程序,允许用户改变、设置和保存不同的参数。

引导映像(boot image)

  • MINIX3 的 boot 程序将在软盘或硬盘分区上找一个包含多个部分(各种程序,如PM、FS 等)的文件,并将各部分装到内存适当的位置。
  • 引导映像的各个部分是独立的程序,内核、FS、PM、再生服务器必须是引导映像的一部分。

    • 在初始化阶段,内核先启动系统任务和时钟任务,再启动进程管理器和文件系统,接着是其他一些服务器和驱动程序,这些都完成之后被阻塞,然后第1个用户进程 init 才开始运行。

进程树的初始化

  • Init 是第1个用户进程,也是作为引导映像(boot image)的一部分加载的最后一个进程

    • init进程首先执行/etc/rc脚本,启动不在引导映像中的其他服务器和驱动程序。
    • 其中一个使用程序为服务(service),是再生服务器的用户接口
    • 最后启动守护进程
    • init不是进程树的树根,其结构也不能判断系统进程的启动顺序
    • 进程管理器是用户空间运行的第1个进程

    • 再生服务器是其他所有再引导映像中启动的进程的父进程

    • Minix3进程概述

MINIX3 中的进程间通信

  • 原语
    • Send
    • Receive
    • Sendrec
    • 发送一条消息,并等待同一个进程的应答
  • 实现:内核中的消息传递机制将消息从发送者复制到接收者

    • 同步通讯:当一个进程发送消息到目标进程而目标进程并不在等待消息时,发送进程将阻塞,直到目标进程调用 receive 为止。
    • 当 A 向 B 发送消息时,如果 B 向 A 发送消息,会导致死锁。
  • 每个任务、驱动程序或服务器只允许与一些特定的进程通信

  • Notify

    • 不阻塞消息发送
    • 只发送一个很简单的通知,使用置位就可以存储。
    • 异步通讯,可以避免死锁
    • 消息通知(notification message)的简单性在于,不能被接受的通知可以很容易的存储起来,以便当接受者调用receive时可以收到这个通知。
    • 实现
    • 通过置位来接收,notify 只包含发送者信息和一个内核加上的时间戳

MINIX3 中的进程调度

  • 结构:多级排队系统

    • 共 16 个队列
    • 最低优先级位 IDLE 进程,只在没有其他任务时运行
    • 系统和时钟任务处于最高优先级队列中
    • 驱动程序和服务器进程通常具有一个较大的时间片,通常是运行结束被阻塞而非时间片到了被中断

    • 只有当前一个队列中没有就绪的程序时,才会转向下一个队列

    • 优先级调度 + 改进的轮转调度算法

    • 进程的优先级可根据实际情况调整

参考资料

  1. Operating System:Design and Implementation,Third Edition