计算机操作系统(第四版) 汤小丹 第二章笔记

本文详细介绍了操作系统中的进程概念,包括进程的定义、特征、状态转换、进程控制块PCB以及进程同步与通信。同时,文章提到了线程作为轻量级进程的特性,与进程进行了对比,并阐述了线程的状态和线程控制块TCB的作用。内容涵盖了从进程的创建、执行到终结的整个生命周期,以及并发执行时的调度、同步和通信机制。

计算机操作系统(第四版) 汤小丹 第二章笔记

大家好,我是小学五年级在读的蒟蒻,专注于后端,一起见证蒟蒻的成长,您的评论与赞与关注是我的最大动力,如有错误还请不吝赐教,万分感谢。一起支持原创吧!纯手打有笔误还望谅解。

  • 进程的描述与控制

    • 前趋图和程序执行

      • 程序的顺序执行及其特征

        • 程序的顺序执行

          一个程序由若干个程序段组成,而这些程序段的执行必须是顺序的,这种程序执行的方式就称为程序的顺序执行

          [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kpcj179n-1648469637669)(C:\Users\18752\AppData\Roaming\marktext\images\2022-03-26-16-51-39-image.png)]

          即有三个顺序执行的操作 I:输入操作 C:计算操作 P:输出操作

        • 顺序执行的特征

          • 顺序性 :处理机的操作严格按照程序所规定顺序执行

          • 封闭性 :程序一旦开始执行,其计算结构不受外界因素的影响

          • 可再现性 :程序执行的结构与它执行的速度无关(即与时间无关),而只与初始条件有关

      • 前趋图

        • 前趋图是一个有向无循环图,用于描述进程之间执行的前后关系

        • 结点:表示一个程序段或进程,或一条语句

        • 有向边:结点之间的偏序或前序关系"->"

        • 若(Pi,Pj)∈->,记为Pi->Pj,则Pi是Pj的直接前趋,Pj是Pi的直接后继

        • 重量:用于表示该节点所含有的程序量或结点的执行时间

        • 初始结点:没有前趋的结点

        • 终止结点:没有后继的结点

          [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0i7R03KX-1648469637669)(C:\Users\18752\AppData\Roaming\marktext\images\2022-03-26-17-32-38-image.png)]

          前趋关系:

          [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Tt5K1HAA-1648469637670)(C:\Users\18752\AppData\Roaming\marktext\images\2022-03-26-17-33-45-image.png)]

        • 具有循环的前趋图

          [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ASYziKmu-1648469637670)(C:\Users\18752\AppData\Roaming\marktext\images\2022-03-26-17-34-16-image.png)]

          该前趋图的前趋关系是不可能满足的,因为前趋图中必须不存在循环

    • 程序的并发执行及其特征

      • 并发执行的前趋图

        [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-a0HFEgbZ-1648469637671)(C:\Users\18752\AppData\Roaming\marktext\images\2022-03-26-17-37-35-image.png)]

        存在以下前趋关系:IiI_iIi ->CiC_iCiIiI_iIi->Ii+1I_{i+1}Ii+1CiC_iCi->PiP_iPiCiCiCi->Ci+1C_{i+1}Ci+1PiP_iPi->Pi+1P_{i+1}Pi+1Ii+1I_{i+1}Ii+1CiC_iCiPi−1P_{i-1}Pi1是重叠的,即在Pi−1P_{i-1}Pi1CiC_iCi以及Ii+1I_{i+1}Ii+1之间,可以并发执行

        [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VA7ya7Sr-1648469637671)(C:\Users\18752\AppData\Roaming\marktext\images\2022-03-26-17-53-03-image.png)]

        程序并发执行时的特征

        • 间断性

          • 程序在并发执行时,由于它们共享系统资源,以及为完成同一项任务而相互合作,致使在这些并发执行的程序之间,形成了相互制约的关系,相互制约将导致并发程序具有"执行—暂停—执行"这种间断性的活动规律

          • 比如:打印机这个外设,如果一号终端已经在使用了,那么二号终端要使用这个外设就只能先排队,这就是并发程序具有执行-暂停-执行这种间断性的活动规律

        • 失去封闭性

          • 程序在并发执行时,是多个程序共享系统中的各种资源,因而这些资源的状态将由多个程序来改变,致使程序的运行失去了封闭性
        • 不可再现性

          • 程序在并发执行时,由于失去了封闭性,也将导致其再失去可再现性

          • 并发程序失去可再现性例子

            [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KhdZX0Xy-1648469637671)(C:\Users\18752\AppData\Roaming\marktext\images\2022-03-26-18-26-22-image.png)]

          • 为什么要引入进程

            • 为了保证程序在执行时依然具有顺序性、封闭性、和可再现性
  • 进程的描述

    • 进程的定义

      • 进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动

      • 进程是一个程序与其数据一道通过处理机的执行所发生的活动

      • 进程是执行中的程序

      • 进程是程序的一次执行,是进程实体的一次活动

      • 进程是可以和其他计算并发执行的计算

      • 传统定义:“进程 是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位”

      • 进程控制块(PCB)操作系统用于管理进程的专门的数据结构(唯一标识)

      • 进程实体(进程映像)就是由代码、数据、进程控制块PCB这三部分构成

      • 进程是动态的,程序是静态的。程序是顺序执行而进程是并发进行的

    • 进程的特征(与程序比较)

      • 结构特征

        • 进程控制块(PCB) + 程序 + 数据 =进程实体
      • 动态性–最基本特征

        • 进程:进程实体的一次执行过程,有生命周期。由系统”创建“而诞生,因被”调度“而执行,因得不到资源而暂停,最后因被”撤销“而消亡

        • 程序:程序是一组有序指令的集合,是静态的概念

      • 并发性

        • 指不同进程的的动作在时间上可以重叠,即系统内的多个进程是可以并发执行的
      • 独立性

        • 指进程实体是一个能独立运行的基本单位,同时也是系统中独立获得资源和独立调用的基本单位
      • 异步性

        • 指进程按各自独立的,不可预知的速度向前推进
      • 进程和程序的区别

        1. 从定义上看,进程是程序处理数据的过程,而程序是一组指令的有序集合

        2. 进程具有动态性,并发性,独立性和异步性,而程序不具有这些特性

        3. 从进程结构特性上看,他包含程序(以及数据和PCB)

        4. 进程和程序并非一一对应

      • 习题

        • 在操作系统中引入”进程“概念的主要目的是(B)

          A.改善用户编程环境 B.描述程序动态执行过程的性质

          C.使程序与计算过程一一对应 D.提高程序的运行速度

    • 进程的三种基本状态

      • 就绪状态(Ready)

        • 进程已获得除CPU之外的所有必需的资源,一旦得到CPU控制权,立即可以运行
      • 运行状态(Running)

        • 进程已获得运行所必需的资源,他正在处理机上执行
      • 阻塞状态(Blocked)

        • 正在执行的进程由于发生某事件而暂时无法执行时,便放弃处理机而处于暂停状态,称该进程处于阻塞状态或等待状态
      • 进程的三种基本状态以及各状态之间的转换

        [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-M5uS0BYT-1648469637672)(C:\Users\18752\AppData\Roaming\marktext\images\2022-03-26-19-33-12-image.png)]

      • 在不少系统中,又增加了两种基本状态

        • 新建(New)状态

        • 终止(Terminated)状态

      • 为声明要引入新建状态和终止状态的原因

        • 由于OS在建立一个新进程时,通常分为两步:第一是为新登录的用户程序(分时系统)创建进程,并为他分配资源(PCB),此时进程即处于新建态。第二步是把新创建的进程送入就绪队列,一旦进程进入就绪队列,它便由新建态变为就绪态

        • 一个结束了的进程,其推出系统的过程也分为两步:第一步是将该进程从就绪队列移出(清空PCB),使其称为一个不能再运行的进程,相应的进程处于终止状态。此时系统并不立即撤销它,而是将他暂时留在系统中,以便其他进程趋收集该进程的有关信息

      • 进程的三种基本状态间的转换(含新建状态和终止状态)

        [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5soczaxw-1648469637672)(C:\Users\18752\AppData\Roaming\marktext\images\2022-03-26-19-53-26-image.png)]

      • 单CPU的处理机在一个时刻处于执行态的进程最多只有一个,选择哪个进程则由相应的算法决定

      • 就绪态转为执行态:进程抢到处理机的执行单元的资源时,就会从就绪态转为执行态

      • 执行态转为就绪态:由于OS是为每个终端用户分配时间片,当终端用户的时间片执行完时就会转为就绪态,等下一次的调度

      • 执行态转为阻塞态:由于处于执行态的收到I/O请求后但I/O设备一直分配不到I/O设备所以一直阻塞,直到分配到I/O设备后完成I/O任务转为就绪态

        • 这是主动放弃CPU的资源
      • 就绪态和阻塞态是一个队列可能有多个进程,但执行态只有一个

    • 挂起状态

      • 将进程从内存转到外存的操作,以便于其他新的进程能够获取到处理机的资源,提高效率

      • 引起挂起状态的原因:

        • 终端用户的请求 :程序员编写的代码暂时调试修改不需要运行就暂时挂起

        • 父进程请求 :进程树 父进程将子进程挂起

        • 负荷调节的需要 : 计算机资源的紧张,释放一些以供计算机运行

        • 操作系统的需要 : 计算机需要执行一个挂起操作

    • 引起挂起状态后的进程状态转换

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tXUxrHUx-1648469637672)(C:\Users\18752\AppData\Roaming\marktext\images\2022-03-26-21-31-17-image.png)]

    • 引起挂起原语操作后,基本进程状态的改变:

      活动状态是在内存里而静止状态是在外存中

      • 活动就绪(未被挂起的就绪进程)—>静止就绪(被挂起的就绪进程)

      • 活动阻塞(未被挂起的阻塞进程)—>静止阻塞(被挂起的阻塞进程)

      • 静止就绪(被挂起的就绪进程)—>活动就绪(未被挂起的就绪进程)

      • 静止阻塞(被挂起的阻塞进程)—>活动阻塞(未被挂起的阻塞进程)

    • 如果计算机的内存资源不够的情况下(优先挂起活动阻塞还是静止阻塞还是活动就绪),优先挂起活动阻塞线程

    • 如果计算机的内存资源足够的情况下(优先激活活动就绪进程还是静止就绪进程),优先激活静止就绪线程

  • 进程控制块(PCB)

    • 进程控制块的作用

      • 创建进程就是在系统中创建PCB,撤销进程就是撤销PCB。

      • 存放进程管理和控制信息的数据结构,用于描述进程的当前情况以及控制进程运行的全部信息

      • 是进程实体的一部分,是进程存在的唯一标识,也是操作系统中最重要的结构体的数据结构

      • 使一个在多道程序环境下不能独立运行的程序(含数据),使其成为一个能独立运行的基本单位,一个能与其它进程并发执行的进程,或者说 OS是根据PCB来对并发执行的进程进行控制和管理的

      • 系统所有的PCB组织成链表或队列,常驻于内存的PCB区

    • 进程控制块中的信息

      • 进程标识符

        • 每个进程都必须有一个唯一的标识符

          • 内部标识符

          • 外部标识符

      • 处理机状态

        • 主要由处理机的各种寄存器中的内容组成,处理机运行时的信息主要存放在寄存器中,当被中断时这些信息要存放在PCB中

          • 通用寄存器 :用户程序可以访问的寄存器,用于暂时存放信息

          • 指令计数器 :存放了要访问的下一条指令的地址

          • 程序状态字PSW :含有状态信息

          • 用户栈指针 :指每个用户进程都有一个或若干个与之相关的系统栈,用于存放过程和系统调用参数及调用地址

      • 进程调度信息

        • 进程状态 :指明进程的当前状态,它是作为进程调度和对换时的依据

        • 进程优先级 :用于描述进程使用处理机的优先级别的一个整数,优先级高的进程应优先获得处理机

        • 进程调度所需的其他信息 :它们与所采用的进程调度算法有关

        • 事件 :进程由执行状态转变为阻塞状态所等待发生的事件,即阻塞原因

      • 进程控制信息

        • 程序和数据的地址 :是指进程的程序和数据所在的内存和外存(首)地址,以便再次调度到该程序执行的时候,能从PCB中找到其程序和数据

        • 进程通信和同步机制 :指实现进程同步和进程通信必须的机制,如消息队列指针,信号量等,它们可能全部或部分地存放在PCB中

        • 资源清单 :列出进程在运行期间所需的全部资源以及以及分配到该进程的资源清单

        • 链接指针 :给出本进程(PCB)所在队列的下一进程的PCB的首地址

    • 进程控制块的组织方式

      • 存储位置

        • 由于PCB是系统中最重要也是被频繁访问的数据结构,系统中的许多模块,特别是运行频率很高的进程分派程序,都要对它进行读或写操作,所以PCB常驻于内存的系统区中,系统将所有的PCB以数组形式连续存放组织成若干个链表(或队列),存放在操作系统专门开辟的PCB区内
      • 常用组织方式

        • 线性方式

          • 将系统中的所有的PCB都组织在一张线性表中,将该表的首地址存放在内存的一个专用单元,该方式实现简单,开销小,但每次查找都要扫描整张表,适合进程数目不多的系统
        • 链接方式

          • 将具有相同状态的进程的PCB分别通过PCB中的链接字链接成一个队列。形成若干个就绪队列,阻塞队列和空白队列。对于就绪队列,往往按照进程的优先级将PCB从高到低进行排列

          • 缺点:进程看着很乱

          • 对于就绪队列

          [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pEqrkxPu-1648469637673)(C:\Users\18752\AppData\Roaming\marktext\images\2022-03-27-09-52-51-image.png)]

        • 索引方式

          • 系统根据进程的状态建立几张索引表,把各表的内存首地址记录在内存的专用单元中。

          • 索引表的表目中记录了相应状态的某个PCB在PCB表中的地址

            [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-otzEweLa-1648469637673)(C:\Users\18752\AppData\Roaming\marktext\images\2022-03-27-10-00-07-image.png)]

  • 进程控制

    • 进程控制是进程管理中最基本的功能,包括进程的创建、终止、进程阻塞和唤醒

    • 进程控制一般是由OS的内核来实现的

    • 操作系统内核

      • 操作系统内核:操作系统中与硬件紧密相关的模块(如中断处理程序、设备驱动程序等)以及运行频率较高(如时钟管理、进程调度等)的模块,它们常驻于内存

      • 设置操作系统内核的作用:

        • 便于对软件进行保护,防止被其他程序破坏

        • 提供操作系统的运行效率

      • 处理机执行状态

        • 系统态(管态或内核态)

        • 用户态(目态)

      • 内核两大功能

        • 支撑功能

          • 中断处理:内核对中断进行“有限处理”后,转入相关进程接后续处理

          • 时钟管理:定时产生时钟信号

          • 原语操作:原语是完成一定功能的过程,具有不可分割性

            • 原语操作

              • 原语:本身是由若干条指令构成,用于完成特定功能的一个过程。为了保证操作的正确性,原语在执行期间是不允许分割的,也就是说原语的执行不能被中断

              • 原子操作: 一个操作中的所有动作,与一般过程的区别:要么全作,要么全不作。即原子操作是不可分割的,在管态(核态,相对用户态)下执行,常驻于内存

                • 管态又称系统态,在这个状态下可执行cpu的全部指令
              • 作用:为了实现进程的通信和控制,系统对进程的控制如果不使用原语,就会造成其状态的不确定性,从而达不到进程控制的目的

              • 内核的实现是通过原语实现的,而原语又是通过原子操作构成的

        • 资源管理功能

          • 进程管理:运行频率较高的模块(如进程调度、创建与撤销等),常被调用模块如同步原语等均被放入内核

          • 存储器管理:运行频率较高也要放入内核

          • 设备管理:与硬件相关也要放入内核

    • 进程的层次结构:体现为进程创建过程中生产的进程家族树。如Unix下的进程树,windows中不存在进程层次结构的概念,进程之间(通过句柄)只有控制与被控制的关系

    • 进程图

      • 描述进程的家族关系的有向树

        父进程 子进程 祖先 子孙

        [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-brfeMWsG-1648469637673)(C:\Users\18752\AppData\Roaming\marktext\images\2022-03-27-10-15-21-image.png)]

    1. 进程的创建(Creat())

      • 操作系统发现要求创建新进程的事件后,调用进程创建原语 Creat() 创建新进程

      • 进程的创建过程:申请空白PCB——为新进程分配资源——初始化进程控制块——将新进程插入就绪队列

      • 引起创建进程的事件

        • 用户登录

        • 作业调度

        • 提供服务

        • 应用请求

    2. 进程的终止 (Terminate())

      • 引起进程终止的事件

        • 正常结束

        • 异常结束

          • 越界错误,非法指令等
        • 外界干预

          • 操作员或操作系统干预;

          • 父进程请求

          • 父进程终止

      • 进程的终止过程:找出被终止进程的PCB——若进程状态为运行态,置CPU调度标志为真(用于指示该进程被终止后应重新进行调度)——若其有子孙进程,终止其子孙进程并回收其资源——回收终止进程的资源——回收终止进程的PCB

      • 应由父进程调用进程撤销原语来撤销,以便及时的释放其所占的资源

    3. 进程的阻塞与唤醒(Block())

      • 引起进程的阻塞和唤醒的事件

        • 请求系统服务

        • 启动某种操作

        • 新数据尚未到达

        • 无新工作可做

      • 进程阻塞过程:调用阻塞原语阻塞自己(自己主动阻塞,不是被动阻塞)——将PCB中的状态改为阻塞,并加入阻塞队列——转进程调度

      • 进程唤醒过程

        • 阻塞进程等待的事件发生,相关进程调用 唤醒原语Wakeup() 唤醒等待该事件的进程

          • 把阻塞进程从等待该事件的阻塞队列中移除——置进程状态为就绪态,将PCB插入到就绪队列中
        • 阻塞原语与唤醒原语作用相反,成对使用,否则阻塞进程一直处于阻塞,再无机会继续运行

    4. 进程的挂起与激活

      • 当出现引起进程挂起的事件时,系统利用 挂起原语suspend() 将指定进程或处于阻塞的进程挂起

        • 进程的挂起过程

          • 检查被挂起进程的状态

            • 若处于活动就绪,则改为静止就绪

            • 若处于活动阻塞,则改为静止阻塞

            • 若挂起的进程正在执行,则重新进行进程调度

      • 当发生激活进程的事件时,系统利用 激活原语Active() 将指定的进程激活

        在计算机资源充足的情况下,会将外存的静止进程激活

        • 过程

          • 激活原语先将进程从外存调入内存

          • 检查该进程的状态

            • 若为静止就绪,就改为活动就绪

            • 若为静止阻塞,就改为活动阻塞

  • 进程同步

    • 进程同步的概念:对于多个相关进程在执行次序上进行协调,使并发执行的诸进程之间能够有效地共享资源和相互合作,从而使程序的执行具有可再现性

    • 进程间两种形式的制约关系

      • 间接相互制约关系——源于资源共享(打印机):进程间要通过某种中介发生联系,是无意识安排的,可发生在相交进程之间,也可发生在无关进程之间

      • 直接相互制约关系——源于进程合作(流水线):直接作用只发生在相交进程间,进程间的相互联系是有意识的安排的

    • 临界资源:在一段时间内只允许一个进程访问的资源称为临界资源或独占资源

    • 临界区:每个进程中访问临界资源的那段代码称为临界区

    • 临界资源——采取互斥方式实现共享

      • 生产者-消费者问题:生产者进程和消费者进程都是以异步方式运行,但它们之间必须保持同步

        [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WgjMwef8-1648469637674)(C:\Users\18752\AppData\Roaming\marktext\images\2022-03-27-12-06-48-image.png)]

      • 进程互斥:两进程不能同时进入同一临界区

      • 访问临界区的程序设计为:

        • 进入区 :申请资源

        • 临界区 :使用资源

        • 退出区 :释放资源

        • 剩余区

    • 同步机制应遵守的规则

      • 空闲让进-临界资源空闲状态,应允许请求进入临界区

      • 忙则等待-临界资源正被访问,进入临界区进程必须等待

      • 有限等待-有限时间能进入自己的临界区

      • 让权等待-不能进入临界区时,应立即释放处理机

  • 信号量机制

    • 信号量代表可用资源实体的数量

    • 是一个有效的进程同步工具

    • 信号量就是OS提供的管理公有资源的有效手段

    1. 整型信号量

      • 把整型信号量定义为一个用于表示资源数目的整型量S,除初始化操作外,仅能通过两个原子操作wait(s),signal(s)来访问

      • P操作 wait(s) ——进入区 (申请资源)

      • V操作 signal(s) ——退出区 (释放资源)

      • P,V操作是原子操作,不可中断

      • 在wait操作中,只要是信号量S<=0,就会不断地测试

      • 该机制并未遵循“让权等待”的准则,而是使进程处于”忙等“的状态

    2. 记录型信号量

      • 记录型信号量机制采取了”让权等待“的策略,又会出现多个进程等待访问同一临界资源的情况

      • 引入整型变量value(代表资源数目),进程链表L(链接所有等待进程)

      • 记录型数据结构

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-m4un9nCP-1648469637674)(C:\Users\18752\AppData\Roaming\marktext\images\2022-03-27-14-05-00-image.png)]

    • Wait操作:

      • 申请资源,减量操作,S.value:=S.value-1

      • 当S.value<0时,表示资源分配完,进行自我阻塞

    • Signal操作:

      • 释放资源,增量操作,S.value:=S.value+1

      • 当S.value<=0,唤醒S.L链表中的等待进程

    • S.value>0和S.value<0的含义

      • value>0,代表可用资源的数量

      • value<0,代表由于申请资源而阻塞的进程数量

    • 为什么S.value<=0要唤醒,它和整型信号量的不同在哪

      • 有两个进程A,B和一台打印机。所以S.value=1,S.value=1-1=0<0?不成立,说明有资源可用,那么打印机可以给进程A使用了。然后A进入临界区去执行打印操作。在打印的过程中,如果进程B也想要使用打印机,他也要进入进入区去申请,申请上即可使用,申请不上就自我阻塞起来,此时A在使用,进程B要申请的话S.value=0-1<0?成立,那么进程B就会自我阻塞挂起到L上,直到进程A用完了打印机,则A就退出执行S.value=-1+1<=0?成立则唤醒S.L链表中的等待进程,把打印机给进程B使用,进程B使用完后,也释放资源,执行V操作,S.value=0+1=1
    • 缺点

      • 每次只能获得或释放一个单位的资源,低效

      • 每次分配前必须测试资源数量,看其是否大于其下界值

    3* AND型信号量

    • AND同步机制的基本思想:将进程在整个运行过程中需要的所有资源,一次性全部分配给进程,待进程使用完后再一起释放。只要尚有一个资源未能分配给进程,其他所有可能为之分配的资源也不分配给他。即对临界资源的分配采取原子操作,称为同时wait操作即Swait()

    • 为什么会采用这个机制

      • 若进程同时竞争2个临界资源,容易造成死锁

    4* 信号量集

  • 信号量的应用(重点)

    • 利用信号量实现进程互斥

      • 为使多个进程互斥的访问某临界资源,须为该资源设置——互斥信号量mutex,并设其初始值为1,然后将各进程访问资源的临界区CS置于wait(mutex)和signal(mutex)之间均可
    • 利用信号量实现前驱关系

      • 设有两个并发执行的进程P1和P2,P1中有语句S1,P2中有语句S2,希望在S1执行后再执行S2

      • 使进程P1和P2共享一个公用信号量S,并赋予其初值为0

        [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-j24uRNAC-1648469637675)(C:\Users\18752\AppData\Roaming\marktext\images\2022-03-27-17-56-18-image.png)]

    • 利用记录型信号量实现同步

      • P1,P2两进程因合作完成一项任务而共用一个变量x。进程P2将结构送入x;进程p1将x的结果打印
  • 经典进程的同步问题

    ①首先分析程序有几个进程

    ②存在模式

    • 生产者——消费者问题

      • 生产者和消费者两个进程

      • 生产者和消费者是互斥关系,先生产再消费 ——互斥信号量

      • 生产者和消费者之间要保持同步,因为他们是以异步方式运行 ——资源信号量

        • 利用记录型信号量解决

          • 每个程序中用于实现互斥的wait(mutex)和signal(mutex)必须成对地出现

          • (****)对资源信号量empty和full的wait和signal操作,同样需要成对地出现,但处于不同的程序中

          • 再每个程序中的多个wait操作顺序不能颠倒。应先执行对资源信号量的wait操作,再执行对互斥信号量的wait操作,否则可能会引起进程死锁

          • signal的操作顺序可以任意颠倒

        • AND型信号量解决

    • 哲学家进餐问题

      • 分析:相邻两位不能同时进餐,最多只能有两人同时进餐

      • 筷子是临界资源,而且是互斥使用的

    • 读者——写者问题

      • 一个数据文件或记录可被多个进程共享

      • 只要求读文件的进程称为“Reader进程”,其他进程则称为“Writer进程”

      • 允许多个进程同时读一个共享对象,但不允许一个Writer进程和其他Reader进程或Writer进程同时访问共享对象

  • 进程通信

    • 指进程之间的信息交换

      • 低级通信:进程间仅交换一些状态和少量数据。如:进程之间的互斥和同步

        • 信号量机制作为通信工具的缺点:①效率低 (通信量少)②通信对用户不透明(程序员实现,操作系统只提供共享存储器提供代码操作)
      • 高级通信:进程之间可交换大量数据

        • 用户可直接利用操作系统提供的一组通信命令,高效地传送大量数据的一种通信方式

        • 操作系统隐藏了进程通信的细节,对用户透明,减少了通信程序编制上的复杂性

    • 进程通信的类型

      高级通信机制

      • 共享存储器系统

        • 相互通信的进程间共享某些数据结构或共享存储区,通过这些空间进行通信

        • 基于共享数据结构的通信方式(buffer[lenght])

          • 进程公用某些数据结构,借以实现诸进程间的信息交换

          • 实现:公用数据结构的设置及对进程间同步的处理,都是程序员的职责

          • 操作系统——提供共享存储器

          • 特点:低效。只适合传递相对少量的数据

        • 基于共享存储区的通信方式

          • 在存储器中划出一块共享存储区,诸进程可通过对共享存储区中数据的读或写来实现通信
      • 消息传递系统

        • 进程间的数据交换,以格式化的消息为单位

          • 程序员直接利用系统提供的一组通信命令(原语)进行通信

            • 计算机网络:网络报文
      • 管道通信(pipe)

        • 指用于连接一个读进程和一个写进程以实现他们之间通信的一个打开的共享文件,又名pipe文件

        • 提供的协调能力:互斥;同步;确定对方是否存在

          [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eqk0Tl09-1648469637675)(C:\Users\18752\AppData\Roaming\marktext\images\2022-03-28-12-30-42-image.png)]

      • 消息传递通信的实现方法

        • 进程间通信时,源进程可以直接或间接地将消息传送给目标进程,由此可将进程通信分为直接通信和间接通信
        1. 直接通信方式

          • 发生进程利用OS提供的发送命令,直接把消息发送给目标进程。发生进程和接收进程都以显式方式提供对方的标识符

            • 通信原语:

              • Send(Receiver,message); 发生一个消息给接收进程

              • Receive(Sender,message); 接收Sender发来的消息

              • message相当于临时变量,用来存放收发信息

            • 利用直接通信原语解决生产者——消费者问题

              • 当生产者生产出一个产品(消息)后,便用Send原语将消息发送给消费者进程;而消费者进程则利用Receive原语来得到一个消息。若消息尚未产生出来,消费者必须等待,直至生产者进程将消息发送过来
        2. 间接通信

          • 通过信箱通信

          • 信息用来暂存发送进程发送给目标进程的消息,接收进程则从信箱中取出发送给自己的消息

          • 消息在信息中可安全保存,只允许核准的目标用户随时读取利用信箱通信方式,既可实时通信,又可非实时通信

          • 信息可由操作系统创建,也可由用户进程创建,创建者是信箱的拥有者。

          • 信箱的分类:

            • 私用信箱 :单项 (由用户创建)

            • 公用信箱 :双向 (由操作系统创建)

            • 共享信箱 :双向 (由进程创建)

    • 消息传递系统实现中的若干问题

      • 通信链路

        • 分类:

          • 根据通信链路的建立方式

            • 显示连接:先用“建立连接”命令(原语)建立一条通信链路;通信,用显式方法拆除链路。——用于计算机网络

            • 隐式连接:发送进程无需明确提出建立链路的要求,直接利用系统提供的发送命令(原语),系统会自动为之建立一条链路 ——用于单机系统

          • 根据通信链路的连接方式

            • 点对点连接通信

            • 多点连接通信链路

          • 根据通信方式的不同

            • 单向通信链路

            • 双向链路

          • 根据通信链路容量的不同

            • 无容量通信链路

            • 有容量通信链路

      • 消息格式

        • 消息头:消息在传输时所需的控制信息

        • 消息的正文:发送进程实际上所发送的数据

      • 进程同步方式

        • 在进程之间进行通信时,辅以进程同步机制,使诸进程间能协调通信

        • 发送进程或接收进程在完成消息的发送或接收后,都存在两种可能性:进程或者继续发送(接收)或阻塞

          • 发送进程阻塞,接收进程阻塞 ——(紧密同步,进程之间没有缓冲区)

          • 发送进程不阻塞,接收进程阻塞 ——(有些服务暂时不需要,就自我阻塞起来,适合一对多,应用最广)

          • 发送进程和接受进程均不阻塞 ——(有缓存区,且接受方的速度匹配)

    • 消息缓冲队列通信机制

      • 适用于本地进程间的通信

      • 发送进程利用Send原语,将消息直接发送给接收进程;接收进程利用Receive原语接收消息

      1. 消息缓冲队列通信机制中的数据结构

        • 消息缓冲队列通信方式中,主要利用的数据结构是消息缓冲区

        • 消息缓冲区格式

          [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gWTJauLk-1648469637675)(C:\Users\18752\AppData\Roaming\marktext\images\2022-03-28-13-11-08-image.png)]

      2. PCB中有关通信的数据项

        • 在进程的PCB中增加消息队列队首指针,用于对消息队列进行操作,以及用于实现同步的互斥信号量mutes和信号量sm[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-G9dNfXkn-1648469637676)(C:\Users\18752\AppData\Roaming\marktext\images\2022-03-28-13-13-23-image.png)]
      3. 发送原语

        [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-L2Vf9mMZ-1648469637676)(C:\Users\18752\AppData\Roaming\marktext\images\2022-03-28-13-17-52-image.png)]

      4. 接收原语

        [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KVMeW4FJ-1648469637676)(C:\Users\18752\AppData\Roaming\marktext\images\2022-03-28-13-22-42-image.png)]

  • 线程的基本概念

    • 线程的引入

      • 进程的两个基本属性

        • 进程是一个可以拥有资源的独立单位

        • 进程是一个可以独立调度和分派 的基本单位

      • 由此,进程成为了能够独立运行的基本单位,从而也就构成了进程并发执行的基础

      • 程序并发执行所需付出的时空开销

        • 创建进程

        • 撤销进程

        • 进程切换

    • 线程——作为调度和分配的基本单位

      • 轻型实体

      • 独立调度和分派的基本单位

      • 可并发单位

      • 共享进程资源

    • 线程设计的指导思想

      • 若进程的两个属性分开,即对于作为调度和分派的基本单位,不同时作为拥有资源的单位,以做到轻装上阵;而对于拥有资源的基本单位,又不对之进行频繁的切换
    • 线程与进程的比较

      • 线程具有许多传统进程所具有的特征,所以称为轻型进程

      • 从以下几个方面进行比较

        [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ff7oeaox-1648469637677)(C:\Users\18752\AppData\Roaming\marktext\images\2022-03-28-15-34-01-image.png)]

  • 线程的状态和线程控制块

    • 线程运行的三个状态

      • 和传统进程一样,在各线程之间也存在着共享资源和相互合作的制约关系,致使线程在运行时也具有间断性。相应地,线程在运行时,也具有下述三种基本状态:

        • 执行态:表示线程正获得处理机而运行

        • 就绪态:表示线程已具备各种执行条件,一旦获得cpu便可执行的状态

        • 阻塞态:指线程在执行中因某事件而受阻,处于暂停执行的状态

    • 线程控制块TCB

      • 用于记录所有用于控制和管理线程的信息
    • 多线程OS中进程属性

      • 进程是一个可拥有资源的基本单位

      • 多个线程可并发执行

      • 进程已不是可执行的实体
        程并发执行的基础

      • 程序并发执行所需付出的时空开销

        • 创建进程

        • 撤销进程

        • 进程切换

    • 线程——作为调度和分配的基本单位

      • 轻型实体

      • 独立调度和分派的基本单位

      • 可并发单位

      • 共享进程资源

    • 线程设计的指导思想

      • 若进程的两个属性分开,即对于作为调度和分派的基本单位,不同时作为拥有资源的单位,以做到轻装上阵;而对于拥有资源的基本单位,又不对之进行频繁的切换
    • 线程与进程的比较

      • 线程具有许多传统进程所具有的特征,所以称为轻型进程

      • 从以下几个方面进行比较

        [外链图片转存中…(img-Ff7oeaox-1648469637677)]

  • 线程的状态和线程控制块

    • 线程运行的三个状态

      • 和传统进程一样,在各线程之间也存在着共享资源和相互合作的制约关系,致使线程在运行时也具有间断性。相应地,线程在运行时,也具有下述三种基本状态:

        • 执行态:表示线程正获得处理机而运行

        • 就绪态:表示线程已具备各种执行条件,一旦获得cpu便可执行的状态

        • 阻塞态:指线程在执行中因某事件而受阻,处于暂停执行的状态

    • 线程控制块TCB

      • 用于记录所有用于控制和管理线程的信息
    • 多线程OS中进程属性

      • 进程是一个可拥有资源的基本单位

      • 多个线程可并发执行

      • 进程已不是可执行的实体

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小学五年级在读的蒟蒻

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值