西电计算机操作系统课程设计pintos-pro2 下载本文

内容发布更新时间 : 2024/12/22 23:56:58星期一 下面是文章的全部内容请认真阅读。

西安电子科技大学 操作系统课程设计

(2016年度)

实 验 报 告

实验名称: Priority Scheduling 班 级: 姓 名: 学 号:

西安电子科技大学《操作系统课程设计》实验报告 2016年度

一、实验内容

为Pintos建立优先级调度机制,并确保任何时刻CPU上运行的都是最高优先级线程。 二、分析及设计

原始Pintos系统中对于线程的调度,没有考虑优先级问题,采用的是最为简单的FCFS策略。 而默认的优先级顺序为31,那么就可以在起始时得到一个优先级,并在执行过程中通过thread_set_priority( )函数修改优先级。在新的线程创建后,可以加入一个比较函数,如果新的线程优先级高,则让出CPU,利用插入排序list_insert_ordered()函数将当前线程按优先级顺序插入到等待的队列中,如果当前优先级被降低,则让出CPU;如果优先级提高,则继续运行。如果遇到因为信号量进程被阻塞时,则吧最高优先级的线程放入到队列中。如果拥有线程的锁不满足当前的条件,则要释放掉锁,当满足了条件后,优先级最高的线程应该优先获得锁。 调用关系:

三、详细实现

1.在thread_create( )函数中添加比较函数

西安电子科技大学《操作系统课程设计》实验报告 2016年度

2.修改init_thread()函数,将ready-list采用插入排序的方式处理。

3.修改thread_yield ()函数,加入对ready队列的排序功能,实现插入排序。

4.修改thread_unblock()函数,如果唤醒的线程优先级顺序高,则当前程序放弃CPU。

5.修改thread_set_priority( )函数,如果锁的占用为空闲,或者新的线程的优先级要大于原来的优先级,则新的优先级赋给当前的进程,正在运行的让出CPU。

6.如果涉及多个线程等待信号量的问题,则当满足条件时,拥有最高优先级的线程应被优先唤醒进入ready-list。修改sema_down()函数,加入插入排序的功能。