> 文档中心 > 浅谈进程和进程的调度

浅谈进程和进程的调度

目录

操作系统

  • 操作系统是一组管理计算机资源的软件。常见的操作系统有:Windows、Linux、Mac、ios、Android等等。
  • 操作系统的作用:1.管理各种硬件设备防止硬件设备被应用程序滥用。2.对各种软件提供各种API接口使其对硬件设备的管理更加简单,同时为各种软件提供稳定的运行环境
    在这里插入图片描述

进程

  • 进程就是正在运行(跑起来)的可执行文件(.exe)。当这些exe文件开始运行时,操作系统就会把exe给加载到内存中,然后CPU开始执行exe文件中存储的一些二进制指令。 在这里插入图片描述

进程的管理

操作系统对于进程的管理可以分成两个部分

  1. 描述一个进程(进程的各种属性)
    在操作系统中,描述进程的结构被称为PCB(Process Control Block)块。
    进程的创建就是通过在操作系统上创建出PCB,然后把创建好的PCB加入到双向链表中。
    进程的销毁就是将链表中对应的PCB找到并删除。
    PCB中关于进程的一些属性:
    1. pid(进程id):进程的身份标识。在这里插入图片描述

    2. 内存指针:指明该进程存储的执行指令和待处理数据具体存放在内存中的哪个地方。

    3. 文件描述符表:进程运行过程中需要用到的文件的相关信息的记录。对于java代码而言,当你运行一个代码文件,系统就会自动打开三个文件:System.in(标准输入),System.out(标准输出),System.err(标准错误)。

    4. 一个进程的正常运行需要内存、硬盘、CPU等硬件设备去分配相应的资源。

  2. 通过一种数据结构将各个进程连接起来,方便增删改查
    对于Linux操作系统(开源),连接各个PCB块的数据结构是双向链表。

进程的调度

何为进程的调度?我们知道CPU中的核心数是有限的,一般的PC的CPU核心为6核或者8核的。但我们知道一个PC上运行的进程数是非常多的,而且这些进程是"同时"在进行的。所以CPU处理这些进程之间的时间分配就是进程的调度。
在介绍进程是如何调度之前,我们首先需要了解两个概念:并发和并行。

  1. 并行:在微观上,多个CPU核心同时处理多个进程
  2. 并发:在微观上,1个CPU核心上先处理进程A的一部分,然后接着处理进程B的一部分,然后接着处理进程A,这种在很快的频率下切换处理不同的进程的操作叫做并发
    并行和并发都是在微观上的,在宏观上,我们看到的就是很多个进程同时在执行,而操作系统对于某个进程的调度(并行or并发)是随机的,不可控的。

在之前的介绍中,我们已经介绍了PCB中的进程的属性有pid,内存指针,文件描述符表。这些属性数所有进程必备的。接下来,我们来介绍关于进程的调度的相关属性

  1. 状态 :描述一个进程当前是否能够被处理。常见的状态有就绪状态,阻塞状态/睡眠状态等等。
  2. 优先级:对不同进程分配时间的多少的体现,优先级高的进程分配到处理时间更长。
  3. 记账信息:统计每个进程分别都执行了多久,等待了多久,执行了哪些具体指令。方便协调不同进程之间的处理
  4. 上下文:记录进程处理的具体程度。对于并发处理,一个进程A可能在处理了一部分之后开始处理另一个进程B,为了方便下一次处理进程A时能够从之前处理的进度时开始接着处理时做的一个记录。类似于游戏中的读档存档。

进程的调度其实就是操作系统再考虑如何把CPU的资源分配给各个进程。我们知道,在操作系统上是同时运行着多个进程的,而这些进程的数据均存放在内存中,为了防止某一个进程的崩溃而导致其他进程的崩溃,各个进程的待处理数据都是存放在内存中对应的不同的地方,我们管内存中存储不同进程的相关数据叫做虚拟地址空间。内存中的虚拟地址空间个数和CPU中的核心数相关。在这里插入图片描述
我们管这个叫做”进程的独立性“。
但如果进程之间过于独立,会导致进程和进程之间的交互低效。因此,在内存中存在一块公共空间,这处空间负责处理进程之间的交互。我们管这个叫做“进程间的通信”。常见的进程间的通信的方式有文件操作和网络操作(Socket)

总结

本次主要介绍了操作系统是如何管理进程的。首先创建出PCB用以描述一个进程,然后通过双向链表(也可能是别的数据结构)将这些PCB连接起来。同时我们还具体介绍了PCB中关于进程的一些具体属性,并且介绍了进程的调度进程的独立性以及进程间的通信。希望对大家有所收获!