山东大学软件工程OS实验3实验报告.doc_第1页
山东大学软件工程OS实验3实验报告.doc_第2页
山东大学软件工程OS实验3实验报告.doc_第3页
山东大学软件工程OS实验3实验报告.doc_第4页
山东大学软件工程OS实验3实验报告.doc_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验三 进程调度算法实验姓名: 班级: 学号:1.1实验目的加深对进程调度概念的理解,体验进程调度机制的功能,了解 Linux 系统中进程调度策略的使用方法。 练习进程调度算法的编程和调试技术。1.2试验环境:linux系统1.3实验步骤(1)在新建文件夹中建立以下名为 psched.c的 C语言程序/* Filename : psched.c 独立实验*/#include #include #include #include #include #include #include #include #include /进程处理信号SIGTSTP的方法,将优先级减1void handler1()setpriority(PRIO_PROCESS,getpid(),getpriority(PRIO_PROCESS,0)-1);/进程处理信号SIGTNT的方法,将优先级加1void handler2()setpriority(PRIO_PROCESS,getpid(),getpriority(PRIO_PROCESS,0)+1);int main(int argc, char *argv) int pid; /存放进程号 struct sched_param p; /设置调度策略时使用的数据结构 /父进程循环报告其优先数和调度策略 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); /不断循环输出各自进程号、优先数和调度策略 while(1) printf(Parent PID = %d priority = %d policy is %dn,getpid(),getpriority(PRIO_PROCESS,0),sched_getscheduler(getpid(); sleep(3); /子进程循环报告其优先数和调度策略 else signal(SIGTSTP,handler1);/注册处理ctrl+z的信号量 signal(SIGINT,handler2);/注册处理ctrl+c的信号量 /不断循环输出各自进程号、优先数和调度策略 while(1) printf(Child PID = %d priority = %d policy is %dn,getpid(),getpriority(PRIO_PROCESS,0),sched_getscheduler(pid);sleep(3); exit( EXIT_SUCCESS); return EXIT_SUCCESS;(3) 再建立程序的Makeflie文件:srcs = psched.cobjs = psched.oopts = -g -call: pschedpsched: $(objs)gcc $(objs) -o pschedpsched.o: $(srcs)gcc $(opts) $(srcs)clean:rm psched *.o(4) 使用make命令编译连接生成可执行文件psched:$ gmakegcc -g -c psched.cgcc psched.o -o psched(5) 改变到 root 用户$ su口令:123#(5) 运行psched:# ./psched1.4实验体会(1) 错误的尝试:由于自己对于C语言的了解不足,有思路但却无法实现代码。(2) 键盘的输入对两进程都产生影响,为了验证这一点,特意编写一变形程序,如下:/* Filename : psched.c 独立实验*/#include #include #include #include #include #include #include #include #include /进程处理信号SIGTSTP的方法,将优先级减1void handler1()setpriority(PRIO_PROCESS,getpid(),getpriority(PRIO_PROCESS,0)-1);/进程处理信号SIGTNT的方法,将优先级加1void handler2()setpriority(PRIO_PROCESS,getpid(),getpriority(PRIO_PROCESS,0)+1);/进程处理信号SIGTNT的方法,什么都不做void handler3()/进程处理信号SIGTSTP的方法,什么都不做void handler4()int main(int argc, char *argv) int pid; /存放进程号 /struct sched_param p; /设置调度策略时使用的数据结构 /父进程循环报告其优先数和调度策略 if(pid=fork() 0) signal(SIGTSTP,handler1);/注册处理ctrl+z的信号量 signal(SIGINT,handler3);/注册处理ctrl+c的信号量 setpriority(PRIO_PROCESS,pid,10);/ 设置子进程优先数 setpriority(PRIO_PROCESS,getpid(),10);/ 设置父进程优先数 sleep(1); /不断循环输出各自进程号、优先数和调度策略 while(1) printf(Parent PID = %d priority = %d policy is %dn,getpid(),getpriority(PRIO_PROCESS,0),sched_getscheduler(getpid(); sleep(1); /子进程循环报告其优先数和调度策略 else signal(SIGTSTP,handler4);/注册处理ctrl+z的信号量 signal(SIGINT,handler2);/注册处理ctrl+c的信号量 sleep(1); /不断循环输出各自进程号、优先数和调度策略 while(1) printf(Child PID = %d priority = %d policy is %dn,getpid(),getpriority(PRIO_PR

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论