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

wgx48brx  于 11个月前  发布在  Unix
关注(0)|答案(1)|浏览(131)

我正在学习操作系统,并试图深入了解程序如何工作的基本原理。
我有一个简单的C++程序
当我查看Linux的基本架构时,它总是显示用户空间和内核空间,操作系统通过设备驱动程序访问硬件。
所以我认为我创建的任何程序都需要访问操作系统的每一条指令,如果我没有搞错的话,特别是当它在用户空间运行的时候?
但后来我在另一个网站上看到了这个答案:https://cseducators.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;
}

字符串
这些指令中的每一个不是都需要隐式或显式的系统调用吗?
我读了相关的问题,
程序运行得很好,但我想了解系统调用

mspsb9vt

mspsb9vt1#

内核为您分配虚拟内存块(页)(通过系统调用)。一旦内核给了你那个页面,你就可以在那个页面中自由地执行任何你喜欢的操作。数学操作只需要访问内存和寄存器就可以执行,内核不涉及用户空间代码,而它只是做这些类型的操作。与内存一样,程序可以自由使用任何它需要的指令(只要它停留在分配的内存页面内)。
在某些时候,内核会希望另一个进程运行,当它这样做时,它会中断该进程,保存它的寄存器并恢复另一个进程。这对用户空间代码来说基本上是透明的,当内核恢复其寄存器并恢复执行时,它的执行将在它停止的地方继续。
只有在访问计算机中的其他硬件(如gpu,网卡,存储器等)时才需要系统调用。

相关问题