计算机如何在不进行系统调用的情况下执行任何指令

问题描述 投票:0回答:1

我正在学习操作系统,并试图深入了解程序如何工作的基础知识。

我有一个简单的C++程序

当我查看Linux的基本架构时,它总是显示用户空间和内核空间,操作系统通过设备驱动程序访问硬件。

因此,如果我没有弄错的话,我创建的任何程序都需要访问操作系统的每条指令,特别是当它在用户空间中运行时?

但后来我在另一个网站上看到了这个答案: https://cseduators.stackexchange.com/a/3463/14110

其中提到纯粹计算的东西不会进行系统调用,但是它们如何访问CPU、RAM等?

我的基本理解告诉我,一切都应该进行系统调用,但现在我看到足够的信息,并非一切都是系统调用,那么基本算术或任何其他不是系统调用的指令如何工作?

我知道我不会涉及太多较低级别的细节。但简而言之,这是如何工作的 请问有人可以解释一下吗?

这是我根据我的想法创建的图表,请随时更正:

这是一个简单的 C++ 程序,它在内存中创建三个变量, 以两个数字作为输入, 将两个数字相加并将值放入第三个数字中,然后显示输出:

#include <iostream>
#include <stdlib.h>
using namespace std;

int main(int argc, char const *argv[])
{
    int x, y, z; // Create three variables and store them in memory, should make a system call
    printf("Enter first number: "); // Ask for User Input, I/O
    cin >> x; // I/O operation
    printf("Enter second number: ");
    cin >> y;
    z = x + y;
    printf("Total: %d \n", z);
    return 0;
}

这些指令不是都需要隐式或显式的系统调用吗?

我阅读了相关问题,

程序运行完美,但我想了解系统调用

c++ macos unix operating-system system-calls
1个回答
1
投票

内核为您分配虚拟内存块(页)(通过系统调用)。一旦内核为您提供了该页面,您就可以在该页面内自由执行您喜欢的任何操作。数学运算只需要访问内存和寄存器即可执行,内核在执行此类运算时不涉及用户空间代码。与内存一样,程序可以自由使用它需要的任何指令(只要它保留在分配的内存页内)。

在某些时候,内核会希望另一个进程运行,当它这样做时,它会中断该进程,保存其寄存器并恢复另一个进程。不过,这对于用户空间代码来说基本上是透明的,当内核恢复其寄存器并恢复执行时,它的执行将从中断处继续。

仅在访问计算机中的其他硬件(如 GPU、网卡、存储等)时才需要系统调用。

© www.soinside.com 2019 - 2024. All rights reserved.