操作系统:进程与线程

进程的概念

为什么会有进程?
操作系统的设计目标之一是充分利用硬件资源,当有程序处于阻塞状态(如正在 I/O)时,CPU是闲下来的
自然而然地可以想到,为什么不让 CPU 先执行另一个程序等到这个程序 I/O 结束,再继续执行这个阻塞的程序呢?
另一方面,多用户操作系统使得计算机要能在不同用户执行的程序中来回切换

即管理 CPU 的方式应该是多道程序、交替执行(并发)

顺序执行一个程序,只需要置好 PC,CPU 就会取指执行
想要在进行中的程序间交替执行,不能只简单地改变 PC
交替执行的程序不同于顺序执行的程序,因此产生了进程的概念

进程,简单来说就是进行中的程序,
操作系统记录进程的信息,按照合理的次序推进(分配资源、进行调度

CPU 的管理就是进程的管理,通过管理 PCB(Process Control Block,进程控制块)实现
每个进程的 PCB 中保存了这个进程切换所需的上下文,寄存器值、PC,等等


多进程的组织形式:PCB、进程的状态以及队列
在这里插入图片描述
一个正在执行的进程占用 CPU
其他就绪的进程在就绪队列中等待执行
有些进程在等待某些事件 如磁盘等待队列
在这里插入图片描述

多进程交替执行:队列操作、调度及切换
队列操作,比如,将一个进程的 PCB 由磁盘等待队列出队,挂到就绪队列队尾
调度:即进程调度,决定接下来 CPU 执行哪一个线程
切换:进程上下文的切换

进程对内存的使用
如果一个进程将中间结果存储在某个位置,另一个进程恰好也在该位置写入数据,那么就出事了
因此每个进程的内存空间应当是独立的

进程同步与合作
然而进程间常常需要合作,比如进程间通信,或者说两个进程共用一块内存
简单的说,两个进程同时修改同一个变量,可能丢失其中一个进程的修改结果
此时当保证进程同步,即合理的推进顺序(控制进程切换的时机)

因此多进程并发的状态应该关心一下几件事

  • 读写 PCB
  • 操作寄存器完成上下文切换
  • 进程调度
  • 进程的同步与合作
  • 地址映射

操作系统多进程基本图像
在这里插入图片描述


线程的概念

如上,进程由 资源 + 指令序列 两部分组成,
因此进程既作为资源分配的单位,又可以作为调度和分派的单位
进程切换时,资源与指令序列都需要切换

那么,如果将资源和指令序列分开,一份资源对应多个指令序列,切换时仅切换指令序列
保留并发的优点,减小切换的代价
实质是,内存映射表不变、PC 等寄存器改变
在这里插入图片描述
一份资源对应多个指令序列是有实用价值的,比如 IDE,可以有一个线程用于显示,一个线程
负责处理输入,还有一个线程进行语法检查,它们确实使用同一块内存

线程即是轻量级的进程
它拥有最基本的资源(TCB(Thread Control Block,线程控制块)、PC、寄存器值、栈)
因此,线程作为调度和分派的基本单位

一个进程中可以有多个线程,这些线程共享进程的内存地址空间(可以访问任何一个虚地址)和资源(打开的文件、定时器、申请到的 I/O设备 等等),

进程间并发执行,一个进程中的多个线程间同样可以并发执行,但是不同进程中的线程进行切换时,也就发生了进程的切换


总结一下

进程作为资源分配的基本单位,线程作为调度、分派和独立运行的基本单位

线程是轻量级的进程,保留了并发性的优点,减小切换的代价(没有切换内存映射表)

线程只拥有能保证独立运行的资源,多个线程间共享该进程的内存地址空间和资源

不同进程间需要保持相当的独立性,而同一进程的不同线程间独立性低很多




进一步了解:用户级线程、内核级线程


2019/12/20

原文地址:https://www.cnblogs.com/kafm/p/12721790.html