欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    操作系统实验报告(共8页).doc

    • 资源ID:8039746       资源大小:133.50KB        全文页数:8页
    • 资源格式: DOC        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    操作系统实验报告(共8页).doc

    精选优质文档-倾情为你奉上深 圳 大 学 实 验 报 告 课程名称: 操作系统 实验项目名称: 进程控制 学院: 软件学院 专业: 软件工程 指导教师: 梁正平 报告人: 文 成 学号: 班级: 2 实验时间: 2013. 03. 31 实验报告提交时间: 2013. 04. 24 教务处制一. 实验目的通过进程的创建、撤销和运行加深对进程概念和进程并发执行的理解,明确进程与程序之间的区别。二. 实验要求1 实现对进程生命周期全过程的管理,包括进程的创建、撤销、执行、阻塞、唤醒、挂起、激活等。2 实现对多个进程并发执行的管理。三. 方法、步骤1、 函数说明l fork(建立一个新的进程)定义函数 pid_t fork(void);函数说明 fork()会产生一个新的子进程,其子进程会复制父进程的数据与堆栈空间,并继承父进程的用户代码,组代码,环境变量、已打开的文件代码、工作目录和资源限制等。 返回值 如果fork()成功则在父进程会返回新建立的子进程代码(PID),而在新建立的子进程中则返回0。如果fork 失败则直接返回-1,失败原因存于errno中。l waitpid(等待子进程中断或结束)定义函数 pid_t waitpid(pid_t pid,int * status,int options);函数调用 waitpid(pid, NULL, 0);函数说明 waitpid()会暂时停止目前进程的执行,直到有信号来到或子进程结束。如果在调用waitpid()时子进程已经结束,则wait()会立即返回子进程结束状态值。子进程的结束状态值会由参数status返回,而子进程的进程识别码也会一快返回。如果不在意结束状态值,则参数status可以设成NULL。参数pid为欲等待的子进程识别码,其他数值意义如下:pid<-1 等待进程组识别码为pid绝对值的任何子进程。pid=-1 等待任何子进程,相当于wait()。pid=0 等待进程组识别码与目前进程相同的任何子进程。pid>0 等待任何子进程识别码为pid的子进程。返回值 如果执行成功则返回子进程识别码(PID),如果有错误发生则返回-1。失败原因存于errnol getpid(取得进程识别码) 定义函数 pid_t getpid(void);函数说明 getpid()用来取得目前进程的进程识别码,许多程序利用取到的此值来建立临时文件,以避免临时文件相同带来的问题。返回值 目前进程的进程识别码l exit(正常结束进程) 定义函数 void exit(int status);函数说明 exit()用来正常终结目前进程的执行,并把参数status返回给父进程,而进程所有的缓冲区数据会自动写回并关闭未关闭的文件。l execl(执行文件)定义函数 int execl(const char * path,const char * arg,.);函数说明 execl()用来执行参数path字符串所代表的文件路径,接下来的参数代表执行该文件时传递过去的argv(0)、argv1,最后一个参数必须用空指针(NULL)作结束。返回值 如果执行成功则函数不会返回,执行失败则直接返回-1,失败原因存于errno中。调用ls命令范例: execl("/bin/ls", "/bin/ls", "-l" , "/etc", NULL);启动VC+等开发平台,创建我们所需的程序文件并保存到CYGWIN的用户文件夹下四. 实验过程及内容实验指导例程2:#include <unistd.h>#include <stdarg.h>#include <time.h>#include <sys/types.h>#include <sys/wait.h>#include <stdio.h>#include <stdlib.h>int tprintf (const char*fmt,.);int main(void)int i=0,j=0;pid_t pid;printf("Hello from Parent Process,PID is %d.n",getpid();pid=fork();printf("process %d | My parent PID is %d.n",getpid(),getppid();sleep(1);if(pid=0)/子进程执行sleep(1);for(i=0;i<3;i+)printf("Hello from THE child process %d.%d timesn",getpid(),i+1);sleep(1);else if(pid!=-1)/父进程tprintf("Parent forked one child process-%d.n",pid); pid=fork(); printf("process %d | My parent PID is %d.n",getpid(),getppid(); sleep(1); if(pid=0)sleep(1);for(i=0;i<3;i+)printf("Hello from child process %d.%d timesn",getpid(),i+1);sleep(1);else if(pid!=-1)tprintf("Parent forked one child process-%d.n",pid); tprintf("Parent is waiting for child to exit.n");waitpid(pid,NULL,0);tprintf("child process has exited.n");tprintf("parent had exited.n");else tprintf("everything was done whitout error.n");return 0;int tprintf(const char*fmt,.)va_list args;struct tm *tstruct;time_t tsec;tsec=time(NULL);tstruct=localtime(&tsec);printf("%02d:%02d:%02d:%5d|",tstruct->tm_hour,tstruct->tm_min,tstruct->tm_sec,getpid();va_start(args,fmt);return vprintf(fmt,args);模仿例程,编写一段程序(创建两个子进程):#include <unistd.h>#include <stdarg.h>#include <time.h>#include <sys/types.h>#include <sys/wait.h>#include <stdio.h>#include <stdlib.h>int tprintf(const char *fmt,.);int main(void)pid_t pid1,pid2;pid1=fork();if(pid1 = 0) /子进程sleep(5);tprintf("Hello from Child Process1!n");tprintf("my parent is %d.n",getppid();tprintf("I am calling exec.n");execl("/bin/ps","-a",NULL);/ execl("/bin/ls","-l","/etc",NULL);tprintf("You should never see this because the child is alredy gone.n");else if(pid1 != -1) /父进程 pid2=fork(); /用父进程创建第二个子进程if(pid2 = 0)sleep(10); /时间设长于上面的睡眠时间,保证两个进程的有序输出tprintf("Hello from Child Process1!n");tprintf("my parent is %d.n",getppid();tprintf("I am calling exec.n");execl("/bin/ps","-a",NULL);/ execl("/bin/ls","-l","/etc",NULL);tprintf("You should never see this because the child is alredy gone.n"); else if(pid2 != -1)tprintf("Hello from Parent,pid %d.n",getpid();sleep(1);tprintf("Parent forked process1 %d.n",pid1);sleep(1);tprintf("Parent forked process2 %d.n",pid2);sleep(1);tprintf("Patent is waiting for child to exit.n");waitpid(pid1, NULL,0);waitpid(pid2, NULL,0);tprintf("Parent had exited.n"); elsetprintf("Everything was done without error.n");return 0;int tprintf(const char *fmt,.)va_list args;struct tm *tstruct;time_t tsec;tsec = time(NULL);tstruct = localtime (&tsec);printf("%02d:%02d:%02d:% 5d|",tstruct->tm_hour,tstruct->tm_min,tstruct->tm_sec,getpid();va_start(args,fmt);return vprintf(fmt,args);运行结果:分析:运用例3的代码,加上一个子进程的嵌套来实现两个子进程的创建,但是代码重用率较高,并且不适于创建多个进程。五. 实验结论多个进程可以并发运行,父进程可以创建子进程。这一次的实验是通过参考实验书的指导做出来的,有一些语句还是不是很清楚,一些语句的实际意义也不是很明白,实验的一些更高要求没做出来,通过以后的实验我相信可以更加清楚地了解这些创建进程的函数。指导教师批阅意见:成绩评定: 指导教师签字: 年 月 日备注:注:1、报告内的项目或内容设置,可根据实际情况加以调整和补充。 2、教师批改学生实验报告时间应在学生提交实验报告时间后10日内。专心-专注-专业

    注意事项

    本文(操作系统实验报告(共8页).doc)为本站会员(飞****2)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开