操作系统课程设计进程创建系统说明书.docx

上传人:b****5 文档编号:6851272 上传时间:2023-01-11 格式:DOCX 页数:15 大小:84.22KB
下载 相关 举报
操作系统课程设计进程创建系统说明书.docx_第1页
第1页 / 共15页
操作系统课程设计进程创建系统说明书.docx_第2页
第2页 / 共15页
操作系统课程设计进程创建系统说明书.docx_第3页
第3页 / 共15页
操作系统课程设计进程创建系统说明书.docx_第4页
第4页 / 共15页
操作系统课程设计进程创建系统说明书.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

操作系统课程设计进程创建系统说明书.docx

《操作系统课程设计进程创建系统说明书.docx》由会员分享,可在线阅读,更多相关《操作系统课程设计进程创建系统说明书.docx(15页珍藏版)》请在冰豆网上搜索。

操作系统课程设计进程创建系统说明书.docx

操作系统课程设计进程创建系统说明书

*******************

实践教学

*******************

 

兰州理工大学

计算机与通信学院

2010年秋季学期

操作系统原理课程设计

 

题目:

进程创建系统

专业班级:

计算机科学与技术2班

姓名:

桌面小箭头

学号:

0123456789

指导老师:

兰州理工

成绩:

目录

前言3

摘要4

正文5

一、设计思想5

二、实验目的6

三、实验内容6

四、实验步骤7

1、需求分析7

2、概要设计7

3、各模块的伪码算法8

(1).使用系统调用fork()创建两个子进程的程序8

(2).修改程序之后,每一个进程循环显示一句话的程序:

9

五.调试分析11

总结15

致谢16

参考文献17

附录:

程序源代码18

前言

本课程设计是实现进程创建系统,我们还将学到有关进程的相关概念。

Linux操作系统是面向多用户的.在同一时间可以有许多用户向操作系统发出各种命令.那么操作系统是怎么实现多用户的环境呢?

在现代的操作系统里面,都有程序和进程的概念.那么什么是程序,什么是进程呢?

通俗的讲程序是一个包含可以执行代码的文件,是一个静态的文件.而进程是一个开始执行但是还没有结束的程序的实例.就是可执行文件的具体实现.一个程序可能有许多进程,而每一个进程又可以有许多子进程.依次循环下去,而产生子孙进程.当程序被系统调用到内存以后,系统会给程序分配一定的资源(内存,设备等等)然后进行一系列的复杂操作,使程序变成进程以供系统调用.在系统里面只有进程没有程序,为了区分各个不同的进程,系统给每一个进程分配了一个ID(就象我们的身份证)以便识别.为了充分的利用资源,系统还对进程区分了不同的状态.将进程分为新建,运行,阻塞,就绪和完成五个状态.新建表示进程正在被创建,运行是进程正在运行,阻塞是进程正在等待某一个事件发生,就绪是表示系统正在等待CPU来执行命令,而完成表示进程已经结束了,系统正在回收资源。

 

摘要

  创建一个进程的系统调用很简单.我们只要调用fork函数就可以了. 当一个进程调用了fork以后,系统会创建一个子进程.这个子进程和父进程不同的地方只有他的进程ID和父进程ID,其他的都是一样.就象符进程克隆(clone)自己一样.当然创建两个一模一样的进程是没有意义的.为了区分父进程和子进程,我们必须跟踪fork的返回值.当fork掉用失败的时候(内存不足或者是用户的最大进程数已到)fork返回-1,否则fork的返回值有重要的作用.对于父进程fork返回子进程的ID,而对于fork子进程返回0.我们就是根据这个返回值来区分父子进程的.父进程为什么要创建子进程呢?

前面我们已经说过了Linux是一个多用户操作系统,在同一时间会有许多的用户在争夺系统的资源.有时进程为了早一点完成任务就创建子进程来争夺资源.一旦子进程被创建,父子进程一起从fork处继续执行,相互竞争系统的资源.有时候我们希望子进程继续执行,而父进程阻塞直到子进程完成任务.这个时候我们可以调用wait或者waitpid系统调用。

 

关键词:

进程的创建,进程的概念

 

正文

一、设计思想

进程创建系统的实现

1设计目的

(1)加深对操作系统系统调用功能和进程概念的理解,明确进程和程序的区别。

(2)掌握Linux中进程的创建方法,进一步理解进程的并发执行。

 

2设计要求

1、编写一段程序,使用系统调用fork()创建两个子进程。

当此程序运行时,在系统中有一个父进程和两个子进程活动。

让每一个进程在屏幕上显示一个字符:

父进程显示'a',子进程分别显示字符'b'和字符'c'。

试观察记录屏幕上的显示结果,并分析原因。

2、修改上述程序,每一个进程循环显示一句话。

子进程显示'daughter…'及'son……',父进程显示'parent……',观察结果,分析原因。

 

二、实验目的

(1)加深对操作系统系统调用功能和进程概念的理解,明确进程和程序的区别。

(2)掌握Linux中进程的创建方法,进一步理解进程的并发执行。

(3)学生通过该题目的设计过程,可以初步掌握进程创建系统的原理、软件开发方法并提高解决实际问题的能力。

 

三、实验内容

1、了解UNIX的命令及使用格式,熟悉UNIX/LINUX的常用基本命令,练习并掌握UNIX提供的vi编辑器来编译C程序,学会利用gcc、gdb编译、调试C程序。

2、编写程序,使用系统调用fork()创建两个子进程。

当此程序运行时,在系统中有一个父进程和两个子进程活动。

让每一个进程在屏幕上显示一个字符,如父进程显示'a',子进程分别显示字符'b'和字符'c'。

试观察记录屏幕上的显示结果,并分析原因;修改程序,每一个进程循环显示一句话,如子进程显示'daughter…'及'son……',父进程显示'parent……',观察结果,分析原因。

四、实验步骤

a)需求分析

编写一段程序,使用系统调用fork()创建两个子进程。

当此程序运行时,在系统中有一个父进程和两个子进程活动。

让每一个进程在屏幕上显示一个字符:

父进程显示'a',子进程分别显示字符'b'和字符'c'。

修改上述程序,每一个进程循环显示一句话。

子进程显示'daughter…'及'son……',父进程显示'parent……',观察结果,分析原因。

2、概要设计

本程序用到的抽象的数据有:

intp1,p2;inti;

主程序的流程图如下图(图一):

图一

 

3、各模块的伪码算法

(1).使用系统调用fork()创建两个子进程的程序

#include

#include

#include

intchild1();

intchild2();

intmain(intargc,char**argv)

{

pid_tchild_pid;

inti,j;

if((child_pid=fork())==-1){

return0;

}

if(child_pid==0)

returnchild1();

else{

if((child_pid=fork())==-1){

return0;

}

if(child_pid==0)

returnchild2();

else{

{

printf("a");

}

return0;

}

}

}

intchild1()

{

{

printf("b");

fflush(stdout);

}

return0;

}

intchild2()

{

{

printf("c");

}

return0;

}

(2).修改程序之后,每一个进程循环显示一句话的程序:

#include

#include

#include

intchild1();

intchild2();

intmain(intargc,char**argv)

{

pid_tchild_pid;

inti,j;

if((child_pid=fork())==-1){

return0;

}

if(child_pid==0)

returnchild1();

else{

if((child_pid=fork())==-1){

return0;

}

if(child_pid==0)

returnchild2();

else{

for(i=0;i<3;i++){

printf("Parent%d\n",i);

printf("Parent");

}

return0;

}

}

}

intchild1()

{

inti,j;

for(i=0;i<3;i++){

printf("daughter%d\n",i);

printf("daughter");

fflush(stdout);

}

return0;

}

intchild2()

{

inti,j;

for(i=0;i<3;i++){

printf("son%d\n",i);

printf("son");

}

return0;

}

 

五、结果分析

1.使用系统调用fork()创建两个子进程的程序的调试结果如下图:

图5-1运行结果图a

图5-2运行结果图b

图5-3运行结果图c

由上面的三个图可以看出来由于程序的并发执行,同一个程序运行的结果会有所区别。

2.修改程序之后,每一个进程循环显示一句话的调试结果如下图:

 

图5-4修改程序后运行结果a

 

图5-5修改程序后运行结果b

由上面的图可以看出来由于程序的并发执行,同一个程序运行的结果会有所区别。

 

总结

在这两周的操作系统课程设计中,我的题目是:

进程创建系统,,这两周课程设计中,通过该题目的设计过程,学会如何把学到的知识用于解决实际问题,锻炼了自己动手的能力。

一个人要完成所有的工作是非常困难和耗时的。

在以后的学习中我会更加注意各个方面的能力的协调发展。

在课程设计时遇到了很多的问题,在老师的帮助和对各种资料的查阅中将问题解决,培养了我自主动手,独立研究的能力,为今后在学习工作中能更好的发展打下了坚实的基础。

这次课程设计加强了我对计算机操作系统的认识,对我个人而言是对所学课程内容掌握情况的一次自我验证。

在其中我学习到了很多平时书本中无法学到的东西,积累了经验,锻炼了自己分析问题,解决问题的能力,并学会了如何将所学的各课知识融会,组织,配合学习,两周中我收益很大,学到很多。

 

致谢

能够完成这次操作系统课程设计,我要感谢我的指导老师刘嘉,她在我的课程设计过程中提出了指导性的方案和架构,并指引我阅读相关的资料和书籍,使我的能力得到了提高,养成了科学、严谨学习习惯。

在本次课程设计当中,有很多同学帮助我完成对程序的测试,对我的课程设计的完成起了不小的作用,在他们的帮助下,我才能够比较好的完成这次课程设计,在此一并表示感谢。

 

参考文献

1.汤子瀛,哲凤屏.《计算机操作系统》.西安电子科技大学学出版社.

2.王清,李光明.《计算机操作系统》.冶金工业出版社.

3.孙钟秀等.《操作系统教程》.高等教育出版社

4.曾明. 《Linux操作系统应用教程》.陕西科学技术出版社.

5.张丽芬,刘利雄.《操作系统实验教程》.清华大学出版社.

6.孟静, 《操作系统教程--原理和实例分析》.高等教育出版社

7.周长林,《计算机操作系统教程》.高等教育出版社

8.张尧学,《计算机操作系统教程》,清华大学出版社

9.任满杰,《操作系统原理实用教程》,电子工业出版社

附录:

程序源代码

1.使用系统调用fork()创建两个子进程的程序清单:

#include

#include

#include

intchild1();

intchild2();

intmain(intargc,char**argv)

{

pid_tchild_pid;

inti,j;

if((child_pid=fork())==-1){

return0;

}

if(child_pid==0)

returnchild1();

else{

if((child_pid=fork())==-1){

return0;

}

if(child_pid==0)

returnchild2();

else{

{

printf("a");

}

return0;

}

}

}

intchild1()

{

{

printf("b");

fflush(stdout);

}

return0;

}

intchild2()

{

{

printf("c");

}

return0;

}

 

2.修改程序之后,每一个进程循环显示一句话的程序清单:

#include

#include

#include

intchild1();

intchild2();

intmain(intargc,char**argv)

{

pid_tchild_pid;

inti,j;

if((child_pid=fork())==-1){

return0;

}

if(child_pid==0)

returnchild1();

else{

if((child_pid=fork())==-1){

return0;

}

if(child_pid==0)

returnchild2();

else{

for(i=0;i<3;i++){

printf("Parent%d\n",i);

printf("Parent");

}

return0;

}

}

}

intchild1()

{

inti,j;

for(i=0;i<3;i++){

printf("daughter%d\n",i);

printf("daughter");

fflush(stdout);

}

return0;

}

intchild2()

{

inti,j;

for(i=0;i<3;i++){

printf("son%d\n",i);

printf("son");

}

return0;

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > 司法考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1