Linux初识
概念
内核空间 - 用户空间
Kernel Space与User Space均在虚拟空间,但互不重合,每个进程可以通过系统调用进入内核,内核空间是所有进程和内核共享,不同进程的用户空间是相互独立的。Kernel是OS的核心,独立于普通的应用程序,可以访问受保护的内存空间和底层硬件设备。
- 内核功能模块(操作系统、驱动程序等)运行在内核空间、运行在最高级别(0级,内核态);
- 应用程序运行在用户空间、运行在最低级别(3级,用户态);
进程上下文 - 中断上下文
上下文 Context:简言之,即环境状态。
上下文切换 Context Switch:CPU的控制权由当前运行任务转移到另外一个就绪任务时所发生的事件,包括保存当前任务的运行环境和恢复就绪任务的运行环境。
在进程执行时,CPU所有寄存器中的值、进程的状态及堆栈中的内容(进程环境)被称为该进程的上下文。当内核需要切换到另一进程时,它需要保存当前进程的所有状态,即保存当前进程的上下文,以便再次执行该进程时能够恢复切换时的状态继续执行。在Linux中,当前进程上下文均保存在进程的任务数据结构中。在发生中断时,内核在被中断进程的上下文中、在内核态下执行中断服务例程,但同时会保留所有必需资源,以便中继服务结束时能恢复执行被中断的进程。
- 用户空间的应用程序通过系统调用进入内核空间。用户空间的进程要传递变量、参数的值给内核,内核态运行时也要保存用户进程的寄存器值、变量等。所谓“进程上下文”,用户进程传递给内核的参量及内核要保存的变量和寄存器值和当前环境等。
- 硬件通过触发信号导致内核调用中断处理程序进入内核空间。硬件的变量、参数要传递给内核,内核通过这些参量进行中断处理。所谓“中断上下文”,硬件传递给内核的参量和内核需要保存的当前的其他环境(主要是被中断执行的进程的当前环境)。
中断上下文不属于任何进程,中断上下文和进程上下文不可能同时发生。运行于进程上下文的内核代码是可抢占的,但中断上下文则会一直运行至结束,不会被抢占。
处理器总处于以下状态中的一种:
- 内核态,运行于进程上下文,内核代表进程运行于内核空间;
- 内核态,运行于中断上下文,内核代表硬件运行于内核空间;
- 用户态,运行于用户空间;
---
纵使山重水复,亦会柳暗花明
sunqh1991@163.com
欢迎关注,互相交流