当前位置: 首页 > news >正文

操作系统(三)| 进程管理上 进程状态 同步 互斥

目录

1 进程和程序区别

2 进程状态

2.1 进程的5种基本状态

2.2 进程状态之间转换

2.3 七状态模型

3 进程描述

3.1 进程控制块 PCB

3.2 进程块组织方式

4 进程控制

5 进程同步 互斥

5.1 区分进程互斥和同步

5.2 核心方案

5.3 其他方案

方案1 设置锁变量

方案2 严格轮转法

方案3 Peterson解决方案

方案4 关中断

方案5 机器指令实现的互斥


简单概述

什么是进程? 是程序的1次执行(程序执行的1个实例) 每个进程有自己的地址空间。

为什么引入进程? 多任务的需要。在内存中同时有多个可执行的进程,以提高效率(特别是CPU的利用率)。

因此,需要对进程进行管理,以避免冲突: 借助于PCB,记录进程的描述和控制信息、上下文状态

1 进程和程序区别

进程是程序的1次执行。 进程(Process)和程序(Program)是两个不同的概念,它们在计算机科学中有明确的区别:

  1. 程序(Program)

    • 定义:程序是一组计算机指令的有序集合,这些指令被编写成一个文件,通常以可执行文件的形式存在。程序是静态的,它只是一段代码的集合,等待被执行。

    • 特点:程序包含了计算机程序员编写的源代码,它描述了一系列任务的算法和逻辑,但并没有实际执行。程序不占用计算机的内存空间,也不消耗计算机的CPU时间。

    • 例子:一个文本编辑器的程序文件、一个游戏的可执行文件、一个网页浏览器的应用程序等都是程序的例子。

  2. 进程(Process)

    • 定义:进程是计算机中正在运行的程序的实例。它是程序在内存中加载并执行时的活动状态,包括程序的代码、数据、执行状态、系统资源分配等。

    • 特点:进程是动态的,它占用计算机的内存空间,可以执行计算机指令,与其他进程并发运行。每个进程都有自己的独立内存空间,因此它们不会相互干扰。进程可以创建、启动、暂停、终止等。

    • 例子:当您运行一个文本编辑器、播放音乐、浏览网页或打印文档时,每个活动都对应一个独立的进程。

总结来说,程序是静态的、不执行的计算机指令集合,而进程是程序的运行实例,它占用计算机内存,执行指令,并与其他进程一起协同工作。进程是计算机操作系统中的核心概念,它使多任务处理成为可能.

可以将程序和进程比喻为烹饪的过程:

  1. 程序(Program)就像是一本菜谱。菜谱是一份详细的食物制作指南,它包含了食材清单、烹饪步骤和所需的厨具。但菜谱本身并不能做出美味的食物,它只是一份指导,等待着被厨师(计算机)读取和执行。就像您需要拿出菜谱并按照其中的步骤去做一道菜一样,计算机需要将程序加载到内存中并执行其中的指令。

  2. 进程(Process)就像是正在烹饪中的一道菜。当您选择一道菜谱并开始烹饪时,您实际上在制作一道具体的菜肴。这个菜肴有自己的成分、调味料和烹饪状态。它在火上烹煮、被切割、被摆盘等等。这个菜肴是实际被制作和提供给食客的,就像进程是正在计算机内存中运行和执行的程序实例。

所以,程序就像是一份指导,而进程是实际的动态执行。程序是静态的,而进程是具体的、可见的操作。

2 进程状态

2.1 进程的5种基本状态

(1)新建(new):进程正在被创建。 (2)就绪(ready):进程可运行,正等待获得处理机。 (3)运行(running):进程的指令正在被执行。 (4)阻塞(blocked)或等待:进程因等待某事件(如请求I/O)而暂停执行。 (5)完成(done):进程结束。

2.2 进程状态之间转换

2.3 七状态模型

引入挂起(即 进程此时在外存等待)

就绪(Ready):进程在内存且可立即进入运行状态 阻塞(Blocked):进程在内存并等待某事件的出现 阻塞挂起(Blocked, suspend):进程在外存并等待某事件的出现 就绪挂起(Ready, suspend):进程在外存,但只要进入内存,即可运行 运行 新建 完成

注意 挂起都在外存

挂起:把进程从内存转到外存

激活:把进程从外存转到内存

补充:

时间片是操作系统给程序分配的时间,保证一个进程不会一直占用CPU资源不释放造成混乱

3 进程描述

3.1 进程控制块 PCB

作用

1 是OS管理和控制进程的数据结构。

2 PCB记录着进程的描述信息。

每个进程对应1个PCB。

信息内容

(1)进程本身的标识信息

进程标识符pid(process ID):整数,由OS分配,唯一

用户标识符uid(user ID):创建该进程的用户

对应程序的地址:内存、外存

(2)CPU现场 - 为进程正确切换所需

所有寄存器的值

    或称进程上下文(context)

因为要切换走进程!所以要保护当前进程的上下内容,使得切换回来的时候可以继续正常执行

(3)进程调度信息

进程的状态

优先级

使进程阻塞的条件

占用CPU 、等待CPU的时间(用于动态调整优先级)

(4)进程占用资源的信息

进程间同步和通信机制,如信号量、消息队列指针

打开文件的信息,如文件描述符表

CPU现场 - 为进程正确切换所需

所有寄存器的值

或称进程上下文(context)

Linux的进程控制块:task_struct

进程创建时,由OS创建PCB;

进程终止时,由OS撤销PCB;

进程运行时,以PCB作为调度依据。

3.2 进程块组织方式

一般来说,系统把所有PCB组织在一起,并把它们放在内存的固定区域,构成PCB表。

PCB表的大小决定了系统中最多可同时存在的进程个数。

同一状态进程的PCB组成一个链表,不同状态对应多个不同的链表,如就绪链表、阻塞链表

4 进程控制

基本概念

原语

创建、撤销进程以及完成进程各状态之间的转换,由具有特定功能的原语完成

原语 由若干指令构成的具有特定功能的函数

具有原子性,其操作具有不可分割性

如:

进程创建原语

进程撤销原语

阻塞原语

唤醒原语

挂起原语

激活(解挂)原语

改变进程优先级

5 进程同步 互斥

在执行时间上互相重叠(或交替),一个进程的执行尚未结束,另一个进程的执行已经开始的执行方式。

这样会有一个问题

因为资源共享的问题,结果会产生不确定性

为此,引入同步(synchronization)和互斥(mutual exclusion)。

临界资源 一次只允许一个进程独占访问(使用)资源 ,越小越好

临界区 进程中访问临界资源的的程序段

5.1 区分进程互斥和同步

互斥是指执行某个进程的时候访问某一临界资源的时候,另一个进程不能执行访问这一临界资源。

经典只有互斥问题:打印机打印

同步是指完成某一进程执行是有条件的,必须等另一个进程的某一资源结束才可以

经典只有同步的问题:售票员售票

既有互斥又有同步问题:消费者问题

5.2 核心方案

信号量

利用信号量P-V操作可以实现进程的互斥访问

利用信号量P-V 操作可以实现进程的同步访问

5.3 其他方案

实现互斥方案

一个好的互斥方案应满足以下条件:

(1)任何两个进程不能同时处于临界区。

(2)临界区外的进程不应阻止其他进程进入临界区。

(3)不应使进程在临界区外无休止地等待。就是说,临界区代码执行时间要短。

(4)不应对CPU的个数和进程之间的相对运行速度作任何假设。

方案1 设置锁变量

即设置一个共享变量lock

当lock=0的时候,临界区内无进程,初始值

当lock=1的时候,临界区内有进程

while(lock);
lock=1;
<临界区>
lock=0;
<非临界区>

可能的问题

1 会导致两个进程同时进入临界资源

比如进程1走到lock=1的时候,还没来得及上锁(修改lock的值为1)就被切换走了,这时候其他进程 就可以避免while也进入临界区

2 可能会存在盲等待 走到lock=0的时候,还没来得及解锁就被切换走了,这时候其他进程都进不来!

所以这种方案是错误的,不能达到效果

方案2 严格轮转法

设置共享变量turn,以指示进入临界区的进程号

以两个进程为例

turn=0的时候允许进程0进入临界区,初始值

turn=1的时候允许进程1进入临界区

进程0

while  (turn != 0);
<临界区>
turn = 1;
<非临界区> 

进程1

while  (turn != 1);
<临界区>
turn = 0;
<非临界区> 

本质互为锁

可能的问题

进程可能会被临界区之外的进程阻塞

方案3 Peterson解决方案

设置一个共享变量process,代表此时进入临界区的进程号

enter_region(process); //process是 进入/离开临界区的进程号
<临界区>
leave_region(process);
<非临界区>
​

当一个进程想进入临界区时,先调用enter_region函数,判断是否能安全进入,不能的话等待;当进程从临界区退出后,需调用leave_region函数,允许其它进程进入临界区。 两个函数的参数均为进程号

以两个进程为例子

#define  FALSE  0
#define  TRUE   1
#define   N        2 // 进程的个数
int  turn;         // 轮到谁?•
int  interested[N];    // 兴趣数组,表明第i个进程是否在临界区,所有元素初始值均为FALSE
void  enter_region (int  process)  // process为进程号 0 或 1•{•        int  other;  // 另外一个进程的进程号•        other  =  1  -  process;    •        interested[process]  =  TRUE; // 表明本进程进入临界区•       turn  =  process;             // 设置标志位•       while ( turn == process && interested[other] == TRUE);
}
void  leave_region (int  process)•{•      interested[process]  =  FALSE; // 本进程将离开临界区•}

方案4 关中断

由于进程在切换进程的时候 必须进行中断处理,既然如此的话

我们可以在一个程序进入临界区域之前,将中断功能给关闭,简称关中断!

关中断;
<临界区>;
开中断;
<非临界区>;

缺点

1 对多处理机系统无效,因为每个处理机有自己的中断开关

2 关中断权利交给用户不合适

方案5 机器指令实现的互斥

即保证某些内容他是直接互斥的

相关文章:

操作系统(三)| 进程管理上 进程状态 同步 互斥

目录 1 进程和程序区别 2 进程状态 2.1 进程的5种基本状态 2.2 进程状态之间转换 2.3 七状态模型 3 进程描述 3.1 进程控制块 PCB 3.2 进程块组织方式 4 进程控制 5 进程同步 互斥 5.1 区分进程互斥和同步 5.2 核心方案 5.3 其他方案 方案1 设置锁变量 方案2 严…...

Postman插件如何安装(一)

我们chrome插件网热门推荐的软件之一就是postman。但是postman的适应平台分为&#xff1a;postman chrome应用程序&#xff0c;postman应用程序&#xff0c;postman插件。谷歌应用商店从2018年3月开始停止chrome应用程序的更新。除非继续使用老版本的postman chrome应用程序&am…...

在回调之间共享数据

可以在 App 中为 UI 组件编写回调函数&#xff0c;以指定用户与其交互时的行为方式。 在具有多个相互依赖的 UI 组件的 App 中&#xff0c;回调函数通常必须访问主 App 函数中定义的数据&#xff0c;或与其他回调函数共享数据。例如&#xff0c;如果创建一个具有列表框的 App&a…...

我在CSDN开组会1-蒙特卡洛模拟在矿床学的应用展望

各位老师、同学们&#xff0c;大家好。今天组会的内容是蒙特卡洛模拟在矿床学的应用展望。 为什么要讲蒙特卡洛模拟呢&#xff0c;因为我发现在地质学方面已经有不少应用&#xff0c;但是蒙特卡洛模拟延伸的知识太晦涩了&#xff0c;劝退了很多探究者们。因此&#xff0c;计划…...

Jmeter 性能测试基础!

压力测试 压力测试分两种场景&#xff1a;一种是单场景&#xff0c;压一个接口的&#xff1b;第二种是混合场景&#xff0c;多个有关联的接口。压测时间&#xff0c;一般场景都运行10-15分钟。如果是疲劳测试&#xff0c;可以压一天或一周&#xff0c;根据实际情况来定。 压测任…...

【赠书第6期】MATLAB科学计算从入门到精通

文章目录 前言 1 安装与配置 2 变量定义 3 数据处理 4 绘图 5 算法设计 6 程序调试 7 推荐图书 8 粉丝福利 前言 MATLAB 是一种高级的科学计算和数据可视化平台。它由 MathWorks 公司开发&#xff0c;是科学研究、数据分析和工程实践中非常常用的一种软件工具。本文将…...

Java语言基础第五天

精华笔记&#xff1a; 循环结构&#xff1a; for结构&#xff1a;应用率最高&#xff0c;与次数相关的循环 三种结构如何选择&#xff1a; 先看循环是否与次数相关&#xff1a; 若相关-----------------------------直接上for 若无关&#xff0c;再看要素1与要素3的代码是否相…...

linux网络——HTTPS加密原理

目录 一.HTTPS概述 二.概念准备 三.为什么要加密 四.常⻅的加密⽅式 1.对称加密 2.⾮对称加密 五.数据摘要&#xff0c;数字签名 六.HTTPS的加密过程探究 1.方案一——只使用对称加密 2.方案二——只使⽤⾮对称加密 3.方案三——双⽅都使⽤⾮对称加密 4.方案四——⾮…...

shell 各种括号作用总结

技巧小结&#xff1a; 字符串比较用双中括号[[ ]] 算数比较用单中括号[ ]——左右留空格 算数运算用双小括号(( )) shell命令及输出用小括号( )——左右不留空格 快速替换用花括号{ }——左右留空格 反单引号起着命令替换的作用 一、单括号()&#xff1a; 1、另开命令组——小…...

2023-11-18 mysql-sysbench压测TPS/QPS-记录

摘要: 2023-11-18 mysql-sysbench压测TPS/QPS sysbench压测TPS/QPS 使用 sysbench 压测 TPS/QPS 的基础测试数据是 6 张表,每张表写入 10 万行数据,然后在此基础测试数据上分别进行 300 秒的混合写、更新、删除压测。 sysbench --mysql-host=192.168.41.xxx --mysql-port=3…...

树与二叉树堆:树

目录 树&#xff1a; 树的概念&#xff1a; 树的相关概念&#xff1a; 1、结点的度&#xff1a; 2、叶节点&#xff1a;度为0的节点 3、非终端节点或分支节点&#xff1a; 4、父节点和子节点&#xff1a; 5、兄弟节点&#xff1a; 6、树的度&#xff1a; 7、树的层次或…...

【监控系统】日志可视化监控体系ELK搭建

1.ELK架构是什么 ELK是ElasticsearchLogstashKibana的简称。 Elasticsearch是一个开源的分布式搜索和分析引擎&#xff0c;可以用于全文检索、结构化检索和分析&#xff0c;它构建在Lucene搜索引擎库之上&#xff0c;是当前使用较为广泛的开源搜索引擎之一。 Logstash是一个…...

【Linux】22、CPU 评价指标、性能工具、定位瓶颈、优化方法论:应用程序和系统

文章目录 一、评价 CPU 的指标1.1 CPU 使用率1.2 平均负载&#xff08;Load Average&#xff09;1.3 上下文切换1.4 CPU 缓存命中率 二、性能工具2.1 维度&#xff1a;从 CPU 性能指标出发&#xff0c;即当你查看某性能指标时&#xff0c;要清除知道哪些工具可以做到2.2 维度&a…...

Foodpanda API连接的艺术:无代码开发如何集成营销系统和广告推广工具

连接Foodpanda和电商平台的无代码开发 Foodpanda不仅是一家提供快速外卖服务的国际品牌&#xff0c;而且其创新的技术解决方案还能帮助电商企业优化系统运营。通过无代码开发的方法&#xff0c;即使没有专业的API开发知识&#xff0c;商家也能实现高效的电商系统和客服系统连接…...

SpringBoot——数据访问

优质博文&#xff1a;IT-BLOG-CN 对于数据访问层&#xff0c;无论是SQL还是NoSQL&#xff0c;SpringBoot默认采用整合Spring Data的方式进行统一处理&#xff0c;添加大量自动配置&#xff0c;屏蔽了很多设置。引入各种xxxTemplate&#xff0c;xxxRepository来简化我们对数据访…...

【C++深度剖析学习总结】28 函数对象分析

1.客户需求 编写一个函数,满足三个需求 函数可以获得斐波那契数列每项的值 每调用一次返回一个值 函数可根据需要重复使用 for(int i =0; i<10; i++) { cout << fib() << endl; } 第一个解决方案 #include<iostream> #include<string> using na…...

持续集成部署-k8s-配置与存储-配置管理:SubPath

持续集成部署-k8s-配置与存储-配置管理:SubPath 1. 简介2. 测试 挂载文件目录3. subPath 解决挂载目录时覆盖原容器内文件夹1. 简介 在Kubernetes (K8s) 中,SubPath是用于指定容器内部目录挂载的一个属性。它可以在Pod中指定某个Volume挂载到容器内部的特定目录下,以便容器…...

git容易出问题的命令

#首先进行git init初始化本地仓库 git init #再进行拉取远程仓库代码 git clone http://以上这种情况建立在第一次拉取仓库的操作 如果你已经拉取过仓库要进行关联的话&#xff0c;就使用这种方法 #关联远程仓库 git remote add origin https:// # 拉取代码 git pull origin/…...

Mongodb命名和文档限制

选用mongodb时&#xff0c;需要了解与mongodb数据大小&#xff0c;命名上的限制。针对这些限制&#xff0c;本文针对这些限制进行翻译整理。 BSON文档 mongodb中的数据记录&#xff0c;按照文档的形式保存。文档保存在一种类似于JSON的BSON结构中。Mongodb对BSON做了一些限制…...

pyQt主界面与子界面切换简易框架

本篇来介绍使用python中是Qt功能包&#xff0c;设置一个简易的多界面切换框架&#xff0c;实现主界面和多个子界面直接的切换显示。 1 主界面 设计的Demo主界面如下&#xff0c;主界面上有两个按钮图标&#xff0c;点击即可切换到对应的功能界面中&#xff0c;进入子界面后&a…...

Flutter for OpenHarmony 效率工具开发实战:我实现的番茄钟与倒计时功能总结

Flutter for OpenHarmony 效率工具开发实战&#xff1a;我实现的番茄钟与倒计时功能总结 欢迎加入开源鸿蒙跨平台社区&#xff1a; https://openharmonycsdn.net/ 前言 在这段时间的 Flutter for OpenHarmony 跨平台开发实践中&#xff0c;我顺利完成了番茄钟功能与倒计时功能两…...

从工程师幽默到商业传播:如何用“认知摩擦力”与“内部梗”赢得受众共鸣

1. 从“太空无人喝彩”到“职场无声胜利”&#xff1a;一次成功的标题竞赛如何折射商业传播逻辑最近翻看一些老资料&#xff0c;看到一篇2012年《EE Times》的旧闻&#xff0c;讲的是他们一个标题竞赛&#xff08;Caption Contest&#xff09;的结果。获胜的标题是&#xff1a;…...

aghub:GitHub开发者效率工具集,批量克隆、仓库管理与自动化实战

1. 项目概述&#xff1a;一个为开发者打造的“瑞士军刀”式工具集如果你是一名开发者&#xff0c;尤其是经常和开源项目、命令行工具打交道的后端或运维工程师&#xff0c;那么你一定经历过这样的场景&#xff1a;为了完成一个看似简单的任务&#xff0c;比如批量克隆某个组织下…...

为什么IT变更越来越谨慎,系统故障却还是越来越多?

很多企业的变更流程&#xff0c;正在变成一种“心理负担”在不少企业里&#xff0c;只要提到变更管理&#xff0c;团队第一反应往往不是“优化系统”&#xff0c;而是&#xff1a;“这次审批会不会很久&#xff1f;” “会不会又要开CAB&#xff1f;” “万一出问题怎么办&…...

如何5步轻松配置智能象棋助手:零基础部署计算机视觉象棋AI

如何5步轻松配置智能象棋助手&#xff1a;零基础部署计算机视觉象棋AI 【免费下载链接】VinXiangQi Xiangqi syncing tool based on Yolov5 / 基于Yolov5的中国象棋连线工具 项目地址: https://gitcode.com/gh_mirrors/vi/VinXiangQi 想要体验AI辅助下棋的乐趣吗&#x…...

hack-interview:结构化面试知识体系,从原理到实战的系统设计指南

1. 项目概述&#xff1a;一个为技术面试而生的“军火库”如果你正在准备技术面试&#xff0c;尤其是后端开发、系统设计或者算法相关的岗位&#xff0c;那么你大概率经历过这样的场景&#xff1a;面对网上浩如烟海的八股文、面经和零散的LeetCode题解&#xff0c;感觉知识体系像…...

如何免费解锁原神60帧限制:终极FPS解锁工具完全指南

如何免费解锁原神60帧限制&#xff1a;终极FPS解锁工具完全指南 【免费下载链接】genshin-fps-unlock unlocks the 60 fps cap 项目地址: https://gitcode.com/gh_mirrors/ge/genshin-fps-unlock 你是否在原神中体验过画面卡顿、动作不够流畅的困扰&#xff1f;当其他游…...

抖音批量下载助手:一键获取全系列作品的终极解决方案

抖音批量下载助手&#xff1a;一键获取全系列作品的终极解决方案 【免费下载链接】douyinhelper 抖音批量下载助手 项目地址: https://gitcode.com/gh_mirrors/do/douyinhelper 还在为手动保存抖音视频而烦恼吗&#xff1f;今天我要向你介绍一款神奇的抖音批量下载助手&…...

别再手动敲命令了!用Oracle 19c RPM预安装包在CentOS 7上快速搞定环境配置

告别手工配置&#xff1a;Oracle 19c RPM预安装包在CentOS 7的极速部署指南 每次看到DBA同事在终端里逐行敲击groupadd、sysctl命令时&#xff0c;我总想起自己第一次部署Oracle 19c时踩过的坑——内核参数漏配导致实例无法启动&#xff0c;权限设置错误引发安装中断&#xff0…...

AI 能力如何变成鸿蒙 App 的基础设施

子玥酱 &#xff08;掘金 / 知乎 / CSDN / 简书 同名&#xff09; 大家好&#xff0c;我是 子玥酱&#xff0c;一名长期深耕在一线的前端程序媛 &#x1f469;‍&#x1f4bb;。曾就职于多家知名互联网大厂&#xff0c;目前在某国企负责前端软件研发相关工作&#xff0c;主要聚…...