当前位置: 技术问答>linux和unix
关于linux内核的问题,请教高手。
来源: 互联网 发布时间:2016-04-12
本文导语: 虚拟地址空间分为两个部分:用户空间和系统空间。在用户模式下只能访问用户空间而在核心模式下可以访问系统空间和用户空间。系统空间在每个进程的虚拟地址空间中都是固定的,而且由于系统中只有一个内核实...
虚拟地址空间分为两个部分:用户空间和系统空间。在用户模式下只能访问用户空间而在核心模式下可以访问系统空间和用户空间。系统空间在每个进程的虚拟地址空间中都是固定的,而且由于系统中只有一个内核实例在运行,因此所有进程都映射到单一内核地址空间。内核中维护全局数据结构和每个进程的一些对象信息,后者包括
----------------------------------------------------------------------------------
的信息使得内核可以访问任何进程的地址空间。通过地址转换机制进程可以直接访问当前进程的地址空间(通过
------------------------------------
MMU),而通过一些特殊的方法也可以访问到其它进程的地址空间。
有下划线的地方不懂,还有用户栈和内核栈,假设一个线程不回进入内核态,他也有内核栈指针吗?
----------------------------------------------------------------------------------
的信息使得内核可以访问任何进程的地址空间。通过地址转换机制进程可以直接访问当前进程的地址空间(通过
------------------------------------
MMU),而通过一些特殊的方法也可以访问到其它进程的地址空间。
有下划线的地方不懂,还有用户栈和内核栈,假设一个线程不回进入内核态,他也有内核栈指针吗?
|
每个进程都有一个对应的内核栈(4K or 8K), 用于系统调用和中断时,当进程进入系统调用或被中断时,esp指到这个内核栈
|
进程都会有内核堆栈的,不管怎么样,进程都会通过各种方式进入内核的,如果是用户线程,可以不需要内核堆栈。
实际上LZ的这段话已经说得很明白了,“由于系统中只有一个内核实例在运行,因此所有进程都映射到单一内核地址空间,内核中维护全局数据结构和每个进程的一些对象信息,后者包括的信息使得内核可以访问任何进程的地址空间。”
关键是”每个进程的信息“:在这些信息里包含了进程内存的映射信息,根据这些映射信息,在系统空间可以把相应的用户空间的地址转换为系统空间或者实际物理内存的地址,所以在系统空间可以访问进程地址空间。进程切换时的用户空间切换就是一个典型的情况。
实际上LZ的这段话已经说得很明白了,“由于系统中只有一个内核实例在运行,因此所有进程都映射到单一内核地址空间,内核中维护全局数据结构和每个进程的一些对象信息,后者包括的信息使得内核可以访问任何进程的地址空间。”
关键是”每个进程的信息“:在这些信息里包含了进程内存的映射信息,根据这些映射信息,在系统空间可以把相应的用户空间的地址转换为系统空间或者实际物理内存的地址,所以在系统空间可以访问进程地址空间。进程切换时的用户空间切换就是一个典型的情况。
|
晕,少打了一个字“我没深入研究过内核,都是猜的。^_^”
|
如果, 一个进程只是用户级的进程,不会发生系统调用,也不会发生中断, 那这个进程还会有内核栈吗?