内核必须实现一组服务和相应的接口,应用程序则可以使用这些接口,而不是直接与硬件打交道。
Linux内核主要由以下5个子系统组成:进程调度、内存管理、虚拟文件系统、进程间通信以及设备驱动。
在这个组成中,最核心的就是进程管理->进程调度和进程间通信。
在Linux系统中,我们编写的任何应用层程序,不管是上层还是属于中间框架层的代码,甚至是最底层的驱动代码,都可以以进程的形式在系统上运行。CPU可以运行在用户态和内核态。
在Linux 进程/内核模型中,每个进程就是执行在机器上的唯一的镜像,它们对系统服务具有排他性,当进程需要访问系统服务时,它会发出系统调用(对内核的请求),硬件则将权利模式由用户状态切换到内核模式。内核过程又会适时通过硬件强制返回用户模式。当一个程序执行在用户模式下,它就不能直接地访问内核数据结构或内核的程序。
进程是动态的实体,其在系统中的生命是有限的。Linux内核是以线程为调度的单位。
任务:进程的集合,其中可以包含一个或多个进程。
异步:两个事件的发生是没有任何关联的,一件事的发生不会因另一事件的发生而有任何变化。
同步:两个事件之间有先后顺序之分,一个事件的发生一定是发生在某个事件之后。
如:一个程序访问某一硬件资源时,另一个程序也要访问该硬件资源,后一个程序就要等待前一个程序,我们就说这两个程序同步访问该硬件资源。(同步不是两个事件同时发生)
内核不是进程,而是进程的管理者。
内核例程如何被激活:1.进程调用系统调用;2.CPU正执行进程发出的异常信号,表示诸如无效指令等非常规条件发生;3.外围设备发出一个中断信号到CPU,每个中断信号都是由一个叫做中断处理句柄的内核程序来处理的,中断与CPU的执行是异步的,所以中断的发生时不可预期的;4.内核线程被调度执行。
异常与中断的区别:
相同点:都会导致CPU停下当前的进程进入专门的处理例程。
不同点:异常是同步发生的,它一定是发生在某一错误后,而中断是异步发生的,它的发生时随机的。