预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共12页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

西安郵電大學 操作系统设计报告 题目:进程、线程、互斥锁 院系名称:计算机学院 专业名称:软件工程 班级: 学生姓名: 学号(8位): 指导教师:舒新峰 设计起止时间:2013.11.10—2013.11.20 设计目的 通过观察、分析实验现象,深入理解进程及进程在调度执行和内存空间等方面的特点,掌握在POSIX规范中fork和kill系统调用的功能和使用。 通过观察、分析实验现象,深入理解线程及线程在调度执行和内存空间等方面的特点,并掌握线程与进程的区别。掌握POSIX规范中pthread_create()函数的功能和使用方法。 通过观察、分析实验现象,深入理解理解互斥锁的原理及特点掌握在POSIX规范中的互斥函数的功能及使用方法。 二.设计内容 1)创建一个进程,父子进程相互交替执行,输出子进程号和进程ID。 2)创建三个线程,输出三个线程运行的次数和当前主线程运行次数以及三个线程次数和。 3)使用POSIX规范中的互斥函数,实现加锁解锁。 4)信号量机制的方法,实现进程的加锁解锁。 概要设计 1)生成一个进程,通过switch()判断,来确定生成的进程是子进程还是父进程,还是错误的;子进程号定义为全局变量;利用kill()杀死进程,退出程序。 2)利用循环创建三个线程,dowhile循环,每运行一次:输出三个线程运行的次数,当输入q时候,退出程序。 3)创建一个线程,在循环中进行申请资源,释放资源,加锁,以及解锁的操作,熟悉互斥锁的工作方式。 详细设计 1)进程交替进行 当程序执行到for(i=0;i<child_proc_number;i++)循环后,调用fork()函数创建第一个子进程,然后父进程与该子进程交替执行,当子进程抢到cpu时继续往下执行case0:语句中的do_something();语句,执行死循环for(;;)输出该进程的相关内容,并sleep,给其他进程抢占cpu的机会。这样就会使得进程交替的执行。 kill命令杀死进程 while((ch=getchar())!='q'){ if(isdigit(ch)){ i=ch-'0';kill(pid[i],SIGTERM); } } for(i=0;i<10;i++){ kill(pid[i],SIGTERM); } return; } 进程运行次数 do{unsignedlonglongsum=0; for(i=0;i<MAX_THREAD;i++){ sum+=counter[i]; printf("%llu\n",counter[i]); } printf("%llu/%llu\n",main_counter,sum); }while((ch=getchar())!='q'); 进程加锁,解锁 a、for(i=0;i<LOOP_TIMES;i++) { pthread_mutex_lock(&mutex1); pthread_mutex_lock(&mutex2); critical_section(1,i); pthread_mutex_unlock(&mutex2); pthread_mutex_unlock(&mutex1); } pthread_mutex_destroy(&mutex1); pthread_mutex_destroy(&mutex2); b、for(i=0;i<LOOP_TIMES;++i){ sem_wait(&S1); sem_wait(&S2); critical_section(1,i); sem_post(&S1); sem_post(&S2); } sem_destroy(&S1); sem_destroy(&S2); 五.测试数据及运行结果 1、进程. 各进程交替执行,无确定顺序。 当输入要删除的进程编号时会调用一次kill,最后输入q结束时会调用一次kill。 输入q则显示“已终止”,整个程序执行结束。 2)线程 输出个各线程运行的次数,main_counter和sum的值。 3)互斥锁 2.异常测试数据及运行结果 死锁: 六.调试情况,设计技巧及体会 1.改进方案 1)POSIX规范中fork和kill都是有返回值的,为了程序更加严谨,应该在kill命令也使用接受返回值,如果返回值为-1,则退出。 2)程序退出时候使用了return(),但是书上介绍调用exit()结束的方式会比较好,这个需要以后注意。 3)在有些地方,不应该使用死循环,虽然最后可以q退出,但是这样会导致CPU利用率很大。 2.体会 在进程,线程,互斥锁编程序以后,自己对系统的运行以及管理有了初步的了解,也明白了进程和线程都是操作