操作系统课设--具有优先级的线程调度
山东大学操作系统课设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 效果如下:
操作系统课设--具有优先级的线程调度相关推荐
- 操作系统课设附代码完整版(出自19级jhy课设)
操作系统课设附代码完整版 出自19级jhy课设 摘要 为了检验自己的操作系统课程的学习情况与掌握程度,以及将该课程知识用编程语言描述的技能,本次选择"并发环境下作业管理与连续动态内存管理的模 ...
- 操作系统课设--虚拟内存
山东大学操作系统课设lab7 实验七 虚拟内存(lab7) 实验目的 实验环境 实验思路 关键源代码注释以及程序说明 调试记录 实验七 虚拟内存(lab7) 实验目的 在未实现虚拟内存管理之前,Nac ...
- 操作系统课设--系统调用
山东大学操作系统课设lab6 实验六 系统调用(lab6) 实验目的 实验环境 实验思路 调试记录 实验六 系统调用(lab6) 实验目的 扩展现有的class AddrSpace的实现,使得Nach ...
- 操作系统课设--具有二级索引的文件系统
山东大学操作系统课设lab5 实验五 具有二级索引的文件系统(lab5) 实验目的 实验环境 实验思路 调试记录 实验五 具有二级索引的文件系统(lab5) 实验目的 Nachos系统原有的文件系统只 ...
- 操作系统课设--扩展文件系统
山东大学操作系统课设lab4 实验四 扩展文件系统(lab4) 概念欠缺 实验目的 实验环境: 实验思路: 关键源代码注释以及程序说明: 调试记录: 实验四 扩展文件系统(lab4) 概念欠缺 ifd ...
- 操作系统课设--使用信号量解决生产者/消费者同步问题
山东大学操作系统课设lab3 实验三 使用信号量解决生产者/消费者同步问题(lab3) 实验目的 理解Nachos的信号量是如何实现的 生产者/消费者问题是如何用信号量实现的 在Nachos中是如何创 ...
- 操作系统课设--NACHOS试验环境准备、安装与MAKEFILE分析
山东大学操作系统课设lab1 实验一 NACHOS试验环境准备.安装与MAKEFILE分析(lab1) 实验环境: 分析记录: 1. 准备虚拟机下LINUX宿主操作系统环境 2. NACHOS实验代码 ...
- 操作系统课设之简单 shell 命令行解释器的设计与实现
前言 课程设计开始了,实验很有意思,写博客总结学到的知识 白嫖容易,创作不易,学到东西才是真 本文原创,创作不易,转载请注明!!! 本文链接 个人博客:https://ronglin.fun/arch ...
- 操作系统课设之基于信号量机制的并发程序设计
前言 课程设计开始了,实验很有意思,写博客总结学到的知识 白嫖容易,创作不易,学到东西才是真 本文原创,创作不易,转载请注明!!! 本文链接 个人博客:https://ronglin.fun/arch ...
最新文章
- javascript 中this 的用法:
- Maven 插件打包java 后台
- 您需要来自pc的权限才能_微信电脑版还是鸡肋吗?微信PC版3.0内测体验
- oracle解决存储嗅探,DBA警示录:存储故障的处理应当谨慎
- Linux同步目录 保留文件修改时间和权限 rsync
- 浅谈SDN中的OverLay与UnderLay技术
- OpenShift 4 - 在集群节点用crictl对Pod/Image/Container进行操作
- 数据库中间件mycat简单入门
- 【printf函数与scanf函数】(学习笔记5--标准I/O函数)
- 低频段用于4G,电信联通仍难改劣势
- 深入理解Nginx:(1)初探Nginx 之一
- 【肌电信号】肌电信号处理系统含Matlab源码
- 如何关闭445端口 两种方式教你关闭445端口
- 日语动词变形(转载)
- 大数据知识面试题-Flink(2022版)
- 011235813用java写出来_C 编程练习题大全(带答案)
- 狄利克雷分布公式_潜在狄利克雷分配(LDA)
- 思科下一代数据中心Nexus7000优势
- linux kernel内核编程基础总结
- 老照片修复matlab程序,App Store 上的“老照片修复”
热门文章
- Debug Current Instruction Pointer怎么去掉(蓝色调试箭头)
- matlab计算原点矩,关于用matlab求样本均值方差以及k阶原点矩的matlab程序
- android 获取权限管理,Android常用权限获取和设置
- 14种冷热源及空调系统特点介绍
- 成功解决ModuleNotFoundError: No module named ‘sklearn.learning_curve‘
- Docker Toolbox:Docker Toolbox的简介、安装、使用方法之详细攻略
- LSTM:《Understanding LSTM Networks》的翻译并解读
- Graphviz之DT:手把手教你使用可视化工具Graphviz将dot文件转为结构图的png文件
- ML之二分类预测:以岩石水雷数据集(RockMine)为例从0到1深入理解科学预测之分类问题的思路框架(特征工程详细步骤(特征分析与特征处理)+分类模型设计)
- 成功解决AttributeError: ‘str‘ object has no attribute ‘decode‘