《Linux内核设计与实现》CHAPTER1,2阅读梳理

【学习时间:2.5hours】

【学习内容:Linux内核简介——历史与现今版本;Linux内核源代码以及编译】

CHAPTER1 Linux内核简介

1.Unix内核特点

  1. 十分简洁:仅提供几百个系统调用并且有明确的目的;
  2. 在Unix中,大部分东西都被(或者正致力于)被当做文件对待;
  3. Unix内核即相关系统工具软件都是用C语言编写的,这使得系统有着强大的可移植性;
  4. Unix进程创建非常迅速,目标在于一次执行保质保量地完成一个任务

2.Linux与Unix异同

  • Linux是基于Unix的类系统,比如它也实现了Unix的API;
  • 但它不同于Unix,没有利用Unix内核源代码;
  • Linux是非商业的产品,任何人都可以参与到它的开发中
  • Unix内核与Linux内核的比较
    • Unix内核是一个不可分割的静态可执行库,通常需要硬件系统提供页机制(MMU)以管理内存;
    • Linux支持动态加载内核模块,并且是可抢占的。

3.Linux系统的基础是内核、C库以及工具集和系统的基本工具。

4.操作系统&内核

  1. 操作系统是指在整个系统中负责完成最基本功能和系统管理的那些部分,包括内核;
  2. 内核是操作系统的核心,系统其它部分必须依靠内核这部分软件提供的服务;
  3. 内核的组成&功能完成
    • 内核由调度、中断服务、通信等程序组成;
    • 内核处于的系统态以及受保护的内存空间被称为内核空间;
    • 应用程序通过系统调用接口与内核通信(这种交互方式是应用程序完成其工作的基本方式之一),有以下三种情况:
      • 函数较为复杂,系统调用只是工作的一部分;
      • 函数和系统调用是一一对应的关系;
      • 函数根本不需要调用系统级的操作。

4.内核分类

  1. 单内核(比如大多数Unix及Linux)

    • 把内核整体上作为一个大的单独的过程来实现,同时运行在一个单独的地址空间上
    • 简单,性能高
  2. 微内核(比如Windows NT)
    • 微内核的功能被划分为多个独立的功能,每个过程叫做一个服务器;便于处理内核间通信,还使用了IPC机制;

CHAPTER2 从内核出发

1.源代码管理

  1. 使用Git

    • Git作为版本控制系统来管理Linux内核源代码;
    • 下载并更新最新版本:
    • git clone git://[网址]
  2. 内核源代码一般安装在/usr/src/linux目录下,这个源码树并不能用于开发
  3. 源代码树
    • 有很多目录值得被注意:

      • arch:特定体系结构的源代码;
      • include:内核头文件;
      • kernel:像调度程序这样的核心子系统。

2.编译内核

  1. 目的:将自己需要的功能编译进内核
  2. 步骤:
    1. 配置内核

      • 前提:可以配置的各种变量都以CONFIG_前缀表示。有二选一(yes or no)和三选一(还有一个选项是module,即选定该配置项但编译的时候以模块形式生成); 【我个人的理解就是,对类似于驱动程序这样需要模块化也就是较为独立地完成功能而不一定随时都要开启的程序代码需要此选项】
      • 方式:
        • make config【这个在做实验的时候遇到过,应该属于那种傻瓜似的逐一遍历(适用于系统比较简单的情况)】
        • make menuconfig
        • make gconfig
      • 后续:
        • 配置选项CONFIGIKCONFIGPROC把完整的压缩的配置文件放在/proc/config.gz下面,这样编译新的内核的时候就可以直接拷贝使用了
    2. 衍生多个编译作业
      • 一般每个处理器都会衍生1——2个作业,改善处理器的利用率
      • make -j32 > /dev/null【以16核处理器为例】
    3. 安装新内核
      • 以root身份运行 make modules_install即可
      • 所有已编译的模块都会安装到lib/modules下

3.内核开发特点

  1. 无lib库或者标准头文件,不能直接使用标准C函数库
  2. 内核编程时使用GNU C,比如内联函数、内联汇编等
  3. 没有内存保护机制

总结

前两章整体内容比较少,看起来的时候还是比较轻松的。作者的整体风格看似“小白”然而不失严谨,从脚注就可见一斑。第二章的部分其实还是有些深刻的,涉及的是之前接触过但是匆匆而过的知识点。

《Linux内核设计与实现》CHAPTER1,2阅读梳理的更多相关文章

  1. 《Linux内核设计与实现》CHAPTER17阅读梳理

    <Linux内核设计与实现>CHAPTER17阅读梳理 [学习时间:3.5hours] [学习内容:设备类型,模块,内核对象,sysfs] 个人思考部分见[]标出的部分 一.课堂讲解整理& ...

  2. 《Linux内核设计与实现》CHAPTER4阅读梳理

    <Linux内核设计与实现>CHAPTER4阅读梳理 [学习时间:3hours] [学习内容:多任务:进程调度策略:Linux中进程调度的关键问题:抢占] 个人思考部分见[]标出的部分 一 ...

  3. 《Linux内核设计与实现》CHAPTER18阅读梳理

    <Linux内核设计与实现>CHAPTER18阅读梳理 [学习时间:2hours] [学习内容:bug的来源分析:bug调试途径] 一.bug来源 1.内核中的bug 内核中的bug表现得 ...

  4. 《Linux内核设计与实现》CHAPTER5阅读梳理

    <Linux内核设计与实现>CHAPTER5阅读梳理 [学习时间:2.5hours] [学习内容:系统调用的概念.功能及实现:系统调用的创建和使用方法] CHAPTER5 系统调用 1.系 ...

  5. 《Linux内核设计与实现》CHAPTER13阅读梳理

    <Linux内核设计与实现>第13章阅读总结 [edited by 5216lwr] 一.虚拟文件系统概述 1.虚拟文件系统 (也称作虚拟文件交换或VF)作为内核子系统,为用户空间程序提供 ...

  6. linux内核设计与实现一书阅读整理 之第三章

    chapter 3 进程管理 3.1 进程 进程就是处于执行期的程序. 进程就是正在执行的程序代码的实时结果. 内核调度的对象是线程而并非进程. 在现代操作系统中,进程提供两种虚拟机制: 虚拟处理器 ...

  7. linux内核设计与实现一书阅读整理 之第十八章

    CHAPTER 18 调试 18.1 准备开始 需要的是准备是: - 一个bug - 一个藏匿bug的内核版本 - 相关内核代码的知识和运气 重点: 想要成功的进行调试,就取决于是否能让这些错误重现. ...

  8. linux内核设计与实现一书阅读整理 之第五章

    CHAPTER 5 系统调用 5.1 与内核通信 系统调用在用户空间进程和硬件设备之间添加了一个中间层,该层主要作用有三个: 为用户空间提供了一种硬件的抽象接口 系统调用保证了系统的稳定和安全 每个进 ...

  9. linux内核设计与实现一书阅读整理 之第一二章整合

    第一章:Linux内核简介 一.Unix和linux Unix是一个强大.健壮和稳定的操作系统. 1.Unix内核特点 十分简洁:仅提供几百个系统调用并且有明确的目的: 在Unix中,大部分东西都被( ...

随机推荐

  1. Azkaban 2.5.0 job type 插件安装

    一.环境及软件 安装环境: 安装目录: /usr/local/ae/ankaban Hadoop 安装目录 export HADOOP_HOME=/usr/local/ae/hadoop-1.2.1 ...

  2. 在windows和linux下如何查看80端口占用情况?是被哪个进程占用?如何终止等

    一.在windows下如何查看80端口占用情况?是被哪个进程占用?如何终止等 这里主要是用到windows下的DOS工具,点击"开始"--"运行",输入&quo ...

  3. ajax、post、get实例

    html代码: <!DOCTYPE HTML><html lang="en-US"><head> <meta charset=" ...

  4. 转载:CSS计数器的趣味时光之css计算数据

    CSS计数器是“啊太好了,竟不知道CSS可以做这啊”这类非常有趣的众多特性之一.简言之,用CSS使你持续某增加某个量,而无需JavaScript. 简单计数器 我们从这个简单的分页示例开始: 你见到的 ...

  5. 让mysql有直接写redis能力

    1.文件包下载 http://pan.baidu.com/s/1qW9DHYc 2.安装 gcc -fPIC -Wall -I/usr/local/mysql/include/mysql -I. -s ...

  6. ACM: 强化训练-Beautiful People-最长递增子序列变形-DP

    199. Beautiful People time limit per test: 0.25 sec. memory limit per test: 65536 KB input: standard ...

  7. 七、考反映小游戏《苹果iOS实例编程入门教程》

    该app为应用的功能为一个简单的考反应游戏 纲要:-UIButton, UILabel, UIImageView 的运用:-利用rendom增加游戏可玩性: 游戏说明: 在按下开始游戏后,分为三盏的指 ...

  8. 广播变量、累加器、collect

    广播变量.累加器.collect spark集群由两类集群构成:一个驱动程序,多个执行程序. 1.广播变量 broadcast 广播变量为只读变量,它由运行sparkContext的驱动程序创建后发送 ...

  9. 【Go语言】面向对象扩展——接口

    简单地说 Interface是一组Method的组合,可以通过Interface来定义对象的一组行为.如果某个对象实现了某个接口的所有方法,就表示它实现了该借口,无需显式地在该类型上添加接口说明. I ...

  10. jquery插件jquery.LightBox.js之点击放大图片并左右点击切换图片(仿相册插件)

    该插件乃本博客作者所写,目的在于提升作者的js能力,也给一些js菜鸟在使用插件时提供一些便利,老鸟就悠然地飞过吧. 此插件旨在实现目前较为流行的点击放大图片并左右点击切换图片的效果,您可以根据自己的实 ...