基于DOS的多任务测系统的实施-课程设计

基于DOS的多任务测系统的实施-课程设计

ID:42876005

大小:1.18 MB

页数:48页

时间:2019-09-24

基于DOS的多任务测系统的实施-课程设计_第1页
基于DOS的多任务测系统的实施-课程设计_第2页
基于DOS的多任务测系统的实施-课程设计_第3页
基于DOS的多任务测系统的实施-课程设计_第4页
基于DOS的多任务测系统的实施-课程设计_第5页
资源描述:

《基于DOS的多任务测系统的实施-课程设计》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、基于DOS的多任务系统的实现主要任务线程的创建和撤消FCFS调度时间片轮转调度同步机制的实现消息缓冲队列通信机制的实现intcurrent;main(){/*创建0#线程*/strcpy(tcb[0].name,"main");tcb[0].state=RUNNING;current=0;/*创建1#、2#线程*/create("f1",(codeptr)f1,1024);create("f2",(codeptr)f2,1024);/*启动多个线程的并发执行*/swtch();printf("Multi_tasksys

2、temterminated.");}voidf1(void){……putchar(‘a’);…….}voidf2(void){……putchar(‘b’);…….}编程环境16位的DOS模式:内存地址20位TurboC2.0DOS的内存管理地址线为20根,即物理地址为20位;内存空间不超过1M;字长为16位;分段存储管理方式:每段长度不超过216B;段表用寄存器的方式来实现:CS——代码段内存基址DS——数据段内存基址SS——堆栈段内存基址DOS规定:段在内存的起始地址的低4位必须为0。内存datastackcode代

3、码数据堆栈的高16位的高16位的高16位0L1-10L2-10L3-101M-1二维的逻辑地址:seg:off逻辑地址seg×24+off物理地址DOS的内存管理‘A’DOS系统,C语言中地址的两种表达方式:指针:如char*p;用两个无符号整数seg:off分别表示段内存基址的高16位,段内偏移:如0X100:0X20TurboC提供了宏函数,使两种方式之间可以互相转化:p=MK_FP(seg,off);seg=FP_SEG(p);off=FP_OFF(p).data00X20‘A’内存0X1000①p0X1020cha

4、rc=‘A’;char*p;p=&c;c②0X100:0X20DOS的内存管理线程的概念线程是进程内一个相对独立的运行单位,一个进程可以有一个或多个线程(至少有一个),这些线程共享这个进程的代码、数据及大部分管理信息,但每个线程有自己的程序计数器、堆栈和线程控制块。拥有资源的基本单位——进程;执行的基本单位(即CPU调度和分派的单位)——线程。intcurrent;main(){/*创建0#线程*/strcpy(tcb[0].name,"main");tcb[0].state=RUNNING;current=0;/*创建1

5、#、2#线程*/create("f1",(codeptr)f1,1024);create("f2",(codeptr)f2,1024);/*启动多个线程的并发执行*/swtch();printf("Multi_tasksystemterminated.");}voidf1(void){……putchar(‘a’);…….}voidf2(void){……putchar(‘b’);…….}代码段数据段进程和线程堆栈tcb[0]堆栈tcb[1]堆栈tcb[2]mainf1f2…currenttcb[]…线程0线程1线程2

6、线程0是进程的首个线程,当进程首次得到CPU时,线程0就处于执行状态。线程1、线程2要通过线程调度函数,才能得到CPU。堆栈的概念堆栈其实是一段内存空间;堆栈中最后压入数据的那个单元叫栈顶,该单元的地址就是栈顶指针;CPU执行很多指令时都会用到堆栈,比如:push指令;pop指令;函数调用指令call;函数返回指令ret和中断返回指令iret;int指令等等。函数调用的参数及返回地址,程序的局部变量等信息通常都被保存在进程的堆栈中。堆栈的概念传统的进程由PCB、代码段、数据段和堆栈段四部分组成,但很多系统中把堆栈包含在数据

7、段中。引入线程后,每个线程都必须有自己的私有堆栈。CPU切换时,要进行堆栈的切换,从而使新进程(或新线程)可以把信息保存在自己的堆栈中,而不是老进程(或线程)的堆栈中。CPU正在使用的堆栈被称作现行堆栈,它的栈顶指针存放在CPU的栈顶指针寄存器中(如SS:ESP)。bx起始地址结束地址栈顶指针ss:esp堆栈100堆栈的概念36堆栈起始地址结束地址栈顶指针ss:esp100起始地址结束地址栈顶指针ss:esp堆栈100设ax=36:压栈指令pushax出栈指令popbxesp先减2个字节;再将操作数写到对应的单元中。先从对

8、应的单元中取出信息;再将esp加上2个字节;3636X86中信息是从高端往低端入栈的。线程控制块#defineNTCB5structTCB{unsignedchar*stack;/*线程堆栈的起始地址*/unsignedss;/*堆栈段址*/unsignedsp;/*堆栈指针*/charstate;/*

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

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

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