山东大学操作系统课设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 效果如下:

操作系统课设--具有优先级的线程调度相关推荐

  1. 操作系统课设附代码完整版(出自19级jhy课设)

    操作系统课设附代码完整版 出自19级jhy课设 摘要 为了检验自己的操作系统课程的学习情况与掌握程度,以及将该课程知识用编程语言描述的技能,本次选择"并发环境下作业管理与连续动态内存管理的模 ...

  2. 操作系统课设--虚拟内存

    山东大学操作系统课设lab7 实验七 虚拟内存(lab7) 实验目的 实验环境 实验思路 关键源代码注释以及程序说明 调试记录 实验七 虚拟内存(lab7) 实验目的 在未实现虚拟内存管理之前,Nac ...

  3. 操作系统课设--系统调用

    山东大学操作系统课设lab6 实验六 系统调用(lab6) 实验目的 实验环境 实验思路 调试记录 实验六 系统调用(lab6) 实验目的 扩展现有的class AddrSpace的实现,使得Nach ...

  4. 操作系统课设--具有二级索引的文件系统

    山东大学操作系统课设lab5 实验五 具有二级索引的文件系统(lab5) 实验目的 实验环境 实验思路 调试记录 实验五 具有二级索引的文件系统(lab5) 实验目的 Nachos系统原有的文件系统只 ...

  5. 操作系统课设--扩展文件系统

    山东大学操作系统课设lab4 实验四 扩展文件系统(lab4) 概念欠缺 实验目的 实验环境: 实验思路: 关键源代码注释以及程序说明: 调试记录: 实验四 扩展文件系统(lab4) 概念欠缺 ifd ...

  6. 操作系统课设--使用信号量解决生产者/消费者同步问题

    山东大学操作系统课设lab3 实验三 使用信号量解决生产者/消费者同步问题(lab3) 实验目的 理解Nachos的信号量是如何实现的 生产者/消费者问题是如何用信号量实现的 在Nachos中是如何创 ...

  7. 操作系统课设--NACHOS试验环境准备、安装与MAKEFILE分析

    山东大学操作系统课设lab1 实验一 NACHOS试验环境准备.安装与MAKEFILE分析(lab1) 实验环境: 分析记录: 1. 准备虚拟机下LINUX宿主操作系统环境 2. NACHOS实验代码 ...

  8. 操作系统课设之简单 shell 命令行解释器的设计与实现

    前言 课程设计开始了,实验很有意思,写博客总结学到的知识 白嫖容易,创作不易,学到东西才是真 本文原创,创作不易,转载请注明!!! 本文链接 个人博客:https://ronglin.fun/arch ...

  9. 操作系统课设之基于信号量机制的并发程序设计

    前言 课程设计开始了,实验很有意思,写博客总结学到的知识 白嫖容易,创作不易,学到东西才是真 本文原创,创作不易,转载请注明!!! 本文链接 个人博客:https://ronglin.fun/arch ...

最新文章

  1. javascript 中this 的用法:
  2. Maven 插件打包java 后台
  3. 您需要来自pc的权限才能_微信电脑版还是鸡肋吗?微信PC版3.0内测体验
  4. oracle解决存储嗅探,DBA警示录:存储故障的处理应当谨慎
  5. Linux同步目录 保留文件修改时间和权限 rsync
  6. 浅谈SDN中的OverLay与UnderLay技术
  7. OpenShift 4 - 在集群节点用crictl对Pod/Image/Container进行操作
  8. 数据库中间件mycat简单入门
  9. 【printf函数与scanf函数】(学习笔记5--标准I/O函数)
  10. 低频段用于4G,电信联通仍难改劣势
  11. 深入理解Nginx:(1)初探Nginx 之一
  12. 【肌电信号】肌电信号处理系统含Matlab源码
  13. 如何关闭445端口 两种方式教你关闭445端口
  14. 日语动词变形(转载)
  15. 大数据知识面试题-Flink(2022版)
  16. 011235813用java写出来_C 编程练习题大全(带答案)
  17. 狄利克雷分布公式_潜在狄利克雷分配(LDA)
  18. 思科下一代数据中心Nexus7000优势
  19. linux kernel内核编程基础总结
  20. 老照片修复matlab程序,‎App Store 上的“老照片修复”

热门文章

  1. Debug Current Instruction Pointer怎么去掉(蓝色调试箭头)
  2. matlab计算原点矩,关于用matlab求样本均值方差以及k阶原点矩的matlab程序
  3. android 获取权限管理,Android常用权限获取和设置
  4. 14种冷热源及空调系统特点介绍
  5. 成功解决ModuleNotFoundError: No module named ‘sklearn.learning_curve‘
  6. Docker Toolbox:Docker Toolbox的简介、安装、使用方法之详细攻略
  7. LSTM:《Understanding LSTM Networks》的翻译并解读
  8. Graphviz之DT:手把手教你使用可视化工具Graphviz将dot文件转为结构图的png文件
  9. ML之二分类预测:以岩石水雷数据集(RockMine)为例从0到1深入理解科学预测之分类问题的思路框架(特征工程详细步骤(特征分析与特征处理)+分类模型设计)
  10. 成功解决AttributeError: ‘str‘ object has no attribute ‘decode‘