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

目录

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 机器指令实现的互斥

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

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

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

相关文章

C# 电脑程序控制电路开关

最近在做系统的监控&#xff0c;想到能不能做一个酷点的功能&#xff0c;当收到异常消息时桌面上的红色小灯&#xff08;或报警灯&#xff09;会亮起来。于是在淘宝上找了一下&#xff0c;有这种小设备&#xff0c;插入USB设备&#xff0c;通过串口控制这个设备的继电器来实现&…

中级程序员——vue3+js+git面试题

&#x1f642;博主&#xff1a;小猫娃来啦 &#x1f642;文章核心&#xff1a;vue3jsgit面试题 文章目录 vue3最大缺点和优点&#xff1f;vue3组合式里面&#xff0c;如何去调用子组件里面的方法&#xff1f;watch和watcheffect有什么区别&#xff1f;计算属性和watch的区别是什…

MySQL数据库系统教程

基础篇 通用语法及分类 DDL: 数据定义语言&#xff0c;用来定义数据库对象&#xff08;数据库、表、字段&#xff09;DML: 数据操作语言&#xff0c;用来对数据库表中的数据进行增删改DQL: 数据查询语言&#xff0c;用来查询数据库中表的记录DCL: 数据控制语言&#xff0c;用…

ArcGIS教程——ArcGIS工具-按线分割面

功能说明 在ArcGIS数据处理过程中&#xff0c;有时需要沿线把面要素分割开&#xff0c;可以使用高级编辑中的分割面&#xff08;Cut Polygon&#xff09;工具。那么&#xff0c;如果要用线图层分割面图层该怎么办呢&#xff1f;地理遥感生态网平台开发了一个自定义模型工具。它…

学习笔记—吴恩达《AI for everyone》

【写在前面】 学习视频来源&#xff1a;B站“GPT中英字幕课程资源”&#xff08;见图片水印&#xff09;。 此文是自学笔记&#xff0c;主要是截图视频课件中的一些知识点&#xff0c;只做自学使用。 一. AI 介绍 二. 机器学习 Machine Learning 三. 什么是数据 What is AI 四…

你知道Linux操作系统的前世今生吗?Linux系统又该如何搭建呢?

文章目录 前言1. Linux 是什么1.1 Unix & Linux 发展历程图1.2 Linux 的发展1.3 Linux 的发行版 2. Linux 环境搭建2.1 环境搭建方式2.2 使用云服务器 3. 使用终端软件连接到 Linux3.1 什么是终端软件3.2 下载安装 XShell3.3 使用 XShell 登陆主机 总结 前言 可能很多人都…

跳台阶游戏(Python排列组合函数itertools.combinations的应用)

给定台阶总数和两种单次可跳级数&#xff0c;编写自定义函数&#xff0c;计算所有的游戏组合方案数量。 (笔记模板由python脚本于2023年11月19日 19:18:48创建&#xff0c;本篇笔记适合熟悉python自定义函数编写&#xff0c;了解排列组合知识的coder翻阅) 【学习的细节是欢悦的…

多项式求和

题目描述 给定程序中 fun 函数的功能是&#xff1a;求出以下分数序列的前 n 项之和&#xff0c;并通过函数值返回 main 函数。 输入格式 输入参数。 输出格式 计算公式返回的结果。 输入输出样例 输入1 5 输出1 8.391667 python解&#xff1a; def fun(n):a1b2s0for…

mongoDB安装教程

安装及操作命令 cd /opt wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.4.0.tgz tar -zxvf mongodb-linux-x86_64-3.4.0.tgz#修改文件夹名字为mongodb-3.4.0 mv mongodb-linux-x86_64-3.4.0 mongodb-3.4.0# 在/opt/mongodb-3.4.0/conf目录下创建mongo.co…

设计模式-解析器-笔记

“领域规则”模式 在特定领域中&#xff0c;某些变化虽然频繁&#xff0c;但可以抽象为某种规则。这时候&#xff0c;结合特定领域&#xff0c;将稳日抽象为语法规则&#xff0c;从而给出在该领域下的一般性解决方案。 典型模式&#xff1a;Interpreter 动机(Motivation) 在…

MySQL 运算符二

逻辑运算符 逻辑运算符用来判断表达式的真假。如果表达式是真&#xff0c;结果返回 1。如果表达式是假&#xff0c;结果返回 0。 运算符号作用NOT 或 !逻辑非AND逻辑与OR逻辑或XOR逻辑异或 1、与 mysql> select 2 and 0; --------- | 2 and 0 | --------- | 0 | -…

微信小程序开发学习——顺序、选择、循环、数学函数

1.条件语句 只需在js中写JavaScript的条件语句就行 math对象&#xff1a; 代码如下&#xff1a; <!--pages/tiaojian/tiaojian.wxml--> <view class"box"><view class"title">输入x&#xff0c;条件输出y</view><view><…

俄罗斯网络间谍组织在有针对性的攻击中部署LitterDrifter USB蠕虫

导语 俄罗斯网络间谍组织最近在针对乌克兰实体的攻击中&#xff0c;部署了一种名为LitterDrifter的USB蠕虫。这种蠕虫具有自动传播恶意软件的功能&#xff0c;并与威胁行为者的命令和控制服务器进行通信。该组织被称为Gamaredon&#xff0c;其攻击行动被认为是大规模的&#xf…

年薪30w项目经理都在用的6个项目管理软件

大家好&#xff0c;我是老原。又到了每月一次的好用工具推荐&#xff0c;不少粉丝都在搓手等待了。 要知道&#xff0c;实时掌握项目进度、把关项目质量、应对项目风险、协调资源…如果能好用的工具高效提升你的工作效率&#xff0c;对于领导来说&#xff0c;绝对是加分项。 …

【C++】set和map的底层结构(AVL树红黑树)

文章目录 一、前言二、AVL 树1.AVL树的概念2.AVL树节点的定义3.AVL树的插入4.AVL树的旋转5.AVL树的验证6.AVL树的删除、AVL树的性能 三、红黑树1.红黑树的概念2.红黑树的性质3.红黑树节点的定义4.红黑树结构5.红黑树的插入操作6.红黑树的验证7.红黑树与AVL树比较 四、红黑树模拟…

ResizeObserver观察元素宽度的变化

ResizeObserver观察元素宽度的变化 ResizeObserver观察元素宽度的变化 ResizeObserver观察元素宽度的变化 ResizeObserver 构造函数创建一个新的 ResizeObserver 对象&#xff0c;它可以用于监听 Element 内容盒或边框盒或者 SVGElement 边界尺寸的大小。查看详细说明 案例 &l…

小白也能看懂的国内外 AI 芯片概述

随着越来越多的企业将人工智能应用于其产品&#xff0c;AI芯片需求快速增长&#xff0c;市场规模增长显著。因此&#xff0c;本文主要针对目前市场上的AI芯片厂商及其产品进行简要概述。 简介 AI芯片也被称为AI加速器或计算卡&#xff0c;从广义上讲只要能够运行人工智能算法…

SpringCloud实用篇02

SpringCloud实用篇02 0.学习目标 1.Nacos配置管理 Nacos除了可以做注册中心&#xff0c;同样可以做配置管理来使用。 1.1.统一配置管理 当微服务部署的实例越来越多&#xff0c;达到数十、数百时&#xff0c;逐个修改微服务配置就会让人抓狂&#xff0c;而且很容易出错。我…

8Base集团通过SmokeLoader部署新的Phobos勒索软件变种

最近&#xff0c;8Base集团的威胁行为者通过Phobos勒索软件的变种展开了一系列金融动机的攻击。这一发现来自于思科Talos的研究结果&#xff0c;他们记录了网络犯罪分子活动的增加。 安全研究员Guilherme Venere在周五发表的详尽的两部分分析中表示&#xff1a;“该组织的大多…

html2canvas快速使用

一、概述 html2canvas是一个HTML渲染器&#xff0c;是一个脚本&#xff0c;它允许你直接在用户浏览器截取页面或部分网页的“屏幕截屏”。底层是基于DOM的&#xff0c;根据页面上可用的信息构建屏幕截图&#xff0c;它没有制作实际的屏幕截图&#xff0c;因此生成的图片并不一定…