操作系统笔记(进程)

news2024/9/29 9:31:20

注: 下面图片资源来源于     王道计算机考研 操作系统

1.进程概念

  • 进程(process):是动态的,是程序的一次执行过程(同一程序多次执行,会产生多个进程)
  • 程序:是静态的,放在磁盘里面的可执行文件,即一系列的指令集合

当进程被创建时,操作系统会给进程分配一个唯一的、不重复的id(PID)

2.进程控制块(PCB)

操作系统中的进程需要记录很多信息,比如pid、uid、给进程分配了哪些空间资源,正在使用哪些I/O设备、CPU使用时间和情况、磁盘使用情况、网络流量使用情况等。这些信息都被保存在一个数据结构(PCB),即进程控制块中。

即操系统需要对各个并发运行的进程进行管理,管理时所需要的信息都被存到PCB中。

注意:PCB是进程存在的唯一标志,当一个进程结束时操作系统会回收它的PCB

PCB包含了许多内容:

  • 进程状态
  • 程序计数器
  • CPU寄存器
  • CPU调度信息
  • 内存管理信息
  • 记账信息
  • I/O状态信息
  • 等等等

 3进程的运行

注意:进程是动态的,而进程实体(进程运行时,某一时刻的照片)时静态的。进程实体由PCB、程序段、数据段组成。开始执行前,需要把PC(指令寄存器)的值指向相应内存。

4.进程的状态

进程可以分为以下五种状态:

  • 新的(new):也叫创建态,进程正在创建
  • 运行(running):也叫运行态,指令正在CPU上执行
  • 等待(wating):也叫阻塞态,进程等待某个事件的发生(有资源没有准备好,直接放CPU上还不能运行)
  • 就绪(ready):进程等待分配CPU(其他资源都准备好了,到CPU上就能运行)
  • 终止(terminated):进程已经完成执行

runing->wating:

  1. 此时进程在CPU上请求其他资源(比如I/O设备),但是资源被占用。CPU不会让此进程继续在CPU上面等待,因此直接把它踢出CPU,将其PCB状态修改为wating。
  2. 进程等待某个事件的发生。比如自己代码种有if(a==2) ....。而此时a=1所以此进程也会被修改成wating

wating->ready:

  1. 申请的资源被分配
  2. 等待的事件已经发生(如a==2)

ready->running:

  1. 通过调度完成

running->ready:

  1. 中断(如分时操作系统,这一小段时间运行完了,正好等这下一小段时间

5.进程的组织

5.1链式组织

5.2索引组织

6.进程控制

6.1进程的CPU切换

由上图可以总结出:切换进程时,并不是切换的越快越好。越快的话,大量时间都消耗在寄存器内容的保存和恢复上;越慢的话,若进程不能继续在CPU执行,会浪费CPU时间。

6.2进程控制相关原语

原语:不可被再分割的指令(如关中断、开中断等)

6.2.1进程创建(new->ready)

6.2.2进程的终止

6.2.3进程的阻塞和唤醒

6.2.4进程的切换

7.进程通信

进程是分配系统资源的单位(包括内存地址),因此各内存拥有的内存地址空间相互独立

为了保证安全,一个进程不能直接访问另一个进程的地址空间

7.1共享存储

为了避免两个进程在共享存储区写入有重复,应该满足各个进程对共享存储区的访问是互斥的。

共享:1基于数据结构的共享   2基于存储区的共享

7.2消息传递

7.2.1直接通信方式

先在进程p种给消息赋值:msg=....;

接着将msg传送到Q的PCB的消息队列

7.2.2间接通信方式

进程P首先在系统内核申请一个信箱,将msg发送到信箱,接着Q再接受A信箱的内容

7.3管道通信

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

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

相关文章

Linux:锁和线程同步的相关概念以及生产者消费者模型

文章目录 加锁的基本原则死锁死锁的概念死锁的条件 线程同步生产者消费者模型模型的理解 理解cp问题条件变量 本篇总结的是关于Linux中锁的相关概念以及生产者消费者模型 加锁的基本原则 加锁的基本原则:谁加锁谁解锁,不要把加锁和解锁这样的操作放在两…

Java线程池ThreadPoolExecutor源码阅读

文章目录 概述线程池提交任务流程线程池提交任务源码阅读 源码阅读属性字段工作线程worker 线程池方法runWorker(Worker w) 运行工作线程getTask() 获取任务tryTerminate() 尝试终止线程池interruptWorkers、interruptIdleWorkers 中断工作线程reject(Runnable command) 拒绝任…

数组名的理解,看这一篇就够了!!!

!!!以下是会涉及到的知识的讲解: 一:数组名的理解: 数组名是数组首元素的地址,但是有2个例外: 1. sizeof(数组名),这里的数组名表示整个数组,计算的是整个…

LeetCode59:螺旋矩阵Ⅱ

题目描述 给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。 示例 1: 输入:n 3 输出:[[1,2,3],[8,9,4],[7,6,5]] 代码 class Solution { public:vector…

查看pip当前关联python版本及位置

好久没用python了,把各种pip指向的环境忘光光啦,这里记录一下查看pip当前关联的python版本及位置的方法: pip -V结果: 我一般不用这个版本的python,去环境变量看了一下,原来是anaconda的Scripts自带pip&a…

Vue class和style绑定:动态美化你的组件

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

EB tersos 24.0.1 添加MCU模块失败

1、问题: 新建工程,添加MCU模块总是失败,错误信息如下: 2、解决方案 创建工程时只保留Resource模块,直接点击Finish,其他模块之后再添加 在工程创建成功后再单独添加需要的模块

StableDiffusion3 官方blog论文研究

博客源地址:Stable Diffusion 3: Research Paper — Stability AI 论文源地址:https://arxiv.org/pdf/2403.03206.pdf Stability.AI 官方发布了Stable diffusion 3.0的论文研究,不过目前大家都沉浸在SORA带来的震撼中,所以这个水…

力扣530. 二叉搜索树的最小绝对差

思路1&#xff1a;中序遍历&#xff0c;递归排序成有序数组&#xff1b;因为是有序&#xff0c;只需要求相邻两个值的最小差值。 class Solution {ArrayList <Integer> list new ArrayList();int ans 100001;//题目最大 100000public int getMinimumDifference(TreeNo…

docker学习笔记——Dockerfile

Dockerfile是一个镜像描述文件&#xff0c;通过Dockerfile文件可以构建一个属于自己的镜像。 如何通过Dockerfile构建自己的镜像&#xff1a; 在指定位置创建一个Dockerfile文件&#xff0c;在文件中编写Dockerfile相关语法。 构建镜像&#xff0c;docker build -t aa:1.0 .(指…

异步编程实战:使用C#实现FTP文件下载及超时控制

博客标题: 异步编程实战&#xff1a;使用C#实现FTP文件下载及超时控制 如果你的函数不是async&#xff0c;你仍然可以实现相同的超时功能&#xff0c;但你将不得不依赖更多的同步代码或使用.Result或.GetAwaiter().GetResult()来阻塞等待任务完成&#xff0c;这可能导致死锁的风…

Breach-2.1

靶场环境说明 该靶场是静态IP地址&#xff0c;需要更改网络配置&#xff0c;攻击机kali做了两张网卡&#xff1b; 信息收集 # nmap -sT --min-rate 10000 -p- 192.168.110.151 -oN port.nmap Starting Nmap 7.94 ( https://nmap.org ) at 2024-02-09 10:47 CST Stats: 0:00:…

java通过poi-tl生成word

我看公司之前做电子合同&#xff0c;使用TIBCO jaspersoft做的报表模板&#xff0c;如果是给自己公司开发或者给客户做项目&#xff0c;这个也没有什么&#xff0c;因为反正模板是固定的&#xff0c;一次性开发&#xff0c;不用担心后续的问题。即使后期有调整&#xff0c;改一…

深入解读 Elasticsearch 磁盘水位设置

本文将带你通过查看 Elasticsearch 源码来了解磁盘使用阈值在达到每个阶段的处理情况。 跳转文章末尾获取答案 环境 本文使用 Macos 系统测试&#xff0c;512M 的磁盘&#xff0c;目前剩余空间还有 60G 左右&#xff0c;所以按照 Elasticsearch 的设定&#xff0c;ES 中分片应…

总结:Spring创建Bean循环依赖问题与@Lazy注解使用详解

总结&#xff1a;Spring创建Bean循环依赖问题与Lazy注解使用详解 一前提知识储备&#xff1a;1.Spring Bean生命周期机制&#xff08;IOC&#xff09;2.Spring依赖注入机制&#xff08;DI&#xff09;&#xff08;1&#xff09;Autowired注解标注属性set方法注入&#xff08;2&…

面具安装LSP模块时提示 Unzip error错误的解决办法

面具(Magisk Delta)安装LSP模块时提示 Unzip error错误的解决办法 ​​ 如果前面的配置都正常的话&#xff0c;可能是LSP版本有问题重新去Github下载一个最新版的吧&#xff1b;我是这么解决的。 我安装1.91那个版本的LSP就是死活安装不上&#xff0c;下载了1.92的版本一次就…

Golang-channel合集——源码阅读、工作流程、实现原理、已关闭channel收发操作、优雅的关闭等面试常见问题。

前言 面试被问到好几次“channel是如何实现的”&#xff0c;我只会说“啊&#xff0c;就一块内存空间传递数据呗”…所以这篇文章来深入学习一下Channel相关。从源码开始学习其组成、工作流程及一些常见考点。 NO&#xff01;共享内存 Golang的并发哲学是“要通过共享内存的…

⭐每天一道leetcode:83.删除排序链表中的重复元素(简单;链表遍历、删除经典题目)

⭐今日份题目 给定一个已排序的链表的头 head &#xff0c; 删除所有重复的元素&#xff0c;使每个元素只出现一次 。返回 已排序的链表 。 示例1 输入&#xff1a;head [1,1,2] 输出&#xff1a;[1,2] 示例2 输入&#xff1a;head [1,1,2,3,3] 输出&#xff1a;[1,2,3] …

Linux 进程程序替换

&#x1f493;博主CSDN主页:麻辣韭菜-CSDN博客&#x1f493;   ⏩专栏分类&#xff1a;http://t.csdnimg.cn/G90eI⏪   &#x1f69a;代码仓库:Linux: Linux日常代码练习&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学习更多Linux知识   &#x1f51d;&#x1f5…

考研经验|如何从考研失败中走出来?

对我来说&#xff0c;太丢人了 其实我在本科的时候在同学眼中&#xff0c;一直很优秀&#xff0c;每年奖学金必有我的&#xff0c;国家励志奖学金&#xff0c;国家奖学金&#xff0c;这种非常难拿的奖学金&#xff0c;我也拿过&#xff0c;本科期间学校有一个公费去新西兰留学的…