基于线程的多任务调度系统的设计与实现报告实验报告

基于线程的多任务调度系统的设计与实现报告实验报告

ID:19776288

大小:129.50 KB

页数:15页

时间:2018-10-06

基于线程的多任务调度系统的设计与实现报告实验报告_第1页
基于线程的多任务调度系统的设计与实现报告实验报告_第2页
基于线程的多任务调度系统的设计与实现报告实验报告_第3页
基于线程的多任务调度系统的设计与实现报告实验报告_第4页
基于线程的多任务调度系统的设计与实现报告实验报告_第5页
资源描述:

《基于线程的多任务调度系统的设计与实现报告实验报告》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、基于线程的多任务调度系统的设计与实现实验报告姓名陈振辉学号12224506班级5班1实验要求(1)线程的创建、撤消和CPU切换。掌握线程的定义和特征,线程的基本状态,线程的私有堆栈,线程控制块TCB,理解线程与进程的区别,实现线程的创建、撤消和CPU切换。(2)时间片轮转调度理解各种调度算法、调度的原因,完成时钟中断的截取,具体实现调度程序。(3)最高优先权优先调度理解优先权的概念,并实现最高优先权优先调度策略。(4)利用记录型信号量实现线程的同步理解同步的相关概念,掌握记录型信号量的概念及应用,并用记录型信号量实现生产

2、者和消费者问题。(5)消息缓冲队列通信机制理解进程(线程)通信的基本概念,并用消息缓冲队列实现线程间的通信。功能设计1线程的创建和撤销线程的创建过程关键就是对私有堆栈和TCB初始化的过程,其过程如下:i,为新线程分配一空闲的线程控制块ii,为新线程的私有堆栈分配内存空间(因为对等线程共享程序段和数据段空间,所以创建线程时不必像创建进程那样再为程序段和数据段分配内存空间)iii,初始化新线程的私有堆栈,即按CPU调度时现场信息的保存格式布置堆栈。初始化线程控制块,即填入线程的外部标识符,设置好线程私有堆栈的始址,段址和栈顶

3、指针,将线程的状态置为就绪状态2线程的调度引起CPU调度原因主要是有三种情况:时间片到时,线程执行完毕或正在执行的线程因等待某种事件而不能继续执行。由这些原因,调度程序可以通过两个函数分别处理不同原因引起的调度:New_int8()函数主要是处理因时间片到时引起的调度该调度可以通过截取时钟中断(int08)来完成;Swtch()函数主要是处理因其他原因引起的调度;New_int8()函数因为是通过截取时钟中断来实现,可以知道其是属于系统调度,由于涉及到系统调度的函数都是需要对DOS状态进行判断,以防止出现系统数据混乱等情

4、况的发生(从Dos的不可重入性来得出),而Swtch()函数是处理因其他原因引起的调度,所以它所涉及到的仅仅是用户级的函数调度,没有涉及到系统级的函数调度,因此Swtch()函数不需要对Dos状态进行判断。3线程的阻塞与唤醒线程的阻塞:主要是当某一线程需要阻塞的时候,将其插入阻塞队列中,等待唤醒进程唤醒,所以其过程为:首先,将线程的状态置为阻塞态,然后将线程插入指定的阻塞队列末尾,并重新进行CPU调度。线程的唤醒:主要是唤醒阻塞队列里面的线程,所以其过程是:把阻塞队列头上的第一个线程的TCB取下来,并将其状态改为就绪状态

5、,等待CPU调度4线程的同步与互斥在这个系统中是采用记录型信号量机制来实现同步与互斥的,实现的方法:采用P,V操作,设置两个信号量:一个为互斥信号量,一个为临界资源数目;5利用消息缓冲队列的线程间通信线程间的通信,关键采用send()与receive()来实现,通过发送一个文本信息来显示通信的过程,其过程为:send()函数:消息的发送者需要提供接收者的标识符,消息的长度以及消息正文的起始地址等信息,然后在发送原语里申请一空闲的消息缓冲区,用相应的信息来装配该消息缓冲区,并把它插入到接收者的消息队列中去。Receive(

6、)函数:消息的接受者必须给出发送者的标识符,接受区的起始地址等信息,然后从自己的消息队列中取得相应的发送者发送来的消息缓冲区,将消息正文复制到接受区中,并释放相应的消息缓冲区。源代码及解析如下#include#include#include#defineGET_INDOS0x34#defineGET_CRIT_ERR0x5d06/*定义四个状态*/#definefinished0#definerunning1#defineready2#defineblocked3#de

7、fineTL3/*设置TL(时间片)时间为3*/#defineNTCB10/*NTCB是系统允许的最多任务数也就是进程数*/#defineNBUF5#defineNTEXT30/**********************声明变量********************/charfar*indos_ptr=0;charfar*crit_err_ptr=0;intcurrent;/*全部变量,始终等于正在执行的线程的内部标识符*/inttimecount=0;/*全局变量,等于上次调度至今的时间,在每次时钟中断发生时,ti

8、mecount+1,通过它与TL课判断时间片是否到时,从而决定是否进行CPU调度*//********************定义数据结构********************/typedefint(far*codeptr)(void);/*定义codeptr函数指针*//*定义记录型信号量的数据结构*/typed

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。