Linux 0.11源码阅读笔记-总览

阅读源码的目的

加深对Linux操作系统的了解,了解Linux操作系统基本架构,熟悉进程管理、内存管理等主要模块知识。

通过阅读教复杂的代码,锻炼自己复杂项目代码的阅读能力。对于一般简短的程序,可以从main函数逐行阅读理解;对于复杂的项目,只能在了解源码主要结构的情况下,抓住某个具体的功能进行阅读。

选择较早版本的理由

Linux较新版本代码在百万行以上,而0.11版本内核不超过2万行代码。比较新版本的Linux内核源码太多且内容庞杂,自身能力不足,没有能力阅读。早期版本的代码虽然功能简陋,但基本功能都有,属于麻雀虽小五脏俱全,对于新手来说最适合不过。

不足在于0.11版本的代码中不包含专门的进程等待队列、TCP/IP网络等方面非常重要的代码,对内存的分配和使用与先进的内核也有所区别。可以在学习0.11版本代码之后,通过较新版本源码学习。

内核结构框图

内核位于用户层与硬件层之间,向下管理底层CPU、内存、磁盘等硬件,并向上通过系统调用的方式提供服务。0.11内核主要部分包括文件子系统和进程管理子系统,进程管理子系统进一步可分为内存管理、进程调度、进程通信三个主要模块。

内核代码主要部分

代码文件从功能上可分为三类:

  • 硬件(异常)中断处理程序文件
  • 系统调用服务处理程序文件
  • 进程调度等通用功能文件

  1. 中断处理程序

主要包括两个代码文件:

  • asm.s:实现了大部分硬件中断处理程序汇编代码
  • traps.c:实现了asm.s的中断处理过程中调用的c函数,这些c函数会在中断门中注册函数地址
  1. 系统调用处理相关程序

Linux中应用程序调用内核的功能是通过中断调用int 0x80进行的,寄存器eax中放调用号,每个调用号对应一个系统调用函数。实现系统调用的相关文件包括system_call.s、fork.c、signal.c和exit.c文件。

  • system_call.s:int 80中断调用处理程序,根据系统调用号调用相应的系统调用函数
  • fork.c、signal.c、exit.c:分别包含进程fork、信号、进程exit等相关的系统调用函数代码实现
  1. 其它通用类程序

包括schedule.c、mktime.c、panic.c、printk.c和vsprintf.c。

  • schedule.c:进程调度代码
  • mktime.c:内核使用的时间函数mktime(),仅在init/main.c中被调用一次
  • panic.c:包含panic()函数,用于内核运行出现错误时显示出错信息并停机
  • printk.c、vsprintf.c:内核显示信息的支持程序。实现了内核专用显示函数printk()和字符串格式化输出函数vsprintf()

内核函数调用关系图(Linux 2.6.26)

参考

  • Linux 内核完全注释 内核版本0.11 - 赵炯

Linux 0.11源码阅读笔记-总览的更多相关文章

  1. Linux 0.11源码阅读笔记-文件管理

    Linux 0.11源码阅读笔记-文件管理 文件系统 生磁盘 未安装文件系统的磁盘称之为生磁盘,生磁盘也可以作为文件读写,linux中一切皆文件. 磁盘分区 生磁盘可以被分区,分区中可以安装文件系统, ...

  2. Linux 0.11源码阅读笔记-中断过程

    Linux 0.11源码阅读笔记-中断过程 是什么中断 中断发生时,计算机会停止当前运行的程序,转而执行中断处理程序,然后再返回原被中断的程序继续运行.中断包括硬件中断和软件中断,硬中断是由外设自动产 ...

  3. Linux 0.11源码阅读笔记-总结

    总结 Linux 0.11主要包含文件管理和进程管理两个部分.进程管理包括内存管理.进程管理.进程间通信模块.文件管理包含磁盘文件系统,打开文件内存数据.磁盘文件系统包括空闲磁盘块管理,文件数据块的管 ...

  4. Linux 0.11源码阅读笔记-块设备驱动程序

    块设备驱动程序 块设备驱动程序负责实现对块设备数据的读写功能.内核代码统一使用缓冲块间接和块设备(如磁盘)交换数据,缓冲区数据通过块设备驱动程序和块设备交换数据. 块设备的管理 块设备表 内核通过一张 ...

  5. Linux 0.11源码阅读笔记-内存管理

    内存管理 Linux内核使用段页式内存管理方式. 内存池 物理页:物理空闲内存被划分为固定大小(4k)的页 内存池:所有空闲物理页组成内存池,以页为单位进行分配回收.并通过位图记录了每个物理页是否空闲 ...

  6. Linux 0.11源码阅读笔记-文件IO流程

    文件IO流程 用户进程read.write在高速缓冲块上读写数据,高速缓冲块和块设备交换数据. 什么时机将磁盘块数据读到缓冲块? 什么时机将缓冲块数据刷到磁盘块? 函数调用关系 read/write( ...

  7. Linux 0.11源码阅读笔记-高速缓冲

    高速缓冲 概念 高速缓冲区是内存中的一块内存,在块设备与内核其它程序之间起着一个桥梁作用.内核程序如果需要访问块设备中的数据,都需要经过高速缓冲区来间接的操作. 高速缓冲区结构 高速缓冲区被划分为1k ...

  8. 【从头到脚品读 Linux 0.11 源码】第一回 最开始的两行代码

    从这一篇开始,您就将跟着我一起进入这操作系统的梦幻之旅! 别担心,每一章的内容会非常的少,而且你也不要抱着很大的负担去学习,只需要像读小说一样,跟着我一章一章读下去就好. 话不多说,直奔主题.当你按下 ...

  9. linux 0.11 源码学习+ IO模型

    http://www.cnblogs.com/Fredric-2013/category/696688.html

随机推荐

  1. 【一】TSP、VRP、VRP模型介绍

    一. TSP问题数学模型 编辑 TSP,即Traveling Salesman Problem,也就是旅行商问题,又译为旅行推销员问题.货郎担问题,简称为TSP问题,是最基本的路线问题,该问题是在寻求 ...

  2. Mock平台3-初识Antd React 开箱即用中台前端框架

    微信搜索[大奇测试开],关注这个坚持分享测试开发干货的家伙. 内容提要 首先说下为啥这次测试开发系列教程前端选择Antd React,其实也是纠结对比过最终决定挑战一把,想法大概有几下几点: 笔者自己 ...

  3. ArcGIS温泉数据聚类分析、核密度分析

    这期博主给大家介绍下ArcGIS中的Riple's K 函数.与Kernel核密度分析. 首先从百度获取了湖南省的温泉数据.如图: 湖南省温泉数据 1.数据处理 (1)复制粘贴x.y坐标. (2)用快 ...

  4. 敏捷开发之Scrum方法运用

    目前软件开发除了强调产品质量,同时对产品能够快速发布并且迅速适应市场变化的要求也日益强烈.为适应这种开发环境和市场需求,传统的软件开发模式已被敏捷开发模式所替代.本文介绍敏捷软件开发中的Scrum方法 ...

  5. Java案例之评委打分

    /* 案例:评委打分,六个或者更多个评委打分,去到一个最高分,一个最低分,求其他评委的平均值(当评委数量发生改变时不需要进行二次修改) 需求:定义一个数组,长度为6,循环获取输入的数据 定义方法获取数 ...

  6. sql注入之查询方式及报错注入

    当进行sql注入时,有很多注入会出无回显的情况,其中不回显的原因可能是sql语句查询方式的问题导致的,这个时候我们需要用到相关的报错或盲注进行后续操作,同时作为手工注入时,提前了解或预知器sqkl语句 ...

  7. I 安装饮水机 中国石油大学新生训练赛#10

    问题 I: 安装饮水机 时间限制: 1 Sec  内存限制: 128 MB提交 状态 题目描述 为倡导城市低碳生活,市文明办计划举办马拉松比赛,为确保比赛安全,沿途设置了一些观察点.每个观察点派一个观 ...

  8. iOS全埋点解决方案-应用退出和启动

    前言 ​ 通过应用程序退出事件,可以分析应用程序的平均使用时长:通过应用程序的启动事件,可以分析日活和新增.我们可以通过全埋点方式 SDK 实现应用程序的退出和启动事件. 一.全埋点的简介 ​ 目前. ...

  9. MyBatis in

  10. MVCC多版本并发控制

    MVCC多版本并发控制 爱情小傻蛋关注 82019.09.28 23:23:37字数 4,740阅读 91,421 前提概要 什么是MVCC 什么是当前读和快照读? 当前读,快照读和MVCC的关系 M ...