“深入解析操作系统核心:进程管理与并发艺术“

操作系统中最核心的概念是进程:这是对正在运行程序的ー个抽象

并行 并发

“在任何多道程序设计系统中,CPU由一个进程快速切换至另ー个进程,使每个进程各运行几十或几百毫秒。严格地说,在某ー个瞬间,CPU只能运行ー个进程。但在1秒钟内,它可能运行多个进程,这样就产生并行的错觉。有时人们所说的伪并行就是指这种情形,以此来区分多处理器系统(该系统有两个或多个CPU共享同一个物理内存)的真正硬件并行”

在这里插入图片描述

  1. 并行(Parallelism)与并发(Concurrency):
    • 并行指的是多个任务在同一时刻同时执行。这通常发生在多核或多处理器系统中,不同的处理器可以同时执行不同的任务。
    • 并发则是指多个任务在一段时间内交替进行,从宏观上看好像同时发生,但实际上同一时刻只有一个任务在执行。在单核系统中,通过快速的任务切换实现这种效果。
  2. 时间分片(Time Slicing):在单处理器系统中,操作系统通过将CPU时间分配给不同的进程,让每个进程运行一小段时间(时间片),然后迅速切换到下一个进程。由于切换速度很快,给人的感觉是所有进程都在同时运行。
  3. 抢占式调度(Preemptive Scheduling):操作系统可以根据需要中断当前正在执行的进程,转而执行另一个进程。这种机制进一步增强了并发执行的效率和响应性,但每个进程仍然是交替执行的。

因此,当说“进程本质上是不可能做到真正的并行,只是切换的速度极快以至于产生并行的假象”时,这句话主要针对的是在单处理器环境下的情况,或者虽然在多核处理器环境下,但考虑到某些限制(如进程绑定到特定核心,或因资源竞争导致的阻塞)使得并非所有进程都能真正并行执行。在多核系统中,虽然存在真正的并行执行能力,但单个进程内的线程或其他任务之间仍然可能通过上述机制实现并发执行,而非所有部分都并行运行。

在进程模型中,计算机上所有可运行的软件,通常也包括操作系统,被组织成若干顺序进程(sequentialprocess)»简称进程(process)oー个进程就是ー个正在执行程序的实例,包括程序计数器、寄存器和变量的当前值。

进程和程序

进程和程序间的区别是很微妙的,但非常重要。用ー个比喻可以更容易理解这一点。想象一位有ー手好厨艺的计算机科学家正在为他的女儿烘制生日蛋糕。他有做生日蛋糕的食谱,厨房里有所需的原料:面粉、鸡蛋、糖、香草汁等。在这个比喻中,做蛋糕的食谱就是程序(即用适当形式描述的算法),计算机科学家就是处理器(CPU),而做蛋糕的各种原料就是输入数据。进程就是厨师阅读食谱、取来各种原料以及烘制蛋糕等ー系列动作的总和

一个进程是某种类型的一个活动,它有程序,输入,输出以及状态。

守护进程

守护进程(Daemon Process)是在类Unix操作系统(如Linux、macOS等)中的一种后台运行的系统程序,它独立于用户终端并且周期性地执行某种任务或等待处理某些发生的事件。守护进程不与任何终端关联,通常是在系统启动时启动,并一直运行直到系统关闭。它们常用于执行如下类型的任务:

  1. 系统服务:如打印队列管理、邮件服务、网页服务器、数据库服务等,这些服务需要长期运行并随时响应系统或网络请求。
  2. 任务调度:执行定时任务,如cron守护进程,它可以按照预定的时间安排运行用户或系统的脚本和程序。
  3. 日志记录:监控系统活动并记录日志,例如syslog守护进程负责收集并记录系统日志。
  4. 资源监控:监控系统资源使用情况,如检测磁盘空间使用、内存占用等,并在必要时采取行动或发出警告。
  5. 作业管理:管理用户提交的后台作业,确保它们在系统中正确排队和执行。

守护进程的特点包括:

  • 无终端:它们在后台运行,没有控制终端,也不与任何用户交互。
  • 长期运行:设计为长时间甚至无限期运行,除非被专门停止或系统重启。
  • 后台启动:通常由系统在启动时自动启动,也可以由管理员手动启动。
  • 低交互性:除了通过特定接口(如网络端口、配置文件或信号)接收指令外,它们不直接与用户交流。

创建守护进程通常涉及以下步骤:

  1. fork:进程首先通过fork()系统调用创建一个子进程,然后父进程退出,这样子进程就变成了孤儿进程,由init进程接管。
  2. setsid:子进程调用setsid()成为新会话的首进程,与原来的控制终端分离。
  3. 重定向标准输入输出:通常将标准输入、输出和错误重定向到 /dev/null 或特定的日志文件,避免占用终端或产生不必要的输出。
  4. umask设置:调整文件权限掩码,确保守护进程创建的文件具有合适的权限。
  5. 工作目录更改:通常将工作目录更改为根目录 /,避免因当前工作目录被卸载而引发的问题。

通过这些步骤,进程就可以作为守护进程在后台稳定运行,默默地执行其预定任务。

进程的创建

创建条件

1)系统初始化。

2)正在运行的程序执行了创建进程的系统调用。

3)用户请求创建一个新进程。

4)一个批处理作业的初始化。

UNIX系统中,通过fork系统调用来创建新进程,生成一个与父进程相同的副本。之后,子进程常通过exec系列系统调用来替换自身内存映像并执行新程序,这允许在进程创建与程序执行之间进行设置调整,如重定向I/O。

相比之下,Windows系统使用CreateProcess函数一步完成进程创建与程序加载,该函数具备更多参数以细致控制进程属性、安全、文件继承、优先级及窗口配置等,体现了更为直接和全面的进程管理能力。此外,Windows的Win32
API提供了大约100个其他函数来辅助进程管理、同步及关联操作。

进程的终止

1)正常退出(自愿的)。

2)出错退出(自愿的)。

3)严重错误(非自愿)。

4)被其他进程杀死(非自愿)。

进程的层次结构

某些系统中,当进程创建了另ー个进程后,父进程和子进程就以某种形式继续保持关联。子进程自身可以创建更多的进程,组成一个进程的层次结构

进程只有一个父进程(但是可以有零个、ー个、两个或多个子进程)

initi()

在UNIX和Windows中,进程创建之后,父进程和子进程有各自不同的地址空间。如果其中某个进程在其地址空间中修改了一个字,这个修改对其他进程而言是不可见的e在UNIX中,子进程的初始地址空间是父进程的ー个副本,但是这里涉及两个不同的地址空间,不可写的内存区是共享的。某些UNIX的实现使程序正文在两者间共享,因为它不能被修改。或者,子进程共享父进程的所有内存,但这种情况下内存通过写时复制(copy-on-write)共享,这意味着一旦两者之一想要修改部分内存,则这块内存首先被明确地复制,以确保修改发生在私有内存区域。再次强调,可写的内存是不可以共享的。但是,对于ー个新创建的进程而言,确实有可能共享其创建者的其他资源,诸如打开的文件等。在Windows中,从ー开始父进程的地址空间和子进程的地址空间就是不同的。

进程的状态

1)运行态(该时刻进程实际占用CPU)。

2)就绪态(可运行,但因为其他进程正在运行而暂时停止)。

3)阻塞态(除非某种外部事件发生,否则进程不能运行

在这里插入图片描述

进程的实现

为了实现进程模型,操作系统维护着ー张表格(ー个结构数组),即进程表(processible)。毎个进程占用一个进程表项。(有些作者称这些表项为进程控制块°)该表项包含了进程状态的重要信息,包括程序计数器、堆栈指针、内存分配状况、所打开文件的状态、账号和调度信息,以及其他在进程由运行态转换到就绪态或阻塞态时必须保存的信息,从而保证该进程随后能再次启动,就像从未被中断过ー样

在这里插入图片描述

一个进程在执行过程中可能被中断数千次,但关键的是每次中断后,被中断的进程都返回到与中断发生前完全相同的状态。

多道处理模型

这段内容主要讨论的是多道程序设计(Multiprogramming)如何通过增加并发运行的进程数量来提升CPU利用率,并且探讨了如何从概率角度来理解CPU利用效率与I/O等待时间的关系。下面我将尽量用通俗的语言来解释这段内容。

多道程序设计的目的

多道程序设计是一种操作系统技术,它允许计算机同时加载多个程序到内存中,并且在它们之间切换执行,即便这些程序没有全部准备好运行(比如有些在等待输入输出操作)。这样做主要是为了提高CPU的使用效率,因为在任何给定时刻,如果有进程因为等待I/O(比如从硬盘读取数据或用户输入)而暂停,CPU就可以转而去执行其他准备好的进程,从而减少CPU空闲的时间。

CPU利用率的决定因素

CPU利用率指的是CPU正在执行任务的时间占总时间的比例。如果一个进程大部分时间都在等待I/O,那么CPU就会有很多空闲时间。这里引入了一个比例P,表示一个进程等待I/O的时间占其在内存中总时间的比例。如果P是80%,意味着一个进程有80%的时间在等待I/O,只有20%的时间在真正计算。

道数(Degree of Multiprogramming)的影响

“道数”指的是同时在内存中的进程数量。随着道数n的增加,理论上CPU空闲的可能性会降低,因为更有可能在某个进程等待I/O时,有其他进程处于就绪状态,可以立即使用CPU。但实际情况要复杂一些,因为所有进程同时等待I/O的概率(记作p^n)也会上升,这会降低CPU的利用率。

简化的模型与实际情况

文章提到了一个简化的模型来估算CPU利用率,即CPU利用率 = 1 - P^n。这个公式假设了所有进程是独立的,且CPU可以瞬间从一个进程切换到另一个。但实际上,由于单CPU环境下同一时间只能执行一个进程,因此这个模型忽略了CPU调度的延迟和开销,以及进程之间因争夺资源(如CPU时间片)而产生的潜在等待。

实例分析

举例说明,假设每个用户程序需要2GB内存,操作系统占用2GB,共8GB内存。在这种配置下,最多能同时运行3个用户程序。如果P=80%,即每个进程80%的时间在等待I/O,那么CPU利用率大约是49%。增加内存至16GB,可以支持7个程序同时在内存中,此时CPU利用率提高到约79%。进一步增加内存到24GB,CPU利用率提升至约91%。

结论

这个模型说明,起初增加内存可以显著提升CPU利用率和系统吞吐量,因为从几乎无法有效利用CPU(3个进程时)转变为较为高效的利用(7个进程时)。但随着内存的持续增加,边际效益递减,即每增加相同的内存量,对CPU利用率的提升效果越来越小。因此,第一个8GB内存的升级是非常划算的,因为它带来了巨大提升;而之后的内存增加,虽然也能提高性能,但性价比逐渐降低。这就是为什么说“第一次增加内存是划算的投资,而第二个则不然”。

为了更好地理解这个公式 CPU 利用率 = 1 - P^n 的推导过程,我们可以从概率的角度逐步分析,这里我们将利用互斥事件的概率计算原理。请注意,这里的推导基于一定的简化假设,比如进程之间的等待是完全独立的,实际上的系统行为可能更为复杂。

基础概念

  • P:单个进程在单位时间内处于I/O等待状态的概率。
  • 1-P:单个进程在单位时间内处于CPU计算状态的概率。
  • n:同时在内存中的进程数量。
  • P^n:所有n个进程同时处于I/O等待状态的概率。
  • CPU利用率:CPU实际执行任务的时间占比。

推导步骤

  1. 单个进程的行为分析:
    • 一个进程在任何给定时间点要么在执行CPU计算,要么在等待I/O。如果一个进程在单位时间内I/O等待的概率是P,那么进行CPU计算的概率就是1-P。
  2. 多个进程同时等待I/O的概率:
    • 当有n个独立的进程时,所有这些进程同时处于I/O等待状态的概率是各个进程独立事件同时发生的概率乘积,即P^n。这是因为每个进程是否等待I/O是独立的,第一个进程等待的概率是P,第二个进程也是P,以此类推,n个进程同时满足这个条件的概率就是P的n次方。
  3. CPU空闲的概率:
    • 如果所有n个进程都恰好在等待I/O,那么CPU在这段时间内是空闲的。因此,CPU空闲的概率就是所有进程同时处于I/O等待状态的概率,即P^n。
  4. CPU忙碌的概率与利用率:
    • 既然CPU空闲的概率是P^n,那么CPU忙碌的概率就是1减去空闲的概率,即1 - P^n。因为CPU利用率定义为CPU处于工作状态的时间比例,所以CPU利用率 = 1 - P^n。

总结

通过上述分析,我们可以看到,公式CPU利用率 = 1 - P^n是从概率论的角度出发,考虑了所有n个进程同时处于I/O等待状态的概率,并据此反推出CPU实际被利用的概率,即利用率。这个公式体现了多道程序设计中通过增加并发进程数量来降低所有进程同时等待I/O概率,从而提升CPU使用效率的核心思想。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【RAG】FoRAG:面向网络增强型长形式问答的事实性优化RAG

一、解决问题 在基于网络的长形式问答(Web-enhanced Long-form Question Answering, LFQA)任务中,现有RAG在生成答案时存在的问题: 事实性不足:研究表明,现有系统生成的答案中只有大约一半的陈述能够完全得…

SpringBoot学习04-[定制SpringMVC]

定制SpringMVC 定制SpringMvc的自动配置定制springmvc-configurePathMatch配置定制SpringMVC-拦截器Interceptor定制SpringMVC-CORS配置全局cors配置针对某个方法加跨域解决 WebMvcConfigurer原理定制SpringMVC-JSONJSON开发jackson的使用定制化json序列化和反序列化 JSON国际化…

Kafka面试必备:深度解析Replica副本的作用与机制

我是小米,一个喜欢分享技术的29岁程序员。如果你喜欢我的文章,欢迎关注我的微信公众号“软件求生”,获取更多技术干货! Hey大家好!我是小米,一个超级喜欢分享技术干货的大哥哥!今天咱们来聊聊阿里巴巴面试题中的一个热门话题:Kafka中的Replica副本作用。这可是个既基础…

供应商关系管理(SRM)中的供应商绩效评估

供应商绩效评估是供应商关系管理(SRM)的核心组成部分,它涉及到对供应商在合作过程中的表现进行全面的分析和评价。一个有效的供应商绩效评估系统不仅可以帮助企业识别和解决供应链中的潜在问题,还可以促进供应商的持续改进和优化&…

npm创建一个空的vue3项目的方法或者pnpm创建vue3项目

1、前提我们已经安装了npm,或者pnpm 2、我们用npm来创建vue3项目 快速上手 | Vue.js 官网地址 这里我安装是的 node v18.20.3 以下是安装过程 : npm create vuelatest 根据自己的需要进行创建即可。 3、我们用pnpm来创建vite vue3项目 pnpm create …

【算法专题--栈】栈的压入、弹出序列 -- 高频面试题(图文详解,小白一看就懂!!)

目录 一、前言 二、题目描述 三、解题方法 💧栈模拟法💧-- 双指针 ⭐ 解题思路 ⭐ 案例图解 四、总结与提炼 五、共勉 一、前言 栈的压入、弹出序列 这道题,可以说是--栈专题--,最经典的一道题,也是在…

LinkedIn被封原因和解封方法

对于初识领英和对领英生态规则不熟悉的人来说,很容易造成领英账号被封号(被限制登录)的情况,那么如何才能避免和解决领英帐号被封号(被限制登录)的难题呢? 领英帐号被封号或被限制登录主要会有两类情况。 首先要搞清楚, Linkedi…

“ONLYOFFICE 8.1版本评测:功能更强大,用户体验更佳”

最新版本的在线编辑器已经发布 ONLYOFFICE在线编辑器的最新版本8.1已经发布,整个套件带来了30多个新功能和432个bug修复。这个强大的文档编辑器支持处理文本文档、电子表格、演示文稿、可填写的表单和PDF,并允许多人在线协作,同时支持AI集成…

IP白名单及其作用解析

在网络安全领域,IP白名单是一项至关重要的策略,它允许特定的IP地址或地址范围访问网络资源,从而确保只有受信任的终端能够连接。下面,我们将深入探讨IP白名单的定义、作用以及实施时的关键考虑因素。 一、IP白名单的定义 IP白名单…

利用python爬取上证指数股吧评论并保存到mongodb数据库

大家好,我是带我去滑雪! 东方财富网是中国领先的金融服务网站之一,以提供全面的金融市场数据、资讯和交易工具而闻名。其受欢迎的“股吧”论坛特别适合爬取股票评论,东方财富网的股吧聚集了大量投资者和金融分析师,他们…

GOROOT GOPATH GOPROXY GO111MODULE

GOROOT GOROOT代表Go的安装目录。可执行程序go(或go.exe)和gofmt(或gofmt.exe)位于 GOROOT/bin目录中。 配置GOROOT环境变量,其值为Go的安装目录;然后在环境变量PATH中添加GOROOT/bin路径。 注意:GOROOT变量只是代表了安装目录,不…

DiskGeniusV5.6.0.1565发布!

DiskGenius是一款功能强大的磁盘管理和数据恢复工具,V5.6.0.1565上线。新版本变化比较大,增加新的功能,修正已经问题,值得试一下。提醒大家,磁盘管理软件涉及数据安全,请始终使用最新版本! 下面…

Linux开发讲课18--- “>file 2>1“ 和 “2>1 >file“ 的区别

在 Bash 脚本和命令行操作中,输出重定向是一项基本且强大的功能。它允许用户控制命令的输出流,将数据从一个地方转移到另一个地方,实现更加灵活和高效的工作流程。本文旨在记录 Bash 中几种常见的输出重定向方法,包括: -. > fi…

计算机Java项目|基于SpringBoot的新闻稿件管理系统

作者主页:编程指南针 作者简介:Java领域优质创作者、CSDN博客专家 、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、腾讯课堂常驻讲师 主要内容:Java项目、Python项目、前端项目、人工智能与大数据、简…

密码学:用随机函数隐藏指纹

英文中e的出现频率高,加密后,频率最高的那个符号代表e。这是历史上的一次真实案例。这些符号的概率,叫做“指纹”。 把e加密成2个符号,用随机函数选择,例如70%概率下选择符号1,30%选择符号2。解密时&#…

启智畅想:AI集装箱箱号识别系统,解决方案提供商

AI集装箱箱号识别系统 当前,智能卡口管理行业正处于快速发展的阶段。随着物联网、大数据、人工智能等技术的不断进步,智能卡口管理系统已经能够实现对集装箱运输的全程跟踪、监控和管理,大大提高了管理效率和安全性。然而,市场上现有的智能卡口管理系统仍然存在一些痛点问题,如…

Spring容器的启动过程及留给开发者的可拓展点

一、Spring容器启动经过了哪些过程? 1、首先需要加载读取到应用环境中的配置,比如要加载的bean的class的包路径等信息。 【读取配置】 2、再就需要找到哪些类是需要spring进行类实例创建并管理的,扫描到具体的Class及Class元信息上的一些注…

【漏洞复现】电信网关配置管理系统——命令执行

声明:本文档或演示材料仅供教育和教学目的使用,任何个人或组织使用本文档中的信息进行非法活动,均与本文档的作者或发布者无关。 文章目录 漏洞描述漏洞复现测试工具 漏洞描述 电信网关配置管理系统是一个用于管理和配置电信网关设备的软件系…

为什么Modbus链接/从机不通?From 摩尔信使MThings

为了回应用户平日里关于摩尔信使(MThings)使用过程中最常见的问题,包括“网络链接连不上”、“为什么不能增加串口”和“为什么从机不通”,我们在此统一介绍解决方法。 1、具备哪些通信能力 支持串口和网络两种通信方式。 需要…

开箱即用的fastposter海报生成器

什么是 fastposter ? fastposter 海报生成器是一款快速开发海报的工具。只需上传一张背景图,在对应的位置放上组件(文字、图片、二维码、头像)即可生成海报。 点击代码直接生成各种语言 SDK 的调用代码,方便快速开发。 软件特性&…