minix3系统任务
概述
- 内核层的三个进程之一,本身是一个独立的进程,它的优先级与时钟任务的优先级一样都是最高的。
- 接受来自驱动程序和服务器层进程的相关服务请求,为server proc和device drivers提供服务
- 即 读写I/O端口,跨地址空间复制数据等。
系统调用
整体式内核(与微内核相对)的操作系统中,系统调用是指对内核提供服务的调用
在微内核结构的minix3中,用户进程发出的系统调用,转化为消息,服务器进程处理部分工作后,再将剩余工作(系统调用的剩余任务)发送给内核中的系统任务进程。由内核中的系统任务进程完成剩下的工作.
APP:fork();
| fork(系统调用)
服务器进程
| sys_fork(内核调用)
系统任务(内核)
系统任务接受对于内核服务的请求,称为 内核调用.
系统任务接受的消息类型(教材版本有28条)
进程管理类
Sys_fork()Sys_execSys_exit与POSIX系统调用相对应
Sys_nice改变进程的属性
Sys_privtcl改变进程的特权,被再生服务器使用。
信号类
- Sys_kill与kill(传统意义上的系统调用)相对应
- sys_getksig,用于协助处理信号
内存类
时间类
系统控制
系统任务的实现
System.h/system.c
- 系统任务的主框架(不同的消息有不同的函数来处理,故其为一个函数指针数组)
- 通过函数指针数组call_vec,
(*call_vec[i])(&m);
将消息类型作为数组索引,确定相应的函数以响应服务请求。 - 系统任务的顶层是sys_task过程,在初始化函数指针数组后,进入一个循环以等待消息。在对消息做有效性验证后,根据消息类型调用相应的函数。
kernel/system目录
- 包含了每个响应函数的源文件
系统库的实现
- 在系统任务主程序system.c中每一个名字为do_xyz形式的函数的源码在kernel/system/do_xyz.c
- 分类
- 代表用户进程访问内核数据结构
- 大部分工作在用户空间进程处理的系统调用需要在内核空间下作操作。
- exec->do_exec
系统任务的角色
- read系统调用(systemtask响应filesystem的请求作数据的复制)
- user->FS->Diskdevice driver(无法读写但可以有读写逻辑)
- 最好情况:命中时只需要做数据的复制。(3个层次
- 最坏情况:需要与disk device driver的4个层次
在这两种情况下所需要的执行时间是不一样的。
此处体现了数据的缓存的重要性。(利用局部性减少读写IO的次数)
系统任务的角色
代表驱动程序读写I/O窗口
做数据复制
minix3时钟任务
时钟任务对于分时系统很重要
- 维护日常时间,并且防止其某一进程独占CPU而不让其他实体使用CPU
- 时钟任务类似于设备驱动程序,由硬件设备的中断驱动
硬件时钟
可编程时钟
晶振、计数器和一个保持寄存器。
Holding register is used to load the counter
Counter is decremented at each pulse
都是少有一个这样的电路向计算机的各种电路提供同步信号,当计数为零时,产生一个中断。
可编程模式
- 单触发模式
- 方波模式:产生中断后,保存寄存器自动拷贝,整个过程不断重复执行,这些周期的中断称为时钟滴答。
时钟任务的作用
维护日期时间
处理用户进程提出的alarm系统调用。
对系统某些部分提供看门狗时钟
执行测试统计、监视获取统计数据。
等
日常日间的维护方法
- 64位计数器(维护时钟代价高)
- 用秒为单位维护日长时。(精度)
- 按滴答计数,相同于系统启动时间,而不是特定的外部时间。
使用单个时钟模拟多个定时器
维护一个链表,在链表中连接起来所有时钟请求。即可用一个物理时钟模拟多个虚拟时钟。
用户信号的机制
操作系统内部的定时器:看门狗时钟
操作系统内部的定时器(watch-dog Timer)
意义:每次向硬盘控制器发送命令时,都要安排唤醒调用.
时钟驱动程序调用一个调用者提供的过程而不是一个信号。
时钟驱动程序概述
Kernel/clock.c
考试重点:2.1-2.4
2.5-2.8 minix3
2.7/2.8两个特定进程。
第二张很重要。
理论课考核以原理为主。