一文读懂进程的前世今生

1. 引子

文章开始之前,我们先思考几个问题:

  1. 到底什么是进程?
  2. 操作系统为什么要引入进程?
  3. 进程的出现解决了什么问题?是如何解决的?

本文我们来分析一下进程诞生的背景。进程的概念起源于操作系统,是操作系统最核心的概念,所以要想真正理解进程,我们需要从操作系统的起源讲起。

2. 操作系统

什么是操作系统?

  • 操作系统位于计算机硬件与应用软件之间,本质也是一个软件。
  • 操作系统是计算机的【管理者】,负责管理硬件资源(如 CPU、内存、存储)和软件运行,为用户和程序提供使用计算机的接口。

为什么需要操作系统?

  • 简单说就是为用户程序提供一个更简单、更清晰的计算机模型,并管理CPU、内存等硬件资源。

2.1 操作系统的发展史

  1. 无操作系统阶段

    • 背景:早期计算机(如 ENIAC)主要用于科学计算,用户直接操作硬件。
    • 特点:
      • 无操作系统:程序员和计算机之间的交互完全依赖于手工操作,缺乏统一的资源调度和管理。
      • 人工操作:人工调度任务,无自动化。
    • 问题:效率低,计算机只能运行单个任务。
  2. 批处理系统阶段

    • 背景:由于当时的计算机非常昂贵,人们自然希望减少机器的空闲时间。为此,批处理系统应运而生。
    • 特点:
      • 作业队列:作业不再由用户手动操作,而是排入队列,计算机自动依次执行,提高了计算机的利用率。
      • 操作系统的雏形:出现了管理计算资源的早期软件,即操作系统。
      • 程序设计语言的出现:FORTRAN 等高级语言的引入,使编程更加高效、抽象。
      • 进程管理的雏形:为支持多个作业的高效管理,出现了早期的进程概念。
    • 问题:
      • 人工参与:尽管作业可以自动排队执行,但作业的提交和结果处理仍需要人为干预,流程不够完全自动化。
      • 顺序计算:作业按照先后顺序依次执行,缺乏并行处理能力。
  3. 多道程序阶段

    • 背景:随着计算机硬件的逐步提升和计算任务的增加,单一程序的顺序执行效率无法满足需求。用户希望能够同时运行多个程序,提高系统资源的利用率。
    • 特点:
      • 并发的初步探索:多道程序设计允许计算机将多个程序同时加载到内存中,通过时间共享的方式交替运行不同的程序。
      • 进程的概念:随着多个程序并发运行,进程管理逐渐成为操作系统的重要组成部分,操作系统开始提供进程调度、内存管理等机制。
  4. 分时系统阶段

  • 背景:随着计算机硬件(如CPU性能和内存容量)的进步,计算机系统开始支持多个用户同时访问。分时系统(Time-Sharing) 因此诞生。
  • 特点
    • 真正的多任务操作:分时系统允许多个用户同时使用一台计算机,每个用户有自己的虚拟时间片。
    • 进程调度和管理:系统需要实现更加复杂的调度算法,以公平合理地为多个用户分配计算资源。
    • 共享系统资源:多个用户共享计算机资源,如何避免用户之间的干扰和资源争夺成为了新问题。
  1. 实时操作系统阶段
    • 背景:工业控制、航空航天等领域需要对外界输入迅速做出反应。
    • 特点:保证任务在规定时间内完成,具有强实时性和可靠性。
  2. 单用户操作系统阶段
    • 背景:个人计算机的兴起,计算机走向家庭和办公场景。
    • 特点:面向单用户设计,操作简单。
  3. 图形化操作系统阶段
    • 背景:用户对计算机的需求从命令行操作转向更直观的界面。
    • 特点:图形用户界面(GUI)使用户通过鼠标点击和窗口操作计算机。
  4. 网络操作系统阶段
    • 背景:互联网的兴起,计算机开始联网协作。
    • 特点:操作系统集成了网络功能,支持多用户远程操作。
  5. 移动和嵌入式操作系统阶段
    • 背景:移动设备(智能手机、平板)和物联网(IoT)设备兴起。
    • 特点:专为资源受限设备设计,具有低功耗、轻量化特点。

3. 进程

3.1 进程诞生的背景

计算机刚出现的时候,是为了解决数学计算的问题,因为很多大量的计算通过人力去完成是很耗时间和人力成本的。

在最初的时候,计算机只能接受一些特定的指令,用户输入一个指令,计算机就做一个操作。 当用户在思考或者输入数据时,计算机就在等待。显然,这样效率会很低下,因为很多时候,计算机处于等待用户输入的状态。

那么,能不能把一系列需要操作的指令预先写下来,形成一个清单,然后一次性交给计算机,计算机不断地去读取指令来进行相应的操作?

就这样, 批处理操作系统诞生了。用户可以将需要执行的多个程序写在磁带上,然后交由计算机去读取并逐个地执行这些程序,并将输出结果写到另一个磁带上。

虽然批处理操作系统的诞生极大地提高了任务处理的便捷性,但是仍然存在一个很大的问题:假如有两个任务 A 和 B,任务 A 在执行到一半的过程中,需要读取大量的数据输入(I/O操作),而此时CPU 只能静静地等待任务 A 读取完数据才能继续执行,这样就白白浪费了 CPU 资源。

如下图所示:

在这里插入图片描述

人们于是想:

  • 能否在 任务 A 读取数据的过程中,让 任务B 去执行;
  • 当 任务A 读取完数据之后,让 任务B 暂停,然后让 任务A 继续执行?

在这里插入图片描述

但是这样就有一个问题,原来每次都是一个程序在计算机里面运行,也就说内存中始终只有一个程序的运行数据。而如果想要 任务A 执行 I/O操作 的时候,让 任务B 去执行,必然内存中要装入多个程序,那么如何处理呢?多个程序使用的数据如何进行辨别呢?并且,当一个程序运行暂停后,后面如何恢复到它之前执行的状态呢?

这个时候,人们就发明了进程,用进程来对应一个程序,每个进程对应一定的内存地址空间,并且只能使用它自己的内存空间,各个进程间互不干扰。 并且,进程保存了程序每个时刻的运行状态,这样就为进程切换提供了可能。当进程暂停时,它会保存当前进程的状态(比如进程标识、进程的使用的资源等),在下一次重新切换回来时,便根据之前保存的状态进行恢复,然后继续执行。

正是进程的诞生,让并发成为可能。

3.2 进程的定义

进程是一个程序在计算机中执行的实例。它不仅包括程序的代码,还包括程序的当前状态、资源(如内存、CPU时间等)、程序计数器、堆栈和数据等。 进程是操作系统进行资源管理和调度的基本单位。

简单来说,进程就是程序在运行时的【容器】,它包含了程序执行所需要的一切资源和信息。当你启动一个应用程序时,操作系统会为该程序创建一个进程,以便管理和执行。

如下图所示:

在这里插入图片描述

3.3 进程的特点

在多道程序环境下,多个程序可以同时执行,这时它们的执行变得不再是线性的。由于多个程序交替执行,它们的运行会被中断,且每次执行的顺序和结果可能不同,这使得程序本身失去了原有的封闭性和可预测性。简单来说,程序执行的结果可能会因为并发执行而变得不可再现,这让程序在并发环境下变得不太适用。

为了让程序能够在这种并发环境下正确运行,并且能够对这些并发程序进行管理和控制,操作系统引入了进程的概念。

我们来分析一下进程的核心特点:

  1. 独立性:进程是系统中资源的独立单位,拥有自己的地址空间、数据、堆栈和程序计数器等。每个进程之间相互独立,彼此不直接干扰。
  2. 隔离性:进程之间相互隔离,一个进程的崩溃或错误不会直接影响到其他进程。操作系统通过虚拟内存、进程控制等机制确保这种隔离。
  3. 并发性:在多任务环境中,多个进程可以同时执行,操作系统通过时间片轮转等方式调度它们的执行。虽然计算机只能在某一时刻执行一个进程,但由于快速切换,多个进程看起来是同时运行的。

4. 总结

我们回到文章开头的几个问题。

①. 操作系统为什么引入进程?

在多道程序环境下,多个程序可以同时执行,这时它们的执行变得不再是线性的。由于多个程序交替执行,它们的运行会被中断,且每次执行的顺序和结果可能不同,这使得程序本身失去了原有的封闭性和可预测性。简单来说,程序执行的结果可能会因为并发执行而变得不可再现,这让程序在并发环境下变得不太适用。

通常的程序是不能参与并发执行的。为了让程序能够在这种并发环境下正确运行,并且能够对这些并发程序进行管理和控制,操作系统引入了进程的概念。

通过引入进程,操作系统能够更好地管理计算机资源,支持多任务并发执行,同时提高系统的稳定性和效率。

②. 到底什么是进程?进程和程序的区别。

无论是 Java 代码还是 Python 代码,它们本质上只是静态的文件。当我们将 Java 代码编译成二进制文件后运行,这段代码就从静态的文件转变为一个正在运行的程序。我们把这个运行中的程序称为进程。

进程本质上是操作系统中正在运行的程序的一个实例。它是程序的执行过程,包含了程序代码以及执行过程中所需的资源(如内存、CPU时间、I/O设备等)。

③. 进程如何配合操作系统实现并发?

  1. 进程的独立性与隔离:
    • 每个进程都有独立的地址空间和资源,这由操作系统分配并管理,确保一个进程的操作不会干扰其他进程。
    • 隔离性解决了多个程序并发运行时的资源冲突问题。
  2. 调度机制:操作系统通过调度器对多个进程进行管理,利用时间片轮转或优先级调度等算法,让多个进程在一个 CPU 上并发运行。
  3. 进程状态管理:进程的执行状态(如寄存器内容、程序计数器等)存储在进程控制块(PCB)中,调度时可以快速切换。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值