软考 中级软件设计师 考点知识点笔记总结 day09 操作系统进程管理
文章目录
- 4、操作系统基本原理
- 4.1 、进程管理
- **4.1.1 、进程同步机制**
- **4.1.2 、进程互斥机制**
- **4.1.3 、信号量机制**
- **4.1.4 、PV操作实现前驱操作**
- **4.1.5 、死锁**
- 4.1.6 、银行家算法
4、操作系统基本原理
进程管理 存储管理 文件管理 设备管理 微内核操作系统
操作系统 Operating System OS 指控制和管理整个计算机系统的硬件和软件资源,并合理地组织调度计算机的工作和资源的分,以提供给用户和其他软件方便的接口和环境,它是计算机系统中最基本的系统软件。、
操作系统的功能和目标
1 作为系统资源的管理者 2 向上层提供方便易用的服务 3 作为最接近硬件的层次
操作系统的特征: 并发 共享 虚拟 异步
操作系统的发展与分类
手工操作阶段 批处理阶段(单道批处理系统 多道批处理系统) 分时操作系统 *实时操作系统 网络操作系统 分布式操作系统 个人计算机操作系统
4.1 、进程管理
状态转换图
1 、进程在被创建时 ,它的状态是创建态 在这个阶段操作系统会为进程分配资源 、初始化PCB
2 、当进程创建完成后,进入就绪态,处于就绪态的进程已经具备运行条件,但由于没有空闲CPU ,暂时不能运行
3 、如果一个进程在CPU上运行 那么进程处于运行态,CPU会执行该进程对应的程序
4 、进程运行过程中,可能会请求等待某个事件的发生,(如等待某种系统资源的分配,或者等待其他进程的响应) 在这个事件发生之前,进程无法继续往下执行 。操作系统会让这个进程下CPU 并让它进入阻塞态, 当CPU空闲时 又会选择另一个就绪态 进程上CPU运行
5 、一个进程可以执行exit系统调用,请求系统终止该进程,此时进程进入终止态,操作系统会让该进程下CPU,并回收内存空间等资源,并回收该进程的PCB。这个进程就彻底消失了。
- 不能由阻塞态直接转换为运行态。也不能由就绪态直接转换为阻塞态
- 阻塞态到就绪态不是进程自身控制的 ,是一种被动行为
- 运行态到阻塞态是一种进程自身做出的主动行为。
4.1.1 、进程同步机制
进程具有异步性的特征。异步性是指,各并发执行的进程以各自独立的不可预知的速度向前推进。
读进程和写进程并发地运行,由于并发必然导致异步性。因此,写数据和读数据两个操作执行先后顺序不确定。实际应用中,如何解决这种异步问题,就是采用进程同步机制。
同步也称直接制约关系,它是指为完成某种任务而建立的两个或多个进程,这些进程因为需要在某些位置上协调它们的工作次序而产生的制约关系。进程间的直接制约关系就是源于它们之间的相互合作。
4.1.2 、进程互斥机制
进程的并发需要共享的支持,各个并发执行的进程不可避免的需要共享一些系统资源。
我们把一个时间段内只允许一个进程使用的资源称为临界资源。许多物理设备,变量,数据,内存缓冲区都属于临界资源。
对临界资源的访问必须互斥地进行。 进程互斥指当一个进程访问某临界资源时,另一个想要访问该临界资源的进程必须等待。当前访问临界资源进程结束访问,释放资源之后,另一个进程才能去访问临界资源
对临界资源的互斥访问,可以在逻辑上分为如下四部分
进入区(检查是否可进入临界区,若可进入,则设置正在访问临界资源的标识 即锁,以阻止其他进程同时进入临界区)
临界区 (访问临界资源的代码)
退出区 (负责解除正在访问临界资源的标志 解锁)
剩余区 (其他处理)
临界区是进程中访问临界资源的代码段
进入区和退出区是负责实现互斥的代码段 临界区也可称为 临界段
为了实现对临界资源的互斥访问,同时保证系统整体性能,需要遵循以下原则:
1 空闲让进。 临界区空闲时 可以允许一个请求进入临界区的进程立即进入临界区
2 忙则等待 当已有进程进入临界区时,其他试图进入临界区的进程必须等待
3 有限等待 对请求访问的进程,应保证在有限时间内进入临界区 保证不会饥饿
4 让权等待 当进程不能进入临界区时,应立即释放处理机,防止进程忙等待。
4.1.3 、信号量机制
用户进程可以通过使用操作系统提供的一对原语来对信号量进行操作,从而实现进程互斥,进程同步。
信号量其实就是一个变量,可以用一个信号量来表示系统中某种资源的数量,比如系统中有一台打印机,可以设置初值为1的信号量
原语 一种特殊的程序段,执行不可被中断。原语是由关中断/开中断指令实现的
信号量机制
1 实现进程互斥 2 实现进程同步 3 实现进程的前驱关系
一个信号量对应一种资源信号量的值 等于这种资源的剩余数量 如果信号量的值小于0,说明此时有进程在等待这种资源
P(S) 申请一个资源S 如果资源不够就阻塞等待 即S-1
V(S) 释放一个资源S 如果有进程在等待该资源则 唤醒一个进程 即S + 1
4.1.4 、PV操作实现前驱操作
进程的PV操作
1 每对前驱关系各设置一个同步信号量
2 前操作之后对相应的同步信号量执行V操作
3 后操作之前对应的同步信号量执行P操作
Q 进程 P1、P2 、P3、P4 和 P5 的前趋图如下所示:
若用 PV 操作控制进程 P1、P2、P3、P4 和 P5 并发执行的过程,需要设置 5 个信号量 S1、S2、S3、S4 和 S5,且信号量 S1~S5 的初值都等于零。如下的进程执行图中 a 和 b 处应分别填写(P(S1)和 P(S2) );c 和 d 处应分别填写(V(S1)V(S2)和 P(S3) P(S4)) ;e 和 f 处应分别填写(V(S3) V(S4))。
4.1.5 、死锁
产生死锁必须同时满足以下四个条件,任一条件不成立,死锁不会发生
1 、 互斥条件 只有对必须互斥使用的资源的争抢才会导致死锁。 像内存 、扬声器这样可以让多个进程使用的资源不会导致死锁
2 、不剥夺条件 进程所获得的资源在未使用完之前,不能由其他进程强行夺走,只能主动释放。
3 、请求和保持条件 进程已经保持了至少一个资源,但又提出了新的资源请求,而该资源又被其他进程占用,此时请求进程被阻塞,但又对自己已有的资源保持不放。
4 、循环等待条件 存在一种进程资源的循环等待链,链中的每一个进程已获得的资源同时被下一个进程所请求
死锁的处理策略
1 、预防死锁 破坏死锁产生的四个必要条件中的任一个
2 、避免死锁 防止系统进入不安全状态 避免死锁(银行家算法)
3 、死锁的检测和解除 允许死锁的发生,不过操作系统会负责检测出死锁的发生,然后采取措施解除死锁
Q 某系统中有3个并发进程竞争资源R 每个进程都需要5个R 那么至少也要有 (B)个 R 才能保证系统不会死锁
A 12 B 13 C 14 D 15
3个进程 ABC 先都分发 4个R资源 4+4+4 然后一个R资源共享 A使用完释放给B B使用完给C
4+4+4+1 = 13
4.1.6 、银行家算法
安全序列 系统按照这种序列分配资源 则每个进程都能顺利完成。 只要能找出一个安全序列,系统就是安全状态。
如果分配了资源之后 系统找不出任何一个安全序列,系统就进入了不安全状态 意味着可能所有进程都无法顺利执行
如果系统处于安全状态就一定不会发生死锁,不安全状态未必就是发生了死锁, 但发生死锁时一定在不安全状态
因此可以在资源分配之前预先判断这次分配是否会导致系统进入不安全状态,来决定是否答应资源分配的请求,这就是银行家算法的核心思想
Q 假设系统中有三类互斥资源R1、R2和R3,可用资源数分别为9、8和5。在T0时刻系统中有P1、P2、P3、P4和P5五个进程,这些进程对资源的最大需求量和已分配资源数如下表所示。如果进程按(B)序列执行,那么系统状态是安全的。
A P1 P2 P4 P5 P3 B P2 P4 P5 P1 P3 C P2 P1 P4 P5 P3
P1、P2、P3、P4、P5的执行顺序:
思路:首先需要系统有资源数,才能够分配需要的进程
R1、R2、R3 已分配的资源数:
R1:1+2+2+1+1 = 7
R1:2+1+1+2+1 = 7
R1:1+1+0+0+3 = 5
R1、R2、R3 已使用的资源数(根据题意):
R1:9
R2:8
R3:5
R1、R2、R3 剩余的资源数:
R1:9 - 7 = 2
R2:8 - 7 = 1
R3:5 - 5 = 0
因为只有满足最大资源数才能够运行进程
所以:最大资源数 - 已分配资源数 = 尚需资源数
剩余进程数:R1:2 R2:1 R3:0(第一步)
能够满足尚需进程数的只有 P2
执行完 P2 之后便可以释放资源
释放的资源 = 已分配给 P2 的资源(图表中) + 剩余进程数
P2 释放的资源 = R1:2 R2:1 R3:1 + R1:2 R2:1 R3:0
P2释放的资源:R1:4 R2:2 R3:1
剩余进程数:R1:4 R2:2 R3:1 (第二步)
能够满足尚需进程数的只有 P4
执行完 P4 之后便可以释放资源
释放的资源 = 已分配给 P4 的资源(图表中) + 剩余进程数
P4 释放的资源 = R1:1 R2:2 R3:0 + R1:4 R2:2 R3:1
P2释放的资源:R1:5 R2:4 R3:1
剩余进程数:R1:5 R2:4 R3:1 (第三步)
能够满足尚需进程数的有 P1 和 P5(这里一般是运行时间短的优先运行)
第一种情况(执行P1或者说P1执行的时间短)
如果是执行完 P1 之后便可以释放资源
释放的资源 = 已分配给 P1 的资源(图表中) + 剩余进程数
P1 释放的资源 = R1:1 R2:2 R3:1 + R1:5 R2:4 R3:1
P1释放的资源:R1:6 R2:6 R3:2
第一种情况(执行P5或者说P5执行的时间短)
如果是执行完 P5 之后便可以释放资源
释放的资源 = 已分配给 P5 的资源(图表中) + 剩余进程数
P5 释放的资源 = R1:1 R2:1 R3:3 + R1:5 R2:4 R3:1
P5 释放的资源:R1:6 R2:5 R3:4
P2 - P4 - P1 - P5 - P3
P2 - P4 - P5 - P1 - P3
相关文章:
软考 中级软件设计师 考点知识点笔记总结 day09 操作系统进程管理
文章目录 4、操作系统基本原理4.1 、进程管理**4.1.1 、进程同步机制****4.1.2 、进程互斥机制****4.1.3 、信号量机制****4.1.4 、PV操作实现前驱操作****4.1.5 、死锁**4.1.6 、银行家算法 4、操作系统基本原理 进程管理 存储管理 文件管理 设备管理 微内核操作系统 操作系…...
大模型和AIGC同质化浪潮下的信息困局与破局之道,面向未来的认知革命
欢迎来到涛涛聊AI。看到网上太多雷同的内容有感后,让AI批判下AI。 一、技术趋同引发的信息生态危机 当前互联网正被海量AI生成内容淹没,这种现象的根源在于技术底层的高度同质化。全球主流大模型90%以上基于相同算法架构开发,采用近似的训练…...
⼆、Kafka客户端消息流转流程
这⼀章节将重点介绍Kafka的HighLevel API使⽤,并通过这些API,构建起Kafka整个消息发送以及消费的主线流程。 Kafka提供了两套客户端API,HighLevel API和LowLevel API。 HighLevel API封装了kafka的运⾏细节,使⽤起来⽐较简单&…...
es 3期 第28节-深入掌握集群组建与集群设置
#### 1.Elasticsearch是数据库,不是普通的Java应用程序,传统数据库需要的硬件资源同样需要,提升性能最有效的就是升级硬件。 #### 2.Elasticsearch是文档型数据库,不是关系型数据库,不具备严格的ACID事务特性ÿ…...
如何在 SwiftUI 视图中使用分页(Paging)机制显示 SwiftData 数据(三)
概述 小伙伴们都知道,自从有了 SwiftData 的加持,现在 SwiftUI 可以非常惬意的利用描述型命令创建以数据驱动为本的视图了。这在测试或演示小项目中工作的完美无缺,不过真实世界要“残酷”的多。 实际情况是,我们无法一次性将海量数据统统拉入内存以便在 SwiftUI 中显示,…...
git和VScode
游戏存档保存的是游戏的进度 git保存的是代码的进度 Vscode和git 要正常的使用git首先要设置姓名和邮箱 要配合gitee(也可以是其他平台,以gitee举例)使用,首先创造一个gitee账号,复制邮箱和用户名 在VScode中找到…...
Linux Vim 编辑器的使用
Vim 编辑器的使用 一、安装及介绍二、基础操作三、高级功能四、配置与插件 一、安装及介绍 Vim是一款强大且高度可定制的文本编辑器,相当于 Windows 中的记事本。具备命令、插入、底行等多种模式。它可通过简单的键盘命令实现高效的文本编辑、查找替换、分屏操作等…...
NLP语言模型训练里的特殊向量
1. CLS 向量和 DEC 向量的区别及训练方式 (1) CLS 向量与 DEC 向量是否都是特殊 token? CLS 向量([CLS] token)和 DEC 向量(Decoder Input token)都是特殊的 token,但它们出现在不同类型的 NLP 模型中&am…...
利用Canvas在紫微斗数命盘上画出三方四正
许多紫微斗数排盘程序都会在命盘上画出三方四正的指示线,便于观察命盘。本文用Canvas在一个模拟命盘上画出三方四正指示线。 模拟命盘并画出“子”宫三方四正的HTML文件如下: <!doctype html> <html lang"en"> <head><…...
传统汽车 HMI 设计 VS 新能源汽车 HMI 设计,有何不同?
一、设计理念与目标的差异 传统汽车HMI设计的核心目标是辅助驾驶,强调功能的简洁性和操作的便捷性。其设计侧重于提供基础的车辆信息(如车速、转速、油量等),并确保驾驶员在操作时能够快速获取关键信息。相比之下,新能…...
【JavaWeb】前端基础
JavaWeb 前端三大件:HTML(主要用于网页主体结构的搭建),CSS(页面美化),JavaScript(主要用于页面元素的动态代理) 1. HTML 1.1 html概述 HTML:Hyper Text …...
SpringMVC组件解析
SpringMVC的执行流程 ① 用户发送请求至前端控制器DispatcherServlet。 ② DispatcherServlet收到请求调用HandlerMapping处理器映射器 ③ 处理器映射器找到具体的处理器(可以根据xm|配置、注解进行査找),生成处理器对象及处理器 拦截器(如果有则生成)一…...
使用 Provider 和 GetX 实现 Flutter 局部刷新的几个示例
1. 使用 Provider 实现局部刷新 示例 1:ChangeNotifier Consumer 通过 ChangeNotifier 和 Consumer 实现局部刷新。 import package:flutter/material.dart; import package:provider/provider.dart;void main() {runApp(ChangeNotifierProvider(create: (_) &g…...
数据结构C语言练习(两个栈实现队列)
一、引言 在数据结构的学习中,我们经常会遇到一些有趣的问题,比如如何用一种数据结构去实现另一种数据结构的功能。本文将深入探讨 “用栈实现队列” 这一经典问题,详细解析解题思路、代码实现以及每个函数的作用,帮助读者更好地…...
Java 基础-28- 多态 — 多态下的类型转换问题
在 Java 中,多态(Polymorphism)是面向对象编程的核心概念之一。多态允许不同类型的对象通过相同的方法接口进行操作,而实际调用的行为取决于对象的实际类型。虽然多态提供了极大的灵活性,但在多态的使用过程中…...
nextjs使用02
并行路由 同一个页面,放多个路由,, 目录前面加,layout中可以当作插槽引入 import React from "react";function layout({children,notifications,user}:{children:React.ReactNode,notifications:React.ReactNode,user:React.Re…...
第2.6节 iOS生成全量和增量报告
2.6.1 简介 在采集了覆盖率数据后,就需要生成对应需求的全量和增量覆盖率报告,以便对测试进行查漏补缺。IOS系统有两种开发语言,所以生成报告的方式也不相同,下面就分别介绍一下Object C和Swift语言如何生成覆盖率报告。 2.6.2 O…...
应用分享 | AWG技术突破:操控钻石氮空位色心,开启量子计算新篇章!
利用AWG操作钻石中的氮空位色彩中心 金刚石中的颜色中心是晶格中的缺陷,其中碳原子被不同种类的原子取代,而相邻的晶格位点则是空的。由于色心具有明亮的单光子发射和光学可触及的自旋,因此有望成为未来量子信息处理和量子网络的固态量子发射…...
前端开发学习路线完整指南
前端开发学习路线完整指南 前端开发是一个不断发展的领域,涉及多个技术栈。本文将为你提供一条系统的前端学习路线,帮助你从零基础到熟练掌握前端开发技能。 1. 前置知识 在学习前端之前,了解一些基础知识会对你的学习过程有很大帮助。 计…...
linux服务器专题2------vim编辑器如何设置显示行号
在 Vim 编辑器中,可以通过以下步骤来显示行号: 临时显示行号 打开 Vim 编辑器,输入如下命令: :set number这将临时启用行号显示。关闭 Vim 后,行号设置将丢失。 永久显示行号 如果希望在每次启动 Vim 时都显示行号…...
Jmeter触发脚本备份
JMeter 在以下情况会触发脚本备份: 手动保存测试计划时:如果测试计划有未保存的修改,当用户手动保存测试计划(脚本)时,JMeter 都会自动将当前脚本备份到${JMETER_HOME}/backups文件夹下。 关闭 JMeter 时…...
【视觉与语言模型参数解耦】为什么?方案?
一些无编码器的MLLMs统一架构如Fuyu,直接在LLM内处理原始像素,消除了对外部视觉模型的依赖。但是面临视觉与语言模态冲突的挑战,导致训练不稳定和灾难性遗忘等问题。解决方案则是通过参数解耦方法解决模态冲突。 在多模态大语言模型…...
重建二叉树(C++)
目录 1 问题描述 1.1 示例1 1.2 示例2 1.3 示例3 2 解题思路 3 代码实现 4 代码解析 4.1 初始化 4.2 递归部分 4.3 主逻辑 5 总结 1 问题描述 给定节点数为 n 的二叉树的前序遍历和中序遍历结果,请重建出该二叉树并返回它的头结点。 例如输入前序遍历序…...
VLAN、QinQ、VXLAN的区别
1、技术本质与封装方式 技术OSI层级封装原理标识位长度拓展性VLAN数据链路层L2在以太网帧头插入802.1Q Tag(单层VLAN标签)12位(4094个)有限,仅支持单一网络域内隔离QinQ数据链路层L2在原始VLAN标签外再封装一层802.1Q…...
保姆级教程:synchronized 同步方法 vs 同步代码块,看完彻底懂锁!
一、同步方法(锁住整个方法) 1. 代码示例 public class Counter {private int count 0;// 同步方法:锁住整个方法public synchronized void add() {count;}// 同步方法:锁住整个方法public synchronized void subtract() {coun…...
10乱码问题的解释(1)
在计算机中,一个汉字,占几个字节? 针对这个问题,只要你回答出一个具体的数字,就一定是错的!! 前提条件: 当前中文编码使用的是哪种方式(字符集) 计算机存的其实是二进制数字~~ 英文字母,怎么表示的?? ASCII 码表~~ 规定了每个字符,都有一个对应的数字来表示~~ 只是表示英文,…...
短视频文案--钓鱼女和滑板女
短视频文案 第一个文案: 1标题:风萧萧兮易水寒,美女钓鱼兮不复还 2内容: 我站在池边的微风中,再也看不到曾经快乐的少女了。 风很凉,凉得心不知前往何处。 水很清,清得深知这里没鱼群。 芦苇…...
算法设计学习3
实验目的及要求: 1.加强对结构体的应用。 2.熟悉字符计数排序。 实验设备环境: 1.微型计算机 2.DEV C(或其他编译软件) 实验步骤: 任务:要求使用自定义函数来实现 输入一段文本,统计每个字符出现的次数,按…...
nginx的自动跳转https
mkdir /usr/local/nginx/certs/ 创建一个目录 然后用openssl生成证书 编辑nginx的配置文件 自动跳转成功 做一个优化,如果访问的时候后面加了其他的uri也一起自动跳转了...
python-leetcode 62.搜索插入位置
题目: 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置 方法一:二分查找 假设题意是在排序数组中寻找是否存在一个目标值,则可以…...
