模拟进程创建、终止、阻塞、唤醒原语_操作系统第二章--进程的描述与控制

097fec4e9c281c2f46a91ce7a6645549.png

abd62e237f99519d6654a9c9df8c3f65.png

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

前趋图和程序执行

    • 前趋图
      • 前趋图是一个有向无循环图DAG,用来描述进程之间执行的前后关系
      • 初始结点:没有前趋的结点
      • 终止结点:没有后继的结点
      • 重量:表示该结点所含有的程序量或结点的执行时间
    • 程序执行
      • 顺序执行
        • 顺序性
        • 封闭性:程序运行时独占全机资源
        • 可再现性
      • 并发执行
        • 间断性
        • 失去封闭性
        • 不可再现性

进程的描述

    • 进程的定义和特征
      • 进程定义
        • 进程是程序的一次执行
        • 进程是一个程序及其数据在处理机上顺序执行时发生的活动
        • 进程是系统进行资源分配和调度的一个独立单位
      • 进程结构
        • 进程控制块PCB:使程序能独立运行
        • 程序段、相关的数据段、PCB
      • 进程特征
        • 动态性:它由创建而产生,由调度而执行,由撤销而消亡
        • 程序是指令集是静态的,进程是动态的
        • 并发性:多个进程实体在一段时间内同时进行
        • 独立性:进程实体是独立运行、独立分配资源和独立接受调度的基本单位
        • 异步性:各进程独立、异步(速度不一致)地运行
    • 进程的基本状态和转换
      • 基本状态
        • 就绪状态:万事俱备,只差CPU资源
        • 执行状态:获得CPU资源,正在执行
        • 阻塞状态:由于突发事件,进程放弃处理机而处于暂停状态
      • 转换
        • 进程调度:就绪态-->运行态
        • 被高优先级任务抢占或超时:运行态-->就绪态
        • I/O请求:运行态-->阻塞态
        • I/O完成:阻塞态-->就绪态
    • 挂起操作
      • 执行的进程暂停下来,处于静止状态
    • 进程管理中的数据结构
      • 进程控制块的作用PCB
        • 独立运行基本单位的标志
        • 间断性运行:保护CPU现场
        • 进程管理:OS通过CPU对进程实施控制和管理
        • 进程调度:提供进程状态、优先级等信息
        • 进程同步与通信:消息队列指针,信号量
      • 进程控制块的内容
        • 进程标识符:唯一标识一个进程
          • 内部标识符:Pid
          • 外部标识符:进程的名字
        • 处理机状态:由各种寄存器内容构成
          • 通用寄存器
          • 指令计数器PC
          • 程序状态字PSW
          • 用户栈指针SP
        • 当进程切换时需要把当前进程的状态的内容保存在进程控制块中
        • 进程调度信息
          • 进程状态:sched.h定义了6个进程状态
          • 可运行状态
          • 可中断阻塞状态
          • 不可中断阻塞状态
          • 僵死状态
          • 暂停态
          • 交换态
          • 进程优先级
          • 其他信息:进程已执行时间
          • 事件:阻塞原因
        • 进程控制信息
          • 程序和数据地址:基地址
          • 进程同步和通信机制
          • 资源清单
          • 链接指针
      • 进程控制块的组织方式
        • 链接方式:指针指向PCB地址
        • 索引方式:通过不同状态的索引表指向PCB地址
        • 多级队列:按照不同状态组织PCB队列,同一状态按照优先级链接

进程控制

    • 原语:由若干条指令组成,用于完成一定功能
      • 是原子操作,一个操作中的所有动作要么不做,要么全做
    • 进程的创建
      • 进程图:描述一个进程的家族关系的有向图
        • 子进程可以继承父进程所拥有的资源
        • 当子进程被撤销时,应将其从父进程那里获得的资源归还给父进程
        • 在撤销父进程时,也必须同时撤销其所有的子进程
      • 引导进程创建另一个进程的事件
        • 用户登录
        • 作业调度
        • 提供服务
        • 应用请求
      • 进程创建 fork()函数
        • 申请空白PCB
        • 为新进程分配资源
        • 初始化进程控制块
        • 将进程插入就绪队列,启动调度
    • 进程终止 exit()函数
      • 根据被终止进程的PID,找到PCB,读取进程状态
      • 若处于执行状态,则终止执行,重新调度
      • 若有子孙进程,则终止所有子孙进程
      • 归还所有资源给父进程或系统
      • 所在队列移除终止进程PCB
    • 进程的阻塞与唤醒
      • 阻塞过程 block
        • 调用阻塞原语block把自己阻塞
        • 状态由执行改为阻塞,将PCB插入阻塞队列
        • 重新调度,将处理机分配给另一就绪进程
      • 唤醒过程 wakeup
        • 阻塞队列中移除
        • 状态由阻塞改为就绪
        • PCB插入到就绪队列
    • 进程的挂起与激活
      • 挂起原语 suspend
        • 检查被挂起进程的状态
          • 活动就绪:静止就绪
          • 活动阻塞:静止阻塞
        • PCB复制到指定区域
      • 激活原语 active
        • 检查激活进程的状态
          • 静止就绪:活动就绪
          • 静止阻塞:活动阻塞

进程的同步

    • 进程同步的基本概念
      • 临界资源:互斥使用的资源
      • 临界区:访问临界资源的那段代码
    • 信号量机制
      • 按照功能分为
        • 互斥信号量:0或1
        • 资源信号量:数字表示资源的可用个数
      • 按照机制分为
        • 整型信号量:定义一个整型量,wait、signal,P、V操作
        • 记录型信号量:不存在忙等现象
        • AND型信号量:同步机制,原子操作
        • 信号量集:分配多个资源
    • 管程机制

经典进程的同步问题

    • 生产者/消费者问题
      • 生产者和消费者进程共享一个大小固定的缓冲区n
      • 分别设置两个指针in和out
        • in指向生产者将存放数据的存储单元
        • out指向消费者将取出数据的存储单元
      • 创建信号量实现生产者和消费者进程的同步
        • 互斥信号量mutex:进程对缓冲池互斥使用
        • 资源信号量empty:空缓冲区的数量
        • 资源信号量full:满缓冲区的数量
    • 读者/写者问题
      • 允许多个读者进程可以同时读数据
      • 写者进程互斥写数据
      • 若有写者进程正在写数据,则不允许读者进程读数据
      • 读者优先:只有当全部读者退出,才允许写者进入写数据
    • 哲学家进餐问题
      • 记录型信号量:wait、signal考虑左筷子和右筷子(可能存在死锁)
      • AND信号量:Sswait、Ssignat

进程通信

    • 进程通信的类型
      • 共享存储器系统
        • 基于共享数据结构的通信方式
        • 基于共享存储区的通信方式
      • 管道Pipe通信
        • 用于连接读写进程以实现通信的共享文件
      • 消息传递方式
        • 直接通信:利用OS提供的发送命令Send、Receive
        • 间接通信
          • 信箱:通过中间实体(如共享数据结构)
          • 消息队列:msgsnd、msgrcv、msgget

线程VS进程

    • 调度:线程是调度分配的基本单位,进程是拥有资源的基本单位
    • 并发性:线程并发执行效率更高
    • 拥有资源:线程仅有少量资源来完成运行需求,不拥有系统资源
    • 独立性:线程独立性更低
    • 系统开销:切换线程系统开销低

网站阅读

https://geminiplanet.cn/Operating-System-4/​geminiplanet.cn

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/503042.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python变量声明语句_python – 在条件语句中声明变量有问题吗?

在条件的所有可能分支中重新定义变量之前,它是否可以防止定义变量?比如应该这个代码:# Condition could failtry:textureIndices someExpression()# textureIndices is defined here if it doesexcept:textureIndices []return textureIndices重写为&a…

Java单例模式的七种写法

第一种(懒汉,线程不安全): public class Singleton { private static Singleton instance; private Singleton (){} public static Singleton getInstance() { if (instance null) { instance new Singleton(); } retur…

css3正方体选中父层 子层解体_CSS3 :nth-child(n)选择器 匹配属于其父元素的第N个子元素...

定义和用法:nth-child(n) 选择器匹配属于其父元素的第 N 个子元素,不论元素的类型。n 可以是数字、关键词或公式。先看下面一段代码:第一行第二行第三行第四行第五行如果我们想单独给某一行添加特殊的样式代码,在不使用nth-child的情况下&…

对没有标记为安全的activex控件进行初始化和脚本运行_RASP攻防 —— RASP安全应用与局限性浅析...

文|【腾讯安全平台部数据安全团队】 qiye & baz 前言随着Web应用攻击手段变得复杂,基于请求特征的防护手段,已经不能满足企业安全防护需求。在2012年的时候,Gartner引入了“Runtime application self-protection”一词&#x…

java中堆和栈有什么区别?

堆和栈都是Java用来在RAM中存放数据的地方。 一、堆 (1)Java的堆是一个运行时数据区,类的对象从堆中分配空间。这些对象通过new等指令建立,通过垃圾回收器来销毁。 (2)堆的优势是可以动态地分配内存空间,需要多少内存空间不必事先告诉编译…

cass坡度土方计算案例_【九天教您南方cass 9.1】 12 道路断面土方计算

同学们大家好,欢迎收看由老王测量上班记出品的cass9.1视频课程我是本节课主讲老师九天。我们讲课的教程附件也是共享的,请注意索取 在测量空间中。【点击索取cass教程】5元立得 (给客服说暗号:“老王测量上班记”) 即可5元获得教程全系列&…

台式机dp接口_精品导购:你想要的商务台式机 都在这里了!

不少公司都会为员工配备办公电脑,而公司在采购这些电脑时,兴许可能对电脑性能、存储容量等都没有研究过,只是图了价格便宜便批量采购,这就导致电脑在使用一段时间后,会频繁出现死机、运行卡顿和硬盘容量不够等情况的发…

roc曲线怎么绘制_ROC曲线和PR曲线

在机器学习中,ROC曲线被广泛应用于二分类问题中来评估分类器的可信度,当处理一些高度不均衡的数据集时,PR曲线能表现出更多的信息。在二分类问题中,分类器将一个实例的分类标记为正例还是负例,这可以用一个混淆矩阵来表…

火狐受信任站点设置_火狐浏览器怎么添加信任站点,谷歌浏览器设置信任站点...

我们总是喜欢在win7系统中使用浏览器来浏览一些网页,有时候需要添加信任网址,防止每次打开的时候都会跳出提示,而有的网页需要添加受限制,防止浏览网页弹出某些广告网站,可是最近有win7专业版系统用户却发现在添加信任…

这是2019年适合Java程序员读的10本书

除了为经验丰富的Java开发人员(他们更倾向于学习架构方面的知识,关于云、微服务、Java 9和Spring 5开发等)推荐了一些书籍,同时也为那些初级程序员或经验相对缺乏的Java开发者推荐一些适合在2019年学习的书,下面还是来…

华三交换机路由器图标_弱电箱网口不够用,用华三8口千兆交换机搞定

如题,公司租的办公室刚装修完,安了弱电箱,无奈联通只给了一个2口的光猫,如何不自己花钱买光猫的前提下,分配三间屋子的五个有线成了问题。之前考虑过直接路由器内置在弱电箱里,不过电箱金属盒有屏蔽和弱电箱…

i2c hid 触摸板不能用_零基础学硬件(6):I2C总线的用处

I2C总线的用处,什么时候需要用I2C总线这东西太简单了,我还有点不想说..不就是一个start一个STOP一个ACK嘛,,简单得不能在简单.他可以根据器件地址进行通信..当年在学校时看了很多这资料..什么时候需要用I2C总线,你的器件是IIC的器件,我就得用IIC总线..什…

problem a: 简单的整数排序_python里的排序

本篇文章主要讲:自定义规则排序 多字段排序开讲之前,先讲一些简单sorted()或者sort(),两者返回值不同!例如:sorted([5, 2, 3, 1, 4]) # 输出:[1, 2, 3, 4, 5]另一个呢a [5, 2, 3, 1, 4] a.sort() a # 输出…

python prettytable表格列数太多_excel列数太多了怎么办

excel列数太多了怎么办?列数太多我们需要巧用组合键,通过组合键达到比隐藏更实用的效果。下面将用excel2007版本为例,效果图见下。方法:1、如果列太多,我们就细分为多少列分布做,具体多少列为一组&#xff…

c++ 多态 运行时多态和编译时多态_C++核心编程 第十一节 多态

前言:多态是C面向对象三大特性之一。多态,指的是一个类实例的相同方法在不同情形有不同表现形式。具有不同内部结构的对象可以共享外部接口。C多态就是用一个更通用的基类指针指向不同的子类实例,为了能调用正确的方法,我们需要用…

oracle sql 子游标_Oracle 父子游标

游标从Oracle数据库管理员的角度上说,游标是对存储在库缓存中的可执行对象的统称。SQL语句是存储在库缓存中的,它是游标。除了它之外,还有Oracle的存储过程也是存储在库缓存中的可执行对象,从Oracle DBA的角度上说,它也…

多线程操作时操作系统时间片_从零开始自制操作系统(15):内核多线程

1.多线程原理:(1)概述:多线程是指CPU可以在一段时间中并行执行多个程序,比如我们可以一边听音乐、一边写代码(这两个程序可以“同时进行”,我们称之为多进程,而多进程实现的本质就是…

听说java又过气了?看我运用大数据分析2019年java发展趋势!

近些年的技术圈,单以计算机语言界来说,稳坐第一把太师椅的 Java “或将被取代”、迎接转折点、Java 项目工程师风光不再等言论不绝于耳。在焦虑的大环境下,所有人好像都看起来很焦虑不安。 针对这类“唱衰论”,也不难理解。不仅&…

打开git界面_使用 Gitea 快速搭建私有 Git 版本控制服务

1. 前言分布式版本控制工具 Git 已经是现代软件源代码版本控制首选方案之一。公有 Git 服务提供商 国外知名如 GitHub 国内网络延迟高,Gitlab 涉嫌对中国的歧视不推荐。国内有 Gitee、Coding 生态还不错。但是一般公司的源代码除非开源项目是不会放在公有 Git 服务上的。所以我…

dev项目属性按钮是灰色_Spring Boot 中的项目属性配置

阅读本文约需要5分钟大家好,我是你们的导师,我每天都会在这里给大家分享一些干货内容(当然了,周末也要允许老师休息一下哈)。上次老师跟大家分享了Spring Boot 如何使用 SLF4J 进行日志记录,今天跟大家分享一下 Spring Boot 中的项…