操作系统实验报告 下载本文

操作系统课程设计实验报告

2015 年 1 月 9 日 成绩:

沈XX 姓名 夏XX 江XX 专业 任课老师 实验序号 实验时间 计算机科学与技术 赵伟华 1 15年10月 指导老师 实验名称 实验地点 一、题目说明 (1)用C语言完成线程的创建和撤消,并按先来先服务方式对多个线程进行调度。 (2)将线程调度算法修改为时间片轮转算法,实现时间片轮转调度。(也可以结合优先权,实现优先权加时间片轮转算法的线程调度。) (3)改变时间片的大小,观察结果的变化。思考:为什么时间片不能太小或太大。 (4)假设两个线程共用同一软件资源(如某一变量,或某一数据结构),请用记录型信号量来实现对它的互斥访问。 (5)假设有两个线程共享一个可存放5个整数的缓冲,其中一个线程不停地计算1至50的平方,并将结果放入缓冲中,另一个线程不断地从缓冲中取出结果,并将它们打印出来,请用记录型信号量实现这一生产者和消费者的同步问题。 (6)实现消息缓冲通信,并与4、5中的简单通信进行比较。 (7)思考:在线程间进行消息缓冲通信时,若对消息队列的访问没有满足互斥要求,情况将会怎样? 学号 13055805 13055807 13055816 课程名称 操作系统课程设计 赵伟华 班级 13052314 进程调度管理 1教南1楼 二、设计方案(系统框架) 该程序主要是分5大块内容: (1)线程的创建和撤销, (2)线程的调度, (3)线程的同步与互斥, (4)线程的阻塞与唤醒, (5)利用消息缓冲队列的线程间的通信。 由这五大块功能来完成的基于DOS的多任务系统的实现。在这个系统中,首先先由main函数进行一些初始化工作,然后直接创建0#线程对应于main函数,再由0#线程调用create创建1#,2#线程分别对应与函数f1(),f2(),最后将系统的中断服务程序设置为new_int8,并把控制交给1#线程,启动多个线程的并发执行。 0#线程是一个比较特殊的线程,它在创建的时候没有使用create来创建,而是在系统初始化后直接创建的,因它对应的程序段为main函数中的一段,所以也直接使用整个系统的堆栈,而不再创建时为私有堆栈分配额外的空间;同样,撤销的时也不需要释放私有堆栈的空间,所以也没有over()函数而是直接撤销,从这方面来看,它是一个系统线程。 此外,在启动多个线程并发执行过程后,0#线程将系统控制权转交出去,直至系统中其他进程都不具备执行条件时,它才有可能重新得到CPU,从这方面看,0#线程相当于是一个空转线程,最后,0#线程还担负着一个特别的使命:等待系统中所有其他的线程的完成,此时,它将直接撤销自己并恢复原来的时钟中断服务程序,从此终止整个多任务系统。 三、程序流程图 四、实验结果(程序截图) 主界面 先进先出效果 实现线程的并发执行,可设置时间片大小 实现线程对同一资源的互斥访问