读书笔记.linux内核设计与实现|读书笔记.linux内核设计与实现 .1

写在前面的话 以前读书都只局限于看过,没有输出的过程,忘得很快,现在想试试这样整理之后输出,会不会好点。
一直以来对Linux的内核都是走马观花式学习,毫无深入,但以后可能要频繁用到,得构建一下自己的知识体系,希望能多多记录吧。
内核定义

  1. 内核是操作系统的核心,由负责响应中断的中断服务程序,调度程序(管理多个进程共享处理器时间),进程地址空间的内存管理程序,以及网络、进程间通信等系统服务程序共同组成。
  2. 处于系统态,拥有受保护的内存空间和访问硬件设备的所有权限。即内核空间。
    • 用户空间只能以进程为视角,只能看到他被允许调用的部分系统资源,和自己的内存空间。
Linux内核简介 Linux继承于Unix,如普遍的API接口(Posix),但并没有完全基于某个特定Unix。其差异在于:
  1. Linux充分吸收了微内核的概念(服务模块化管理,抢占式内核,支持内核线程,以及动态加载内核模块的能力)。inmod,rmmod,
    • 微内核的定义,其实在学校里的时候老师强调过,真正的微内核指的的是内核只保留无法从内核中去掉的必要服务,如调度服务和中断服务等。其他服务包括fs,driver模块都能从内核中去掉。微内核设计的重要目的之一是安全。因为我们很容易就可以知道许多bug和受攻击面都是来自于内核所搭载的模块服务,进而导致整个系统的安全泄漏和崩溃。
    • 但微内核的弊端也很明显。因为各个服务模块化加载之后运行在不同的地址空间,无法进行直接的函数调用,而采用了IPC(inter-process communication),需要进行上下文的切换导致不必要的开销。
    • 所以Linux仍旧是单内核,所有服务模块运行在一个地址空间,可以直接调用函数。实用至上。
  2. Linux支持对称多处理机制SMP。
  3. 抢占式preemptive内核。允许在内核运行的任务优先执行的能力。其他大部分Unix不支持抢占。
  4. Linux内核并不区分线程和一般进程: 所有进程都一样,只是其中一些共享资源。
  5. Linux提供具有设备类的面向对象的设备模型、热插拔事件,以及用户空间的设备文件系统sysfs
  6. 忽略Unix过时标准和不必要特性。
处理器任何时间点上的活动可以被划分成:
  1. 运行于用户空间,执行用户进程
  2. 运行于内核空间,处于进程上下文,代表某一次系统调用。
  3. 运行于内核空间,处于中断上下文,与任何进程无关,处于某个特定中断。
陷入内核态
系统调用
  1. 通过调用库,让内核完成不同任务,但通常内核调用只是库调用的一个步骤。printf(), 提供数据缓存和格式化操作,调用write()系统调用只是他的一个动作。 但open()等是一一对应。 strcpy()不用系统调用。
  2. 通过系统调用进入内核态,我们称为内核代其执行,内核运行于进程的上下文中。
    中断服务【读书笔记.linux内核设计与实现|读书笔记.linux内核设计与实现 .1】中断的典型代表是来自硬件设备的中断。内核通过中断号查找中断服务程序,调用服务程序处理中断,在中断上下文中运行。保证中断服务能够第一时间处理和退出。

    推荐阅读