操作系统最核心的概念-进程(上)

本文详细解析进程的重要性,探讨了进程模型、进程与程序的区别,以及进程的创建方式和父子进程的交互。通过实例说明了操作系统如何调度并发进程,以及fork系统调用在Unix中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

为了让大家了解、掌握进程的相关知识,这个不管时面试或者平常工作中都需要接触的重头戏。洪爵以问答的方式把常见的、易错的、大家想知道的问题做个收集 + 解答。

Q1:进程的重要性

操作系统中最核心的概念是进程。进程是对正在运行程序的一个抽象,操作系统其他的所有内容都是围绕着进程的概念展开的。

Q2:为什么我能在同一时间操作多个应用(进程)?

大家可能无意识的发现,现代的计算机经常能在同一个时间里做很多事情。我们举一个例子,假设服务器可使用的CPU只有一个,当客户端发起请求,需要读取某个数据时,服务器接收了请求,我们这里假设服务器没有做任何的缓存,所有数据都在磁盘中。从CPU的角度来说,服务器进程启动了一个磁盘的请求,以获取相应的数据,我们知道CPU的运算速度远远超过了磁盘的读写速度,因此在磁盘处理请求的过程中,CPU就会空闲下来去处理其他的客户端请求。

所以说,CPU由一个进程快速切换至另一个进程,使得每一个进程各运行几十或者几百毫秒。严格的意义上讲,在某一个瞬间,某一个CPU上只能运行一个进程,但在1s内,它是可以运行多个进程的,这就给我们产生了并行的错觉

Think about it, 你在使用电脑的过程中,数十毫秒的级别里,你都做了什么,是否在这段时间操作了多个应用(进程)?它们的响应速度是怎么样的?

在足够长的时间里,所有的进程都运行了,但在任何一个给定的瞬间只有一个进程真正的在运行。

Q3:进程的模型

一个进程就是一个正在执行的实例,包括程序计数器寄存器变量的当前值。每个进程都拥有自己的控制流程,即自己的逻辑程序计数器,每个程序都是独立运行的。但事实上,只有一个物理程序计数器,每个程序在运行时(占用CPU时),它的逻辑程序计数器会被装入实际的物理程序计数器中,当该程序运行结束时,物理程序计数器被保存在该进程的逻辑程序计数器中

Q4:进程和程序的区别

进程和程序间的区别很多人搞不清楚,洪爵在这里打一个比喻。现在有一个快乐餐厅,里面的厨师非常厉害,只要顾客提供食谱,他就能做出任何一道食谱上的菜,餐厅里的食材都是齐全的。

这个时候呢,有顾客进来了,拿着一个菜谱(程序,即按照某语法描述的代码),给了厨师(CPU),这个时候,厨师(CPU)开始按照菜谱(程序)的要求,开始准备材料(输入),按照菜谱(程序)的流程开始制作,最后把菜端上餐桌(输出)。那进程是什么呢,进程就是整个阅读菜谱、准备材料、按照菜谱做动作等一系列流程的综合。

我们继续例子,当厨师(CPU)正在按照菜谱做菜时,突然老板临时有更紧急的事情要找厨师,那么厨师只能在菜谱上打个记号,表示我当前进行到了这一步,然后就去找老板了,当处理完老板的事情后,厨师(CPU)接着回来做菜,因为之前在菜谱(程序)打了记号,所以厨师(CPU)很快就接着下个步骤继续进行了。

这里的思想是,一个进程是某种类型的一个活动,它有程序、输入、状态、输出。单个处理器可以被多个进程共享,它使用某种调度算法来决定何时停止一个进程的工作,转而为另一个进程提供服务。

这里值得注意的是,如果一个程序运行了2遍,那么是算作两个进程。

Q5:进程的创建

既然进程如此的重要,那么操作系统肯定有某种方式按需要去创建进程。

一共有4种主要事件导致进程的创建:

1、系统初始化

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

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

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

启动操作系统时,通常会创建若干进程,这些都是系统运行所需要的,这个比较好理解;除了启动阶段创建进程之外,进程也是可以创建新的进程,一个正在运行的进程发出系统调用,以便创建一个或多个新进程进行协助;在桌面,我们经常能看到很多应用程序的图标,双击过后就会启动该程序,这些动作都是会产生一个新的进程;最后一种创建进程方式则仅在大型机的批处理系统中应用,用户在系统或远程进行批处理作业的提交,操作系统认为有资源可运行作业时,则会创建一个新的进程,这个做了解即可。

Q6:父子进程的关系

在UNIX系统,只有一个系统调用可以创建新进程:fork。这个系统调用会创建一个与调用进程相同的副本。在调用了fork之后,这两个进程(父子进程)拥有相同的内存映像、同样的环境字符串和同样打开的文件

在UNIX和Windows系统中,进程创建后,父子进程各自有不同的地址空间(区别之前讲的内存映像,可以把映像理解为具体的某一块内存,而地址空间指的是指针)。如果某个进程在其地址空间中修改了一个字,这个修改对其他进程时不可见的。也就是说虽然子进程和父进程共享所有内存,但是一旦两者之一想要修改部分内存,则这块内存首先会被明确的复制,以确保修改发生在私有内存区域中,这种情况称为写时复制

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

KnightHONG

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值