zoukankan      html  css  js  c++  java
  • 《Linux内核设计与实现》CHAPTER1,2阅读梳理

    《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. 没有内存保护机制

     

    总结

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

  • 相关阅读:
    【React Native】某个页面禁用物理返回键
    【React Native】DeviceEventEmitter监听通知及带参数传值
    转载【React Native代码】手写验证码倒计时组件
    【React Native】 中设置 APP 名称、应用图标、为安卓添加启动图
    【React Native错误集】* What went wrong: Execution failed for task ':app:installDebug'.
    【React Native错误集】Import fails with "Failed to execute 'ImportScripts' on 'WorkerGlobalScope'"
    【React Native错误集】Android error “Could not get BatchedBridge, make sure your bundle is packaged properly” on start of app
    「React Native笔记」在React的 setState 中操作数组和对象的多种方法(合集)
    【React Native】Error: Attribute application@allowBackup value=(false) from AndroidManifest.xml
    坚果云如何使用二次验证码/谷歌身份验证器/两步验证/虚拟MFA?
  • 原文地址:https://www.cnblogs.com/lwr-/p/5272196.html
Copyright © 2011-2022 走看看