尝试理解用户空间和内核空间之间的关系。 用户空间程序使用系统调用与内核交互。如果我有一个从文件中读取数据的程序。然后执行用户空间的二进制文件以及执行内核空间。我们是否有两个进程,一个在内核上执行,另一个在用户空间上执行,还是在用户和内核上运行的单个进程。
最佳答案
仅相同的过程。但基于该进程的操作,它运行在用户模式
和内核模式
。
现代处理器架构通常允许 CPU 以至少两种方式运行
不同的模式:用户模式
和内核模式
(有时也称为supervisor
模式
)。
硬件指令允许从一种模式切换到另一种模式。相应地,虚拟内存区域可以被标记为用户空间
或内核空间
的一部分。当运行在用户模式
时,CPU只能访问标记为用户空间
的内存;尝试访问内核空间
中的内存会导致硬件异常。当运行在内核模式
时,CPU可以访问用户和内核内存空间。
某些操作只能在处理器在内核模式
下运行时执行。示例包括执行暂停指令来停止系统、访问内存管理硬件以及启动设备 I/O 操作。通过利用这种硬件设计将操作系统放置在内核空间中,操作系统实现者可以确保用户进程无法访问内核的指令和数据结构,或者执行对内核操作产生不利影响的操作。系统。
内核模式:
所有内核程序执行的模式(不同的驱动程序)。它可以访问所有资源和底层硬件。可以执行任何CPU指令并且可以访问每个内存地址。该模式是为运行在最低级别的驱动程序保留的
用户模式:
执行所有用户程序的模式。它无法访问 RAM 和硬件。这样做的原因是因为如果所有程序都在内核模式下运行,它们将能够覆盖彼此的内存。如果它需要访问任何这些功能 – 它会调用底层 API。除系统进程外,Windows 启动的所有进程都运行在用户态。
切换黑白内核和用户模式:
从用户模式到内核模式的切换不是由CPU自动完成的。 CPU 被中断(定时器、键盘、I/O)中断。当中断发生时,CPU停止执行当前正在运行的程序,切换到内核模式,执行中断处理程序。该处理程序保存CPU的状态,执行其操作,恢复状态并返回到用户模式。
http://en.wikibooks.org/wiki/Windows_Programming/User_Mode_vs_Kernel_Mode
关于c - 进程在用户空间和内核空间执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26270349/