试图理解用户空间和内核空间之间的关系。 用户空间程序使用系统调用与内核进行交互。如果我有一个程序从文件中读取数据。然后执行用户空间中的二进制文件以及内核空间。难道我们有两个进程在内核上执行一个进程,另一个进程在用户空间执行,或者它是在用户和内核上运行的单个进程。在用户空间和内核空间上执行进程
回答
只有相同的过程。但该流程的基础操作是在user mode
和kernel mode
中运行。
现代处理器体系结构通常允许CPU以至少两种不同 模式操作:user mode
和kernel mode
(有时也被称为supervisor mode
)。
硬件指令允许从一种模式切换到另一种模式。相应地,虚拟内存的区域可以标记为user space
或kernel space
的一部分。在user mode
中运行时,CPU只能访问标记为user space
中的内存;尝试访问kernel space
中的内存会导致硬件异常。在kernel mode
中运行时,CPU可以访问用户和内核内存空间。
某些操作只能在处理器在kernel mode
中运行时执行。例子包括执行暂停指令来停止系统,访问内存管理硬件以及启动设备I/O操作。通过利用这种硬件设计将操作系统置于内核空间中,操作系统实施者可以确保用户进程不能访问内核的指令和数据结构,或者执行会对操作系统的操作产生不利影响的操作系统。
内核模式:
模式,所有的内核程序执行(不同的驱动程序)。它可以访问每个资源和底层硬件。任何CPU指令都可以执行,并且每个存储器地址都可以被访问。此模式被保留用于其上的最低水平
用户模式运行驱动程序:
模式,所有的用户程序执行。它无法访问RAM和硬件。原因是因为如果所有程序都以内核模式运行,它们将能够覆盖对方的内存。如果它需要访问任何这些功能 - 它会调用底层API。除了系统进程在用户模式下运行外,每个进程都由Windows启动。
交换的B/W内核和用户模式:
从用户模式到内核模式的切换不是由CPU自动完成。 CPU被中断(定时器,键盘,I/O)中断。当发生中断时,CPU停止执行当前正在运行的程序,切换到内核模式,执行中断处理程序。该处理程序保存CPU的状态,执行其操作,恢复状态并返回到用户模式。
http://en.wikibooks.org/wiki/Windows_Programming/User_Mode_vs_Kernel_Mode
- 1. 内存分配内核空间和用户空间进程
- 2. 在Linux内核空间执行程序
- 3. 用户空间和内核空间崩溃之间的区别
- 4. 在内核空间和用户空间中工作
- 5. 用户空间vs内核空间驱动程序
- 6. 内核空间和用户空间布局
- 7. Netlink用户空间和内核空间通信
- 8. Linux用户空间和内核空间调度
- 9. 从内核空间执行ioctl
- 10. Linux ioctl命令在用户空间和内核空间之间变化
- 11. 从内核空间进行GPIO访问
- 12. 使用用户空间进程来协助内核模块
- 13. Linux内核:从内核空间调用用户空间的回调函数
- 14. 如何从用户空间访问内核空间?
- 15. 从内核空间绕过数据包到用户空间
- 16. 将用户空间代码移植到内核空间
- 17. 从用户级空间访问内核空间中的变量
- 18. 从内核空间访问用户空间 - get_user_pages
- 19. 从内核空间传递地址到用户空间
- 20. 是否术语“用户空间”和“内核空间”指的是物理内存?
- 21. a.out内核空间
- 22. bsd内核用户空间事件kqueue
- 23. 取在内核空间
- 24. 内核驱动程序和用户空间的mmap
- 25. 内核空间中的进程运行时
- 26. 从内核线程为用户空间分配内存
- 27. 如何在Linux内核空间打印用户空间堆栈跟踪
- 28. 如何从空间和内核空间打印调试
- 29. 为什么OS地址空间必须拆分用户空间和内核空间?
- 30. 的Linux用户空间线程,内核线程,轻量级进程
因此,我们必须当一个进程运行时创建了两个栈。一个在用户空间,另一个在内核空间。用户模式切换到内核模式由中断x80完成。如何将用户级别的堆栈内容传递到内核空间。系统调用对此负责? 。但是我们的名字是在用户空间进行数字映射,并且在内核空间[2 - sys_fork()]处有名称映射的名称为[fork() - 2]。 – Angus 2014-10-09 05:10:27
如何将用户级别的内容传递给内核空间。例如:将文件从用户级别打开到内核级别的流程是什么。 – Angus 2014-10-09 05:15:03
请参阅http://www.tldp.org/HOWTO/KernelAnalysis-HOWTO-3.html – 2014-10-09 05:23:11