资源描述:
《山东大学软件工程os实验3实验报告》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、实验三进程调度算法实验姓名:班级:学号:1.1实验目的加深对进程调度概念的理解,体验进程调度机制的功能,了解Linux系统中进程调度策略的使用方法。练习进程调度算法的编程和调试技术。1.2试验环境:linux系统1.3实验步骤(1)在新建文件夹中建立以下名为psched.c的C语言程序/**Filename:psched.c独立实验*/#include#include#include#include#include#include#incl
2、ude#include#include//进程处理信号SIGTSTP的方法,将优先级减1voidhandler1(){setpriority(PRIO_PROCESS,getpid(),getpriority(PRIO_PROCESS,0)-1);}//进程处理信号SIGTNT的方法,将优先级加1voidhandler2(){setpriority(PRIO_PROCESS,getpid(),getpriority(PRIO_PROCESS,0)+1);}intmain(intargc,
3、char*argv[]){intpid;//存放进程号structsched_paramp;//设置调度策略时使用的数据结构//父进程循环报告其优先数和调度策略if((pid=fork())>0){signal(SIGTSTP,handler1);//注册处理ctrl+z的信号量signal(SIGINT,handler2);//注册处理ctrl+c的信号量setpriority(PRIO_PROCESS,pid,10);//设置子进程优先数setpriority(PRIO_PROCESS,getpid(),10);//设置父进程优先数sleep(1);//不
4、断循环输出各自进程号、优先数和调度策略while(1){printf("ParentPID=%dpriority=%dpolicyis%d",getpid(),getpriority(PRIO_PROCESS,0),sched_getscheduler(getpid()));sleep(3);}}//子进程循环报告其优先数和调度策略else{signal(SIGTSTP,handler1);//注册处理ctrl+z的信号量signal(SIGINT,handler2);//注册处理ctrl+c的信号量//不断循环输出各自进程号、优先数和调度策略while(
5、1){printf("ChildPID=%dpriority=%dpolicyis%d",getpid(),getpriority(PRIO_PROCESS,0),sched_getscheduler(pid));sleep(3);}exit(EXIT_SUCCESS);}returnEXIT_SUCCESS;}(3)再建立程序的Makeflie文件:srcs=psched.cobjs=psched.oopts=-g-call:pschedpsched:$(objs)gcc$(objs)-opschedpsched.o:$(srcs)gcc$(opts)$
6、(srcs)clean:rmpsched*.o(4)使用make命令编译连接生成可执行文件psched:$gmakegcc-g-cpsched.cgccpsched.o-opsched(5)改变到root用户$su口令:123#(5)运行psched:#./psched1.4实验体会(1)错误的尝试:由于自己对于C语言的了解不足,有思路但却无法实现代码。(2)键盘的输入对两进程都产生影响,为了验证这一点,特意编写一变形程序,如下:/**Filename:psched.c独立实验*/#include#include#i
7、nclude#include#include#include#include#include#include//进程处理信号SIGTSTP的方法,将优先级减1voidhandler1(){setpriority(PRIO_PROCESS,getpid(),getpriority(PRIO_PROCESS,0)-1);}//进程处理信号SIGTNT的方法,将优先级加1voidhandler2(){setprior
8、ity(PRIO_PROCESS,ge