每个系统调用是不是创建一个进程?

Posted

技术标签:

【中文标题】每个系统调用是不是创建一个进程?【英文标题】:Does each system call create a process?每个系统调用是否创建一个进程? 【发布时间】:2022-01-02 15:53:04 【问题描述】:

每个系统调用都会创建一个进程吗? 程序和操作系统的所有功能(例如中断)是否都以进程的形式执行? 感觉这么多的进程控制块,大量的进程调度浪费了很多资源。 或者,系统调用的内核指令被视为当前的一部分 过程。

【问题讨论】:

【参考方案1】:

简短的回答是 - 不完全是。但我们必须就我们所谓的“过程”达成一致。进程更像是一个抽象概念,它封装了多条指令,每条指令都按顺序执行。

那么让我们从第一个问题开始吧。

每个系统调用都创建一个进程吗?

没有。每个系统调用都是当前运行进程的产物,它告诉操作系统——“嘿,操作系统,我需要你帮我打开这个文件,或者在这里阅读这些位”。在这种情况下,进程是一袋顺序执行的指令,有些是系统调用,有些不是。

那么我们有。

程序和操作系统的所有功能(例如中断)是否都以进程的形式执行?

好吧,这又回到了第一个问题。我们不认为系统调用(告诉操作系统做某事并在非常严格的条件下工作的操作)是一个单独的过程。我们不会看到系统调用执行有其 OWN 进程 ID (pid)。

那么我们有。

感觉这么多的进程控制块,大量的进程调度浪费了很多资源。

好吧,我想说,不要低估您的操作系统和硬件的功能。具有现代操作系统的现代处理器非常非常快,并且能够在几秒钟内计算数十亿条指令。我们真的无法想象这有多快。我不会担心这种微观层面的优化。


好的,但让我们深入研究一下。究竟什么是过程?

非正式地,进程是正在执行的程序。进程当前活动的状态由一个称为程序计数器的值和处理器寄存器的内容表示。进程的内存布局通常分为多个部分。

这些部分包括:

    文本部分。 数据部分。 堆部分。 堆栈部分。

当一个进程执行时,它会改变状态。流程的状态部分由该流程的当前活动定义。正如您已经提到的,每个进程在操作系统中由进程控制块 (PCB) 表示。

所以我们可以看到我们将一个进程视为一个非常复杂的结构,它更多的是占用 CPU 时间。它有状态、存储、计时等。

但是因为你对系统调用感兴趣,那么它们是什么?

对我们来说,系统调用为操作系统提供的服务提供了一个接口。它们是我们告诉操作系统为我们做事的方式。我们知道系统每秒执行数千次系统调用。

【讨论】:

【参考方案2】:

不,他们没有。 操作系统使用软件中断在同一进程内执行系统调用操作。 你可以把它们想象成一个函数调用,但它们是用内核权限执行的。

【讨论】:

以上是关于每个系统调用是不是创建一个进程?的主要内容,如果未能解决你的问题,请参考以下文章

Linux系统调用创建进程和线程

性能测试之进程调用

文件描述符表和系统调用

一个线程执行多个进程

每个线程都有自己的堆栈吗?

Linux 内核进程管理 ( 系统调用简介 | 进程相关系统调用源码 )