进程管理
实验报告及代码见我的github:https://github.com/ningmengwei-ata/ClassProject/tree/master/Operating%20System/chrt%20system%20call
目标
1. 巩固操作系统的进程调度机制和策略
2. 熟悉MINIX系统调用和MINIX调度器的实现
实验要求
? 在MINIX3中实现Earliest-Deadline-First近似实时调度功能:
1. 提供设置进程执行期限的系统调度chrt (long deadline),用于将调用该系统调用的进程设为实时进程,其执行的期限为:从调用处开始deadline秒。
2. 在内核进程表中需要增加一个条目,用于表示进程的实时属性;修改相关代码,新增一个系统调用chrt,用于设置其进程表中的实时属性。
3. 修改proc.c和proc.h中相关的调度代码,实现最早deadline的用户进程相对于其它用户进程具有更高的优先级,从而被优先调度运行。
4. 在用户程序中,可以在不同位置调用多次chrt系统调用,在未到deadline之前,调用chrt将会改变该程序的deadline。
5. 未调用chrt的程序将以普通的用户进程(非实时进程)在系统中运行。
增加系统调用chrt:
? MINIX3中的系统调用结构分成三个层次:应用层,服务层,内核层。在这三层中分别进行代码修改,实现系统调用chrt的信息传递。从应用层用_syscall将信息传递到服务层,在服务层用_kernel_call将信息传递到内核层,在内核层对进程结构体增加deadline成员。
MINIX3中的进程调度:
? 进程调度模块位于/usr/src/minix/kernel/下的proc.h和proc.c,修
改影响进程调度顺序的部分。 ? struct proc 维护每个进程的信息,用于调度决策。添加deadline成员。
? switch_to_user() 选择进程进行切换。
? enqueue_head() 按优先级将进程加入列队首。实验中需要将实时进程的优先级设置成合适的优先级。
? enqueue() 按优先级将进程加入列队尾。同上。
? pick_proc() 从队列中返回一个可调度的进程 。遍历设置的优先级队列,返回剩余时间最小并可运行的进程。