linux課程设计报告.docVIP

  • 318
  • 0
  • 约3.59千字
  • 约 11页
  • 2016-12-06 发布于重庆
  • 举报
linux課程设计报告

电子信息学院 计算机科学与技术 课 程 设 计 报 告 (2011 -2012 第1学期) 题目:操作系统组成原理 学号: 姓名: 专业:计算机科学与技术 指导教师: 课程设计日期: 目录 (一)验环境、相关背景知识介绍; 3 (二)实验内容 3 2.1操作系统的进程调度(处理机调度-时间片轮转) 3 2.1.1基本原理分析 3 2.1.2程序流程图 4 2.1.3数据结构 4 2.1.4 测试与结论 5 2.1.5思考与感悟 7 2.2操作系统的进程通信(管道通信) 8 2.2.1基本原理分析 8 2.2.2程序流程图 8 2.2.3实现步骤 9 2.2.4测试结果 10 2.2.5思考与感悟 11 (三)小结 11 (四)参考文献 11 (一)验环境、相关背景知识介绍; 计算机基本配置要求: 操作系统:win98/2000/xp/2003等windows平台 内存:256MB及以上 主存64KB 开发语言:visual c++ (二)实验内容 2.1操作系统的进程调度(处理机调度-时间片轮转) 2.1.1基本原理分析 当系统按时间片轮转算法调度进程时,将所有的就绪进程按照一定的原则(如先来先服务原则)排列,形成一个就绪队列。每次调度为队首进程分配CPU资源,令其执行一个时间片,该时间片的大小从几ms到几百ms。当时间片用完时,由计时器发出中断信号,通知系统剥夺当前运行进程的CPU使用权,并将此进程送入就绪队列的末尾,等待下一次执行;然后,把处理机分配给就绪队列中断的队首进程,执行重复操作。在进程运行过程中,如果时间片未用完而等待事件发生,则该进程进入等待队列,系统将CPU重新分配给就绪队列的队首进程,一旦事件发生后,等待队列的队首进程进入就绪队列末尾。这样就可以保证就绪队列中的所有进程,在可接受的时间内,均能获得处理机并调度执行。 2.1.2程序流程图 2.1.3数据结构 Typedef struct jcb { char name[N]; int prio; int round; int cputime; int needtime; int count; char state; struct node *next; } 2.1.4 测试与结论 2.1.5思考与感悟 实验感想 本实验的难点是每执行一个时间片就让它排到队尾, 也即重新排 序,并从头开始调度执行! 时间片的工作流程是: 的原则是系统将所有的就绪进 程按照先来先服务的原则排成一个队列,每次调度时,把 CPU 分配对 手进程,并令其执行一个时间片,当执行完时,有一个计时器发出时 钟中断请求,该进程停止,并被送到就绪队列的末尾,然后再把处理 机分配就绪队列的队列进程,同时也让它执行一个时间片!通过亲手 实验,对上述写的时间片的工作流程和原理有了更贴切的认识! 本次实验遇到了很大的麻烦,及时大部分代码是借鉴网上的,但 自己通过修改,来获取自己想要的,在自己的努力和同学的帮助下终 于调试正确!很是高兴!管道分为无名管道和有名管道两种。 无名管道可用于具有亲缘关系进程间的 通信,如父子进程、兄弟进程。有名管道克服了管道没有名字的限制,允许无亲 缘关系进程间的通信。本文应用的是无名机制。 管道具有以下特点: (1)管道是半双工的,数据只能单向流动;需要相互通信时,就要建立两 个管道。 (2)只能用于父子进程或者兄弟进程之间(具有亲缘关系的进程,有名管 道则突破了这一限制)。 (3)单独构成一种独立的文件系统,并且只存在于内存中。 (4)数据的读出和写入都是单向的:一个进程向管道中写的数据被管道另 一端的进程读出。写入的数据每次都添加在管道缓冲区的末尾,并且每次都是从 缓冲区的头部读出数据。管道的创建 #include unistd.h int pipe(int fd[2]) 该函数是 Linux 的一个系统调用,其创建的管道两端处于一个进程中间。要 用其实现父子进程之间的通信则需要在由 pipe()创建管道后,再由系统调用 fork 创建一个新的子进程,然后通过管道在这两个进程间传送数据,实现进程 间的通信(同样,不是父子关系和两个进程,只要两个进程中存在亲缘关系—— 具有共同的祖先,都可以采用管道方式来进行通信)。 管道的读写 Pipe 函数有一个参数 fd[2],是用于管道两端的描述字。管道一端只能用于 读,由描述字 fd[0]表示,即管道读端;另一端则只能用于写,由描述字 fd[1] 表示,即管道写端。既不能从管道写端读取数据,也不能向管道读端写入数据。 I/O 函

文档评论(0)

1亿VIP精品文档

相关文档