DOS多任务系统实现 - 操作系统课程设计

需积分: 9 1 下载量 15 浏览量 更新于2024-07-26 收藏 105KB DOC 举报
"基于DOS的多任务系统实现,杭州电子科技大学操作系统课程设计,使用TC2.0+作为运行环境,未实现缓冲队列的消息通信功能。" 在DOS操作系统中实现多任务是一项挑战,因为DOS本身并不支持原生的多任务处理。然而,通过编程技巧和对DOS中断的理解,可以模拟出一个简单的多任务系统。在这个系统中,每个任务被称为一个线程,线程的状态管理是关键。 线程的状态定义如下: 1. `finished` - 表示线程已经完成执行。 2. `running` - 表示线程正在执行。 3. `ready` - 表示线程已准备就绪,等待CPU资源。 4. `blocked` - 表示线程被阻塞,通常是因为等待某个资源或事件。 在给定的代码中,`NTCB` 定义了最大线程数为5,每个线程用 `struct TCB` 结构体表示,包含了堆栈地址、堆栈段和指针、状态、名称、优先级以及指向下一个线程的指针。`tcb` 数组用于存储这些线程控制块(TCB),而 `head` 指针则指向阻塞队列的头部。 代码中定义了几个关键常量,如 `GET_INDOS` 和 `GET_CRIT_ERR`,它们是DOS中断调用来获取系统信息的入口地址。`Indos_ptr` 和 `crit_err_ptr` 分别用于存储INDOS标志和CRIT_ERR标志的地址,这些都是DOS系统中的关键标志,用于管理和同步任务。 此外,代码还定义了一个名为 `semaphore` 的结构体,用于实现记录型信号量,它包含一个整数值(表示资源数量)和一个指向阻塞线程队列的指针。这里定义了三个信号量:`mutex` 用于互斥访问资源,`empty` 代表空缓冲区,`full` 表示满缓冲区。这些信号量在多线程环境下用于同步操作。 `tcb_state1` 函数用于打印线程的状态,这有助于调试和理解系统当前的运行情况。 虽然这个系统实现了基本的线程管理和状态转换,但如描述中提到的,它没有实现缓冲队列的消息通信。在实际的多任务系统中,线程间的通信是非常重要的,通常通过消息队列、管道、共享内存等方式实现。由于DOS的限制,这种通信机制可能需要借助更复杂的编程技术,如中断向量表的修改或自定义的I/O端口通信。 这个基于DOS的多任务系统展示了如何在有限的系统资源下模拟并发执行,它涵盖了线程管理、状态转换、信号量同步等核心概念,对于学习操作系统原理和DOS编程具有一定的实践价值。