cpu既可以运行在用户态下,也可以运行在内核态。当一个程序在用户态执行时,它不能直接访问内核数据结构或内核的程序。每种CPU模型都提供了从用户态到内核态的转换的特殊指令,反之亦然。一个程序运行时,大部分时间都处于用户态,只有需要内核所提供的服务时才切换到内核态。当内核满足了程序的请求后,它让程序切换到用户态。
内核本身并不是一个进程,而是进程管理者。进程/内核模式假定:请求内核服务的进程使用所谓系统调用的特殊编程机制,每个系统调用都设置了一组识别进程请求的参数,然后执行与硬件相关的cpu指令完成从用户态到内核态的切换。除了用户进程之外,unix系统还包括几个所谓内核线程的特权进程,它们具有以下特点:
1、它们以内核态运行在内核地址空间
2、它们不与用户直接交互,因此不需要终端设备。
3、它们通常在系统启动时创建,然后一直处于活跃状态,直到系统关闭
激活内核例程的几种方式:
1、进程调用系统调用
2、正在执行进程的cpu发出一个异常信号,内核捕捉到信号,并进入异常处理
3、外围设备向cpu发出一个终端信号以通知一个事件的发生,如一个要求注意的请求、一个状态的变化或一个I/O的完成等。每个中断信号都由内核的中断处理程序来处理。外围设备和cpu异步操作,因此,中断在不可预知的时间发生。
4、内核线程被执行。因为内核线程运行在内核态,因此必须认为其相应程序是内核的一部分。