操作系统_第二章_进程的描述与控制

目录:
2.1 进程的概念,组成和特征
2.2 进程控制
2.3 进程同步与互斥
2.4 信号量机制
2.5 线程
2.6 进程通信

2.1 进程的概念,组成和特征

2.1.1 进程的定义

  • 进程的定义从不同的角度可以有不同的定义,这里我们给出进程的典型定义:进程是程序的一次执行
    • 进程是动态的,而程序是静态

2.1.2.进程的组成

  • 数据段,程序段PCB组成.
  • PCB包括进程的描述信息,进程控制管理信息,资源分配清单,处理机相关信息
    • 如何判断是否属于PCB?
      • 1.属于数据段和程序段
      • 2.PCB用于进程的管理和切换

2.1.3 进程的内存空间

进程的内存空间
代码区
静态数据区
全局变量
静态变量
动态数据区
malloc申请的内存
函数调用的参数
函数的局部变量

2.1.4 进程的状态

进程的三种基本状态:

(一) 就绪态:只缺cpu.
(二) 执行态:占有cpu,并在cpu上运行.
(三)阻塞态:缺少cpu以外的其他资源.

图1 进程的三种基本状态及其转换
图2 进程的五种基本状态及转换

为了满足进程控制块对数据及操作的完整性要求以及增强管理的灵活性,通常在系统中为进程引入了两种常见的状态创建状态和终止状态:

  • 创建状态:
    为了保证进程的调度必须在创建工作我弄成后进行,以确保对进程控制块的完整性

  • 终止状态:
    是为了保证进程结束后,系统将进程信息删除而不再进行其他操作.

  • 为了系统和用户观察和分析进程的需要,引入了一个对进程的重要操作-挂起操作.

  • 挂起操作其实就像是突然将某一状态暂停,以满足各种操作上的需要.
    如引入了挂起操作之后,就绪态就变为了活动就绪态和静止就绪态.未挂起时为活动就绪态,挂起时为静止就绪态.

在这里插入图片描述

2.2 进程控制

进程控制主要包括创建新进程,终止已完成的进程,进程转换等
用户调用程序,操作系统内核调用进程

2.2.1 操作系统内核

一. 操作系统内核的定义

现代操作系统通常将一些(1)与硬件紧密相关的模块(2)常用设备的驱动程序(3)运行频率较高的模块,都安排在紧靠硬件的软件层次,将他们常驻内存.

二.处理机执行状态的分类

相对应的是,为了防止os本身及关键数据(如PCB等)遭受到应用程序有意或无意的破坏,通常将处理机的执行状态分为系统态用户态.
系统态:又称为管态,也称为内核态.它具有较高的特权,能执行一切指令,访问所有寄存器和存储区,传统的os都在系统态运行.
用户态:又称为目态,它具有较低特权的执行状态,仅能执行规定的指令,访问指定的寄存器和存储区.

三.os内核的两大功能

支撑功能:(1)中断处理(2)时钟管理(3)原语操作
资源管理功能:(1)进程管理(2)存储器管理(3)设备管理

四. 进程的层次结构

(1)进程可以继承父进程所拥有的资源
(2)当子进程被撤销时,应将其从父进程那里获得的资源归还给父进程
(3)在撤销父进程时,也必须同时撤销其所有的子进程.
(4)PCB中设置了家族关系表项,以标明自己的父进程及所有的子进程.

五.进程的创建

  • 引起进程创建的事件
    (1)用户登入
    (2)作业调度
    (3)提供服务
    (4)应用请求
  • 进程创建过程
    (1)申请空白PCB
    (2)为新进程分配其运行所需的资源
    (3)初始化PCB
    (3)若进程就绪队列能接纳新进程,便将新进程插入就绪队列.

六.进程的终止

  • 引起进程终止的事件
    (1)正常结束
    (2)异常结束
    (3)外界干预
  • 进程的终止过程
    (1) 找到该PCB,从中读出该进程的状态.
    (2) 若该进程仍执行,则立即停止,并置调度标志为真.
    (3)若该进程还有子孙进程,则应将其所有的子孙进程全部终止.
    (4)被终止进程所拥有的全部资源或者归还给父进程,或者归还给系统
    (5)被终止程序的pcb从所在队列中被移出.
    记忆:记忆过程中(2),(3)可组合成一条记忆. 简化记忆:读PCB,停止该进程及子进程,置调度标志,归还资源,移除队列.

七.进程的阻塞与唤醒

1.引起进程阻塞和唤醒的事件
(1)向系统请求共享资源失败
(2)等待某种操作的完成
(3)新数据尚未到达
(4)等待新任务的到达
进程的阻塞和唤醒过程,不作为记忆的重点.

八.进程的挂起与激活

进程的挂起(被动行为)
进程的激活(恢复资源)

2.3 进程同步与互斥

2.3.1 进程同步的概念

进程的同步:是指在多个并发执行的进程之间协调和控制它们的执行顺序以及共享资源的访问.进程同步的主要目标是确保多个进程能够按照一定的顺序执行,以避免不可预测的结果和潜在的问题。

  • 两种形式的制约关系:
    • (1)间接相互制约关系
      • 共享
    • (2)直接相互制约关系
      • 相互合作
  • 同步原则:
    • 空闲让进
    • 忙则等待
    • 有限等待
    • 让权等待

2.3.2 进程的互斥

进程的互斥:一个进程访问某临界资源时,必须互斥的进行,另一个想要访问该资源的进程必须等待.

2.3.3 临界资源和临界区

临界资源和临界区是并发编程中的两个相关概念
临界资源:一个时间段内只允许一个进程使用的资源称为临界资源.
临界区:是指包含访问共享资源的代码块。为了避免多个进程同时进入临界区,需要使用互斥机制。

2.4 信号量机制

2.4.1 pv操作

p操作:
p(s) //申请资源
s=s-1
若s>=0,则进程继续
若s<0,则进程阻塞,并加入到信号量的等待队列q中  //如果当前本身就是0个资源,剪掉1,小于0,没有资源,进程自然被阻塞了

v(s) //释放资源
s=s+1
若s>0,则进程继续
若s<=0,这意味着等待队列中可能有阻塞的进程在等待资源。因此,V(S) 操作会释放等待队列中的第一个等待信号量的进程,使其从阻塞状态变为就绪状态,以便在资源可用时重新执行。我的理解是:现在还有其他进程在执行,但是现在你已经有了资源,等待其他进程结束,释放cpu.

2.4.2 利用信号量解决前驱关系

问题的描述:根据前驱图,用信号量机制解决进程的同步问题
在这里插入图片描述
解读:A,B,C没有前驱,直接v操作,释放一个资源,也就是获得一个资源给后面的进程使用,在D进程之前,需要申请A,B,C三个资源,最后的E没有后继节点,不需释放资源
问题实例:
在这里插入图片描述
总结:两个进程之间做标记 f1-fn,进程之前p操作,进程之后v操作

信号量机制相关博客入口:
信号量机制实现进程的同步与互斥
吸烟者问题
生产者-消费者问题

2.5 线程

2.5.1 线程的概念与特点

一. 线程的引入
在没有进程之前音乐和qq之间,不能同时使用,但是引入了进程之后,音乐能和qq能够一起使用,但是qq中有许多小的功能,如何同时使用这些小的功能呢?------>引入线程
二.线程的概念
线程是一个基本的CPU执行单元,也是程序执行流的最小单位.
三.线程引入后,带来的改变与影响
在这里插入图片描述
四.线程的属性
在这里插入图片描述

2.5.2 线程的实现方法和多线程模型

一.用户级线程

  • 用户级线程就是在用户视角下能看到的线程.
  • 用户级线程由应用程序通过线程库实现
  • 线程切换在用户态下即可完成,无需操作系统的干预.
  • 用户级线程的优缺点
    • 优点:用户级线程的切换在用户空间即可完成,不需要切换到核心态,线程管理的系统开销小,效率高.
    • 缺点:当一个用户级线程被阻塞后,整个进程都会被阻塞 ,并发度不高.
      在这里插入图片描述
  • 一个最简陋用户级线程的实现例子
    在这里插入图片描述

二.内核级线程

  • 内核级线程的管理工作由操作系统内核完成.
  • 线程调度,切换等工作都由内核负责,因此内核级线程的切换只能在核心态下完成.
  • 操作系统只能看到内核级线程.
  • 内核级线程的优缺点
    • 优点:当一个线程被阻塞后别的线程还可以继续执行,并发能力强,多线程可在多核处理机上并行执行.
    • 缺点:一个用户进程占用多个内核级线程,线程切换由操作系统内核完成,需要切换到核心态,管理的成本高,开销大
      在这里插入图片描述

三. 多线程模型

  • 如何将上面2个线程模型的优点集成起来?—>引入多线程模型
    • 一对一模型:就是上面的内核级线程模型
      在这里插入图片描述
    • 多对一模型:就是刚才的用户级线程
      在这里插入图片描述
    • 多对多模型:重点
      在这里插入图片描述

2.5.3 线程的状态和转换

  • 线程的状态与转换与进程类似
    在这里插入图片描述
    在这里插入图片描述

2.6 进程通信

引入:为什么进程通信需要操作系统的系统支持?

进程是分配系统资源的单位(包括内存地址空间) ,因此各进程拥有的内存地址空间相互独立.为了保证安全,一个进程不能直接访问另一个进程的地址空间.

进程通信的三种方式:

  • 共享存储
  • 消息传递
  • 管道通信

2.6.1 共享存储

划分一个共享存储区,来实现进程之间的通信.

在这里插入图片描述

一.共享存储的种类

共享存储有两种类型,一个是基于数据结构的共享,基于存储区的共享.
基于数据结构的共享:比如共享空间里只能放一个长度为10的数组。这种共享方式速度慢、限制多,是一种低级通信方式

基于存储区的共享:操作系统在内存中划出一块共享存储区,数据的形式、存放位置都由通信进程控制,而不是操作系统。这种共享方式速度很快,是一种高级通信方式。

2.6.2 消息传递

在这里插入图片描述

格式化消息
进程间的数据交换以格式化的消息(Message)为单位。进程通过操作系统提供的“发送消息/接收消息”两个原语进行数据交换。

一.消息传递的种类

直接通信方式和间接通信方式.
直接通信方式:消息发送进程要指明接收进程的ID
间接通信方式:通过“信箱”间接地通信。因此又称“信箱通信方式”

直接通信方式:是从进程地址p生成msg后,通过发送原语,将msg插入到由操作系统内核控制的进程Q的队列中,再由进程进程Q,接收原语,从队列中拿出msg.
间接通信方式:是操作系统内核不再控制某一个进程的队列.而是控制多个信箱,进程P把消息放入到信箱A中,进程Q在把消息从信箱A中拿走.

2.6.3 管道通信

在这里插入图片描述
“管道”是一个特殊的共享文件,又名pipe文件。其实就是在内存中开辟一个大小固定的内存缓冲区
管道通信与共享存储的区别?
共享存储更加自由,而管道通信是循环队列,有先入先出的限制.

  • 管道只能采用半双工通信,某一时间段内只能实现单向的传输。如果要实现双向同时通信,则需要设置两个管道。
  • 各进程要互斥地访问管道(由操作系统实现)
  • 当管道写满时,写进程将阻塞,直到读进程将管道中的数据取走,即可唤醒写进程。4.当管道读空时,读进程将阻塞,直到写进程往管道中写入数据,即可唤醒读进程。
  • 当管道读空时,读进程将阻塞,直到写进程往管道中写入数据,即可唤醒读进程。
  • 管道中的数据一旦被读出,就彻底消失。因业,当多个进程读同一个管道时,可能会错乱。对此,通常有两种解决方案:①一个管道允许多个写进程,一个读进程≥2014年408真题高教社官方答案)﹔②允许有多个写进程,多个读进程,但系统会让各个读进程轮流从管道中读数据(Linux的方案)。
    在这里插入图片描述
  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小徐要考研

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

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

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

打赏作者

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

抵扣说明:

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

余额充值