线程调度实验报告_Nachos Lab2

2024-02-25 02:58

本文主要是介绍线程调度实验报告_Nachos Lab2,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

内容一:总体概述

         本次Lab针对的内容了解线程的调度机制,每个时刻每个CPU上只能有一个线程运行,为了提高系统的吞吐量和工作效率,必须合理的安排每个线程上CPU的顺序和时间。在实用中,多数为几种调度策略结合使用的。包括是否抢占、动态优先级还是静态优先级、是否分时等等。

         调度策略的实施通常需要在PCB中增加相应的修改,需要在其中增加相应的数据结构记录执行的状态和统计信息。

 

【用简洁的语言描述本次lab的主要内容;阐述本次lab中涉及到的重要的概念,技术,原理等,以及其他你认为的最重要的知识点。这一部分主要是看大家对lab的总体的理解。

         要求:简洁,不需要面面俱到,把重要的知识点阐述清楚即可。】

内容二:任务完成情况

任务完成列表(Y/N)

 

Exercise1

Exercise2

Exercise3

完成情况

Y

Y

Y

 

具体Exercise的完成情况

         Exercise1

了解Linux或Windows中采用的进程/线程调度算法。

        

我调研的是Linux系统中的进程/线程调度算法。Linux的内核有三种调度策略:

1.   SCHED_OTHER分时调度策略。

2.   SCHED_FIFO实时调度策略,先到先服务。一旦占用CPU则一直运行直到有更高优先级任务达到或自己放弃。

3.   SCHED_RR实时调度策略,时间片轮转。当进程的时间片用完,系统将重新分配时间片,并置于就绪队列。放在队尾保证了所有具有相同优先级的RR任务的调度公平。

Linux内核将进程分成两个级别:普通进程和实时进程。实时进程的优先级都高于普通进,除此之外,它们的调度策略也有所不同。

如果一个进程有实时需求(它是一个实时进程),则只要它是可执行状态的,内核就一直让它执行,以尽可能地满足它对CPU的需求,直到它完成所需要做的事情,然后睡眠或退出(变成非可执行状态)。而如果有多个实时进程都处于可执行状态,则内核会先满足优先级最高的实时进程对CPU的需要,直到它变为非课执行状态。于是,只要有高优先级的实时进程一直处于可执行状态,低优先级的实时进程就一直不能得到CPU;只要一直有实时进程处于可执行状态,普通进程就一直不能得到CPU。后来内核进行了一些改动,限定了以sched_rt_period_us为周期的时间内,实时进程最多只能运行sched_rt_runtime_us这样给普通进程留下了一点点能够得到执行的机会。

在Linux 2.6版本中,内核调度曾有几度变迁,其基本思想是:1)提高实时进程调度相应比;2)普通进程调度体现“完全公平这个思想”。为实时进程(SCHED_FIFO/SCHED_RR)提供O(1)时间复杂度的调度算法,同时,

这篇关于线程调度实验报告_Nachos Lab2的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/744205

相关文章

搭建Kafka+zookeeper集群调度

前言 硬件环境 172.18.0.5        kafkazk1        Kafka+zookeeper                Kafka Broker集群 172.18.0.6        kafkazk2        Kafka+zookeeper                Kafka Broker集群 172.18.0.7        kafkazk3

线程的四种操作

所属专栏:Java学习        1. 线程的开启 start和run的区别: run:描述了线程要执行的任务,也可以称为线程的入口 start:调用系统函数,真正的在系统内核中创建线程(创建PCB,加入到链表中),此处的start会根据不同的系统,分别调用不同的api,创建好之后的线程,再单独去执行run(所以说,start的本质是调用系统api,系统的api

一种改进的red5集群方案的应用、基于Red5服务器集群负载均衡调度算法研究

转自: 一种改进的red5集群方案的应用: http://wenku.baidu.com/link?url=jYQ1wNwHVBqJ-5XCYq0PRligp6Y5q6BYXyISUsF56My8DP8dc9CZ4pZvpPz1abxJn8fojMrL0IyfmMHStpvkotqC1RWlRMGnzVL1X4IPOa_  基于Red5服务器集群负载均衡调度算法研究 http://ww

java线程深度解析(六)——线程池技术

http://blog.csdn.net/Daybreak1209/article/details/51382604 一种最为简单的线程创建和回收的方法: [html]  view plain copy new Thread(new Runnable(){                @Override               public voi

java线程深度解析(五)——并发模型(生产者-消费者)

http://blog.csdn.net/Daybreak1209/article/details/51378055 三、生产者-消费者模式     在经典的多线程模式中,生产者-消费者为多线程间协作提供了良好的解决方案。基本原理是两类线程,即若干个生产者和若干个消费者,生产者负责提交用户请求任务(到内存缓冲区),消费者线程负责处理任务(从内存缓冲区中取任务进行处理),两类线程之

java线程深度解析(四)——并发模型(Master-Worker)

http://blog.csdn.net/daybreak1209/article/details/51372929 二、Master-worker ——分而治之      Master-worker常用的并行模式之一,核心思想是由两个进程协作工作,master负责接收和分配任务,worker负责处理任务,并把处理结果返回给Master进程,由Master进行汇总,返回给客

java线程深度解析(二)——线程互斥技术与线程间通信

http://blog.csdn.net/daybreak1209/article/details/51307679      在java多线程——线程同步问题中,对于多线程下程序启动时出现的线程安全问题的背景和初步解决方案已经有了详细的介绍。本文将再度深入解析对线程代码块和方法的同步控制和多线程间通信的实例。 一、再现多线程下安全问题 先看开启两条线程,分别按序打印字符串的

java线程深度解析(一)——java new 接口?匿名内部类给你答案

http://blog.csdn.net/daybreak1209/article/details/51305477 一、内部类 1、内部类初识 一般,一个类里主要包含类的方法和属性,但在Java中还提出在类中继续定义类(内部类)的概念。 内部类的定义:类的内部定义类 先来看一个实例 [html]  view plain copy pu

Golang进程权限调度包runtime

关于 runtime 包几个方法: Gosched:让当前线程让出 cpu 以让其它线程运行,它不会挂起当前线程,因此当前线程未来会继续执行GOMAXPROCS:设置最大的可同时使用的 CPU 核数Goexit:退出当前 goroutine(但是defer语句会照常执行)NumGoroutine:返回正在执行和排队的任务总数GOOS:目标操作系统NumCPU:返回当前系统的 CPU 核数量 p

文章解读与仿真程序复现思路——电力自动化设备EI\CSCD\北大核心《考虑燃料电池和电解槽虚拟惯量支撑的电力系统优化调度方法》

本专栏栏目提供文章与程序复现思路,具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源程序擅长文章解读,论文与完整源程序,等方面的知识,电网论文源程序关注python