还搞不懂进程、线程、协程?看完就懂了

前言

操作系统的主要目标是执行用户程序,但也需要顾及内核之外的各种系统任务。

系统由一组进程组成: 操作系统进程执行系统代码,用户进程执行用户代码。

问题:为什么需要进程?

早期的计算机系统只允许一次执行一个程序,这种程序对系统有完全的控制,能访问所有的系统资源。

现代计算机系统允许将多个程序调入内存并发执行,这一要求对各种程序提供更严格的控制和更好的划分。

这些需求产生了进程的概念,即执行中的程序,进程是现代分时系统的工作单元。

  • 多道程序设计 的目的是:无论何时都有进程在运行,从而使 CPU 利用率达到最大化。
  • 分时系统 的目的是:在进程之间快速切换 CPU 以便用户在程序运行时能与其进行交互。

本文将围绕这两个问题和一个案例展开:

进程

程序与进程区别: 进程是活动实体

  • 程序只是被动实体,如存储在磁盘上包含一系列指令的文件内容(指:可执行文件)。
  • 当一个可执行文件被装入内存时,一个程序才能成为一个要执行的命令和相关资源集合。

所以,进程可看做是正在执行的程序

进程需要一定的资源(如 CPU、时间、内存、文件和 I/O 设备)来完成其任务。 这些资源在创建进程或者执行进程时被分配。

进程的组成有:PCB、程序段、数据段

  • PCB(进程控制块,process control block): 保存进程运行期间相关的数据,是进程存在的唯一标志。
  • 程序段: 能被进程调度程序调度到 CPU 运行的程序的代码段。
  • 数据段: 存储程序运行期间的相关数据,可以是原始数据也可以是相关结果。

进程在执行时会改变状态,进程的状态有 5 种:

  • 创建:进程正在被创建。
  • 运行:指令正在被执行。
  • 等待:阻塞,进程等待某个事件的发生(如 I/O 完成或收到信号)。
  • 就绪:进程等待分配处理器。
  • 终止:进程完成执行。

Tips :将 CPU 切换到另一个进程需要保存当前进程的状态并恢复另一个进程的状态,这一任务称为上下文切换(context switch

在 Linux 中可通过 top 和 ps 工具查看进程状态:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值