OS复习笔记ch3-1

引言

学到第三章,就正式步入我们OS的大门了

本章我们将围绕以下几个问题去解决

  1. 什么是进程?
  2. 进程状态有哪些?
  3. 进程如何描述?
  4. 进程如何控制?

本节内容主要是回答前两个问题,第二节回答后两个问题。

进程

众所周知,硬件家族过于庞杂,以CPU为例,我们熟知的电脑端有Intel和AMD,当然手机有麒麟和骁龙等,各大厂商产品标准不一,差异很大。如果说,我们的程序开发要适配这么多的硬件,为每一种硬件开发一种应用可想而知得多难(从上而下)。

根据所学,我们都知道OS是操作和协调各种硬件,为上层应用提供服务的一个“大管家”。
于是,为了给上层应用提供服务的统一和便利,OS解决了硬件适配的问题。程序开发者就只需要向OS去申请和释放资源就可以实现对底层硬件的控制了。

我们换一个角度,从OS的视角来看,我为上层应用提供了统一的接口,但是程序成千上万,我不可能对每一种特定的程序开发一种管理模式(自下而上)。于是,OS引入了进程,它是对正在运行的程序过程的抽象,即不管是什么样的程序,只要是在OS下运行的程序过程统称为“进程”。

进程的定义

可并发执行的程序在某个数据集合的一次计算活动,是操作系统进行资源分配和保护的基本单位
从上面的定义可知,进程是OS资源分配和保护的基本单位。它为上层应用服务的时候,是以进程为基本单位的。一个程序往往对应着一个进程。

这样自然引入多进程,提高了对硬件资源的利用率,但又带来额外的空间和时间开销,增加了OS 的复杂性。

必要元素

一个进程至少要有程序代码和与之相关的数据集合组成。

  • 程序代码(Program code):有可能与其他执行同一个程序的进程共享,比如打开多个QQ.exe
  • 与代码相关的数据集合(A set of data associated with that code):包括进程向OS申请的各种资源,比如处理机

进程和程序

  • 程序(Program):是静态的,就是个存放在磁盘里的可执行文件,就是一系列的指令集合。
  • 进程(Process):是动态的,是程序的执行过程。

举个简单的例子,如果说我们打开了QQ,那么OS就会为QQ创建一个进程,如果说QQ需要传输文件,那么OS就会把文件和网络资源给到QQ对应的进程,至于QQ怎么使用这些资源那是另外一回事了。当我们打开多个QQ.exe(静态),需要登录多个账号的QQ时,此时OS就会为我们创建多个进程分别管理每一个QQ(动态)。

进程状态

两个基本状态

image-20231025145615178

每个程序运行很难一气呵成的完成(同时有I/O,网络报文等),进程都是在OS的调度下交替进行,所以从这个角度来说,进程可分成两种状态。

  • Running运行状态:占用处理机资源;
  • Not-running未运行状态:等待进程调度分配处理机资源;
    其中
  • dispatch :从等待进程队列中选择一个进程(要求已完成I/O操作),进入运行状态
  • pause:用完时间片或启动I/O操作后,放弃处理机,进入等待进程队列

image-20231025150035847

进程由OS的分派程序分派到CPU,然后回到队列,反复直到任务完成
本质上就是不同进程的PCB(Process Control Block,即进程控制块)这个结构体在排队。

进程的创建和终止

image.png

如图所示,有四种创建和终止进程的方式,简单了解一下即可

三状态模型

image-20231025151259985

有三个基本状态:就绪(Ready),阻塞(Blocked)和运行(Running)态,这三个状态是后面多状态模型的核心。
每个状态的含义及可能的状态转换如下:

  1. 运行状态(Running):表示进程正在执行。进程在运行状态时,可能发生以下状态转换:

    • 运行 → 就绪:当进程的时间片用完或被其他高优先级进程抢占时,进程从运行状态转换为就绪状态,等待下一次调度。
    • 运行 → 阻塞:当进程需要等待某个事件(如输入/输出操作,读磁盘等)完成时,进程从运行状态转换为阻塞状态,暂时停止执行,直到事件完成。
  2. 就绪状态(Ready):表示进程已准备好执行,但由于调度算法或其他原因尚未被分配到CPU执行。进程在就绪状态时,可能发生以下状态转换:

    • 就绪 → 运行:当调度算法选择该进程并将其分配给CPU时,进程从就绪状态转换为运行状态,开始执行。
  3. 阻塞状态(Blocked):表示进程由于某个事件的发生而无法继续执行,需要等待事件完成。进程在阻塞状态时,可能发生以下状态转换:

    • 阻塞 → 就绪:当等待的事件完成时,进程从阻塞状态转换为就绪状态,等待下一次调度。

五状态模型

image-20231025152721016

  • 新建状态(New):进程刚创建但还不能运行
  • 就绪态(Ready):一个进程已经具备运行条件,但由于无CPU暂时不能运行的状态
  • 运行态(Running):进程占有CPU并在其上运行
  • 阻塞/等待态(Blocked/Waiting):指进程因等待某种事件的发生而暂时不能运行的状态
  • 退出状态(Exit):进程已结束运行,回收除PCB之外的其他资源,并让其他进程从PCB中收集有关信息

PS:
注意这里面的进程状态转换过程,单向和双向的区别。

事实上,所有的状态都可能直接进入退出状态,在图中尚未体现。

进程挂起

image-20231025154140379

挂起(Suspend):把一个进程从内存换出到外存;有以下几种情况:

  • 阻塞→阻塞/挂起:没有进程处于就绪状态或就绪、运行进程要求更多内存资源时
  • 就绪→就绪/挂起:空间需要;高优先级阻塞进程即将就绪,挂起低优先级就绪进程
  • 运行→就绪/挂起:对可抢占式系统,当有高优先级阻塞/挂起进程因事件出现而进入就绪/挂起时,抢占CPU,运行进程让出内存、CPU

挂起发生的原因有以下几种:

  • 进程均处于等待状态,需要把一些阻塞进程对换出去,腾出足够内存装入就绪进程运行。
  • 进程竞争资源,导致系统资源不足,负荷过重,需要挂起部分进程以调整系统负荷,保证实时性或让系统正常运行(负载均衡)。
  • 定期执行的进程(如审计、监控、记账程序)对换出去,以减轻系统负荷。
  • 用户要求挂起自己的进程,以便进行某些调试、检查和改正。
  • 父进程要求挂起后代进程,以进行某些检查和改正,或协调各子进程。
  • 操作系统需要挂起某些进程,检查运行中资源使用情况,以改善系统性能;或当系统出现故障或某些功能受到破坏时,需要挂起某些进程以排除故障。

进程激活

激活(Activate):把一个进程从外存换进内存;

可能有以下几种情况:

  • 就绪/挂起→就绪:当没有就绪进程或就绪/挂起进程优先级高于就绪进程

  • 阻塞/挂起→阻塞:很少见。当一个进程释放足够内存,系统会把高优先级阻塞/挂起进程(高于所有就绪/挂起进程,事件很快发生)激活

其他状态

这里简单了解一下即可,一般考试不会考得这么细。

  • 事件出现(Event Occurs)
    这里的事件主要是指阻塞的进程等待的事件,可能会引起以下两种状态变化
  1. 阻塞→就绪
  2. 阻塞/挂起→就绪/挂起
  • 收容(Admit)
    收容主要是指新建的进程进入就绪队列的状态变化
  1. 新建→就绪
  2. 新建→就绪/挂起
  • 释放(Release)
    任意状态→退出
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值