文章目录

  • 前言
  • 一、Linux内核的特征
  • 二、为什么要学Linux内核
  • 三、Linux操作系统结构
    • 1. Linux内核在系统中的位置
    • 2. Linux内核子系统之间的关系
    • 3. 系统主要的数据结构
  • 三、Linux内核源码目录组织结构

前言

如果说CPU是计算机硬件的心脏,那么操作系统的内核就是整个计算机系统的心脏,或者说是最高管理机构。。。


一、Linux内核的特征

  1. Linux内核组织形式为整体式、开放式结构,也就是说整个内核有许多个过程组成,每个过程可以单独编译。特点:内部结构简单,工作效率高。
  2. 进程调度方式简单而有效。
  3. 支持内核线程(守护进程),在后台运行的线程。
  4. 支持多种平台的虚拟内存管理。
  5. 内核有自己特殊的虚拟文件系统。
  6. 模块机制,使得内核保持独立,又容易扩充。
  7. 增加了系统调用,内核也允许用户自己添加系统调用。
  8. 面向对象。

二、为什么要学Linux内核

  1. 提升研发出高水平软件;
  2. 开发自己的操作系统;
  3. 有助于计算机科学领域研究;
  4. Linux系统性能优化;

三、Linux操作系统结构

1. Linux内核在系统中的位置

Linux内核并不是孤立,要把它放到整个系统中去研究更容易理解,如下图所示内核在操作系统中的位置。

2. Linux内核子系统之间的关系

Linux内核由五大主要子系统组成,它们之间的关系为:

3. 系统主要的数据结构

在Linux内核中,有些使用频度较高的数据结构有:

  1. task_struct:代表一个进程数据结构指针形成一个task数组。
  2. mm_struct:代表进程的虚拟内存。
  3. inode:代表虚拟文件系统中的文件、目录等对应的索引节点(inode)。

三、Linux内核源码目录组织结构

Linux内核版本有两种:稳定版和开发版,Linux内核版本号由三组数字组成。
第一组数字:目前发布的内核主版本;
第二组数字:偶数表示稳定版本,奇数表示开发中版本;
第三组数字:错误修补次数。

例如:Linux3.4.31

第一组数字:3,主版本号;
第二组数字:4, 次版本号,表示稳定版本(因为是偶数);
第三组数字:31,修订版本号,表示修改的次数,头两个数字全在一起可以描述内核系列。

为了深入地了解Linux的实现机制,还必须阅读Linux的内核源代码,下面是对有关源代码的介绍。内核源代码的版本多,对不同的内核版本,系统调用一般是相同的。新版本也许可以增加一个新的系统调用,在大多数情况下,设备文件将仍然相同,而另一方面,版本之间的内部接口有所变化。

本系列文章以Linux4.4.4版本为例。

arch目录:不同平台体系相关代码;
block目录:块设备驱动;
certs目录:与认证和签名相关代码;
crypto目录:内核常用加密。压缩算法等代码;
Documentation目录:描述模块功能和协议规范代码;
Drivers目录 :驱动程序(USB总线、PCI总线、显卡驱动等);
firmware目录 : 主要是一些二进制固件;
fs目录 : 虚拟文件系统代码;
include目录 :内核源码依赖的绝大部分头文件;
init目录 :内核初始化代码,联系到内存各个组件入口;
ipc目录:进程间通信实现,比如共享内存、信号量、匿名管道等;
kernel目录 :内核核心代码,包括进程管理、IRQ、时间等;
lib目录:C标准库的子集;
mm目录: 内存管理相关实现;
net目录: 网络协议代码,比如TCP、IPv6、WiFi、以太网实现等等;
samples目录: 内核实例代码;
scripts目录: 编译和配置内核所需脚本;perl/bash;
security目录: 内核安全模型相关代码;如selinux
sound目录: 声卡驱动源码;
tools目录: 与内核交互;
usr目录: 用户打包和压缩内核的实现源码;
virt目录: /kvm虚拟化目录相关支持实现;

【Linux内核源码剖析】内核源码的组织结构相关推荐

  1. as工程放到源码编译_Flutter源码剖析(二):源码的阅读与调试环境配置

    综述 Flutter从架构上来说有3部分: 用Dart写的Framework层,面向开发者 用Java/Kotlin写的Embdder层(For Android,iOS是OC/Swift),纯Flut ...

  2. flutter 真机无法调试 sdk报错_Flutter源码剖析(二):源码的阅读与调试环境配置

    综述 Flutter从架构上来说有3部分: 用Dart写的Framework层,面向开发者 用Java/Kotlin写的Embdder层(For Android,iOS是OC/Swift),纯Flut ...

  3. stl源码剖析_STL源码剖析 阅读笔记(二)allocator

    一.空间分配器 allocator 从使用上看,空间分配在任何语言的任何组件都不需要我们去过多关心,因为语言.组件的底层肯定都比较完整的做了这件事情. 从实现上看,学习 allocator 的原理在源 ...

  4. .net webim 源码_Flutter源码剖析(一):源码获取与构建

    概述 本文介绍了Flutter源码的获取与构建,后面会另有文章介绍Flutter源码的版本管理.开发环境搭建等主题. 准备工作 Flutter源码分为两个部分: 相关依赖的安装可参考官方文档:Sett ...

  5. python3源码剖析_T-SNE源码剖析(python版)

    import numpy as np import matplotlib.pyplot as plt # 输入为(n*m)的矩阵,表示n个样本,m个属性 # 返回一个距离矩阵 def cal_pair ...

  6. python源码剖析_Python源码剖析 - 对象初探

    01 前言 对象是 python 中最核心的一个概念,在python的世界中,一切都是对象,整数.字符串.甚至类型.整数类型.字符串类型,都是对象. 02 什么是PyObject Python 中凡事 ...

  7. LinkedHashMap源码剖析

    1. LinkedHashMap简介 LinkedHashMap是HashMap的子类,与HashMap有着同样的存储结构,但它加入了一个双向链表的头结点,将所有put到LinkedHashmap的节 ...

  8. 转:【Java集合源码剖析】LinkedHashmap源码剖析

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/37867985   前言:有网友建议分析下LinkedHashMap的源码,于是花了一晚上时 ...

  9. 4.2.10 Kafka源码剖析, 阅读环境搭建, broker启动流程, topic创建流程, Producer生产者流程, Consumer消费者流程,

    目录 4.1 Kafka源码剖析之源码阅读环境搭建 4.1.1 安装配置Gradle 4.1.2 Scala的安装和配置 4.1.3 Idea配置 4.1.4 源码操作 4.2 Kafka源码剖析之B ...

  10. LocalBroadcastManager源码剖析

    Handler系列文章: Handler源码剖析 HandlerThread与IntentService源码剖析 LocalBroadcastManager源码剖析 BroadcastReceiver ...

最新文章

  1. latex实现横竖均居中
  2. 【图像分割模型】编解码结构SegNet
  3. Python开发:初识Python
  4. 每天一道LeetCode-----最长回文子串/序列,从头开始的最长回文子串长度
  5. eclipse创建神经网络_使用Eclipse Deeplearning4j构建简单的神经网络
  6. 【VB.NET】测验题目Quiz1
  7. PC 芯片接连抛售,失去明星工程师的东芝是如何走向末路的?
  8. 互联网+商业 济宁苏宁生活广场打造智慧城市范本
  9. NideShop:基于Node.js+MySQL开发的高仿网易严选开源B2C商城
  10. RaiseCOM(瑞斯康达)交换机常用配置命令大全
  11. 寻找春天nbsp;九宫格日记-2014.07.14
  12. 如何制定人生目标和实现目标
  13. 最新电销语音机器人完整版源码+含安装教程
  14. 性能测试模型-曲线拐点模型-压力曲线分析图
  15. iOS App 唤醒另一个App
  16. 计算机漫游模式,深入理解操作系统之一 —— 计算机系统漫游
  17. 什么是善辩型人格?善辩性人格的职业分析
  18. 路由器R473g虚拟服务器设置,TL-R473G上网方式配置详解 路由器
  19. Windows 10 ISO 官方镜像下载
  20. MATLAB利用遗传算法求取最优解

热门文章

  1. 理知道:一款图书馆图书查询安卓应用
  2. python如何查看函数的参数_python 如何查看自带函数的默认参数?
  3. 纵谈地图应用中标识定位
  4. Cinemachine 1.虚拟摄像机
  5. 关于Elmo驱动器Main Feedback error错误处理
  6. 头歌课堂练习5:进程的同步与互斥
  7. QT安装QChart
  8. 没啥价值,不建议读——关于2019北京半程马拉松参赛体会
  9. js文本框禁用 获取文本框焦点onfocus 事件 注册事件优化
  10. 一文快速读懂 KEGG 数据库与通路图