• 【OS】操作系统课程笔记 第三章 进程管理


    目录

    3.1 多道程序设计

    3.2 进程的概念

    3.2.1 前驱图和程序执行

    3.2.2 进程的描述

    1. 进程的定义🥇

    2. 进程和程序的区别🥈

    3.3 进程控制块 PCB

    3.3.2 进程的状态及其转换

    N进程问题

    3.4 进程控制

    进程的创建与终止

    用fork函数创建子进程

    3.5 线程


    3.1 多道程序设计

    吞吐率:衡量一个系统效率的一个指标

    采用多道程序设计可以显著提高吞吐率。

    但是,并不是内存程序数量越多越好,下面有三点否定:

    • 内存的容量限制了系统可同时处理程序的数目
    • 设备数量有限
    • 程序道数过多会影响系统的响应速度,同时会产生过多系统开销

    3.2 进程的概念

    3.2.1 前驱图和程序执行

    前驱图:反映和研究系统内所发生事件之间的一种关系。

    3.2.2 进程的描述

    1. 进程的定义🥇

    进程是程序在一个数据集合上的运行过程,是系统进行资源分配和调度的一个独立单位。

    2. 进程和程序的区别🥈

    • 进程强调动态的执行过程,程序是静态的有序指令集;
    • 进程具有并行特征,而程序没有;
    • 进程的特征:动态性,并行性,独立性,异步性和结构性。

    3.3 进程控制块 PCB

    简单来说,就是内存核心区的一部分,专门存放进程的相关信息。

    3.3.2 进程的状态及其转换

    老师是先讲三状态,再到五,最后补充为七状态。

    三状态分别是就绪、运行和阻塞,这可以是一个单向循环的过程(就绪→运行→阻塞→就绪),只有运行可以转过头来回到就绪。在这中间,就绪是指一个进程已经得到了系统分配的资源,准备好开始计算了,如果一个就绪的进程被调度,那就意味着它开始运行了,运行就是上面所说的计算,运行好了以后,作为一个进程,它有时候是指程序中的一小段,可能是要你用键盘进行输入,也可能是需要用屏幕进行输出,这些动作都需要I/O设备,所以统称为I/O,当一个进程运行完了以后,不能进行I/O,那就需要等待I/O,也就是等待事件发生,如果事件发生了,那就说明进程I/O完了,这时候就又回到就绪状态,等待下一次调度。上面还提到了从运行到就绪,那就是因为这个进程它被分配给的时间片到了,时间片一到,就需要把自己占用的CPU让给下一个时间片的进程,此时这个进程就又回到就绪状态。要注意的是,如果有高优先级的进程就绪,可能会马上抢占CPU,这时候CPU上的低优先级进程就会由运行状态转变为就绪状态。

    在三状态的基础上加上另外两个,新建和完成。新建就是新建一个进程,这个作业被接纳后才是就绪状态。而完成则是进程已经终止了,就是完成状态。

    接下来再补充两个状态,静止就绪和静止阻塞。内存中如果就绪进程过多,占满了空间,就会将其中的一些就绪进程挂起,也就是放到外存,这样的状态就是静止就绪,阻塞的挂起也同理。

    N进程问题

    1. 最多有1个进程处于运行状态。因为是单核单CPU,所以一次最多只能运行一个进程;
    2. 最少有0个进程处于运行状态。当全部进程都处于阻塞状态时,就没有进程在运行了;
    3. 最多有n-1个进程处于就绪状态。因为当CPU没有进程在运行时,就会调度就绪态的进程,所以有一种情况是,n个进程中有一个在运行,其余n-1个都处于就绪状态;
    4. 最少有0个进程处于就绪状态。当所有进程都在阻塞时,就没有就绪态的进程了,亦或者有一个在运行,而其余的都在阻塞;
    5. 最多有n个进程处于阻塞状态。
    6. 最少有0个进程处于阻塞状态。

    3.4 进程控制

    进程的创建与终止

    用fork函数创建子进程

            在语句fpid=fork()之前,只有一个进程在执行这段代码,但在这条语句之后,就变成两个进程在执行了,这两个进程的几乎完全相同,将要执行的下一条语句都是if(fpid<0)……
      为什么两个进程的fpid不同呢,这与fork函数的特性有关。fork调用的一个奇妙之处就是它仅仅被调用一次,却能够返回两次,它可能有三种不同的返回值:
      1)在父进程中,fork返回新创建子进程的进程ID;
      2)在子进程中,fork返回0;
     3)如果出现错误,fork返回一个负值;

            在fork函数执行完毕后,如果创建新进程成功,则出现两个进程,一个是子进程,一个是父进程。在子进程中,fork函数返回0,在父进程中,fork返回新创建子进程的进程ID。我们可以通过fork返回的值来判断当前进程是子进程还是父进程。

            引用一位网友的话来解释fpid的值为什么在父子进程中不同。“其实就相当于链表,进程形成了链表,父进程的fpid(p 意味point)指向子进程的进程id, 因为子进程没有子进程,所以其fpid为0.
       fork出错可能有两种原因:
      1)当前的进程数已经达到了系统规定的上限,这时errno的值被设置为EAGAIN。
      2)系统内存不足,这时errno的值被设置为ENOMEM。
      创建新进程成功后,系统中出现两个基本完全相同的进程,这两个进程执行没有固定的先后顺序,哪个进程先执行要看系统的进程调度策略。
      每个进程都有一个独特(互不相同)的进程标识符(process ID),可以通过getpid()函数获得,还有一个记录父进程pid的变量,可以通过getppid()函数获得变量的值。

    3.5 线程

    一个进程包含多个线程。

    雨课堂选择题解析

    答案:A C

    解析:A和C无疑是对的,而D肯定是错的,这里有问题的是B。

    fork确实创建了一个子进程并完全复制父进程,但是子进程是从fork后面那个指令开始执行的。对于原因也很合逻辑,如果子进程也从main开头到尾执行所有指令,那它执行到fork指令时也必定会创建一个子子进程,如此下去这个小小的程序就可以创建无数多个进程可以把你的电脑搞瘫痪,所以fork作者肯定不会傻到这种程度

    答案:C

    解析:处理器的效率和运行的进程数以及总运行时间有关,注意,这里强调的是运行,所以就绪的进程数目是多少跟处理器效率无关。

    答案:B

    解析:线程的TCB是由应用程序通过线程库来进行创建,并不是由操作系统创建

  • 相关阅读:
    HTTPS基础概念
    终端仿真软件连接交换机调试步骤
    ES6 入门教程 19 Generator 函数的语法 19.2 next 方法的参数
    Ai作图可控性演进——从SD到MJ
    计算机毕设 大数据二手房数据爬取与分析可视化 -python 数据分析 可视化
    项目中屏幕适配
    2022年最新甘肃建筑八大员(材料员)模拟考试试题及答案
    【吴恩达机器学习-笔记整理】降维,数据压缩与PCA
    文献速递:深度学习胶质瘤诊断---通过深度学习和弥散加权成像提高胶质瘤遗传亚型的无创分类
    聊聊JAVA 中 13 种锁的实现方式
  • 原文地址:https://blog.csdn.net/Summerison/article/details/132804850