- 1、本文档共48页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
内容及要求 调试、运行给出的程序,从操作系统原理的角度验证程序的正确性; 发现并修改程序中的原理性错误或不完善的地方; 鼓励在程序中增加新的功能。完成基本功能的,得基本分;添加新功能的加分; 在程序中适当地加入注释; 认真进行预习,阅读原程序,发现其中的原理性错误,完成预习报告; 实验完成后,要认真总结,完成实验报告。 程序说明 所给程序模拟两个进程,即生产者(producer)进程和消费者(Consumer)进程工作; 生产者每次产生一个数据,送入缓冲区中; 消费者每次从缓冲区中取走一个数据。 共享缓冲区 生产指针 消费指针 Producer Consumer 满 空 指针移动方向 程序说明 缓冲区可以容纳8个数据; 因为缓冲区是有限的,因此当其满了时生产者进程应该等待;当消费者取走一个数据后,应唤醒正在等待的生产者进程; 当缓冲区空时,消费者进程应该等待;当生产者向缓冲区放入了一个数据时,应唤醒正在等待的消费者进程。 这就是生产者和消费者之间的同步 程序说明(续) 每次写入和读出数据时,都将读和写指针加一。当指针到达缓冲区尾,重新将指针退回起点; 为简单起见,每次产生的数据为0-99的整数,从0开始,顺序递增; 两个进程的调度是通过运行者使用键盘来实现的。 程序使用的数据结构 进程控制块:包括进程名,进程状态和执行次数。 缓冲区:一个整数数组 缓冲区说明块:包括类型,读指针,写指针,读等待指针和写等待指针。 程序使用说明 启动程序后,如果使用‘p’键则运行一次生产者进程; 使用‘c’键则运行一次消费者进程; 使用‘e’键则退出程序; 通过屏幕可以观察到两个进程的状态和缓冲区变化的情况。 预习报告要求 题目,目的,要求 初步理解的程序流程图 拟修改、补充的源程序,指出原来程序错误所在,并说明程序中拟加入的功能。 新加功能预期运行结果的说明 实验报告要求 题目,目的,要求 程序流程图 最终运行的源程序及修改、补充的说明 运行结果及其说明 实验4:进程的管道通信 编程实现进程的管道通信程序 目的 加深对进程概念的理解,明确进程和程序的区别; 学习进程创建的过程,进一步认识并发执行的实质; 分析进程争用资源的现象,学习解决进程互斥的方法; 学习解决进程同步的方法; 掌握Linux系统进程间通过管道通信的具体实现方法。 相关知识 基本概念 进程的概念 进程与程序的区别 并发执行的概念 进程互斥的概念 进程通信的基本原理 系统调用 设置系统调用号:设置多条系统调用命令,并赋予每条系统调用命令一个唯一的系统调用号 相关知识 系统调用 处理系统调用:OS中有一张系统调用入口表,表中每个表目对应一条系统调用命令,包含该系统调用自带参数的数目、系统调用命令处理程序的入口地址等。OS内核便是根据所输入的系统调用号在该表中查找到相应的系统调用,进而转入它的入口地址去执行系统调用程序。 Linux的系统调用机制:通过中断机制实现。 相关知识 相关函数 Fork():创建一个新进程 调用格式 int fork(); 正确返回:=0,创建子进程,从子进程返回的ID 0,从父进程返回的子进程的ID 错误返回:=-1,创建失败 由于父进程和子进程分别独立地进入就绪队列等待调度,所以谁首先得到调度是不确定的,因此,谁首先从fork()返回、继续执行后面的语句也是不确定的。 相关知识 相关函数 wait():控制父进程与子进程的同步 父进程调用该函数,则父进程被阻塞,进入等待队列,等待子进程结束。子进程结束时,产生一个终止状态字,系统向父进程发出SIGCHILD信号。当接到信号后,父进程提取子进程的终止状态字,从wait()函数返回继续执行原来的程序。 调用格式:#include sys/type.h #include sys/wait.h (pid_t) wait (int *statloc); 正确返回:0:子进程的ID;=0:其它 错误返回:=-1,调用失败 相关知识 相关函数 exit():结束进程 正常终止时,该函数返回进程结束状态。 调用格式:#include stdio.h void exit (int status); 其中,status为进程结束状态 Kill():删除执行中的进程 调用格式:kill (int PID, int IID); 其中,PID为要被杀死的进程号,IID为向被杀死的进程发送的中断号 相关知识 相关函数 signal():允许调用进程控制软
文档评论(0)