操作系统——进程的描述与控制(学习笔记)

简介: 进程是指进程实体的运行过程,是系统进行资源分配和调度的一个独立单位。进程实体(进程映像、进程): 程序段、相关的数据段、进程控制块PCB。

 1.前趋图和程序执行

(1)前趋图

前趋图(Precedence Graph)是一个有向无循环图,可记为DAG,用于描述程序/进程之间执行的先后顺序。

image.gif

图中每个结点可用来表示一个进程或程序段,结点间的有向边表示两个结点之间存在的偏序前趋关系。如P1与 P2存在前趋关系,记作P1 -> P2,表示在P2开始执行之前P1必须完成,此时称P1是P2的直接前趋,P2是P1的直接后继。没有前趋的结点称为初始结点,没有后继的结点称为终止结点,每个结点还有一个重量,用于表示该结点所含有的程序量或程序的执行时间

(2)程序的顺序执行

在计算机系统中只有一个程序在运行,这个程序独占系统中所有资源,其执行不受外界影响。 一道程序执行完后另一道才能开始。

image.gif

程序顺序执行的特点

    • 顺序性:一个程序开始执行必须要等到前 一个程序已执行完成。
    • 封闭性:程序一旦开始执行,其计算结果不受外界因素影响。
    • 可再现性:程序的结果与它的执行速度无关(即与时间无关),只要给定相同的输入,一定会得到相同的结果。

    (3)程序的并发执行

    若干个程序同时在系统中执行,这些程序的执行在时间上是重叠的,一个程序的执行尚未结束,另一个程序的执行已经开始。

    image.gif

    image.gif

    只有在不存在前趋关系的程序之间才有可能并发执行,否则无法并发执行。

    程序并发执行的特点

      • 间断性:在并发执行时由于共享系统资源以及相互合作,可能会导致程序在执行过程中互相制约,造成程序间断性的活动规律。
      • 失去程序的封闭性:程序在并发执行时,是多个程序共享系统中的资源,因此这些资源的状态将由多个程序来改变。
      • 不可再现性:如循环程序A、B,共享变量N。 程序A执行N:=N+1;程序B执行Print(N),后将N置0。 两个程序以不同速度运行,可能出现三种情况:

                  N:=N+1在Print(N)和N=0之前,此时N值分为N+1,N+1, 0

                  N:=N+1在Print(N)和N=0之后,此时N值分为N, 0, 1

                  N:=N+1在Print(N)和N=0之间,此时N值分为N, N+1, 0

      程序在并发执行时,由于失去了封闭性,其计算结果必将与并发程序的执行速度有关,从而使程序的执行失去了可再现性。程序经过多次执行后,虽然它们执行时的环境和初始条件相同,但等到的结果却各不相同


      2.进程的描述

      (1)进程的定义与特征

      进程的定义

      进程是指进程实体的运行过程,是系统进行资源分配和调度的一个独立单位

      进程实体(进程映像、进程):程序段相关的数据段进程控制块PCB

      进程的特征

        • 结构特征:程序段数据段进程控制块三部分组成;
        • 动态性:进程的实质是程序的执行过程;动态性是进程最基本的特征。进程实体具有一定的生命周期
        • 并发性:多个进程可同存于内存中,能在一段时间内同时运行;引入进程的目的正是为了使进程实体能够并发执行; 程序不能参与并发执行。
        • 独立性:进程是独立运行的基本单位,独立获得资源和调度的基本单位;
        • 异步性:各进程按各自独立的不可预知的速度向前推进。

        进程与程序的区别

        程序:指令的有序集合,其本身没有任何运行的含义,是一个静态的概念。而进程是程序在处理机上的一次执行过程, 它是一个动态的概念;

          • 程序可以作为一种软件资料长期存在,而进程是有一定生命期的。程序是永久的,进程是暂时的
          • 进程更能真实地描述并发,而程序不能;
          • 进程是由程序数据进程控制块三部分组成的;
          • 进程具有创建其他进程的功能,而程序没有;
          • 同一程序同时运行于若干个数据集合上,它将属于若干个不同的进程。同一程序可以对应多个进程。

          (2)进程控制块

          操作系统中用于管理控制资源的数据结构

          在计算机系统中,对每个资源和每个进程都设置了一个数据结构,用来表征其实体,其中包含了他们的标识描述状态等信息以及一批指针

          OS管理的这些数据结构一般分为四类:

          内存表设备表文件表进程表进程表被称为PCB

          进程控制块

          为了描述和控制进程运行,系统为每个进程定义了 一个数据结构,称为进程控制块(PCB)。  PCB中记录了OS所需的、用于描述进程当前情况以及控制进程运行的全部信息

          PCB是操作系统中最重要的记录型数据结构。

          (3)PCB

          PCB的作用

          PCB的作用是将一个不能独立运行的程序变成一个可以独立运行的基本单位,一个能与其他进程并发执行的进程。

            1. OS利用PCB来对并发执行的进程进行控制管理
            2. PCB是OS感知进程存在的唯一标志
            3. 进程与PCB是一一对应的。 PCB应常驻内存
            4. PCB提供进程调度管理所需要的信息
            5. PCB实现与其他进程的同步通信

            PCB的内容

            1. 进程标识符(process ID),用于唯一地标识一个进程

              • 外部标识符:进程名,通常基于可执行文件名
              • 内部标识符:用户标识符(user ID);进程组关系

              2.处理机状态(处理机上下文):CPU现场保护信息

                • 寄存器值(通用、程序计数器、程序状态字PSW,栈 指针)
                • 指向赋予该进程的段/页表指针

                3.进程调度信息

                  • 进程状态表明进程当前的状态,它是作为进程调度和对换时的依据
                  • 进程优先级描述进程使用处理机的优先级别
                  • 进程调度所需其他信息与采用的进程调度算法有关
                  • 事件进程由执行状态转变为阻塞状态所等待发生的事件,即阻塞原因

                  4.进程控制信息

                    • 程序和数据的地址进程实体中的程序和数据的内存或外存地(首)址,便于调度执行
                    • 进程同步和通信机制实现进程同步进程通信时必需的机制,如消息队列指针信号量
                    • 资源清单在该清单中列出进程在运行期间所需的全部资源(除CPU以外),另外还有一张已分配到该进程的资源的清单
                    • 链接指针它给出了本进程PCB所在队列中的下一个进程的PCB的首地址

                    PCB的组织方式

                    1.线性方式 PCB表

                      • 系统把所有进程的PCB组织在一起,并把它们放在内存的固定区域,就构成了PCB表。
                      • PCB表的大小决定了系统中最多可同时存在的进程个数, 称为系统的并发度

                      image.gif

                      2.链接方式

                        • 相同状态的进程PCB组成一个队列,不同状态对应多个不同的队列。
                        • 就绪队列阻塞队列

                        image.gif

                        3. 索引方式

                        对具有相同状态的进程,分别设置各自的PCB索引表, 存放这些进程PCB在PCB表中的地址。

                        image.gif

                        (4)进程的状态及转换

                        进程的三种基本状态

                        就绪状态:当进程已经获得了除CPU以外的所有资源, 一旦得到CPU,就立即可以运行,则这些进程所处的状态为就绪状态。                就绪队列:所有处于就绪状态的进程所在的队列。

                        运行状态:正在运行的进程所处的状态为运行状态

                          • 单处理机系统一个进程处于运行状态
                          • 多处理机系统有多个进程处于运行状态

                          阻塞/等待状态:若一进程正在等待某一事件发 生(如等待输入/输出工作完成),这时即使给它CPU,它也无法运行,称该进程处于等待状态,或阻塞睡眠封锁状态。   阻塞队列:系统根据阻塞原因设置多个队列来管理处于阻塞状态的进程。

                          image.gif

                          创建状态和终止状态

                          创建态:进程由创建而产生。为一个新进程创建必要的管理信息,保证进程的调度必须在创建工作完成以后进行,处于创建状态的进程,当获得了所需要的资源以及对PCB初始化工作完成后,便可以由创建状态进入就绪状态

                          终止态:进程由终止而结束

                          等待操作系统进行善后,然后,退出主存。进入终止态的进程不再执行,但依然临时保留在系统中等待善后。一旦其他进程完成了对终止态进程的信息抽取之后,系统将删除该进程,将其PCB清零把PCB空间返回给系统

                          image.gif

                          挂起操作和进程状态的转换

                          挂起操作使某个进程处于静止状态

                            • 如果进程正在执行,挂起操作使他暂停执行
                            • 如果处于就绪状态,挂起操作使他暂不接受调度

                            与挂起操作对的就是激活操作

                            引用挂起状态的原因

                              1. 终端用户的请求
                              2. 父进程请求
                              3. 负荷调节的需要
                              4. 操作系统的需要
                              5. 对换的需要

                              活动就绪(就绪状态)→静止就绪:对就绪的进程进行挂起操作,则该进程不能再被调度进入静止就绪状态

                              静止就绪→活动就绪(就绪状态):用相应的激活原语激活以后,重新进入活动就绪状态,进入就绪队列等待调度

                              活动阻塞(阻塞状态)→静止阻塞:挂起原语对阻塞进程实施挂起操作则进入静止阻塞状态,只有在该进程所期待的事件发生以后就会转入静止就绪

                              静止阻塞→活动阻塞(阻塞状态):利用激活原语激活以后进入活动阻塞状态。

                              image.gif

                              七状态进程转换

                              image.gif

                              参考《计算机操作系统》 (汤小丹 第四版)

                              相关文章
                              |
                              3天前
                              |
                              算法 调度 UED
                              探索操作系统的心脏——进程管理机制
                              本文将深入探讨操作系统中至关重要的部分——进程管理机制。我们将从基本概念入手,逐步解析进程的定义、状态及其在操作系统中的角色。随后,我们会详细讨论进程调度算法,包括先来先服务、短作业优先、时间片轮转和优先级调度等,分析它们的优势与应用情景。最后,通过实例展示这些算法在实际系统运作中的运用,帮助读者更好地理解进程管理的核心原理。
                              |
                              3天前
                              |
                              算法 调度 Python
                              探索操作系统的内核——一个简单的进程调度示例
                              【9月更文挑战第17天】在这篇文章中,我们将深入探讨操作系统的核心组件之一——进程调度。通过一个简化版的代码示例,我们将了解进程调度的基本概念、目的和实现方式。无论你是初学者还是有一定基础的学习者,这篇文章都将帮助你更好地理解操作系统中进程调度的原理和实践。
                              |
                              6天前
                              |
                              算法 调度 Python
                              深入理解操作系统:进程管理与调度
                              【9月更文挑战第14天】操作系统是计算机系统的核心,负责管理和控制计算机硬件资源,并提供用户和应用程序所需的服务。本文将介绍操作系统中进程管理与调度的基本概念、原理和实现方法,并通过代码示例进行说明。通过阅读本文,读者可以深入了解操作系统的工作原理和机制,提高对计算机系统的理解和掌握能力。
                              |
                              2天前
                              |
                              算法 调度 开发者
                              深入理解操作系统的进程调度策略
                              【9月更文挑战第18天】本文将通过浅显易懂的方式,带你深入了解和掌握操作系统中一个至关重要的概念——进程调度。我们将从基础概念出发,逐步探讨进程调度的策略、算法及其在操作系统中的实现方式。无论你是初学者还是有一定基础的开发者,这篇文章都将为你打开一扇通往操作系统深层知识的大门,让你对进程调度有更深刻的理解和认识。
                              11 3
                              |
                              2天前
                              |
                              消息中间件 Python
                              深入理解操作系统的进程间通信(IPC)机制
                              本文将探讨操作系统中的核心概念——进程间通信(IPC),揭示其在系统运作中的重要性及实现方式。通过分析不同类型的IPC手段,如管道、信号、共享内存等,帮助读者更好地理解操作系统的内部工作原理及其在实际应用中的表现。
                              11 1
                              |
                              3天前
                              |
                              算法 Linux 调度
                              探索操作系统的心脏:进程管理与调度策略
                              【9月更文挑战第17天】在数字世界的复杂迷宫中,操作系统扮演着守护者的角色,确保每一次计算的旅程都顺畅无阻。本文将深入探讨操作系统的核心机制——进程管理与调度,揭示它们如何在微观层面影响宏观的系统性能。从理解进程的本质出发,我们将逐步揭开现代操作系统如何通过精妙的调度策略,平衡多任务处理的效率与公平性。通过深入浅出的语言,即便是技术新手也能领略到这一数字世界奇迹背后的智慧。
                              |
                              3天前
                              |
                              算法 调度 UED
                              深入理解操作系统中的进程调度
                              【9月更文挑战第17天】在操作系统的心脏深处,进程调度机制如同一位精心编排交响乐的指挥,确保系统的和谐与效率。本文将揭开进程调度的神秘面纱,从理论到实践,深入浅出地探讨其背后的原理与实现。无论你是初学者还是有经验的开发者,这篇文章都将为你提供新的视角和深刻的见解,让你对操作系统有更全面的理解。让我们一起走进这场技术与智慧的盛宴,探索进程调度的秘密吧!
                              |
                              4天前
                              |
                              消息中间件 存储 大数据
                              深入理解操作系统中的进程间通信(IPC)机制
                              本文旨在探讨操作系统中进程间通信(IPC)的核心机制与其重要性。通过对不同IPC手段如管道、信号、消息队列及共享内存等的详细解析,揭示它们如何高效地促进进程间的信息交换与同步。文章不仅阐述各种IPC技术的实现原理,还探讨了它们在实际系统应用中的场景与优化策略,为系统开发者提供全面而深入的理解。
                              |
                              4天前
                              |
                              消息中间件 程序员 数据处理
                              探究操作系统中的进程间通信(IPC)机制及其在现代软件开发中的应用
                              本文深入探讨了操作系统中的核心概念——进程间通信(IPC),揭示了其在现代软件开发中的关键作用。通过对各种IPC机制如管道、消息队列、共享内存等的详细分析,本文旨在为读者提供一个清晰的理解框架,帮助他们掌握如何在实际应用中有效利用这些技术以实现进程间的协同工作。此外,文章还将探讨IPC在高并发环境下的性能优化策略,以及如何避免常见的IPC编程错误。通过结合理论与实践,本文不仅适合希望深入了解操作系统原理的技术人员阅读,也对那些致力于提升软件质量和开发效率的程序员具有重要参考价值。
                              12 0
                              |
                              2月前
                              |
                              运维 关系型数据库 MySQL
                              掌握taskset:优化你的Linux进程,提升系统性能
                              在多核处理器成为现代计算标准的今天,运维人员和性能调优人员面临着如何有效利用这些处理能力的挑战。优化进程运行的位置不仅可以提高性能,还能更好地管理和分配系统资源。 其中,taskset命令是一个强大的工具,它允许管理员将进程绑定到特定的CPU核心,减少上下文切换的开销,从而提升整体效率。
                              掌握taskset:优化你的Linux进程,提升系统性能