文档介绍:操作系统实验三实验报告
基本信息
实验题目
进程调度算法实验
王召德
2015-4-16
实验内容简要描述
l加深对进程调度概念的理解,体验进程调度机制的功能,了解 Linux 系统中进程
调度策略的使用方法。练习进程调度算法的编程和调试技术。
设有两个并发执行的父子进程,不断循环输出各自进程号、优先数和调度策
略。进程初始调度策略均为系统默认策略和默认优先级。当某个进程收到 SIGINT
信号时会自动将其优先数加 1,收到 SIGTSTP 信号时会自动将其优先数减 1。请编
程实现以上功能。
intelPC
报告的主要内容l
父进程生成子进程分别都绑定SIGINT和SIGTSTP信号,并且在函数中分别让优先级加一和减一,然后分别打印二十次自己的PID,优先级,调度策略。每次按Ctrl-C优先级会加一,按Ctrl-Z优先级会减一。
无l
无
无l
无
实验过程和结果l
1学时l
在调试过程中,两个进程id搞错导致处理错误l
无
实验的总结
系统可以有多种不同的策略调度进程,其中按照优先级调度,可以给某个进程设置优先级,这个优先级可正可负,可以根据优先级的大小进行调度,而且这个优先级可以在进程执行中改变。
附录
程序源代码
#include <>
#include <sys/>
#include <sys/>
#include <>
#include <>
#include <>
// SIGINT 程序终止(interrupt)信号, 在用户键入INTR字符(通常是Ctrl-C)时发出,用于通知前台进程组终止进程。
// SIGTSTP 停止进程的运行, 但该信号可以被处理和忽略. 用户键入SUSP字符时(通常是Ctrl-Z)发出这个信号
typedef void (*sighandler_t) (int);
void sigcat_1(){
printf("SIGINT信号,优先度加一\n");
setpriority(PRIO_PROCESS,getpid(),getpriority(PRIO_PROCESS,getpid())+1);
}
void sigcat_2(){
printf("SIGTSTP信号,优先度减一\n");
setpriority(PRIO_PROCESS,getpid(),getpriority(PRIO_PROCESS,getpid())-1);
}
int main(intargc, char *argv[]){
inti,j,pid;
//srand((unsigned)time(0)