Java多线程基础-1:通俗简介操作系统之进程的管理与调度

简介: 操作系统是一个复杂的软件,具备许多功能。其中,进程的管理与调度是与我们密切相关的。本文将对操作系统功能中进程管理与调度作出介绍。

操作系统是一个复杂的软件,具备许多功能。其中,进程的管理与调度是与我们密切相关的。本文将对操作系统功能中进程管理与调度作出介绍。


*注意:为了便于理解,本文中谈到的进程,指的是仅包含一个线程的进程。



一、进程


进程(process):也叫任务,它是操作系统级别的一个基本概念,可以简单将其理解为“正在运行的程序”。操作系统执行加载到内存中的某个程序时,既包含该程序所需要的资源,同时还对这些资源进行基本的内存边界管理。


比如,在我们的资源管理器中,有一类文件是以 .exe 为后缀名的,这代表这这一个文件是一个可执行文件(可以理解为是一个程序)。当我们不去双击执行的时候,这个文件只是安静地躺在硬盘上;而当我们去运行它的时候,程序就跑起来了,在系统中形成了一个进程,操作系统便开始执行该程序所内含的逻辑。


在任务管理器中,我们可以查看到当前系统中有哪些进程。



win11操作系统下的进程页面


如图,该进程页面展示的就是笔者当前电脑上所运行的所有程序,也即进程。


二、 进程管理


1、进程管理的概念


电脑上有的进程往往是非常多的。进程一多,就需要操作系统进行管理。进程的管理分为两步:


描述一个进程。使用结构体或类,把一个进程所包含的信息表示出来。

组织这些进程。使用一定的数据结构,把这些结构体或对象放到一起。

可以用学校中学生的管理来类比系统中进程的管理。在学校里如何管理学生?通常会统计学生的信息,然后通过如表格这样的数据结构把学生的信息存放起来。当要开始一些后续的工作比如给学生发奖学金时,就可以遍历这些表格,查找到学生的信息。


同样的,进程管理的目的也是为了操作系统能更好地开展后续的一些其它工作。  


2、进程结构体的核心属性


进程结构体也称作PCB(Process Control Block,进程控制块)。它包括以下几个核心的属性:

1、pid。每个进程的唯一的身份标识。




任务管理器进程页面可以通过PID搜索进程


2、内存指针。它描述当前进程所使用的内存是哪一部分。进程要跑起来,自然需要消耗一定的硬件资源,如内存。比如我们写了一段代码并运行,那么在系统中就会产生一个进程;而如果在代码中我们创建了变量,那这些变量就需要被分配一定的内存空间。那么就势必要管理一部分内存空间,以便我们的进程来使用。内存指针标识了当进程运行的时候,使用了哪些内存上的资源。


3、文件描述符表。硬盘上存储的数据,往往是以文件为单位来进行整理的。进程每打开一个文件,就会产生一个“文件描述符”。一个进程可能会打开多个文件,这就对应了一组“文件描述符”。把这些文件描述符放到一个顺序表这样的结构里,就构成了一个“文件描述符表”。文件描述符表标识了当进程运行的时候,使用了哪些硬盘上的资源。


由上面三个核心属性可知,进程的运行需要从操作系统那里申请资源,也即:进程是操作系统进行资源分配(包括但不限于内存资源、硬盘资源、CPU资源)的基本单位。类似于生活中政府给一个小区的居民发放物资,一个家庭一个家庭地分发,那么就可以说这里家庭就是物资分发的基本单位。


PCB的属性非常多,除了上面提到的三个,另外,与进程的调度、并发与并行相关的属性也很关键。


3、进程调度


(1)为什么需要进程调度?


每个程序相当于一组“二进制指令”的集合。我们通过文本编辑器的方式打开微信的可执行文件:




可能就会出现这样的提示。 这些二进制指令,就依靠CPU来运行。


CPU中有一个概念叫“核心数”。我们打开任务管理器的性能页面可以查询到计算机的核心数和逻辑处理器数,也就是我们通常所说的 x核x线程 。如下面的参数就表示计算机是12核16线程的。对于这个概念,可以这么理解:CPU里有12个干活的人,但有一些干活的人特别能干,一个顶俩(大小核),相当于12个人可以同时干16个人干的活。


这个参数也称为,12个物理核心,16个逻辑核心。



然而,CPU再能干,同一时间也只能干16人份的活。但是实际上,我们需要同时干的活有100个。实际上要干的任务多,干活的人少。



为了应对这样同时执行多任务的需求,CPU采取并行与并发两种方式。为了支持并行与并发,就需要系统能够实现进程调度。

下面先简单介绍一下并行与并发的基本概念。

(2)并行


同一时刻,两个核心,同时执行两个进程。此时这两个进程就是并行执行的。



并行


(3)并发


一个核心,先执行进程1,执行一会儿之后再去执行进程2,再执行一会儿之后,再去执行进程3……此时,虽然微观上进程1和进程2、进程3之间并不是同时执行的,但只要这里切换的速度足够快,那用户感知起来,进程1、2、3就是“同时”执行的。并发,就是微观上分布执行,宏观上同时执行的方式。



并发


通过并行+并发的方式,16个核心也可以同时执行100 个任务了。很多时候也把并发+并行结合,统称作并发。这完全由操作系统自身控制的,用户是感知不到的。


为了实现这样的切换能够高效、有条不紊,我们需要有合理的进程调度机制。


(4)进程结构体中辅助进行进程调度的属性


在 二.2 中,我们介绍了PCB里描述内存资源使用情况的内存指针,以及描述硬盘资源使用情况的文件描述符表,这里就要介绍描述CPU资源相关的属性。这些属性,都是辅助进行进程调度的。


1、进程状态。简单认为,进程的状态主要有就绪态和阻塞态这两种。


       就绪态:该进程已经准备好,随时可上CPU执行。


       阻塞态:该进程暂时无法上CPU执行。


2、进程的优先级。进程之间的调度不一定是“公平”的,有的需要优先调度。


3、进程的上下文。概括来讲,“上下文”就是描述当前程序执行到哪里了的这样一个“存档记录”。进程在暂时离开CPU的时候,就要把当前的运行结果进行存档,等下次该进程再次回到CPU的时候,再恢复之前的存档,这样该进程就能从上次的结果继续向后执行了。注意,如果进程已经结束,就不会有存档了。


       所谓“上下文”,它具体指的是,进程运行过程中CPU内部一系列寄存器的值。寄存器的种类有很多,其中最典型的作用就是保存当前进程执行的中间结果,包括程序具体运行到了哪一条指令。进程离开CPU,就需要把这些寄存器的值保存到PCB的上下文字段中(存档);同一进程下次再回到CPU,再把PCB中的值恢复到寄存器中(读档)。


4、进程的记账信息。用于统计每个进程在CPU上执行了多久,这是进程调度的一个参考依据。


4、进程结构体的组织结构


操作系统双向链表这样的结构来组织PCB。创建了一个进程,就是创建了一个链表的表结点;销毁一个进程,就是销毁了一个表结点。遍历进程列表,就是遍历链表。





相关文章
|
1月前
|
调度 开发者 Python
深入浅出操作系统:进程与线程的奥秘
在数字世界的底层,操作系统扮演着不可或缺的角色。它如同一位高效的管家,协调和控制着计算机硬件与软件资源。本文将拨开迷雾,深入探索操作系统中两个核心概念——进程与线程。我们将从它们的诞生谈起,逐步剖析它们的本质、区别以及如何影响我们日常使用的应用程序性能。通过简单的比喻,我们将理解这些看似抽象的概念,并学会如何在编程实践中高效利用进程与线程。准备好跟随我一起,揭开操作系统的神秘面纱,让我们的代码运行得更加流畅吧!
|
1月前
|
Java 对象存储 开发者
如何找出Java进程占用CPU高的元凶
本文记录了一次Java进程CPU占用率过高的问题和排查思路。
|
1月前
|
存储 算法 调度
深入理解操作系统:进程调度的奥秘
在数字世界的心脏跳动着的是操作系统,它如同一个无形的指挥官,协调着每一个程序和进程。本文将揭开操作系统中进程调度的神秘面纱,带你领略时间片轮转、优先级调度等策略背后的智慧。从理论到实践,我们将一起探索如何通过代码示例来模拟简单的进程调度,从而更深刻地理解这一核心机制。准备好跟随我的步伐,一起走进操作系统的世界吧!
|
1月前
|
算法 调度 开发者
深入理解操作系统:进程与线程的管理
在数字世界的复杂编织中,操作系统如同一位精明的指挥家,协调着每一个音符的奏响。本篇文章将带领读者穿越操作系统的幕后,探索进程与线程管理的奥秘。从进程的诞生到线程的舞蹈,我们将一起见证这场微观世界的华丽变奏。通过深入浅出的解释和生动的比喻,本文旨在揭示操作系统如何高效地处理多任务,确保系统的稳定性和效率。让我们一起跟随代码的步伐,走进操作系统的内心世界。
|
2月前
|
消息中间件 算法 调度
深入理解操作系统:进程管理与调度
操作系统是计算机系统的核心,负责管理和控制硬件资源、提供用户接口以及执行程序。其中,进程管理是操作系统的重要组成部分,它涉及到进程的创建、调度、同步和通信等方面。本文将深入探讨进程管理的基本概念、进程调度算法以及进程间的同步和通信机制。通过本文的学习,读者将能够更好地理解操作系统的工作原理,并掌握进程管理的基本技能。
63 11
|
2月前
|
算法 调度 UED
深入理解操作系统:进程管理与调度策略
操作系统作为计算机系统的核心,其进程管理和调度策略对于系统性能和用户体验至关重要。本文将通过直观的代码示例和浅显易懂的语言,带领读者了解操作系统如何有效管理进程以及常见的进程调度算法。我们将从进程的基本概念出发,逐步深入到进程状态、进程控制块(PCB)的作用,最后探讨不同的调度算法及其对系统性能的影响。无论您是初学者还是有一定基础的开发者,都能从中获得有价值的信息。
|
2月前
|
负载均衡 算法 调度
深入理解操作系统:进程管理与调度
在数字世界的心脏,操作系统扮演着至关重要的角色。它如同一位精明的指挥家,协调着硬件资源和软件需求之间的和谐乐章。本文将带你走进操作系统的核心,探索进程管理的艺术和调度策略的智慧。你将了解到进程是如何创建、执行和消亡的,以及操作系统如何巧妙地决定哪个进程应该在何时获得CPU的青睐。让我们一起揭开操作系统神秘的面纱,发现那些隐藏在日常计算背后的精妙机制。
|
2月前
|
调度 开发者
深入理解操作系统之进程调度
在计算机科学领域,操作系统是核心的一环,它管理着计算机硬件资源,并提供接口供上层软件运行。本文将通过深入浅出的方式,探讨操作系统中至关重要的一个概念——进程调度。我们将从基础理论出发,逐步展开讲解进程调度的原理和实现,并配以实际代码示例,旨在帮助读者更好地理解和掌握这一主题。文章不仅适合初学者建立基础,也适合有一定基础的开发者深化理解。
|
2月前
|
算法 调度 UED
深入理解操作系统:进程管理与调度策略
【10月更文挑战第40天】在数字世界中,操作系统是连接硬件与软件的桥梁,它管理着计算机资源和提供用户服务。本文将深入探讨操作系统中的进程管理与调度策略,揭示它们如何协调多任务运行,保证系统高效稳定运作。通过代码示例,我们将展示进程创建、执行以及调度算法的实际应用,帮助读者构建对操作系统核心机制的清晰认识。
|
2月前
|
并行计算 数据处理 调度
Python中的并发编程:探索多线程与多进程的奥秘####
本文深入探讨了Python中并发编程的两种主要方式——多线程与多进程,通过对比分析它们的工作原理、适用场景及性能差异,揭示了在不同应用需求下如何合理选择并发模型。文章首先简述了并发编程的基本概念,随后详细阐述了Python中多线程与多进程的实现机制,包括GIL(全局解释器锁)对多线程的影响以及多进程的独立内存空间特性。最后,通过实例演示了如何在Python项目中有效利用多线程和多进程提升程序性能。 ####