ImageVerifierCode 换一换
格式:DOCX , 页数:19 ,大小:248.55KB ,
资源ID:1621589      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/1621589.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(级操作系统实验报告.docx)为本站会员(b****2)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

级操作系统实验报告.docx

1、级操作系统实验报告哈 尔 滨 学 院实 验 报 告课程名称: 计算机操作系统 专 业: 软件工程 班 级: 12-8 学 号: 12031801 姓 名: 常燕如 教务处制实验一 进程管理【实验目的与要求】 加深对进程概念的理解,明确进程与程序的区别。 掌握Linux进程创建及撤销的方法,进一步认识并发执行的实质。 掌握Linux系统下守护进程的创建方法。【实验原理】 Linux进程管理命令进程查看进程终止进程优先级设置 Linux进程控制函数创建和修改进程设置进程属性获取进程属性进程的退出 Linux守护进程独立启动守护进程超级守护进程守护进程的编写流程 守护进程的编写遵循特定的流程,主要包

2、括五个步骤: Step 创建子进程,退出父进程 Step 在子进程中创建新会话 Step 改变当前目录为根目录 Step 重设文件权限掩码 Step 关闭文件描述符【实验主要仪器与材料】 带Linux操作系统的PC机 GCC编译器【实验内容】 获取进程信息通过管理命令,获取系统当前执行进程的信息,包括进程名称与ID、PID和PGID等。 创建进程编程程序,实现父进程创建一个子进程,返回后父子进程都分别循环输出字符串“I am parent.”或“I am child.”5次,每输出一次延时1秒(sleep(1),然后进入下一次循环。观察并分析运行结果。然后将程序改为父子进程同步执行:子进程循环

3、输出字符串“I am child.”5次,然后父进程再循环输出字符串“I am parent.”5次。再次观察并分析运行结果。【实验步骤及实验结果分析】 实验内容1 通过进程实现及验证父进程及子进程的id号的命令ps -lg 实验内容2实现父进程创建一个子进程,返回后父子进程都分别循环输出字符串“I am parent.”或“I am child.”5次,每输出一次延时1秒(sleep(1),然后进入下一次循环。 #include#include#includeint main() pid_t pt; printf(Hello world!n); int i; pt=fork(); for(i

4、=0;i5;i+) if(pt=-1) printf(Fork error.n); else if printf(I am a parent.n);Sleep(1); else printf(I am a child.n);Sleep(1); return 0; 父子进程同步执行:子进程循环输出字符串“I am child.”5次,然后父进程再循环输出字符串“I am parent.”5次。#include#include#includeint main() pid_t pt; printf(Hello world!n); int i; pt=fork(); for(i=0;i5;i+) if

5、(pt=-1) printf(Fork error.n); else if printf(I am a parent.n); else printf(I am a child.n); return 0;【思考题】 程序和进程的区别。 (1)程序是动态的,程序是静态的:程序是有序代码的集合;进程是程序的执行。通常进程不可在计算机之间迁移;而程序通常对应着文件、静态和可以复制。 (2)进程是暂时的,程序是永久的:进程是一个状态变化的过程,程序可长久保存。 (3)进程和程序的组成不同:进程的组成包括程序、数据和进程控制块(即进程状态信息)。 (4)进程和程序的对应关系:通过多次执行,一个程序可对应多

6、个进程;通过调用关系,一个进程可包括多个程序。 Linux操作系统下有哪些进程类型。 交互进程; 批处理进程; 守护进程; 进程创建函数fork和vfork的区别。 (1)fork()用于创建一个新进程。由fork()创建的子进程是父进程的副本。即子进程 获取父进程数据空间,堆和栈的副本。父子进程之间不共享这些存储空间的部分。而vfork()创建的进程并不将父进程的地址空间完全复制到子进程中,因为子进程会立即调用exec (或exit)于是也就不会存放该地址空间。相反,在子进程调用exec或exit之前,它在父进程的空间进行。 (2)vfork()与fork()另一个区别就是:vfork保证子

7、进程先运行,在调用exec或exit之前与父进程数据是共享的,在它调用exec或exit之后父进程才可能被调度运行。 (3)vfork和fork之间的还有一个区别是:vfork保证子进程先运行,在她调用exec或exit之后父进程才可能被调度运行。如果在调用这两个函数之前子进程依赖于父进程的进一步动作,则会导致死锁。 进程的退出函数有哪些?有何区别?C程序是如何被启动终止的? exit 函数; return 函数; abort函数 _exit函数。 exit和_exit函数用于正常终止一个程序 exit先执行一些清除处理.然后进入内核清除操作包括调用执行各终止处理程序,关闭所有标准I/O流 _

8、exit立即进入内核 abort函数用于异常终止一个程序 exit是一个函数,有参数,把控制权交给系统 return是函数执行完后的返回,将控制权交给调用函数 实验二 进程通信【实验目的与要求】 了解基于信号的进程通信机制。 熟悉LINUX系统中进程之间软中断通信的基本原理。【实验原理】 一、信号 信号的基本概念 信号的发送 对信号的处理 二、所涉及的中断调用 kill() signal() wait() waitpid() lockf()【实验主要仪器与材料】 带Linux操作系统的PC机 GCC编译器【实验内容】 编写程序:用fork()创建两个子进程,再用系统调用signal()让父进程

9、捕捉键盘上来的中断信号(即按c键);捕捉到中断信号后,父进程用系统调用kill()向两个子进程发出信号,子进程捕捉到信号后分别输出下列信息后终止:Child process1 is killed by parent!Child process2 is killed by parent!父进程等待两个子进程终止后,输出如下的信息后终止:Parent process is killed! 分析利用软中断通信实现进程同步的机理。【实验步骤及实验结果分析】 编写程序:用fork()创建两个子进程,再用系统调用signal()让父进程捕捉键盘上来的中断信号(即按c键);捕捉到中断信号后,父进程用系统调用

10、kill()向两个子进程发出信号,子进程捕捉到信号后分别输出下列信息后终止:Child process1 is killed by parent!Child process2 is killed by parent!父进程等待两个子进程终止后,输出如下的信息后终止:Parent process is killed! 对软中断信号的处理分三种情况进行: (1)如果进程收到的软中断是一个已决定要忽略的信号,不做处理便立即返回。 (2)进程收到软中断后便退出。 (3)执行用户设置的软中断处理程序。【思考题】实验内容的参考程序如下,请仔细阅读、调试、分析,回答下述问题:#include #includ

11、e #include #include #include void waiting(),stop();int wait_mark; int main() int p1, p2, stdout=1; while(p1=fork() = -1); /*创建子进程p1*/ if (p1 0) while(p2=fork() = -1); /*创建子进程p2*/ if(p2 0) wait_mark=1; signal(SIGINT, stop); /*接收到c信号,转stop*/ waiting(); kill(p1, 16); /*向p1发软中断信号16*/ kill(p2, 17); /*向p2

12、发软中断信号17*/ wait(0); /*同步*/ wait(0); printf(Parent process is killed!n); exit(0); else wait_mark=1; signal(17, stop); /*接收到软中断信号17,转stop*/ waiting(); lockf(stdout, 1, 0); printf(Child process 2 is killed by parent!n); lockf(stdout, 0, 0); exit(0); else wait_mark=1;signal(16, stop); /*接收到软中断信号16,转stop

13、*/ waiting(); lockf(stdout, 1, 0); printf(Child process 1 is killed by parent!n); lockf(stdout, 0, 0); exit(0); return 0; void waiting() while(wait_mark != 0); void stop() wait_mark=0; 参考程序段前面部分用了两个wait(0),它们起什么作用?作用:wait(0)函数作用是等待子进程结束,父进程有两个子进程,所以两个wait函数。 参考程序段中每个进程退出时都用了语句exit(0),为什么?作用:是为了让子进程正常自我终止,正常退出。 参考程序的运行结果是什么?Parent process is killed! 参考程序是否符合实验要求?为什么?不符合。原因:p1,p2都会捕捉中断信号。对于父进程,当它捕捉到中断信号时就会转向指定的函数stop();函数,之后父进程被唤醒,从被中断处继续执行。对于子进程,由于没有给它们指定的收到中断信号后的动作,就会执行默认的动作,结束自己。所以当我们发出中断信号后,父进程按预计的方式正常执行,而p1,p2自己结束了自己,所以不会有预计的结果。 参考程序该如何修改才能得到正确结果?第一种方法:在fork()语句创建

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

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