首页 > 编程知识 正文

linux下的c语言编程步骤,c多线程编程实战第二版pdf

时间:2023-05-04 05:42:11 阅读:167113 作者:4458

操作系统编程模拟多进程共享临界资源linux,c语言。

一、课程设计目的本课程设计是在学生学习《计算机操作系统》课程后,进行全面的综合训练,通过课程设计,使学生更好地掌握操作系统的原理和实现方法,加深对操作系统基础理论和关键算法的理解,提高学生动手能力二、课程设计要求从课程设计目的出发,通过设计工作的各个环节,达到以下教学要求。 每个学生必须在给定的主题中选择一个(例如,拟题必须征得教师同意),并独立完成课程设计,不得互相模仿。 设计完成后,请老师检查完成的作品。 要求制作详细的设计报告。 三、课程设计主题编程仿真多流程要求产生共享临界资源的四、课程设计功能和目标1、至少三个流程。 二、两个流程模拟需要进入临界区的用户流程,需要进入临界区时,显示“流程x要求进入临界区…”,同时申请管理流程; 在临界区域等待随机时间,显示"进程x在临界区域…"; 时间结束时,显示“进程x已退出临界区……”,同时向管理进程提交退出申请。 3、一个流程作为原语级管理流程,接受其他流程的临界区域进入请求。 如果允许进入,请设置相应的变量,然后返回; 如果不允许进入,进入环路等待,直到被允许; 4、访问临界区应遵循闲着让着进、忙着等、有限着等、权让等原则。 5、进程间通信可以采用信号、消息接发、管道或网络通信方式。 五、课程设计的实现原理是编制,编制两个流程模拟需要进入临界区,另编制一个流程作为原语管理流程,负责两个流程的进入! 接下来设置临界区,其中访问遵循空时允许进入,忙时允许待机,有限时允许待机,权限等待的指导方针。 过程和临界区建立后,临界区的数据传输,得到系统硬件支持,不消耗额外资源; 另一方面,由于进程间通信的交接是由软件控制来实现的,所以需要消耗一定的CPU资源。 从这个意义上说,临界区域适合频繁和大量的数据传输。 过程信息的传递,本身具有同步的控制。 等待信息时,进程将进入休眠状态,不再占用CPU资源。 另一方面,如果共享队列未通过其他机制进行同步,则接收数据的人必须不断地查询,从而白白消耗大量的CPU资源。 六、课程设计思想、方法和技术(包括数据结构、算法、流程图) 6.1、设计思想和设计函数功能)6.1.1、总体构思)软件主要由两部分组成)用户流程和管理流程; 管理流程:控制合适的临界区设置,实现临界区访问,应遵循空闲进入、忙碌等待、有限等待、许可等待指导原则。 用户流程:循环随机申请进入临界区,进入临界区运行一段时间,申请结束。 6.1.2、具体功能:用户流程随机进入cpu运行,首先将自己的信息写入消息队列,然后向管理流程发送信号。 (向管理流程申请进入临界区域,并告知已在消息队列中写入了自己的信息)。 然后,循环的读取管理进程向用户进程返回的反馈信息(当前临界区域的状态) ——允许进入,临界区域忙碌地等待。 在允许进入的情况下,在临界区域运行一定时间后,申请退出,向管理流程发送退出信号,管理流程向用户流程发送反馈信息。 在会议的指导下反馈信息后,这次过程结束,进入新的过程。 管理进程接收申请进入的信号,将申请进入队列的用户进程的信息从消息队列中删除,针对当前关键部分的状态写反馈信息并进入消息队列。

6.2、包含的数据结构6.1.1、临界区域: Struct crform { Int sem; //临界区域信号值sem Int head; //临界区队列的开头指向最先到达的进程Int tail; //临界区域的队列末尾为进入队列的进程Int duilie[20]; 存储用于唤醒//Cr的进程信息; Cr.sem=1; //初始临界区域的信号量必须为1。 因为只允许一个进入临界区域Cr.head=0的过程; //初始时指向队列的第一单元Cr.tail=0; 6.1.2、消息队列: Struct msgform { Long msgtype; //消息的类型是Int mtext,用于区分在获取消息队列时将采取的信息; //消息的内容在这里是退出申请流程的消息}; 6.3、主要使用技术6.3.1流程创建与控制:系统调用: fork ()包含头文件关键语句的int x,y; while((x=fork ) ) )=-1 ); //创建子进程1if (x==0) ) /子进程1执行块(else ) while ) ) ) y=fork ) )=-1 ); if(y==0) (/子进程2执行块) else )//父进程执行块) } } 6.3.2软中断:系统调用kill )和signal )是头文件)和signal )

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。