欢迎来到天天文库
浏览记录
ID:8855406
大小:33.00 KB
页数:4页
时间:2018-04-09
《西安邮电大学操作系统实验报告》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、西安邮电大学(计算机学院)课内实验报告实验名称:专业名称:软件工程班级:1101班学生姓名:学号(8位):04113027指导教师:舒新峰实验日期:2013年12月5日一.实验目的及实验环境(一)实验环境Linux操作系统(二)实验目的实验1掌握Linux基本命令和开发环境1.掌握常用的Linuxshell命令;2.掌握编辑环境VIM;3.掌握编译环境gcc及跟踪调试工具gdb。实验2进程通过观察、分析实验现象,深入理解进程及进程在调度执行和内存空间等方面的特点,掌握在POSIX规范中fork和k
2、ill系统调用的功能和使用。实验3线程通过观察、分析实验现象,深入理解线程及线程在调度执行和内存空间等方面的特点,并掌握线程与进程的区别。掌握POSIX规范中pthread_create()函数的功能和使用方法。实验4互斥通过观察、分析实验现象,深入理解理解互斥锁的原理及特点掌握在POSIX规范中的互斥函数的功能及使用方法。二.实验内容实验21.你最初认为运行结果会怎么样?答:会持续输出0-9号进程,直到输入数字键+回车,则会杀死该进程,接下来的输出将不会有该进程号,当输入q+回车,则退出程序。2
3、.实际的结果什么样?有什么特点?试对产生该现象的原因进行分析。答:实际的结果与预期差不多。因输入进程总数20大于设定的最大进程数,因此按进程数10来处理。随机输出0-9号进程,sleep(SLEEP_INTERVAL),循环输出,输入数字键,则会杀死该数字对应的进程,直到输入q退出循环,然后杀死本组所有进程。分析:每创建一个子进程时,将其pid存储在pid[i]中,i存储在proc_number,然后调用死循环函数do_something(),输出该进程的代号proc_number;当输入数字键时
4、,主进程会执行kill(pid[ch-'0'],SIGTERM),从而杀死(ch-‘0’)号进程。当输入q时循环退出,kill(0,SIGTERM),杀死本组所有进程。程序退出。3.proc_number这个全局变量在各个子进程里的值相同吗?为什么?答:proc_number这个全局变量在各个子进程里的值相同,因为子进程相互独立,资源互不影响。4.kill命令在程序中使用了几次?每次的作用是什么?执行后的现象是什么?答:kill命令在程序中使用了2次:kill(pid[ch-'0'],SIGTER
5、M)和kill(0,SIGTERM);第一次是杀死该进程号pid[ch-‘0’],执行后接下来的结果中不会有该进程号,用另一个终端打开,使用命令psaux
6、grepprocess,因为子进程先于父进程退出,则被杀死的进程为僵死状态,但我加了行代码wait(&pid[ch-'0']),就会使该子进程真正结束。第二次是杀死本组所有进程。即主进程以及它创建的所有子进程。执行后程序退出,进程结束。1.使用kill命令可以在进程的外部杀死进程。进程怎样能主动退出?这两种退出方法哪种更好一些。答:进程在mai
7、n函数中return,或调用exit()函数都可以正常退出。而使用kill命令则是异常退出。当然是正常退出比较好,若在子进程退出前使用kill命令杀死其父进程,则系统会让init进程接管子进程。当用kill命令使得子进程先于父进程退出时,而父进程又没有调用wait函数等待子进程结束,子进程处于僵死状态,并且会一直保持下去,直到系统重启。子进程处于僵死状态时,内核只保存该进程的必要信息以被父进程所需,此时子进程始终占着资源,同时减少了系统可以创建的最大进程数。实验31.你最初认为前三列数会相等吗?最
8、后一列斜杠两边的数字是相等,还是大于或者小于关系?答:我认为前三列数不会相等,因为三个线程运行次数是随机的,结果不可预料,当然counter[i]值不会一定相等。而我认为main_counter与sum值应该是相等的。因为都是三个线程的counter之和。2.最后的结果如你所料吗?有什么特点?试对原因进行分析。答:实验结果是前三列数确实不相等。不过main_counter与sum的值也不相等,main_counter9、()函数,比如main_counter初值为0,pthread_id[0]执行之后main_counter+1,此时还未来得及将值赋给main_counter,这时的main_counter还是0;pthread_id[1]也执行这个函数,main_counter+1,若此时在1号线程将main_counter+1的值还未赋给main_counter,即这时的main_counter还是0,pthread_id[2]也来执行这个函数,main_counter+1,此时三个线程才将加
9、()函数,比如main_counter初值为0,pthread_id[0]执行之后main_counter+1,此时还未来得及将值赋给main_counter,这时的main_counter还是0;pthread_id[1]也执行这个函数,main_counter+1,若此时在1号线程将main_counter+1的值还未赋给main_counter,即这时的main_counter还是0,pthread_id[2]也来执行这个函数,main_counter+1,此时三个线程才将加
此文档下载收益归作者所有