【面试八股总结】进程(一)

news2024/12/25 8:59:00

参考资料 :小林Coding、阿秀、代码随想录

一、什么是进程?

1. 基本概念        

        进程是具有独立功能的程序在一个数据集合上运行的过程,是系统进行资源分配和调度的一个独立单位

2. 进程控制块

        系统通过进程控制块PCB描述进程的进本情况和运行状态,进而控制和管理进程进程,PCB是进程存在的唯一标识,包括以下信息:

  • 进程描述信息:进程标识符、用户标识符;       
  • 进程控制和管理信息:进程当前状态、进程优先级;
  • 进程资源分配清单:有关内存地址空间或虚拟地址空间的信息,所打开文件的列表和所使用的I/O设备信息;
  • CPU相关信息:进程切换时,CPU寄存器的值都被保存在相应的PCB中,以便重新执行该进程时能从断点处继续执行。

3. 并发与并行

  • 单个处理核在很短的时间内分别执行多个进程,称为并发
  • 多个处理核同时执行多个进程称为并行

        并发需要CPU从一个进程切换到另一个进程,在切换前必须要记录当前进程中运行的状态信息,以备下次切换回来的时候可以恢复执行。

4. 进程的上下文切换

        一个进程切换到另一个进程运行,称为进程的上下文切换,进程的上下文切换不仅包含了虚拟内存、栈、全局变量等用户空间资源,还包括了内核堆栈、寄存器等内核的空间资源。

发生进程上下文切换有哪些场景?

  • 进程的时间片耗尽
  • 阻塞等待
  • 高优先级进程运行
  • 中断处理
  • 进程通过睡眠函数Sleep这样的方法将自己主动挂起

二、进程状态

在一个进程的活动期间至少具备三种基本状态,即运行状态、就绪状态、阻塞状态。

  • 就绪状态:可以运行,但是由于其他进程处于运行状态而暂时无法运行,等待调度;
  • 阻塞状态:该进程正在等待某一事件发生而暂时停止运行,等待资源;
  • 运行状态:该时刻进程占用CPU;

此外,进程还有另外两个基本状态:

  • 创建状态:进程正在被创建;
  • 结束状态:进程正在从系统中消失。

        如果有⼤量处于阻塞状态的进程,进程可能会占用物理内存空间,所以系统通常会把阻塞状态进程的物理内存空间换出到硬盘等需要再次运行的时候,再从硬盘换入物理内存,那么,就需要⼀个新的状态,来描述进程没有占用实际的物理内存空间的情况,这个状态就是挂起状态

        这跟阻塞状态是不⼀样,阻塞状态是等待某个事件的返回。 挂起状态可以分为两种:

  • 阻塞挂起状态:进程在外存(硬盘)并等待某个事件的出现;
  • 就绪挂起状态:进程在外存(硬盘),但只要进入内存,立刻运⾏;

  • 只有就绪态和运行态可以相互转换,其他的都是单向转换。就绪态的进程通过调度算法获得CPU时间,转为运行态;而运行态进程,在分配给它的CPU时间片用完之后就会转为就绪态,等待下一次调度;
  • 阻塞状态时缺少需要的资源而由运行态转换而来,但该资源不包括CPU时间,缺少CPU时间会从运行态转为就绪态;
  • 当进程等待的外部事件发生时,由阻塞态转换为就绪态,如果此时没有其他进程运行,则转为运行态,否则该进程将处于就绪态,等待CPU空闲。

三、进程控制

1. 进程创建

        ⼀个进程可以创建另⼀个进程,此时创建者为父进程被创建的进程为子进程,操作系统创建⼀个新进程的过程如下:

  • 为新进程分配⼀个独特的进程控制块(PCB)
  • 为新进程分配所需要的资源,比如内存、CPU时间
  • 初始化进程控制块(PCB)的各种字段,包括状态、优先级、寄存器初始值等。
  • 将其状态设置为就绪状态,使其能够被调度执行。进程进入就绪队列,等待分配处理器时间。

2. 进程终止

  • 根据标识符,查找需要终止的进程的 PCB;
  • 如果进程处于执行状态,则立即终止该进程的执行,然后将处理器资源分配给其他进程
  • 如果其还有子进程,则应将该进程的子进程交给 1 号进程接管
  • 将该进程所拥有的全部资源都归还给操作系统;
  • 将其从 PCB 所在队列中删除。

3. 阻塞进程

  • 找到被阻塞进程的标识符对应的PCB
  • 如果该进程为运行状态,则保护其现场,将其状态转为阻塞状态,停⽌运⾏;
  • 将该 PCB 插⼊到等待队列中,将处理机资源调度给其他就绪进程

4. 唤醒进程

  • 在该事件的阻塞队列中找到相应进程的 PCB;
  • 将其从阻塞队列中移出,并置其状态为就绪状态
  • 把该 PCB 插⼊到就绪队列中,等待调度程序调度。

四、进程间通信方式

        进程通信指的是进程之间的信息交换,进程之间⼀般是相互独⽴的,但内核空间是每个进程都共享的,所以进程之间要通信必须通过内核。

1. 管道(匿名管道)

        管道是指用于连接⼀个读进程和⼀个写进程以实现它们之间的通信的⼀个共享文件,⼜名pipe文件,向管道提供输入的发送进程(写进程),以字符流形式将大量的数据送入(写)管道,而接收管道输出的接收进程 (即读进程)则从管道中接收(读)数据。

  • 管道传输数据是半双⼯通信,某⼀时刻只能单向传输。
  • 写入管道中的数据遵循先入先出的规则
  • 管道所传送的数据是无格式的,这要求管道的读出方与写入方必须事先约定好数据的格式,如多少字节算⼀个消息等
  • 管道不是普通的文件,不属于某个文件系统,其只存在于内存
  • 管道在内存中对应⼀个缓冲区, 不同的系统其大小不⼀定相同
  • 从管道读数据是⼀次性操作,数据⼀旦被读⾛,它就从管道中被抛弃,释放空间以便写更多的数据
  • 管道通信效率低,不适合进程间频繁地交换数据

        匿名管道:没有名字的管道,⽤完就销毁,只适⽤于父子进程之间的通信。

2. 命名管道

        命名管道(FIFO)不同于匿名管道之处在于它提供了⼀个路径名与之关联,以 FIFO 的⽂件形式存在于文件系统中,这样,即使与 FIFO 的创建进程不存在亲缘关系的进程,只要可以访问该路径,就能够彼此通过 FIFO 相互通信。当使用FIFO的进程退出后,FIFO文件将继续保存在文件系统中以便之后使用。

3. 消息队列

        消息队列是保存在内核中的消息链表,在发送数据时,会分成一个一个独立的数据单元,也就是消息体(数据块),消息体是用户自定义的数据类型,消息的发送方和接收方要约定好消息体的数据类型,所以每个消息体都是固定大小的存储块,不像管道是无格式的字节流数据。如果进程从消息队列中读取了消息体,内核就会把这个消息体删除。

消息队列克服了信号承载信息量少,管道只能承载无格式字节流以及缓冲区大小受限等缺点。

4. 信号量

        信号量⽤于控制多个进程对共享资源的访问,比如避免因为多个进程同时修改同⼀个共享内存造成冲突,信号量可以使共享的资源在任意时刻只能被⼀个进程访问。

        信号量其实是一个整型的计数器,主要用于实现进程间的互斥与同步,而不是用于缓存进程间通信的数据信号量维护⼀个整数值,通常称为计数器。进程可以执⾏两种基本操作来操作信号量:

  • P(Wait)操作:这个操作会把信号量减去 1,相减后如果信号量 < 0,则表明资源已被占⽤,进程需阻塞等待;相减后如果信号量 >= 0,则表明还有资源可使⽤,进程可正常继续执⾏。
  • V(Signal)操作:这个操作会把信号量加上 1,相加后如果信号量 <= 0,则表明当前有阻塞中的进程,于是会将该进程唤醒运行;相加后如果信号量 > 0,则表明当前没有阻塞中的进程;

        P 操作是用在进入共享资源之前,V 操作是用在离开共享资源之后,这两个操作是必须成对出现的。

5. 共享内存

        共享内存的机制,就是拿出一块虚拟地址空间来,映射到相同的物理内存中。这使得多个进程可以访问同一块内存空间,通过对共享空间进行写/读操作实现进程之间的信息交换,是最快的可用IPC模式。

6. 信号

        信号事件的来源主要有硬件来源(如键盘 Cltr+C )和软件来源(如 kill 命令)。 信号是进程间通信机制中唯⼀的异步通信机制它可以在⼀个进程中通知另⼀个进程发生了某种事件从而实现进程通信。

7. 内存映射

        内存映射允许任何多个进程间通信,每一个使用该机制的进程通过把一个共享的文件映射到自己的进程地址空间实现通信。

8. Socket

        Socket 通信是⼀种网络编程中常见的通信方式,不仅可以跨网络与不同主机的进程间通信,还可以在同主机上进程间通信。

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

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

相关文章

[Spring Cloud] gateway全局异常捕捉统一返回值

文章目录 处理转发失败的情况全局参数同一返回格式操作消息对象AjaxResult返回值状态描述对象AjaxStatus返回值枚举接口层StatusCode 全局异常处理器自定义通用异常定一个自定义异常覆盖默认的异常处理自定义异常处理工具 在上一篇章时我们有了一个简单的gateway网关 [Spring C…

vue3中实现文本显示省略号和tooltips提示框

前言 在 B 端业务中&#xff0c;我们经常会遇到文本内容超出容器区域需显示省略号的需求。当鼠标移入文本时&#xff0c;会出现 Tooltip 显示完整内容。最近&#xff0c;我也遇到了这样的场景。为了提高业务通用性&#xff0c;我已将其封装为组件、Hook 和指令等形式供使用。 …

从0到1实现RPC | 04 负载均衡和静态注册中心

一、Router的定义 Router路由用于预筛选&#xff0c;Dubbo有这样的设计&#xff0c;SpringCloud没有。 二、LoadBanlancer定义 负载均衡器&#xff1a;默认取第一个 当前支持随机和轮询两种负载均衡器。 随机&#xff1a;从所有provider中随机选择一个。 轮询&#xff1a;每…

如何选择优质的静动态住宅代理IP提供商

在从事跨境电商业务时选择优质的静动态住宅代理IP提供商是一个涉及多个方面考量的过程。在进行选择时&#xff0c;需要综合考虑多种因素&#xff0c;以确保选择的提供商能够满足您的需求并提供稳定、可靠的服务。以下是一些建议&#xff0c;以帮助您进行选择&#xff1a; 第一…

js中使let关键字报错,改用var关键字解决

js中使let关键字报错,改用var关键字解决 项目场景&#xff1a;问题描述原因分析&#xff1a;解决方案&#xff1a;总结 项目场景&#xff1a; 使用 let 关键字报错&#xff0c;报错信息为&#xff1a; Uncaught ReferenceError: maxNum is not defined at getMaxNum (4-3.htm…

独角数卡对接支付卡跳转问题解决方法

问题描述 最近在用独角数卡搭建了一个测试版的商店程序&#xff0c;结果却在对接易支付的过程中出现了卡跳转的问题&#xff0c;支付能正常完成&#xff0c;订单发卡也正常&#xff0c;就是会卡在这个弹窗页面无法正常跳转至订单查看页面。 本来这种BUG无关痛痒&#xff0c;但…

蓝桥杯(5):python动态规划DF[2:背包问题]

1 0-1背包介绍【每件物品只能拿1件或者不拿】 1.1 简介 贪心是不可以的&#xff01;&#xff01;&#xff01; 1.2 状态 及状态转移 转移解释&#xff1a;要么不选 则上一个直接转移过来【dp[i-1][j]】&#xff0c;要么是选这个之后体积为j 则上一个对应的就是【dp[i-1][j-wi]…

阿里云邮件服务器多少钱?邮件服务器租用费用

阿里云邮件服务器租用费用&#xff0c;2核2G3M带宽99元一年、2核4G4M服务器199元一年&#xff0c;不只是云服务器ECS&#xff0c;还可以选择轻量应用服务器。 0、在阿里云CLUB中心领取 aliyun.club 当前最新的优惠券和服务器报价单 1、阿里云服务器ECS经济型e实例&#xff0c;2…

leetcode代码记录(买卖股票的最佳时机

目录 1. 题目&#xff1a;2. 我的代码&#xff1a;小结&#xff1a; 1. 题目&#xff1a; 给定一个数组 prices &#xff0c;它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票&#xff0c;并选择在 未来的某一个不同的日子 卖出该股…

导入项目运行后,报错java: Cannot find JDK ‘XX‘ for module ‘XX‘

解决方案&#xff1a; 1、删除.idea和.iml文件 2、右击此module&#xff0c;点击 Open Module Settings 在 Module SDK 中选择所安装的java版本后&#xff0c;点击右下角 Apply 3、再运行试试吧&#xff0c;成功&#xff01;

Linux存储的基本管理

实验环境&#xff1a; 系统里添加两块硬盘 ##1.设备识别## 设备接入系统后都是以文件的形式存在 设备文件名称&#xff1a; SATA/SAS/USB /dev/sda,/dev/sdb ##s SATA, dDISK a第几块 IDE /dev/hd0,/dev/hd1 ##h hard VIRTIO-BLOCK /de…

金陵科技学院软件工程学院软件工程专业

感兴趣的小伙伴可以私信我哦~~ 是笔者写的各种高质量作业和实验哦~~ 感兴趣的小伙伴可以私信我哦~~ 是笔者写的各种高质量作业和实验哦~~ 感兴趣的小伙伴可以私信我哦~~ 是笔者写的各种高质量作业和实验哦~~ 感兴趣的小伙伴可以私信我哦~~ 是笔者写的各种高质量作业和实验哦…

大数据基础设施搭建 - Spark

文章目录 一、解压压缩包二、修改配置文件conf/spark-env.sh三、测试提交Spark任务四、Spark on Hive配置4.1 创建hive-site.xml&#xff08;spark/conf目录&#xff09;4.2 查看hive的hive-site.xml配置与3.1配置的是否一致4.3 测试SparkSQL4.3.1 启动SparkSQL客户端&#xff…

Qtxlsx第三方库的安装和使用

本文仅作为一个记录&#xff0c;安装QtXlsx方便操作excel&#xff0c;主要参考了这篇博文&#xff1a;https://blog.csdn.net/u014779536/article/details/111769792 1&#xff0c;下载安装Perl脚本Strawberry Perl for Windows&#xff0c;默认安装strawberry-perl-5.30.0.1-…

AcWing1402.星空之夜

【题目链接】1402. 星空之夜 - AcWing题库 夜空深处&#xff0c;闪亮的星星以星群的形式出现在人们眼中&#xff0c;形态万千。 一个星群是指一组非空的在水平&#xff0c;垂直或对角线方向相邻的星星的集合。 一个星群不能是一个更大星群的一部分。 星群可能是相似的。 如…

力扣面试150 加油站 贪心 找规律

Problem: 134. 加油站 复杂度 ⏰ 时间复杂度: O ( n ) O(n) O(n) &#x1f30e; 空间复杂度: O ( 1 ) O(1) O(1) &#x1f496; 贪心 &#x1f468;‍&#x1f3eb; 参考题解 class Solution {public int canCompleteCircuit(int[] gas, int[] cost) {int n gas.length…

【美团笔试题汇总】2023-08-26-美团春秋招笔试题-三语言题解(CPP/Python/Java)

&#x1f36d; 大家好这里是KK爱Coding &#xff0c;一枚热爱算法的程序员 ✨ 本系列打算持续跟新小米近期的春秋招笔试题汇总&#xff5e; &#x1f4bb; ACM银牌&#x1f948;| 多次AK大厂笔试 &#xff5c; 编程一对一辅导 &#x1f44f; 感谢大家的订阅➕ 和 喜欢&#x1f…

喜讯 ChatGPT 3.5 免登录|免注册就可以使用了

https://chat.openai.com/ 直接访问openai 官网直接使用&#xff0c;当然还是要魔法的&#xff0c;不用再去用别人二次开发的&#xff0c;还有次数限制&#xff0c;还有开会员&#x1f605;才能用的。&#x1f600;试用啦一下&#xff0c;基本秒回答&#xff0c;能力也是在线的…

【系统架构师】-系统可靠性分析与设计

1、可靠性与可用性区别 1、系统可靠性&#xff1a;系统在规定时间内及规定的环境下&#xff0c;完成规定功能的能力&#xff0c;即系统无故障运行的概率 2、系统可用性&#xff1a;在某个给定时间点上系统能够按照需求执行的概率。 可靠性分为软件、硬件可靠性 2、可靠性指标…

【美团笔试题汇总】2023-09-02-美团春秋招笔试题-三语言题解(CPP/Python/Java)

&#x1f36d; 大家好这里是KK爱Coding &#xff0c;一枚热爱算法的程序员 ✨ 本系列打算持续跟新美团近期的春秋招笔试题汇总&#xff5e; &#x1f4bb; ACM银牌&#x1f948;| 多次AK大厂笔试 &#xff5c; 编程一对一辅导 &#x1f44f; 感谢大家的订阅➕ 和 喜欢&#x1f…