Linux是开源的操作系统,其系统所有源代码都是开放的,这对研究操作系统是十分方便的。

Linux内核发展至今,版本特别多,比较经典的是2.6内核。所以本文以研究 2.6内核为主。可是内核比较大,从哪里入手是一个十分重要的问题。显然,一开始就看内核源代码是不切实际的,是可能被细节搞晕的。在计算机专业的课程中我们都学习过操作系统课程,对操作系统的大概功能有所了解,而那些linux内核的书也对linux内核框架作了整体上的介绍,这些都是基础知识。也许我们没有时间去研究清楚操作系统的每一个细节,但是我们却可以研究我们感兴趣的部分。

面对内核源码,最直接的一个问题就是如何编译内核,如何安装新内核到系统中? 内核编译安装好后, 就可以加载运行了。而grub是如何加载内核的?grub是怎么实现的?elf文件格式是什么样的?进而引出程序的编译、链接、加载等问题。研究一个开源程序的方法之一就是跟踪调试程序,然而内核不是一般程序,不能直接调试,因此需要搭建内核调试环境。

操作系统分为进程管理、内存管理、设备管理、文件系统、网络等部分,针对某一模块学习时,又会提出更多的问题。研究某一确定模块时,可以假定其他模块是已知的,而不必要陷入其他模块的细节中去。

研究内核的深度也各有不同,有以下四 级别:

  1. 只看操作系统相关书藉,了解其原理,不看源码。
  2. 在源码中能找到对应模块的实现,了解部分技巧与细节。
  3. 可以修改源码以实现自己想要的功能。
  4. 可以在内核中实现一套独立的系统。

自顶向下的研究内核:

如进程管理这一部分,本打算从CPU加电起到进程相关数据结构初始化,进程创建,进程调度这样一步步研究,结果发现在对源码一无所知的情况下,看进程初始化,又陷入了中断、文件系统、内存的初始化细节中。所以打算从进程调度 进程创建开始研究。

另外,程序=数据结构+算法。

先研究数据结构(task_struct)中各字段的作用,再研究调度算法,并分析对应源代码,从宏观上把握进程调度框架,再从细节上逐步深究。

现在内核大多使用面向对象的思想,可以从对象的角度考虑问题。

内核代码较多,搞清楚内核代码组织的结构和原理。

内核设计思考:

为什么这么设计? 考虑了哪些因素? 有什么要求?

怎么设计? 这样设计有什么好处和坏处?

内核中的数据结构之间的关系:

同种数据结构之间如何组织?(树,链表,有个链表的初始化的头结点)

不同数据结构之间的关系?指针指向?用个数字标识符,然后用hash表关联数字与指针?

阅读源码的工具

内核源码

GDB GDBTUI DDD跟踪 source insight

SystemTap stap  kdb

静态阅读

修改源码验证一些问题

写一些应用

下面是Linux操作系统整体架构(图片来源于国嵌PPT中)

Linux内核架构

Linux内核学习开始相关推荐

  1. Linux内核学习--内存管理模块

    Linux内核学习--内存管理模块 首先,Linux内核主要由五个部分组成,他们分别是:进程调度模块.内存管理模块.文件系统模块.进程间通信模块和网络接口模块. 本部分所讲的内存是内存管理模块,其主要 ...

  2. linux内核学习之三:linux中的32位与64位

    linux内核学习之三:linux中的"32位"与"64位" 在通用PC领域,不论是windows还是linux界,我们都会经常听到"32位" ...

  3. Linux疑难杂症解决方案100篇(十五)-万字长文带你深入Linux 内核学习:环境搭建和内核编译

    一.linux内核学习之一:环境搭建--安装Debian7.3 本系列文章假设读者已对linux有一定的了解,其实学习linux内核不需要有很深的关于linux的知识,只需要了解以下内容:linux基 ...

  4. 操作系统进程学习(Linux 内核学习笔记)

    操作系统进程学习(Linux 内核学习笔记) 进程优先级 并非所有进程都具有相同的重要性.除了大多数我们所熟悉的进程优先级之外,进程还有不同的关键度类别,以满足不同需求.首先进程比较粗糙的划分,进程可 ...

  5. 我的Linux内核学习笔记

    在开始今天的内容之前,其实有一些题外话可以和大家分享一下.自从工作以来,我个人一直都有一个观点.那就是怎么样利用简单的代码来说明开发中的问题,或者是解释软件中的原理,这是一个很高的学问.有些道理看上去 ...

  6. Linux内核学习-字符设备驱动学习(二)

    在Linux内核学习-字符设备驱动学习(一)中编写字符设备驱动的一种方法,但是需要手动创建设备节点. 有没有能够自动的创建设备节点的呢? 有!使用class_create()和device_creat ...

  7. Linux内核学习编译流程

    一.前言 linux内核学习 1.安装vmware虚拟机或者virtualbox,再安装发行版本linux 2.www.kernel.org,挑选一个内核版本 3.进行解压并编译 4.自己写一些模块( ...

  8. linux网卡配子接口,linux 内核学习(2).

    linux 内核学习(2). (2011-07-18 01:45:46) 标签: 杂谈 linux内核源码树基本构造 由于linux的原代码继续在改变,因而不可能给出太翔实的内容,只能指出一个特异的驱 ...

  9. linux 内核 课程,Linux内核分析课程-全面剖析Linux内核技术 揭开Linux内核的面纱 Linux内核学习视频教 ......

    课程名称 Linux内核分析课程-全面剖析Linux内核技术 揭开Linux内核的面纱 Linux内核学习视频 课程目录 (1)\1, 计算机是如何工作的?:目录中文件数:0个 (2)\2, 操作系统 ...

  10. Linux内核学习路线

    [推荐阅读] 手把手教你如何编写一个Makefile文件 一文讲解,Linux内核--内存管理(建议收藏) 当Linux内存耗尽时,改如何处理! 一文看懂页面置换算法 内核学习路线 很多同学接触Lin ...

最新文章

  1. JAVA WEB快速入门之从编写一个JSP WEB网站了解JSP WEB网站的基本结构、调试、部署...
  2. 数学建模 概率论与数理统计
  3. ELSE 技术周刊(2017.11.20期)
  4. sklearn综合示例3:逻辑回归
  5. 前端入门教程(七)CSS属性设置
  6. mysql 判断等于空字符串_mysql 判断null 和 空字符串
  7. ResNet详解(转)
  8. 局域网如何找路由器外的计算机,用路由组建小局域网,怎么使局域网之外的计算机共享到打印机?...
  9. html 域名随机跳转_看一眼就会的 HTML 小游戏搭建!
  10. HUAWEI CE6870 IPv6 OSPFv3 配置
  11. python 分类 投票_使用python+redis实现文章发布,投票,分组排名功能
  12. 华为5G空口新技术(2015年)
  13. 牛客假日团队赛6 F. Mud Puddles
  14. AR涂涂乐⭐三、 C#实现识别图进入扫描框显示绿色,未进入为红色功能
  15. 近几年Linux TCP相关的漏洞被夸大了
  16. npm install 报错 gyp info it worked if it ends with ok
  17. ACM2023SWJTU寒假选拔赛2不完全题解
  18. php中的乐观锁和悲观锁
  19. c++逆天改命进阶--map_set
  20. 为什么canal数据只推送到kafka topic的其中一个分区中

热门文章

  1. 计算机优秀毕业生访谈,访谈 | 信息院优秀毕业生经验分享
  2. html video播放rmvb,HTML如何播放rmvb格式的视频??要可以播放的代码。。。。
  3. Blender - 武器icon贴图渲染 阴影角度
  4. 基于角色的权限管理系统设计思路
  5. html修改全局字体,最好CSS全局字体写法
  6. ******实战案例解析
  7. SerialVersionUID [Java]
  8. 自动升级WordPress失败解决方法
  9. 从移动硬盘安装计算机系统文件,硬盘之前做成了移动硬盘,现在装回电脑上重装系统时分区认不到盘,怎么办?...
  10. 2019年下半年网络管理员考试上午真题(答案+解析)