首页 > 系统相关 >操作系统的心脏:进程调度的基本过程

操作系统的心脏:进程调度的基本过程

时间:2024-09-15 17:22:37浏览次数:13  
标签:心脏 操作系统 调度 线程 进程 优先级 执行

欢迎浏览高耳机的博客

希望我们彼此都有更好的收获

感谢三连支持!

进程调度操作系统中至关重要的组成部分,它负责决定哪个进程应该在何时使用CPU。了解计算机进行进程调度的过程和原理,对我们了解计算机以及进行多线程编程大有帮助!

在操作系统中,进程是系统分配资源的最小单位,线程是系统调度的最小单位;进程包含线程,每个进程至少存在一个线程,即主线程;同一个进程的线程之间共享一个内存空间 ;

一.进程选择

假设单核cpu的操作系统正在运行三个进程:A、B、C。这些进程都已经准备好执行,并且都在就绪队列中等待CPU时间,那么操作系统会按照怎样的调度顺序进行分配呢?以下是常用的系统调度算法:

  • 先来先服务(FCFS):调度器按照进程到达就绪队列的顺序选择进程。如果A是第一个到达的,那么它将首先被执行,接着是B,最后是C。
  • 最短作业优先(SJF):调度器选择预计运行时间最短的进程。如果B预计只需要1单位时间,而A和C都需要2单位时间,那么B将被优先执行。
  • 轮转(Round Robin):调度器给每个进程分配一个时间片(例如,每个进程1单位时间)。如果A、B和C都在就绪队列中,它们将轮流执行,每个进程执行1单位时间,然后传递给下一个。

在单核CPU上,操作系统通过时间分片技术,将CPU时间分配给不同的进程或线程。每个进程或线程执行一小段时间后,操作系统会暂停当前进程或线程的执行,切换到另一个进程或线程。这种快速切换给人一种它们在同时运行的错觉,但实际上,它们是交替执行的。

而多核CPU拥有多个核心,每个核心可以独立执行一个线程或进程。这意味着多个线程或进程可以在同一时间真正地并行执行,而不是通过快速切换来模拟。这种并行执行可以显著提高计算效率,特别是在处理多任务或需要大量计算资源的应用时。

二. 上下文切换

假设进程A正在执行,但进程B被调度器选中。这时,操作系统需要进行上下文切换。

  • 保存进程A的状态:包括它的寄存器值、程序计数器等,以便它可以在将来恢复执行。
  • 加载进程B的状态:操作系统加载进程B之前保存的状态,使其能够从上次停止的地方继续执行。

三. 执行

进程B开始执行。它可能执行一个计算密集型任务,直到完成,或者它可能在等待一个文件的读取操作时被阻塞。

  • 执行完成:如果进程B完成了它的任务,它将释放所有资源并终止。
  • 阻塞:如果进程B在执行过程中需要从硬盘读取数据,它可能会被阻塞,直到数据可用。

四. 时间片管理

在轮转调度算法中,每个进程被分配一个时间片。

  • 时间片结束:如果进程B在1单位时间的时间片结束前没有完成,它将被放回就绪队列的末尾,等待下一个时间片。
  • 时间片内完成:如果进程B在时间片内完成了任务,它将释放资源并终止

五. 优先级调整

操作系统可能会根据进程的类型或用户的需求调整进程的优先级。

  • 静态优先级:进程A在创建时被赋予高优先级,因为它是一个关键任务。
  • 动态优先级:进程C最初优先级较低,但如果它等待I/O操作时间过长,系统可能会提高它的优先级,以提高响应性。

六. I/O操作和阻塞

进程D正在执行,但需要从硬盘读取数据。

  • 阻塞:进程D在等待数据时被阻塞,操作系统将选择另一个就绪进程(如进程E)来执行。
  • I/O完成:一旦数据读取完成,进程D将从阻塞状态恢复,并继续执行。

七. 进程终止

进程E完成了它的任务。

  • 资源释放:进程E释放了它所占用的所有资源,如内存和文件句柄。
  • 调度器选择新进程:调度器将从就绪队列中选择下一个进程来执行。

通过这些步骤,操作系统能够有效地管理多个进程,确保CPU资源得到合理分配,同时提高系统的整体性能和响应速度。 


希望这篇博客能为你理解操作系统进程调度提供一些帮助。

如有不足之处请多多指出。

我是高耳机。



 

标签:心脏,操作系统,调度,线程,进程,优先级,执行
From: https://blog.csdn.net/Chunfeng6yugan/article/details/142285441

相关文章

  • Linux操作系统入门(二)
    完成了前篇所进行的VMware下载安装,并在其内配置了CentOS7的linux操作系统之后,我们得以正式进入了Linux的世界。一.安装FinalShell在本篇中,为了更好的在Windows系统上对虚拟机中的linux操作系统进行操作,我们需要下载一款新的应用程序————FinalShell(其官网如下所示)。ht......
  • Linux操作系统入门(三)
    _______________________________________________一.Linux操作系统的文件结构相比于Windows操作系统的C,D,E等盘符,Linux操作系统仅有一个"/"符号的根目录.这其中存在一个显著的不同,Linux操作系统使用的是斜杠"/",而Windows操作系统中使用的是反斜杠"\"文件路径示例:"/Mus......
  • 国产RAID卡2230-10i windows&Linux操作系统安装指导
    环境准备:1.准备2个U盘。一个刻录系统,一个装载驱动2.需保持CSM为UEFI状态和PCIEDEVICESLIST 下2230-10i的卡为UEFI状态,如图:环境排查:由于......
  • linux 操作系统下的compress命令介绍和使用案例
    linux操作系统下的compress命令介绍和使用案例compress命令是Linux系统中用于文件压缩的一个工具,主要使用Lempel-Ziv-Welch(LZW)算法进行数据压缩。压缩后,文件的扩展名将变为“.Z”。虽然compress命令在历史上有其重要性,但在现代Linux系统中,它已经被更高效的压缩工具如gzip......
  • linux 操作系统下cp命令介绍及案例应用
    linux操作系统下cp命令介绍及案例应用cp命令是Linux操作系统中用于复制文件和目录的基本命令。它的功能强大,适用于各种文件管理任务cp命令概述基本语法:bashcp[options]<source><destination>功能:复制单个文件或多个文件到指定位置。递归复制目录及其内容。选项可......
  • 基于 V2G 技术的电动汽车实时调度策略(Matlab代码实现)
    ......
  • 基于 V2G 技术的电动汽车实时调度策略(Matlab代码实现)
    ......
  • 【SpringBoot】调度和执行定时任务--Quartz(超详细)
    Quartz是一个功能强大的任务调度框架,广泛用于在Java应用程序中定时执行任务,同时它支持Cron表达式、持久化任务、集群等特性。以下是Quartz的详细使用教程,包括安装、基本概念、简单示例和高级功能。1.安装Quartz首先,在你的项目中添加Quartz依赖。对于Maven项......
  • Go runtime 调度器精讲(六):非 main goroutine 运行
    原创文章,欢迎转载,转载请注明出处,谢谢。0.前言在Goruntime调度器精讲(三):maingoroutine创建介绍了maingoroutine的创建,文中我们说maingoroutine和非maingoroutine有区别。当时卖了个关子并未往下讲,这一讲我们会继续介绍非maingoroutine(也就是go关键字创建的......
  • 单机快速部署开源、免费的分布式任务调度系统——Apache DolphinScheduler
    本文主要为大家介绍ApacheDolphinScheduler的单机部署方式,方便大家快速体验。环境准备需要Java环境,这是一个老生常谈的问题,关于Java环境的安装与配置期望大家都可以熟练掌握。验证java环境java-version下载安装包并解压使用wget下载安装包wgethttps://dlcdn.apache.......