西电计算机操作系统课程设计pintos-pro2.doc
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
西安电子科技大学 操作系统课程设计 (2021年度) 实 验 报 告 实验名称: Priority Scheduling 班 级: 姓 名: 学 号: 一、实验内容 为Pintos建立优先级调度机制,并确保任何时刻CPU上运行的都是最高优先级线程。 二、分析及设计 原始Pintos系统中对于线程的调度,没有考虑优先级问题,采用的是最为简单的FCFS策 略。 而默认的优先级顺序为31,那么就可以在起始时得到一个优先级,并在执行过程中通过 thread_set_priority( )函数修改优先级。在新的线程创立后,可以参加一个比较函数,假设新的线程优先级高 ,那么让出CPU,利用插入排序list_insert_ordered()函数将当前线程按优先级顺序插 入到等待的队列中,假设当前优先级被降低,那么让出CPU;假设优先级进步,那么继续 运行。假设遇到因为信号量进程被阻塞时,那么吧最高优先级的线程放入到队列中。假 设拥有线程的锁不满足当前的条件,那么要释放掉锁,当满足了条件后,优先级最高的 线程应该优先获得锁。 调用关系: 三、详细实现 thread_create( )函数中添加比较函数 2.修改init_thread〔〕函数,将ready-list采用插入排序的方式处理。 3.修改thread_yield ()函数,参加对ready队列的排序功能,实现插入排序。 4.修改thread_unblock()函数,假设唤醒的线程优先级顺序高,那么当前程序放弃CPU。 5.修改thread_set_priority( )函数,假设锁的占用为空闲,或者新的线程的优先级要大于原来的优先级,那么新的优 先级赋给当前的进程,正在运行的让出CPU。 6.假设涉及多个线程等待信号量的问题,那么当满足条件时,拥有最高优先级的线程应 被优先唤醒进入ready-list。修改sema_down()函数,参加插入排序的功能。 7.同6一样修改sema_up〔〕函数,对等待队列进展排序。 cond_signal〔〕函数中修改,改为优先级队列 cond_sema_cmp_priority〔〕 四、实验结果 通过实验,根本完成实验内容,结果如图: 五、心得体会 在实验中,可以通过亲自设计修改,让系统对线程进展不同的修改和占用CPU,通过设定 优先级,使系统的处理效率更高,对pintos修改实现优先级调度机制,让系统总是让最 高优先级的线程进展。 ----------------------- 西电计算机操作系统课程设计pintos-pro2全文共5页,当前为第1页。 西电计算机操作系统课程设计pintos-pro2全文共5页,当前为第2页。 西电计算机操作系统课程设计pintos-pro2全文共5页,当前为第3页。 西电计算机操作系统课程设计pintos-pro2全文共5页,当前为第4页。 西电计算机操作系统课程设计pintos-pro2全文共5页,当前为第5页。 【操作系统课程设计——Pintos中的优先级调度】 在西安电子科技大学2021年度的操作系统课程设计中,学生们被要求为Pintos操作系统实现优先级调度机制。Pintos是一个开源的、用于教学目的的简化操作系统,它提供了一个理想的环境来实践操作系统的基本概念。在原始的Pintos系统中,线程调度是基于先来先服务(FCFS)策略,即线程按照它们创建的顺序获得CPU执行权。然而,这个设计并未考虑线程的优先级,这限制了系统的响应速度和效率。 为了引入优先级调度,设计者首先分析了Pintos的调度流程,并决定使用插入排序算法来组织等待队列,以便根据线程的优先级进行调度。线程的优先级默认为31,并可以通过`thread_set_priority()`函数进行修改。在创建新线程时,会进行比较,如果新线程的优先级更高,那么当前运行的线程会被抢占,新线程通过`list_insert_ordered()`函数按优先级插入等待队列。如果线程的优先级被降低,它也会主动放弃CPU。 此外,设计者还考虑到了线程阻塞和解锁的情况。当线程因等待信号量而被阻塞时,最高优先级的线程会被放入等待队列。在解锁时,如果满足条件,具有最高优先级的线程应该首先被唤醒并加入就绪队列。为此,`sema_down()`和`sema_up()`函数进行了相应修改,加入了插入排序功能,确保优先级的正确处理。同时,`cond_signal()`函数也被更新,以支持优先级队列。 在详细实现阶段,有以下几个关键步骤: 1. 在`thread_create()`函数中添加了比较函数,以确定新线程的优先级。 2. 修改`init_thread()`函数,将就绪线列初始化为按优先级排序。 3. 更新`thread_yield()`函数,使其能够对就绪队列进行插入排序,确保高优先级线程优先执行。 4. 修改`thread_unblock()`函数,当唤醒的线程优先级高于当前运行线程时,当前线程放弃CPU。 5. `thread_set_priority()`函数的改进,允许在锁可用或新优先级更高时,将新优先级赋予当前线程。 6. 对`sema_down()`和`sema_up()`的修改,以处理等待队列的优先级排序。 7. `cond_signal()`函数的优先级队列实现,使得条件满足时,优先级高的线程被优先唤醒。 经过这些修改,实验结果表明基本实现了预期的目标,即在任何时刻,CPU都在执行最高优先级的线程。这显著提高了系统的响应时间和整体性能。通过这个课程设计,学生不仅深化了对操作系统调度原理的理解,还实践了如何通过编程实现这些概念,从而提升实际操作系统的效率。
- uict3502r222023-08-04简直是宝藏资源,实用价值很高,支持!
- CH70862023-06-20内容与描述一致,超赞的资源,值得借鉴的内容很多,支持!
- 粉丝: 105
- 资源: 9354
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助