c - 进程在用户空间和内核空间执行

标签 c linux-kernel

尝试理解用户空间和内核空间之间的关系。 用户空间程序使用系统调用与内核交互。如果我有一个从文件中读取数据的程序。然后执行用户空间的二进制文件以及执行内核空间。我们是否有两个进程,一个在内核上执行,另一个在用户空间上执行,还是在用户和内核上运行的单个进程。

最佳答案

仅相同的过程。但基于该进程的操作,它运行在用户模式内核模式

现代处理器架构通常允许 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

http://en.wikipedia.org/wiki/Direct_memory_access

http://en.wikipedia.org/wiki/Interrupt_request

关于c - 进程在用户空间和内核空间执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26270349/

相关文章:

c - C 运算符的优先级

linux-kernel - linux 内核中的 __context__ 属性

linux-kernel - 从内核空间添加/删除 Linux 中的路由

linux - 在核心转储中检查自旋锁是否被持有

git - 无法向上游推送的开源项目补丁如何管理?

c - 在 C 中后/前递减 char 变量时这里发生了什么

c - %d 无符号整数

linux - 理解从进程内核栈中获取task_struct指针

c - 指向全局静态变量的指针 - 不安全?

c - 我需要对这个按位拼图做一点解释