《深入理解linux内核》摘要

前言

最近在阅读《深入理解linux内核》一书,颇有收益,因此记录书中重要内容,以备查看。

第一章-绪论

linux与其他类unix内核的比较

与商业化的操作系统相比,linux有如下优势

  • linux可运行在低档,便宜的硬件平台上。
  • linux是强大的。
  • linux的开发者都是非常出色的程序员。
  • linux内核非常小,而且紧凑。
  • linux与很多通用操作系统高度兼容。
  • linux有很好的技术支持。

linux版本

linux通过简单的编号来区分内核的稳定版和开发版。每个版本号用三个数字描述,由圆点分隔。前两个数字用来表示版本号,第三个数字表示发布号。第二位版本号表示内核的类型,如果为偶数,表示稳定的内核,否则,表示开发中的内核。

操作系统的基本概念

操作系统必须完成两个主要目标

  • 与硬件部分交互,为包含在硬件平台上的所有底层可编程部件提供服务。
  • 为运行在计算机系统上的应用程序提供执行环境

进程

一个进程可以定义为:“程序执行的一个实例”,或者一个运行程序的“执行上下文”。

允许进程并发活动的系统成为多道程序系统或者多处理系统。

unix是具有抢占式进程的多处理操作系统。

unix文件系统概述

文件或目录名由除“/”和空字符“\0”之外的任意ASCII字符序列组成。(一些操作系统允许一多种字符表示文件名,例如Unicode)

当标识文件名时,也用符号“.”和“..”。它们分辨标识当前工作目录和父目录。如果当前工作目录是根目录,那么它们是一致的。

包含在目录中的文件名就是一个文件的硬链接。在同一个目录或者不同的目录中,同一文件可以有几个链接。

硬链接有两个方面的限制:

  • 不允许用户给目录创建硬链接。因为这可能把目录树变成环形树,从而就不可能通过名字定位一个文件。
  • 只有在同一个文件系统中的文件才能创建链接。

但是软链接没有文件系统的限制。

文件类型

unix文件可以是下列类型之一:

  • 普通文件
  • 目录
  • 符号链接
  • 面向块的设备文件
  • 面向字符的设备文件
  • 管道和命名管道
  • 套接字

文件操作的系统调用

对于普通unix文件,可以顺序地访问,也可以随机地访问,而对设备文件和命名管道文件,通常只能顺序地访问。

当一个进程终止时,内核会关闭其所有仍然打开着的文件。

信号和进程间通信

进程可以以两种方式对收到的信号作出反应:

  • 忽略该信号
  • 异步地执行一个制定的过程(信号处理程序)

如果进程不指定选择何种方式,内核就根据信号的编号执行一个默认操作。五种可能的默认操作是:

  • 终止进程
  • 将执行上下文和进程地址空间的内容写入一个文件(核心转储,core dump),然后终止进程
  • 忽略该信号
  • 挂起进程
  • 如果进程曾被暂停,则恢复它的执行

共享内存是进程之间交换和共享数据的最快的方式。

_exit()系统调用:内核对这个系统调用的处理是通过释放进程所拥有的资源,并向父进程发送SIGCHLD信号来实现的。

随机访问存储器(RAM)的使用

所有的unix操作系统都将RAM毫无疑义的划分为两部分。其中若干千兆字节专门或用于存放内核映像。其余部分通常由虚拟内存系统来处理。并且用在一下三种可能的方面。

  • 满足内核对缓冲区,描述符会议及其他动态内存数据结构的请求
  • 满足进程对一般内存区的请求以及对文件内存映射的请求
  • 借助于高速缓存从磁盘以及其他缓冲设备获得较好的性能

虚拟内存系统必须解决的一个主要问题是内存碎片。理想情况下,只有当空闲页框数太少时,内存请求才失败。然而,通常需求内核使用物理上连续的内存区域。因此,及时有足够的可用内存,但它不能作为一个连续的大块使用时,内存的请求也会失败。

内核通过设备驱动程序与I/O设备交互。

守望 wechat
关注公众号[编程珠玑]获取更多原创技术文章
出入相友,守望相助!