刘文 + 原创作品转载请注明出处 + 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000
半个多学期过去了,Linux内核分析这门课也告一段落。一直以来对Linux内核的东西还是很感兴趣的,但是每次看到复杂而庞大的内核代码就望而生畏了。感谢孟宁老师的这么课,让我找到了正确的学习方法,那就是把最多的精力放到最关键的那部分代码的理解上,理解和分析代码中最关键的部分。不得不说,孟宁老师的《Linux内核分析》这门课,讲解深入浅出,真的值得一学,假如你能跟着孟宁老师认真的学下来,一定会有非常大的收获。
对Linux系统的理解
Linux系统和其他的操作系统本质上是一样的,是沟通应用程序和硬件之间的桥梁。Linux操作系统包含了shell交互程序,系统调用库,中断;系统调用内核的接口;操作系统内核具体的实现(信号处理,CPU调度,交换I/O块,内存的页交换,虚拟内存技术,文件系统,硬件驱动)。shell交互程序,系统调用库,中断实现了应用程序与操作系统的交互。系统调用内核的接口实现了上层的中断和系统调用与内核操作的接口,可以与操作系统内核交互。其中文件系统实现了对于磁盘的物理文件的管理,虚拟内存技术和页交换技术实现了内存的管理,信号处理实现了操作系统内部的相互通信,CPU调度实现了任务的调度和中断的处理。硬件驱动实现了操作系统与硬件的交互。
博客作业链接列表
1、点击打开链接 通过一个简单的C程序汇编代码理解计算机是怎么工作的
存储程序计算机工作模型、X86汇编基础、汇编一个简单的C程序分析其汇编指令执行过程
2、 从一个简单的mykernel来分析Linux系统工作过程
函数调用堆栈、借助Linux内核部分源代码模拟存储程序计算机工作模型及时钟中断、在mykernel基础上构造一个简单的操作系统内核
(一)用户态、内核态和中断处理过程
(二)系统调用概述
系统调用概述和系统调用的三层皮
(三)使用库函数API和C代码中嵌入汇编代码触发同一个系统调用
使用库函数API获取系统当前时间
C代码中嵌入汇编代码的方法(复习)
使用C代码中嵌入汇编代码触发系统调用获取系统当前时间
(一)给MenuOS增加time和time-asm命令
(二)使用gdb跟踪系统调用内核函数sys_time
(三)系统调用在内核代码中的工作机制和初始化
1. 系统调用在内核代码中的工作机制和初始化
2. 简化后便于理解的system_call伪代码
3. 简单浏览system_call和iret之间的主要代码
进程的描述
1. 进程描述符task_struct数据结构(一)
2. 进程描述符task_struct数据结构(二)
进程的创建
1. 进程的创建概览及fork一个进程的用户态代码
2. 理解进程创建过程复杂代码的方法
3. 浏览进程创建过程相关的关键代码
4. 创建的新进程是从哪里开始执行的?
5. 使用gdb跟踪创建新进程的过程
(一)预处理、编译、链接和目标文件的格式
1.可执行程序是怎么得来的
2.目标文件的格式ELF
3.静态链接的ELF可执行文件和进程的地址空间
(二)可执行程序、共享库和动态加载
1.装载可执行程序之前的工作
2.装载时动态链接和运行时动态链接应用举例
(三)可执行程序的装载
1.可执行程序的装载相关关键问题分析
2.sys_execve的内部处理过程
3.使用gdb跟踪sys_execve内核函数的处理过程
4.可执行程序的装载与庄生梦蝶的故事
5.浅析动态链接的可执行程序的装载
(一)进程切换的关键代码switch_to分析
1.进程进度与进程调度的时机分析
2.进程上下文切换相关代码分析
(二)Linux系统的一般执行过程
1.Linux系统的一般执行过程分析
2.Linux系统执行过程中的几个特殊情况
(三)Linux系统架构和执行过程概览
1.Linux操作系统架构概览
2.最简单也是最复杂的操作——执行ls操作
3.从CPU和内存的角度看Linux系统的执行
总结部分
通过这几周关于Linux内核的学习,Linux系统的工作原理有了一定的了解,并对Linux系统的操作更加熟悉。
在理论上,我印象最深刻的就是学会看懂一点汇编代码及其对应的入栈出栈的过程。其次是加深了对中断处理的理解,并跟堆栈的变化结合起来。再者是新学到了许多关
于系统调用的新知识,得知进程的创建、可执行程序的装载、进程的切换等与系统调用的关系。
在实践上,我对Linux下的各种命令的用法有了更全面的认识,如cd、ls、gcc等。通过实验,能够比较熟悉地使用vi编辑器修改代码。最重要的是知道如何使用gdb调试内
核,如:设置断点、查看代码、单步执行等操作。最后,还稍微学会了C语言中内嵌汇编的方式。
总而言之,这次的学习让我构建了一个对Linux内核的基本框架,但很多细节还需要一定的时间去巩固和补充。