2 进程(上)

  1. 前驱图:为了能更好地描述程序的顺序和并发执行情况,通常用前趋图来描述程序执行的先后顺序

    -前趋图中是不允许有循环的

  2. 程序顺序执行时的特征:

    ① 顺序性

    ② 封闭性:指程序在封闭的环境下运行,即程序运行时独占全机资源,资源的状态(除初始状态外)只有本程序才能改变它,程序一旦开始执行,其执行结果不受外界因素影响;

    ③ 可再现性:只要程序执行时的环境和初始条件相同,当重复执行时,都可获得相同的结果。

  3. 程序的并发执行

    1. 程序原来的顺序执行:I -> C -> P (输入程序 -> 计算程序 -> 打印程序)
    2. 并发运行方式的基本特征:异步,资源共享,相互制约;间断性,失去封闭性,不可再现性
  4. 进程:进程是一个程序的一次动态执行过程

    1. 为什么要引入进程?

      操作系统需要引进“进程”,使大程序的程序段可以并发,以加快程序推进且提高CPU利用率

    2. 进程和程序的区别?

      -程序是静态的;进程是动态的(本质区别)

      -程序只包含代码;进程包括要运行的代码、代码要处理的数据、运行过程中的状态参数等

    3. 进程和程序的关联?

      • 进程是操作系统为了管理控制程序的运行而加设的一个概念和实体
      • 程序不运行,就没有进程;一个进程是一个程序的一次执行过程。
      • 一个程序可能对应多个进程
    4. 作业、程序、进程之间的关系?

      • 作业:用户提交给系统的一个计算任务。

        批作业=程序+数据+作业控制说明书

        交互作业=程序+数据+交互命令

        作业是用于人机之间交互的一个概念。

      • 程序是作业的组成部分

      • 进程对应一个程序的一次动态执行过程。

  5. 进程的特征

    1. PCB
    2. 动态性;并发性;独立性;异步性
  6. 进程的三种基本状态

    1. 就绪状态(ready)
    2. 执行状态(running)
    3. 阻塞状态(block)
  7. 创建和终止

    1. 创建状态
    2. 终止状态:等待操作系统进行善后处理,最后将其PCB清零,并将PCB空间返还系统
  8. 五个状态之间的转换

    1. 创建状态----(许可)---->就绪状态
    2. 就绪状态----(进程调度)-----> 执行状态
    3. 执行状态----(时间片完)-----> 就绪状态
    4. 执行状态----(I/O请求)-----> 阻塞状态
    5. 阻塞状态-----(I/O完成)------> 就绪状态
    6. 执行状态-----(释放)------> 终止状态
  9. 挂起操作和五个状态之间的转换

    1. 创建状态----(许可)---->静止就绪 or 活动就绪
    2. 静止就绪-----(激活)----->活动就绪
    3. 活动就绪-----(挂起)----->静止就绪
    4. 活动就绪----(进程调度)-----> 执行状态
    5. 执行状态----(时间片完)-----> 活动就绪
    6. 执行状态-----(挂起)----->静止就绪
    7. 执行状态----(I/O请求)-----> 活动阻塞
    8. 活动阻塞-----(释放)------> 活动就绪
    9. 活动阻塞-----(挂起)------> 静止阻塞
    10. 静止阻塞-----(激活)------> 活动阻塞
    11. 静止阻塞-----(释放)------> 静止就绪
    12. 执行状态-----(释放)------> 终止状态
  10. 进程控制块PCB:

    1. 作用:

      1. 作为独立运行基本单位的标志;2. 能实现间断性运行方式;3. 提供进程管理所需要的信息;4. 提供进程调度所需要的信息;5. 实现与其它进程的同步与通信
    2. 组成信息:

      进程标识(用于唯一地标识一个进程);

      调度信息(系统调度选择进程的依据)(进程状态 进程优先级 其它信息 事件);

      处理机信息(通用寄存器、程序状态字PSW、程序计数器PC、进程的堆栈指针);

      进程控制信息(系统对进程实施控制的依据)

    3. 组织方式:

      线性方式;链接方式;索引方式

  11. 进程管理模块:是os最重要的组成部分

    1. 功能:进程调度、进程控制
  12. 进程控制

    1. 管理控制一个进程的生命周期
    2. 管理控制多个进程的并发
    3. 进程控制一般是由OS的内核中的原语来实现的
  13. 操作系统内核(OS内核)

    与硬件紧密相关的模块、常用设备的驱动程序、运行频率较高的模块,安排在紧靠硬件的软件层次,常驻内存。

    1. 功能:

      1. 支撑功能:

        中断处理(最基本)、时钟管理、原语操作(不可分割、实现进程管理和状态切换、不可中断)

      2. 资源管理功能:

        进程管理、存储器管理、设备管理

  14. 进程的创建

    1. 引起创建进程的事件:

      用户登录、作业调度、提供服务、应用请求

    2. 创建原语:

      1)申请空白PCB

      2)分配资源

      3)初始化PCB,填入进程信息

      4)就绪队列不满则新进程插入就绪队列

      (已经获得除CPU以外的所有运行所需资源的进程处于就绪状态)

  15. 进程的终止

    1. 引起进程终止的事件:

      正常结束(任务完成)、异常结束(程序无法正常运行)、外界干预(外界请求终止)

    2. 终止过程 撤销原语

      1)根据被终止进程的标识符,从PCB集合中检索出该进程的PCB,从中读出该进程的状态

      2)若被终止进程正处于执行状态,应立即终止该进程的执行,并置调度标志为真,指示该进程可重新进行调度

      3) 若该进程还有子孙进程,还应将其所有子孙进程也都予以终止,以防它们成为不可控的进程

      4)将被终止进程所拥有的全部资源或者归还给其父进程,或者归还给系统

      5)将被终止进程(PCB)从所在队列(或链表)中移出,等待其它程序来搜集信息

  16. 进程的阻塞与唤醒

    1. 引起进程阻塞和唤醒的事件:

      1)向系统请求共享资源失败,请求资源得不到满足

      2)等待某种操作的完成,,等待I/O

      3)新数据尚未到达,进程同步约束

      4)等待新任务的到达,服务进程无事可做

    2. 阻塞原语

      正执行的进程,如果发生了上述某事件,进程便通过调用阻塞原语block将自己阻塞。可见,阻塞是进程自身的一种主动行为。进入block过程后,该进程还处于执行状态,所以应先立即停止执行,把进程控制块中的现行状态由“执行”改为阻塞,并将PCB插入阻塞队列。如果系统中设置了因不同事件而阻塞的多个阻塞队列,则应将本进程插入到具有相同事件的阻塞队列。最后,转调度程序进行重新调度,将处理机分配给另一就绪进程,并进行切换,亦即,保留被阻塞进程的处理机状态,按新进程的PCB中的处理机状态设置CPU的环境。

    3. 唤醒原语

      当被阻塞进程所期待的事件发生时,比如它所启动的I/O操作已完成,或其所期待的数据已经到达,则由有关进程(比如提供数据的进程)调用唤醒原语wakeup,将等待该事件的进程唤醒。wakeup执行的过程是:首先把被阻塞的进程从等待该事件的阻塞队列中移出,将其PCB中的现行状态由阻塞改为就绪,然后再将该PCB插入到就绪队列中。

  17. 进程的挂起与激活

    1. 挂起原语

      事件:

      (1)当前内存空间紧缺,部分进程优先运行(2)应用户的要求,将用户进程挂起

      (3)应父进程要求,将其子进程挂起

      过程:

      找到被挂起进程的PCB,获得其内存地址,将内存空间归还给存储管理模块。
      进程状态阻塞转为“挂起阻塞”,或者就绪转为“挂起就绪”,将PCB从原队列转入相应队列。
      申请外存交换区空间,换出进程,地址写入PCB。

    2. 激活原语

      事件:

      (1)有进程运行完毕,当前内存空间并不紧张(2)应用户要求,将其进程激活

      (3)应父进程的要求,将将其子进程激活
      (4)进程设定的挂起周期已完成

      过程:

      扫描“挂起就绪队列”找到被激活进程的PCB,将PCB从所在队列上摘下来。
      按PCB登记的空间需求,申请内存,加载到内存中,归还外存交换区空间。
      将进程状态置为“就绪”,插入就绪队列。

  18. 进程同步

    1. 并发进程间制约关系

      1)资源共享关系 间接制约(互斥)体现竞争关系

      2)相互合作关系 直接制约 (同步)体现协作关系

    2. 临界资源

      -互斥资源,一段时间内只允许一个进程访问的资源

    3. 同步机制应该遵循的规则:

      1.空闲让进 2.忙则等待 3.有限等待 4.让权等待

    4. 解决进程同步和互斥的方法:

      1. 软件方法

      2. 硬件同步机制

        1. 关中断:关中断是实现互斥的最简单的方法之一。在进入锁测试之前关闭中断,直到完成锁测试并上锁之后才能打开中断。
        2. 利用Test-and-Set指令实现互斥:这是一种借助一条硬件指令——“测试并建立”指令TS(Test-and-Set)以实现互斥的方法。
        3. 利用Swap指令实现进程互斥:该指令称为对换指令,在Intel 80x86中又称为XCHG指令,用于交换两个字的内容。
      3. 信号量机制

        1. 整型信号量:不满足“让权等待”

          wait(S) : P操作

          signal(S): V操作 (原子操作)

          wait(s): while s≤0 do no_op;
          s:=s-1;
          signal(s): s:=s+1;

        2. 记录型信号量:只可申请一类资源,该资源有n个,一次只可申请1个,直到将资源分光,多类资源时易产生死锁

          信号量(value)的值,信号量的等待队列指针(L)

          P(s):用于进临界区之前检查资源, 当临界资源被其他进程占用时就将自己阻塞,具有 阻塞 功能

          V(s):用于出临界区释放资源
          ,它能将等待该资源的进程唤醒, 具有 唤醒 功能

        3. AND型信号量:可申请n类资源,每类资源有m个,每次可申请每类资源中的1个。

          同步机制的基本思想:将进程在整个运行中需要的所有资源,一次性全部分配给进程,待进程使用完后一起释放。(避免死锁状态)在Wait中加入AND条件,又称AND同步或同时wait操作:Swait

        4. 信号量集:可申请n类资源,每类资源有m个,每次可申请每类资源中的多个。但低于下限时,不予分配

      4. 管程机制

剩余部分在2 进程(下)

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

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

相关文章

elementui上传文件不允许重名

需求: 用户可以多文件上传 ,在上传到服务器之前需要检查服务器中有无重名的文件,如果有会返回重名文件的名称数组,这些文件需要一个一个的向用户确认是否要覆盖重传。确认完毕后再上传到服务器。 检查文件重名: //上传…

好看的安全跳转单页html源码

好看的安全跳转单页html源码,效果如下 代码如下&#xff1a; <!DOCTYPE html> <html> <head> <meta charset"UTF-8"> <!--[if IE 8]><style>.ie8 .alert-circle,.ie8 .alert-footer{display:none}.ie8 .alert-box{padding-top:…

游戏服务器多少钱一台?腾讯云32元,阿里云26元

游戏服务器租用多少钱一年&#xff1f;1个月游戏服务器费用多少&#xff1f;阿里云游戏服务器26元1个月、腾讯云游戏服务器32元&#xff0c;游戏服务器配置从4核16G、4核32G、8核32G、16核64G等配置可选&#xff0c;可以选择轻量应用服务器和云服务器&#xff0c;阿腾云atengyu…

开启一个服务,将服务器指定的文件读取,传播到网上其他终端

from flask import Flask, render_template_string app Flask(__name__)app.route(/get-data) def get_data():# 读取data.txt文件的内容with open(r./2024/2/4/data.txt, r) as file:data file.read()print(data)# 返回数据的HTML表示return render_template_string(<div…

SpringBoot过滤器获取响应的参数

一、背景 在项目开发过程中&#xff0c;需要对于某些接口统一处理。 这时候就需要获取响应的报文&#xff0c;再对获取的报文进行统一处理。 二、了解过滤器 首先了解一下过滤器拦截器的区别&#xff1a; JAVA中的拦截器、过滤器&#xff1a;https://blog.csdn.net/qq_38254…

使用x86架构+Nvidia消费显卡12G显存,搭建智能终端,将大模型本地化部署,说不定是未来方向,开源交互机器人设计

1&#xff0c;大模型本地部署 视频说明地址&#xff1a; https://www.bilibili.com/video/BV1BF4m1u769/ 【创新思考】&#xff08;1&#xff09;&#xff1a;使用x86架构Nvidia消费显卡12G显存&#xff0c;搭建智能终端&#xff0c;将大模型本地化部署&#xff0c;语音交互机…

【Scala】 2. 函数

2. 函数 scala运算符、if … else …两部分和C语言类型&#xff0c;这里不再赘述&#xff0c;这里从for循环开始讲讲scala和c/c的不同之处。 2.1 for循环 scala中主要包含to和until两个关键字&#xff0c;下面分别看看两者的用法&#xff0c;看例子就行了。 (1) to的用法 …

02 动力云客之登陆界面

1. 前端登录界面 需求样式: 1. 自定义登录页面装配到main.js src下新建一个文件夹view, view下新建一个Vue Component , 名为LoginView.vue , 并选择options API Composition API用于复杂页面. 生成的LoginView.vue文件 <script> export default {//组件的名字nam…

visual studio注册码

最近在研究c/c 安装visual studio 需要注册 技术博客http://idea.coderyj.com/ 注册码 Visual Studio 2022(VS2022)激活码&#xff1a; Pro&#xff08;专业版&#xff09;: TD244-P4NB7-YQ6XK-Y8MMM-YWV2J Enterprise&#xff08;企业版&#xff09;: VHF9H-NXBBB-638P6-6JHC…

Compose | UI组件(十四) | Navigation-Data - 页面导航传递数据

文章目录 前言传参流程实例说明普通方式传值定义接受参数格式定义接受参数类型获取参数传入参数传参和接受参数效果图 结合 ViewModel 传递参数定义ViewModel在 navigation 定义 ViewModel 实例&#xff0c;并且传入 LoginScreen传入输入框中的值&#xff0c;并且跳转传值获取值…

PyTorch 中音频信号处理库torchaudio的详细介绍

torchaudio 是 PyTorch 深度学习框架的一部分&#xff0c;是 PyTorch 中处理音频信号的库&#xff0c;专门用于处理和分析音频数据。它提供了丰富的音频信号处理工具、特征提取功能以及与深度学习模型结合的接口&#xff0c;使得在 PyTorch 中进行音频相关的机器学习和深度学习…

绕过去除 union 和 select 的 SQL 注入

环境准备:构建完善的安全渗透测试环境:推荐工具、资源和下载链接_渗透测试靶机下载-CSDN博客 一、基础知识 MySQL是一个流行的开源关系型数据库管理系统(RDBMS),广泛用于Web应用、数据仓库、嵌入式应用等场景。它使用结构化查询语言(SQL)进行数据管理,支持多种操作系统…

架设游戏服务器租用价格?腾讯云和阿里云价格对比

游戏服务器租用多少钱一年&#xff1f;1个月游戏服务器费用多少&#xff1f;阿里云游戏服务器26元1个月、腾讯云游戏服务器32元&#xff0c;游戏服务器配置从4核16G、4核32G、8核32G、16核64G等配置可选&#xff0c;可以选择轻量应用服务器和云服务器&#xff0c;阿腾云atengyu…

Docker Compose实例

目录 一、前提说明 二、简单的Docker容器部署案例 1. Dockerfile 配置 2. docker-compose.yml 配置 3. application.properties 配置 4. pom.xml 配置 5. 上传文件 6. 创建基础Docker镜像 7. docker-compose.yml编排 8. 停止并删除容器编排 一、前提说明 在配置好Do…

每天一个数据分析题(一百五十四)

给定下面的Python代码片段&#xff0c;哪个选项正确描述了代码可能存在的问题&#xff1f; from scipy import stats 返回异常值的索引 z stats.zscore(data_raw[‘Age’]) z_outlier (z > 3) | (z < -3) z_outlier.tolist().index(1) A. 代码将返回数据集Age列中第…

rediss集群 三主三从集群模式

三主三从集群模式 1)、新建redis集群目录&#xff1a;7001~7006工作目录【/app/soft/redis-cluster/目下】 2&#xff09;、在7001~7006 目录下创建bin和conf 目录&#xff0c;然后将/app/soft/redis/bin目录下的文件分别拷贝到7001~7006 目录&#xff0c;然后在7001~7006 目…

datax离线同步oracle表到clickhouse实践1

时间&#xff1a;2024.01 目录1、安装启动 oracle19c 容器 2、rpm包安装clickhouse 3、datax安装 4、datax同步 目标库根据要同步的表&#xff0c;按照clickhouse建表规范建表 编写json文件 编写增量同步shell脚本&#xff0c;加入 crond 定时任务 1、安装启动 oracle19c 容器…

SparkJDBC读写数据库实战

默认的操作 代码val df = spark.read.format("jdbc").option("url", "jdbc:postgresql://localhost:5432/testdb").option("user", "username").option("password", "password").option("driver&q…

KtConnect 本地连接连接K8S工具

KT Connect简介 Kt Connect &#xff08;Kubernetes Developer Tool&#xff09;是一个阿里开源、轻量级的面向 Kubernetes 用户的开发测试环境治理辅助工具。其核心是通过建立本地到集群以及集群到本地的双向通道。 1.阿里开源&#xff0c;轻量级, 2. 安装快捷简单&#xf…

【数据结构与算法】堆 / 堆排序 / TopK问题(Heap)

文章目录 1.堆2.C语言实现堆2.1 堆结构与基本操作2.2 其它辅助操作2.3 堆的基本操作2.3.1 插入2.3.2 删除 3. 堆排序4. TopK5. 所有代码 1.堆 堆总是一棵完全二叉树&#xff0c;而完全二叉树更适合使用**顺序结构&#xff08;数组&#xff09;**存储&#xff0c;完全二叉树前h…