操作系统(二 )| 进程控制 进程状态 进程描述 进程控制 进程同步互斥

文章目录

  • 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 关中断

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):进程在外存,但只要进入内存,即可运行
运行
新建
完成

注意 挂起都在外存

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

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

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 设置锁变量

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

来不及上锁就被切换走了

可能会存在盲等待

方案2 严格轮转法

本质互为锁

临界区外的进程会阻止其他进程进入临界区。

方案3 Peterson解决方案

为什么进程号只有0和1

方案4 关中断

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

对多处理机系统无效

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

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

相关文章

rabbitmq 集群搭建

RabbitMQ集群介绍 RabbitMQ集群是一组RabbitMQ节点(broker)的集合,它们一起工作以提供高可用性和可伸缩性服务。 RabbitMQ集群中的节点可以在同一物理服务器或不同的物理服务器上运行。 RabbitMQ集群的工作原理是,每个节点在一个…

【机器学习】K近邻算法:原理、实例应用(红酒分类预测)

案例简介:有178个红酒样本,每一款红酒含有13项特征参数,如镁、脯氨酸含量,红酒根据这些特征参数被分成3类。要求是任意输入一组红酒的特征参数,模型需预测出该红酒属于哪一类。 1. K近邻算法介绍 1.1 算法原理 原理&a…

Spring cloud负载均衡@LoadBalanced LoadBalancerClient

LoadBalance vs Ribbon 由于Spring cloud2020之后移除了Ribbon,直接使用Spring Cloud LoadBalancer作为客户端负载均衡组件,我们讨论Spring负载均衡以Spring Cloud2020之后版本为主,学习Spring Cloud LoadBalance,暂不讨论Ribbon…

【JAVA学习笔记】70 - 反射

项目代码 https://github.com/yinhai1114/Java_Learning_Code/tree/main/IDEA_Chapter23/src 反射 一、反射的引出 package com.yinhai.reflection.question;import com.yinhai.Cat;import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IO…

Sonar生成PDF错误Can‘t get Compute Engine task status.Retry..... HTTP error: 401

报错及修改: 报错:INFO: Can’t get Compute Engine task status.Retry… org.sonarqube.ws.connectors.ConnectionException: HTTP error: 401, msg: , query: org.apache.commons.httpclient.methods.GetMethod7a021f49 ERROR: Problem generating PD…

JavaScript的函数的形参与实参是怎么回事

0 写在前面 此文给小白看的,如果不是可以直接关闭 1 讲解 例如JavaScript中定义函数 //定义函数 function 方法名(形参){方法体-->使用形参}//使用函数 方法名字(实参)具体干了什么呢?此处以伪代码举例 //定义函数 function eat(A,B){A 去 B 家吃…

rsync远程同步(rsync+inotify)

目录 一、概述 1、关于rsync 2、rsync的特点: 3、备份方式: 4、同步方式: 二、rsync相关命令 1、rsync常用命令的选项: 2、启动和关闭rsync服务: 3、关闭 rsync 服务 三、 免交互: 1、免密同步&a…

趣学python编程 (一、计算机基础知识科普)

未来是高度科技化和智能化的时代。过去不识字的叫“文盲”,如今不懂点计算机知识,则可能是新时代的“文盲”。不论从事什么行业,了解下计算机和编程都是有益的。Python 连续多年占据最受欢迎的编程语言榜首,未来Python有机会成为像…

在qt的设计师界面没有QVTKOpenGLWidget这个类,只有QOpenGLWidget,那么我们如何得到QVTKOpenGLWidget呢?

文章目录 前言不过,时过境迁,QVTKOpenGLWidget用的越来越少,官方推荐使用qvtkopengnativewidget代替QVTKOpenGLWidget 前言 在qt的设计师界面没有QVTKOpenGLWidget这个类,只有QOpenGLWidget,我们要使用QVTKOpenGLWidget,那么我们如何得到QVTKOpenGLWidget呢? 不过,时过境迁,Q…

08【保姆级】-GO语言的函数、包、错误处理

08【保姆级】-GO语言的函数、包、错误处理 一、 函数基本介绍1.1 基本概念1.2 包的概念1.3 包使用的注意事项和细节1.4 函数的调用机制1.5 函数的递归调用1.6 函数使用的注意事项和细节讨论1.7 init函数1.8 匿名函数1.8.1 匿名函数使用方式1.8.2 全局匿名函数 1.9 闭包1.9.1 闭…

【Java 进阶篇】JQuery 遍历 —— For 循环的奇妙之旅

在前端开发的世界里,遍历是一个常见而重要的操作。它让我们能够浏览并操纵文档中的元素,为用户提供更加丰富和交互性的体验。而在 JQuery 中,遍历的方式多种多样,其中 for 循环是一种简单而灵活的选择。在本篇博客中,我…

Mac电脑VSCode配置PHP开发环境

1.安装 PHP 首先,打开终端,安装 Homebrew,输入如下命令: $ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" 安装了 Homebrew 之后,你可以使用下面的…

这款开源神器,让聚类算法从此变得简单易用

Scikit-Learn 以其提供的多个经过验证的聚类算法而著称。尽管如此,其中大多数都是参数化的,并需要设置集群的数量,这是聚类中最大的挑战之一。 通常,使用迭代方法来决定数据的最佳聚类数量,这意味着你需要多次进行聚类…

【华为OD题库-015】报文重排序-Java

题目 对报文进行重传和重排序是常用的可靠性机制&#xff0c;重传缓冲区内有一定数量的子报文&#xff0c;每个子报文在原始报文中的顺序已知&#xff0c;现在需要恢复出原始报文。 输入描述 输入第一行为N,表示子报文的个数&#xff0c;0<N < 1000。 输入第二行为N个子报…

Unity 2021 LTS / Unity 2022 LTS New Shader Graph Node 参考样本

Shader Graph团队很高兴地宣布发布新的节点参考样本&#xff0c;现在可用于2021 LTS, 2022 LTS和未来的版本。 节点参考样本是超过140个Shader图形资源的集合。您可以将这些图用作参考&#xff0c;以了解每个节点的作用及其工作原理&#xff0c;而不是在项目中使用这些图。每个…

【软件安装】Centos系统中安装docker容器(华为云HECS云耀服务器)

这篇文章&#xff0c;主要介绍Centos系统中安装docker容器&#xff08;华为云HECS云耀服务器&#xff09;。 目录 一、安装docker 1.1、卸载旧版本docker 1.2、更新repo镜像 1.3、安装依赖包 1.4、添加docker-ce镜像 1.5、安装docker-ce 1.6、查看docker安装版本 1.7、…

Opengauss到Oracle增量同步, 使用debezium

一、概述 PG到Oracle的同步方案使用debezium kafka kafka-connect-jdbc。debezium是一款开源的变更捕获软件&#xff0c;它以kafka的connector形式运行&#xff0c;可以捕获PostgreSQL、MySQL、Oracle中的变更数据&#xff0c;保存到kafka。kafka-connect-jdbc是confluent公…

[Linux] ssh远程访问及控制

一、ssh介绍 1.1 SSH简介 SSH&#xff08;Secure Shell&#xff09;是一种安全通道协议&#xff0c;主要用于实现远程登录、远程复制等功能的字符接口。SSH 协议包括用户在登录时输入的用户密码、双方之间的通信。 加密数据传输&#xff0c;SSH 是一种建立在应用层和传输层上…

Please No More Sigma(构造矩阵)

Please No More Sigma 给f(n)定义如下&#xff1a; f(n)1 n1,2; f(n)f(n-1)f(n-2) n>2; 给定n&#xff0c;求下式模1e97后的值 Input 第一行一个数字T&#xff0c;表示样例数 以下有T行&#xff0c;每行一个数&#xff0c;表示n。 保证T<100&#xff0c;n<100000…

【Proteus仿真】【Arduino单片机】DHT11温湿度

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真Arduino单片机控制器&#xff0c;使用PCF8574、LCD1602液晶、DHT11温湿度传感器等。 主要功能&#xff1a; 系统运行后&#xff0c;LCD1602显示传感器采集温度和湿度。 二、软件设…