《深入理解Linux内核》读书笔记1 — 对内核的一点理解 – xlsern

声明:最近阅读了《深入理解Linux内核》这一linux分析著作,相关博文为学习心得,观点可能会有错误,若那位大神发现错误,请留言指正,不胜感激。

引言

本文是在阅读了《深入理解linux内核》第三版,第一章,Unix内核模式章节中,进程/内核模式,进程实现,可重入内核这三个小节后的笔记。

内核是什么

在阅读《深入理解linux内核》第一章 绪论中,Unix内核概述,进程/内核模式,这一小节时,对内核是什么有了 一点理解。个人认为,内核在代码层面上是:位于内核地址空间的函数(内核函数,内核函数与普通的函数相同,只不过其所处理的对象不同,多是正对操作系统所管理的硬件资源)和数据结构(内核数据结构,与普通的数据结构相同,只不过用来描述如进程,I/O设备等重要操作系统概念或资源)的有机集合。之所以说是有机集合,是因为根据本人目前对linux系统的了解,内核是一个具有“生命”特征的功能体,用《深入理解linux内核》中的原文描述就是,“内核本身不是一个进程,而是进程的管理者”。内核作为管理者,那么它是具有逻辑判断能力的,如对用户进程请求资源的响应等。

内核线程(kernel thread)

内核线程实质上是特权进程,不是用户进程,与普通用户进程有以下区别:

    以内核态运行在内核的地址空间。这些特权进程的使用内核地址空间来创建进程容器,并且可以直接访问内核的数据结构和内核的程序。它们不与用户进行交互,因此,不需要终端设备。类似于后台进程。它们的生命周期起始于整个操作系统启动,然后,一直处于运行状态,最终在操作系统关闭时,终止。

用户态与内核态之间的转换

系统调用,类似于一个信号,当处于用户态的进程发出一个系统调用,相当于向内核发出一个信号,内核将对此信号进程响应。内核对系统调用的响应方式,是通过执行系统调用处理程序实现的。类似于,中断信号(系统调用)和中断处理程序(系统调用处理程序)。

激活内核例程

内核例程:个人理解,内核是内核函数和内核数据结构的有机结合,内核例程就是内核的函数。

激活内核例程:当用户进程作出某些操作后,导致某些内核例程被调用,被执行。

激活内核例程的方法:

    调用系统调用。用户进程通过调用系统调用,向内核发送一个信号,触发内核中,对应的系统调用处理例程被执行。当CPU正在执行进程的指令时,当检测到某条指令反常时,如有一条除零指令。外围设备向CPU发送一个中断(interrupt)信号,以通知某个事件发生。内核线程,即运行在内核地址空间的特权进程,是内核的一部分,因此,其本身就属于内核例程。所以,内核线程的执行,相当于激活内核例程。

可重入内核

可重入内核的实现,是由于内核的函数,或者是可重入的,或者是通过锁机制保护的。内核的可重入函数,多数使用局部变量,而不改变全局变量或结构体。

内核控制路径(kernel control path),表示内核处理系统调用(执行系统调用处理例程),处理异常(执行异常处理例程),处理中断(执行中断处理例程)的指令序列。个人理解为:处理系统调用,异常,中断的服务子程序。

内核控制路径的交错执行

内核控制路径在以下情况下,会交错执行:

    用户进程A发出一个系统调用,进如内核态,由相应内核控制路径(kernel control path)的处理例程来处理此系统调用,当进程A的内核控制路径确认进程A希望访问的硬件资源当前不可用,此时,进程A的内核控制路径调用scheduler(调度程序),选择一个处于就绪态的进程B,进行进程A,B间的切换。进程B开始运行后,也发出一个系统调用,进入内核态,相应的内核控制路径被执行。此时,进程A的内核控制路径还未执行完成。此例中线程A,B的内核控制路径交替进行执行。内核控制路径和内核过程交替执行。当执行响应某系统调用,异常,中断的内核控制路径时,由于需要特定的内核服务,将内核控制路径暂且挂起,然后,执行特定的内核服务过程。最后,在继续执行被挂起的内核控制路径。

世上没有绝望的处境,只有对处境绝望的人。

《深入理解Linux内核》读书笔记1 — 对内核的一点理解 – xlsern

相关文章:

你感兴趣的文章:

标签云: