热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

操作系统进程调度的层次

进程调度分为3个层次,高级调度(作业调度)、中级调度(内存调度)、低级调度(进程调度)。为什么会有调度问题,当资源有限,但是又有很多任务要处理,所以就有了按某种规则区调度的问题。 

进程调度分为3个层次,高级调度(作业调度)、中级调度(内存调度)、低级调度(进程调度)。

为什么会有调度问题,当资源有限,但是又有很多任务要处理,所以就有了按某种规则区调度的问题。

 

1.高级调度

《操作系统-进程调度的层次》

因为内存空间有限,不能把用户提交的任务全部放进内存,因此就要按某种规则来决定作业调入内存的顺序。

高级调度(作业调度),就是操作系统按一定的规则将后备队列的一个或多个任务调入内存中,并为该任务分配内存等必要的资源并且建立相应的进程快(建立PCB),以使得他获得竞争处理器的权利。

高级调度是内存和外存的调度。每个作业只会调入一次,调出一次。只有作业调入时才会建立PCB,在任务调出时才撤销PCB。高级调度主要是调入的问题。调入的时机由操作系统决定,但是调出的时机一定是任务结束的时候。

 

2.中级调度

《操作系统-进程调度的层次》

在有了虚拟内存技术之后,可以把暂时不可运行的进程调入外存等待,直到内存有足够的空间再把挂起的进程重新调入内存。

这么做的目的是为了提高内存利用率和系统吞吐量。

暂时调度到外存的状态叫做挂起态。但是要注意的是,PCB(进程控制块)并不会被调入外存,而是会常驻内存,PCB会记录程序数据在外存存放的位置,进程状态等。操作系统会根据PCB来保持对进程的监控、管理。被挂起的进程PCB进程会在挂起队列中。

中级调度就是决定要将那个挂起的进程重新调入内存中。一个进程会被多次调入调出,因此中级调度发生的频率比高级调度高。

 

3.低级调度

《操作系统-进程调度的层次》

低级调度(进程调度),就是按照某种方法和策略从就绪队列中选取一个进程,将处理器分配给他。

进程调度是系统中频率最高的一种,也是最基本的一种,每种操作系统都要配置低级调度,平均几十毫秒一次。

 

最后补充一下进程的七种状态:

《操作系统-进程调度的层次》


推荐阅读
  • 本文探讨了如何利用数组来构建二叉树,并介绍了通过队列实现的二叉树层次遍历方法。通过具体的C++代码示例,详细说明了构建及打印二叉树的过程。 ... [详细]
  • 本文详细记录了一位Java程序员在Lazada的面试经历,涵盖同步机制、JVM调优、Redis应用、线程池配置、Spring框架特性等多个技术点,以及高级面试中的设计问题和解决方案。 ... [详细]
  • RabbitMQ 核心组件解析
    本文详细介绍了RabbitMQ的核心概念,包括其基本原理、应用场景及关键组件,如消息、生产者、消费者、信道、交换机、路由键和虚拟主机等。 ... [详细]
  • 深入解析Java并发之ArrayBlockingQueue
    本文详细探讨了ArrayBlockingQueue,这是一种基于数组实现的阻塞队列。ArrayBlockingQueue在初始化时需要指定容量,因此它是一个有界的阻塞队列。文章不仅介绍了其基本概念和数据结构,还深入分析了其源码实现,包括各种入队、出队、获取元素和删除元素的方法。 ... [详细]
  • SPFA算法详解与应用
    当图中包含负权边时,传统的最短路径算法如Dijkstra不再适用,而Bellman-Ford算法虽然能解决问题,但其时间复杂度过高。SPFA算法作为一种改进的Bellman-Ford算法,能够在多数情况下提供更高效的解决方案。本文将详细介绍SPFA算法的原理、实现步骤及其应用场景。 ... [详细]
  • 本文详细介绍了Socket在Linux内核中的实现机制,包括基本的Socket结构、协议操作集以及不同协议下的具体实现。通过这些内容,读者可以更好地理解Socket的工作原理。 ... [详细]
  • Java高级工程师学习路径及面试准备指南
    本文基于一位朋友的PDF面试经验整理,涵盖了Java高级工程师所需掌握的核心知识点,包括数据结构与算法、计算机网络、数据库、操作系统等多个方面,并提供了详细的参考资料和学习建议。 ... [详细]
  • 本文详细介绍了JavaScript中数组的转换方法、栈方法、队列方法、重排序方法及操作方法,包括toLocaleString()、toString()、valueOf()等基本转换方法,以及push()、pop()、shift()、unshift()等用于模拟栈和队列行为的方法。 ... [详细]
  • 本文详细介绍了如何在PHP中使用Memcached进行数据缓存,包括服务器连接、数据操作、高级功能等。 ... [详细]
  • HDFS数据读写流程详解
    本文详细解析了HDFS(Hadoop分布式文件系统)中的数据读写过程,包括从客户端发起请求到最终完成数据传输的每一个关键步骤。 ... [详细]
  • LeetCode 102 - 二叉树层次遍历详解
    本文详细解析了LeetCode第102题——二叉树的层次遍历问题,提供了C++语言的实现代码,并对算法的核心思想和具体步骤进行了深入讲解。 ... [详细]
  • Awk是一款功能强大的文本分析与处理工具,尤其在数据解析和报告生成方面表现突出。它通过读取由换行符分隔的记录,并按照指定的字段分隔符来划分和处理这些记录,从而实现复杂的数据操作。 ... [详细]
  • 一家位于长沙的知名网络安全企业,现面向全国诚聘高级后端开发工程师,特别欢迎具有一线城市经验的技术精英回归故乡,共创辉煌。 ... [详细]
  • 深入理解线程池及其基本实现
    本文探讨了线程池的概念、优势及其在Java中的应用。通过实例分析不同类型的线程池,并指导如何构建一个简易的线程池。 ... [详细]
  • 本文探讨了异步编程的发展历程,从最初的AJAX异步回调到现代的Promise、Generator+Co以及Async/Await等技术。文章详细分析了Promise的工作原理及其源码实现,帮助开发者更好地理解和使用这一重要工具。 ... [详细]
author-avatar
望天打股
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有