操作系统课设--具有优先级的线程调度
山東大學操作系統課設lab2
- 實驗二 具有優先級的線程調度(lab2)
- 概念欠缺
- 實驗環境
- 實驗目的
- 1. 熟悉Nachos原有的線程調度策略
- 2. 設計并實現具有優先級的線程調度策略
實驗二 具有優先級的線程調度(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()方法都寫得很詳細
是由一個readyList來存放準備運行的線程;如果要找到下一個可運行的線程,也從這個List中找就好。
在線程Fork時,也是調用scheduler->ReadyToRun();即將這個線程加入readyList中。
2. 設計并實現具有優先級的線程調度策略
1.首先要修改Thread類的構造函數,加上優先級這個屬性。要修改thread.h和thread.cc。
Thread.h中加上Private屬性priority,類型為int。
在thread.cc的構造函數Thread()中加上對priority的初始化,默認優先級最低=7
并添加一個構造函數,可以傳入參數設置線程的優先級,是原thread中沒有的構造函數。
2.給Thread類加了優先級屬性,那么線程的調度算法也要隨之改變。本來,所有待運行線程都在readyList,沒有優先級,它們是按先進后出的順序逐一被調度的,現在有了優先級,調度算法需要修改成非搶占式算法。即按照優先級從高到低被調度才比較合理。于是需要修改ReadyToRun()按照優先級調整順序。
List中定義的SortedInsert()方法
所以我們直接把優先級作為參數傳進去,List自己會排序。
需要修改ThreadTest.cc里的ThreadTest()方法。
由于需要判斷優先級高低對于調度算法的影響,我設置了5個不同優先級的線程以供調度。
在lab2文件夾里輸入 ./nachos 效果如下:
總結
以上是生活随笔為你收集整理的操作系统课设--具有优先级的线程调度的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 操作系统课设--NACHOS试验环境准备
- 下一篇: 操作系统课设--使用信号量解决生产者/消