Linux内核学习开始
Linux是开源的操作系统,其系统所有源代码都是开放的,这对研究操作系统是十分方便的。
Linux内核发展至今,版本特别多,比较经典的是2.6内核。所以本文以研究 2.6内核为主。可是内核比较大,从哪里入手是一个十分重要的问题。显然,一开始就看内核源代码是不切实际的,是可能被细节搞晕的。在计算机专业的课程中我们都学习过操作系统课程,对操作系统的大概功能有所了解,而那些linux内核的书也对linux内核框架作了整体上的介绍,这些都是基础知识。也许我们没有时间去研究清楚操作系统的每一个细节,但是我们却可以研究我们感兴趣的部分。
面对内核源码,最直接的一个问题就是如何编译内核,如何安装新内核到系统中? 内核编译安装好后, 就可以加载运行了。而grub是如何加载内核的?grub是怎么实现的?elf文件格式是什么样的?进而引出程序的编译、链接、加载等问题。研究一个开源程序的方法之一就是跟踪调试程序,然而内核不是一般程序,不能直接调试,因此需要搭建内核调试环境。
操作系统分为进程管理、内存管理、设备管理、文件系统、网络等部分,针对某一模块学习时,又会提出更多的问题。研究某一确定模块时,可以假定其他模块是已知的,而不必要陷入其他模块的细节中去。
研究内核的深度也各有不同,有以下四 级别:
- 只看操作系统相关书藉,了解其原理,不看源码。
- 在源码中能找到对应模块的实现,了解部分技巧与细节。
- 可以修改源码以实现自己想要的功能。
- 可以在内核中实现一套独立的系统。
自顶向下的研究内核:
如进程管理这一部分,本打算从CPU加电起到进程相关数据结构初始化,进程创建,进程调度这样一步步研究,结果发现在对源码一无所知的情况下,看进程初始化,又陷入了中断、文件系统、内存的初始化细节中。所以打算从进程调度 进程创建开始研究。
另外,程序=数据结构+算法。
先研究数据结构(task_struct)中各字段的作用,再研究调度算法,并分析对应源代码,从宏观上把握进程调度框架,再从细节上逐步深究。
现在内核大多使用面向对象的思想,可以从对象的角度考虑问题。
内核代码较多,搞清楚内核代码组织的结构和原理。
内核设计思考:
为什么这么设计? 考虑了哪些因素? 有什么要求?
怎么设计? 这样设计有什么好处和坏处?
内核中的数据结构之间的关系:
同种数据结构之间如何组织?(树,链表,有个链表的初始化的头结点)
不同数据结构之间的关系?指针指向?用个数字标识符,然后用hash表关联数字与指针?
阅读源码的工具
内核源码
GDB GDBTUI DDD跟踪 source insight
SystemTap stap kdb
静态阅读
修改源码验证一些问题
写一些应用
下面是Linux操作系统整体架构(图片来源于国嵌PPT中)
Linux内核架构
Linux内核学习开始相关推荐
- Linux内核学习--内存管理模块
Linux内核学习--内存管理模块 首先,Linux内核主要由五个部分组成,他们分别是:进程调度模块.内存管理模块.文件系统模块.进程间通信模块和网络接口模块. 本部分所讲的内存是内存管理模块,其主要 ...
- linux内核学习之三:linux中的32位与64位
linux内核学习之三:linux中的"32位"与"64位" 在通用PC领域,不论是windows还是linux界,我们都会经常听到"32位" ...
- Linux疑难杂症解决方案100篇(十五)-万字长文带你深入Linux 内核学习:环境搭建和内核编译
一.linux内核学习之一:环境搭建--安装Debian7.3 本系列文章假设读者已对linux有一定的了解,其实学习linux内核不需要有很深的关于linux的知识,只需要了解以下内容:linux基 ...
- 操作系统进程学习(Linux 内核学习笔记)
操作系统进程学习(Linux 内核学习笔记) 进程优先级 并非所有进程都具有相同的重要性.除了大多数我们所熟悉的进程优先级之外,进程还有不同的关键度类别,以满足不同需求.首先进程比较粗糙的划分,进程可 ...
- 我的Linux内核学习笔记
在开始今天的内容之前,其实有一些题外话可以和大家分享一下.自从工作以来,我个人一直都有一个观点.那就是怎么样利用简单的代码来说明开发中的问题,或者是解释软件中的原理,这是一个很高的学问.有些道理看上去 ...
- Linux内核学习-字符设备驱动学习(二)
在Linux内核学习-字符设备驱动学习(一)中编写字符设备驱动的一种方法,但是需要手动创建设备节点. 有没有能够自动的创建设备节点的呢? 有!使用class_create()和device_creat ...
- Linux内核学习编译流程
一.前言 linux内核学习 1.安装vmware虚拟机或者virtualbox,再安装发行版本linux 2.www.kernel.org,挑选一个内核版本 3.进行解压并编译 4.自己写一些模块( ...
- linux网卡配子接口,linux 内核学习(2).
linux 内核学习(2). (2011-07-18 01:45:46) 标签: 杂谈 linux内核源码树基本构造 由于linux的原代码继续在改变,因而不可能给出太翔实的内容,只能指出一个特异的驱 ...
- linux 内核 课程,Linux内核分析课程-全面剖析Linux内核技术 揭开Linux内核的面纱 Linux内核学习视频教 ......
课程名称 Linux内核分析课程-全面剖析Linux内核技术 揭开Linux内核的面纱 Linux内核学习视频 课程目录 (1)\1, 计算机是如何工作的?:目录中文件数:0个 (2)\2, 操作系统 ...
- Linux内核学习路线
[推荐阅读] 手把手教你如何编写一个Makefile文件 一文讲解,Linux内核--内存管理(建议收藏) 当Linux内存耗尽时,改如何处理! 一文看懂页面置换算法 内核学习路线 很多同学接触Lin ...
最新文章
- JAVA WEB快速入门之从编写一个JSP WEB网站了解JSP WEB网站的基本结构、调试、部署...
- 数学建模 概率论与数理统计
- ELSE 技术周刊(2017.11.20期)
- sklearn综合示例3:逻辑回归
- 前端入门教程(七)CSS属性设置
- mysql 判断等于空字符串_mysql 判断null 和 空字符串
- ResNet详解(转)
- 局域网如何找路由器外的计算机,用路由组建小局域网,怎么使局域网之外的计算机共享到打印机?...
- html 域名随机跳转_看一眼就会的 HTML 小游戏搭建!
- HUAWEI CE6870 IPv6 OSPFv3 配置
- python 分类 投票_使用python+redis实现文章发布,投票,分组排名功能
- 华为5G空口新技术(2015年)
- 牛客假日团队赛6 F. Mud Puddles
- AR涂涂乐⭐三、 C#实现识别图进入扫描框显示绿色,未进入为红色功能
- 近几年Linux TCP相关的漏洞被夸大了
- npm install 报错 gyp info it worked if it ends with ok
- ACM2023SWJTU寒假选拔赛2不完全题解
- php中的乐观锁和悲观锁
- c++逆天改命进阶--map_set
- 为什么canal数据只推送到kafka topic的其中一个分区中
热门文章
- 计算机优秀毕业生访谈,访谈 | 信息院优秀毕业生经验分享
- html video播放rmvb,HTML如何播放rmvb格式的视频??要可以播放的代码。。。。
- Blender - 武器icon贴图渲染 阴影角度
- 基于角色的权限管理系统设计思路
- html修改全局字体,最好CSS全局字体写法
- ******实战案例解析
- SerialVersionUID [Java]
- 自动升级WordPress失败解决方法
- 从移动硬盘安装计算机系统文件,硬盘之前做成了移动硬盘,现在装回电脑上重装系统时分区认不到盘,怎么办?...
- 2019年下半年网络管理员考试上午真题(答案+解析)