西安郵電大學。
院系名称: 计算机学院。
专业名称: 软件工程。
班级: 1104
学生姓名: 赵大伟。
学号(8位):04113124
指导教师: 舒新峰。
设计起止时间:2013.11.10—2013.11.20
1) 通过观察、分析实验现象,深入理解进程及进程在调度执行和内存空间等方面的特点,掌握在posix 规范中fork和kill系统调用的功能和使用。
2) 通过观察、分析实验现象,深入理解线程及线程在调度执行和内存空间等方面的特点,并掌握线程与进程的区别。掌握posix 规范中pthread_create() 函数的功能和使用方法。
3) 通过观察、分析实验现象,深入理解理解互斥锁的原理及特点掌握在posix 规范中的互斥函数的功能及使用方法。
二。 设计内容。
1)创建一个进程,父子进程相互交替执行,输出子进程号和进程id
2)创建三个线程,输出三个线程运行的次数和当前主线程运行次数以及三个线程次数和。
3)使用posix 规范中的互斥函数,实现加锁解锁。
4)信号量机制的方法,实现进程的加锁解锁,且不产生死锁。
1)生成一个进程,通过switch()判断,来确定生成的进程是子进程还是父进程,还是错误的;子进程号定义为全局变量;利用kill()杀死进程,退出程序。
2)利用循环创建三个线程,do while循环,每运行一次:输出三个线程运行的次数,当输入q时候,退出程序。
3)创建一个线程,在循环中进行申请资源,释放资源,加锁,以及解锁的操作,熟悉互斥锁的工作方式。
4.详细设计。
1)进程交替进行。
当程序执行到for(i = 0; i < child_proc_number; i++)循环后,调用fork()函数创建第一个子进程,然后父进程与该子进程交替执行,当子进程抢到cpu时继续往下执行case 0:语句中的do_something();语句,执行死循环for(;;输出该进程的相关内容,并sleep,给其他进程抢占cpu的机会。这样就会使得进程交替的执行。
2)kill命令杀死进程。
while ((ch = getchar())q
if (isdigit(ch))
for(i=0;i<10;i++)
return;
3)进程运行次数。
do while ((ch = getchar())q');
4)进程加锁,解锁。
a、for(i = 0; i < loop_times; i++)
pthread_mutex_destroy(&mutex1);
pthread_mutex_destroy(&mutex2);
b、for (i = 0; i < loop_times; +i)
sem_destroy(&s1);
sem_destroy(&s2);
1) 进程。
各进程交替执行。无确定顺序。
当输入要删除的进程编号时会调用一次kill,最后输入q结束时会调用一次kill。
输入q则显示“已终止”,整个程序执行结束。
2)线程。输出个各线程运行的次数,main_counter和sum的值。
3)互斥锁。
死锁:1)posix 规范中fork和kill都是有返回值的,为了程序更加严谨,应该在kill命令也使用接受返回值,如果返回值为-1,则退出。
2)程序退出时候使用了return(),但是书上介绍调用exit()结束的方式会比较好,这个需要以后注意。
3)在有些地方,不应该使用死循环,虽然最后可以q退出,但是这样会导致cpu利用率很大。
在进程,线程,互斥锁编程序以后,自己对系统的运行以及管理有了初步的了解,也明白了进程和线程都是操作系统的程序运行的基本单元,明白了进程的创建,杀死,父子进程的关系,线程的并发执行,互斥锁的用法,但是自己还是知道自己在这些方面的使用还不是特别的熟练,自己还需要在以后的学习中,多多的写这方面的程序,以达到熟练掌握进程,线程,互斥锁的知识。7、**。
#include <>
#include
#include <>
#include <>
#include <>
#include<>
#define max_child_number 10
#define sleep_interval 2
int proc_number=0;
void do_something();
main(int argc, char* ar**)
printf("proc_num=%p",&proc_number);
int child_proc_number = max_child_number;
int i, ch;
pid_t child_pid;
pid_t pid[10]=;
if (argc > 1)
for (i=0; i child_pid=fork();
switch(child_pid)
case -1:perror("fork() error");break;
case 0: proc_number=i; do_something();break;
default: pid[i]=child_pid; break;
while ((ch = getchar())q
if (isdigit(ch))
for(i=0;i<10;i++)
void do_something()
for (i=0; ipthread_create(&pthread_id[i], null, (void*)thread_worker, (void*)i);
do while ((ch = getchar())q');
return 0;
void* thread_worker(void* p) {
int thread_num;
thread_num=(int)p;
操作系统课程设计报告
课程设计。课程名称操作系统。题目名称多级文件系统 2 学生学院计算机学院 专业班级。学号。学生姓名。指导教师。年月日。目录。一 课程设计 6 二 开发工具及环境 6 三 设计内容 6 四 结构图 8 五 部分 9 六 运行截图 11 七 参考文献 15 八 心得体会 15 本课程设计要求设计一个模拟...
操作系统课程设计报告
实验一进程管理。一 实验目的。1 开发一个函数,建立进程控制块和资源控制块结构,并实现相关数据结构的初始化。2 开发一系列操作,由进程调用这些操作,达到控制进程申请或释放各种资源的目的。通过实验理解进程的概念,进程的组成 pcb结构 进程的并发执行和操作系统进行进程管理的相关原语 主要是进程的创建 ...
操作系统课程设计报告
操作系统。课程设计报告。2013 2014 第二学期 课程名称 操作系统课程设计。设计题目 进程通信 姓名。学号。班级。指导老师。2014 年 6 月 18 号。1 设计目的与功能。一 设计目的 通过设计和调试一个基于消息的通讯系统,来实现进程之间的直接或间接通讯,使学生对进程间的通讯机制 进程间的...