博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux内核学习收获
阅读量:2172 次
发布时间:2019-05-01

本文共 1416 字,大约阅读时间需要 4 分钟。

Linux内核分析》MOOC课程

通过对MOOC Linux内核分析课程的学习,学到了以下一些知识点:
一、函数的调用堆栈:
学习了一部分汇编的基础,通过反汇编一个C语言程序,了解了函数调用堆栈的详细过程。
函数在调用的时候,参数是通过压栈来传递的,在函数的内部,临时的变量也是通过储存在栈中,自动释放的。通过描绘一个简单的C程序的堆栈变化,理清了在程序执行中,栈是如何增长和缩减的。
博客地址:
二、通过学习精简的内核Mykernel,了解到linux内核进程调度的核心工作。
了解到进程的调度和时间中断的概念。知道了一个进程在内核中,被描述为一个结构体,储存了进程的pid,运行状态,堆栈,以及sp和ip等重要信息。
通过分析my_schedule的汇编代码,了解到了进程切换的关键过程。我们可以认为一个进程相当于一个堆栈,每个进程有自己的堆栈空间。如果将ebp和esp修改为另一个进程的ebp和esp,并且完成一些寄存器的保存,就相当于完成的进程的切换。
博客地址:
三、学习了linux内核的启动过程:
通过自己编译内核源码,并且调试了启动过程,了解到内核在启动时经历了哪些初始化。
内核几乎所有的初始化都是在start_kernel进行的,在start_kernel之前主要是汇编代码完成的一些操作。
在start_kernel中会初始化中断向量,内存管理模块,调度模块等一系列初始化。在最后的rest_init()中会初始化0号进程和1号用户态进程,然后最终启动系统。
博客地址:
四:系统调用过程的理解:
学习了AT&T的内联汇编编写方法,选择了一个系统调用,使用C语言调用库函数和汇编进行系统调用的两种来完成。最终的效果是一样的。
学习了系统调用的机制,Linux实现系统调用则是利用了i386体系结构的软件中断,使用int $0x80产生128号向量的编程异常。
博客地址:
五、跟踪sys_mkdir系统调用
将上一节编写的代码加入到MenuOS中,然后使用GDB调试代码,跟踪系统调用的过程。通过分析系统调用的源码,发现了很多宏定义。这些宏定义很难理解,通过查找资料,学习了C语言宏的一些技巧,例如宏的双井号运算符,单井号运算符,可变参数表。
通过跟踪系统调用的代码,可以分析出系统调用的一个简要的流程图:

这里写图片描述

博客地址:
六:分析fork的执行过程
通过GDB调试MenuOS了解到fork的执行过程,通过流程图可以表现出来:
这里写图片描述
七:跟踪sys_execve的执行过程
通过GDB跟踪sys_execve的执行过程,可以画出如下执行的流程图:
这里写图片描述
八、分析schedule()的执行过程
通过GDB调试MenuOS,跟踪代码,可以画出schedule的执行流程:
这里写图片描述
博客地址:

通过对比线下课程和线上课程,MOOC部分的内容和深度是略少于线下部分的,这也受限于MOOC的课程时间比线下少很多。

但是MOOC部分与实验结合,学过之后就会对知识有比较清晰的认识,而且写博客也是对课程学习内容的一种回顾和总结。通过本课程的学习,最大的收货就是对Linux内核从完全陌生到有了一个认识的框架。使用GDB调试内核对理解系统调用,进程调度有了很深刻的认识。
一个比较大的遗憾,线下部分课程内容很多,而且很难理解,没有和MOOC课程结合起来学习,造成了一些理解障碍,如果可以将文件系统加载,内存管理等过程调试一下应该会有更深刻的认识。

你可能感兴趣的文章
PHP项目用xhprof性能分析(安装及应用实例)
查看>>
composer安装YII
查看>>
Sublime text3快捷键演示
查看>>
sublime text3 快捷键修改
查看>>
关于PHP几点建议
查看>>
硬盘的接口、协议
查看>>
VLAN与子网划分区别
查看>>
Cisco Packet Tracer教程
查看>>
02. 交换机的基本配置和管理
查看>>
03. 交换机的Telnet远程登陆配置
查看>>
微信小程序-调用-腾讯视频-解决方案
查看>>
phpStudy安装yaf扩展
查看>>
密码 加密 加盐 常用操作记录
查看>>
TP 分页后,调用指定页。
查看>>
Oracle数据库中的(+)连接
查看>>
java-oracle中几十个实用的PL/SQL
查看>>
PLSQL常用方法汇总
查看>>
几个基本的 Sql Plus 命令 和 例子
查看>>
PLSQL单行函数和组函数详解
查看>>
Oracle PL/SQL语言初级教程之异常处理
查看>>