【操作系统】进程、线程基础知识

进程

我们编写的代码知识一个存储在硬盘的静态文件,通过编译后就会生成二进制可执行文件,当我们运行这个可执行文件后,它会被装到内存中,接着CPU会执行程序中的每一条指令,那么这个运行中的程序,就被称为进程。

现在我们考虑有一个会读取硬盘文件数据的程序被执行了,那么当运行到读取文件的指令时,就回去从硬盘读取数据,但是硬盘的读写速度是非常慢的,那么在这个时候,如果CPU傻傻的等硬盘返回数据的话,那CPU的利用率是非常低的。

所以,当进程要从硬盘读取数据时,CPU不需要阻塞等到数据的返回,而是去执行另外的进程。当硬盘数据返回时,CPU会收到中断,于是CPU在继续运行这个进程。

这种多个程序、交替执行的思想,就有CPU管理多个进程的初步想法。

对于一个支持多进程的系统,CPU会从一个进程快速切换至另一个进程,期间每个进程各运行几十或几百个毫秒。

虽然单核的CPU在某一个瞬间,只能运行一个进程。但在1秒钟期间,它可能会运行多个进程,这样就产生并行的错觉,实际上这是并发。

并发和并行有什么区别呢?

 进程的状态

进程有着运行-暂停-运行的活动规律,一般来说,一个进程并不是自始至终连续不停地运行的,它与并发执行中的其他进程的执行时相互制约的。

它有时处于运行状态,有时又由于某种原因而暂停运行处于等待状态,当使它暂停的原因消失后,它又进入准备运行状态。

所以,在一个进程的活动期间至少具备三种基本状态,即运行状态、就绪状态、阻塞状态。

上图中的各个状态的意义:

  • 运行状态:该时刻进程占用CPU。
  • 就绪状态:可运行,由于其他进程处于运行状态而暂时停止运行
  • 阻塞状态:该进程正在等待某一事件发生(如等待输入、输入等操作的完成)而暂停停止运行,这时,即使给他CPU控制权,它也无法运行。

当然,进程好友另外两个基本状态:

  • 创建状态:进程正在被创建时的状态;
  • 结束状态:进程正在从系统中消失时的状态。

于是,一个完整的进程状态的变迁如下图:

进程的状态变迁:

  • NULL->创建状态:一个新进程被创建时的第一个状态。
  • 创建状态->就绪状态:当进程被创建完成并初始化后,一切就绪准备运行时,变为就绪状态,这个过程是很快的。
  • 就绪态->运行状态:处于就绪状态的进程被操作系统的进程调度器选中后,就分配给CPU正式运行该进程。
  • 运行状态->结束状态:当进程已经运行完成或出错时,会被操作系统作结束状态处理。
  • 运行状态->阻塞状态:当进程请求某个事件且必须等待时,例如请求I/O事件。
  • 阻塞状态->就绪状态:当进程要等待的事件完成是,他从阻塞状态变到就绪状态。

如果有大量阻塞状态的进程,进程可能会占用着物理内存空间,显然不是我们所希望的,毕竟物理内存空间是有限的,被阻塞状态的进程占用着物理内存就是一种浪费内存的行为。

所以,在虚拟内存管理的操作系统中,通常会把阻塞状态的进程的物理内存空间换出到硬盘,等需要再次运行的时候,再从硬盘换入到物理内存。

那么,就需要一个新的状态,来描述进程没有占用实际的物理内存空间的情况,这个状态就是挂起状态。这跟阻塞状态是不一样的,阻塞状态是等待某个事件的返回。

另外,挂起状态可以分为两种:

  • 阻塞挂起状态:进程在外存(硬盘)并等待某个事件的出现
  • 就绪挂起状态:进程在外存(硬盘),但只要进入内存,即刻立即运行。

这两种挂起状态加上前面的五种状态,就变成了七种状态变迁了:

导致进程挂起的原因不只是因为进程所使用的的内存空间不在物理内存,还包括如下情况:

  • 通过sleep让进程间歇性挂起,其工作原理是设置一个定时器,到期后唤醒进程。
  • 用户希望挂起一个程序的执行,比如在Linux中用Ctrl+Z挂起进程。

进程的控制结构

在操作系统中,使用进程控制块(process control block, PCB)数据结构来描述进程的。

PCB是进程存在的唯一标识,这意味着一个进程的存在,必然会有一个PCB,如果进程消失了,那么PCB也会随之消失。

PCB具体包含什么信息

进程描述信息:

  • 进程标识符:标识各个进程,每个进程都有一个并且唯一的标识符;
  • 用户标识符:进程归属的用户,用户标识符主要为共享和保护服务;

进程控制和管理信息:

  • 进程当前状态,如new/ready/running/waiting或blocked等。
  • 进程优先级:进程抢占CPU是的优先级;

资源分配清单:

  • 有关内存地址空间或虚拟地址空间的信息,所打开文件的列表和所使用的的I/O设备信息。

CPU相关信息:

  • CPU中各个寄存器的值,当进程被切换时,CPU的状态信息都会被保存在响应的PCB中,以便进程重新执行时,能从断点处继续执行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值