山东大学操作系统课设lab2
实验二 具有优先级的线程调度(lab2)
概念欠缺
- .cc是方法实现,.h是头文件
- cd - 返回上一层
实验环境
虚拟机下Ubuntu Linux 16.04 LTS系统,nachos-3.4内核管理模块和MIPS CPU软件模拟模块,代码在lab2文件夹下面实现。
实验目的
- 将threads里的内容copy到lab2文件夹下
- 看scheduler.cc和scheduler.h,Thread.cc和Thread.h
1. 熟悉Nachos原有的线程调度策略
每个线程都有一个属性记录自己的优先级;相比实验一的Thread.cc中的Thread构造函数,应该加上一个int类型的priority来记录每个线程的优先级。因为线程是通过优先级来进行调度的,优先级调度算法分为抢占式和非抢占式。抢占式调度表示如果一个新的高优先级的线程来到,cpu会停止当前低优先级的线程,先将资源分配给高优先级的线程;非优先级调度算法则是无论新来的线程优先级高低与否,都会等待当前线程完成,再占据下一个位置。
通过实验一可以看出:
在线程Yield时,线程会找到下一个线程并运行它。看scheduler类,其中ReadyToRun()和Run()方法