您的位置:首页 > 运维架构 > Linux

linux内核学习总结

2016-05-01 18:48 381 查看

Linux内核学习总结

20135336

王维臻

原创作品转载请注明出处 + 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000

学习感想

当正在运行的进程等待其他的系统资源时,Linux内核将取得CPU的控制权,并将CPU分配给其他正在等待的进程,这就是进程切换。内核中的调度算法决定将CPU分配给哪一个进程。

Linux系统有一个进程控制表(process table),一个进程就是其中的一项。进程控制表中的每一项都是一个task_struct结构,在task_struct结构中存储各种低级和高级的信息,包括从一些硬件设备的寄存器拷贝到进程的工作目录的链接点。进程控制表既是一个数组,又是一个双向链表,同时又是一个树,其物理实现是一个包括多个指针的静态数组。系统启动后,内核通常作为某一个进程的代表。一个指向task_struct的全局指针变量current用来记录正在运行的进程。

刚开始,我认为主要的问题在于你知道不知道,而不是理解不理解,某个子系统的实现采用了某种策略、方法,而在学习中需要做的就是知道有这么一回事儿,然后才是理解所描述的策略或者方法。但是经过老师讲解后,才发现理解更重要。

学完课程后,能在自己的脑海中建立起内核的大体框架,理解各个子系统的设计理念和构建思想,这些理念和思想会从宏观上呈献给你清晰的脉络,就像一个去除了枝枝叶叶的大树的主干,一目了然;当然,肯定还会涉及到具体的实现方法、函数,但是此时接触到的函数或者方法位于内核实现的较高的层次,是主(要)函数,已经了解到这些函数,针对的是哪些设计思想,实现了什么样的功能,达成了什么样的目的。至于该主函数所调用的其它的辅助性函数就等同于枝枝叶叶了,不必太早就去深究。此时,也就初步建立起了内核子系统框架和代码实现之间的关联,关联其实很简单,比如一看到某个函数名字,就想起这个函数是针对哪个子系统的,实现了什么功能。

Linux内核分析博客链接

学习链接总结

LINUX内核分析第一周学习总结——计算机是如何工作的

LINUX内核分析第二周学习总结——操作系统是如何工作的

LINUX内核分析第三周学习总结——构造一个简单的Linux系统MenuOS

LINUX内核分析第四周学习总结——扒开应用系统的三层皮(上)

LINUX内核分析第五周学习总结——扒开应用系统的三层皮(下)

LINUX内核分析第六周学习总结——进程的描述和进程的创建

LINUX内核分析第七周学习总结——可执行程序的装载

LINUX内核分析第八周学习总结——进程的切换和系统的一般执行过程

学习知识总结

1.计算机是如何工作的?

存储程序计算机工作模型

X86汇编基础

汇编一个简单的C程序分析其汇编指令执行过程

2.操作系统是如何工作的?

函数调用堆栈

借助Linux内核部分源代码模拟存储程序计算机工作模型及时钟中断

在mykernel基础上构造一个简单的操作系统内核

3.构造一个简单的Linux系统MenuOS

Linux内核源代码简介
构造一个简单的Linux系统

跟踪调试Linux内核的启动过程

4.扒开系统调用的三层皮(上)

(一)用户态、内核态和中断处理过程

(二)系统调用概述

系统调用概述和系统调用的三层皮

(三)使用库函数API和C代码中嵌入汇编代码触发同一个系统调用

使用库函数API获取系统当前时间

C代码中嵌入汇编代码的方法(复习)

使用C代码中嵌入汇编代码触发系统调用获取系统当前时间

5.扒开应用系统的三层皮(下)

(一)给MenuOS增加time和time-asm命令

(二)使用gdb跟踪系统调用内核函数sys_time

(三)系统调用在内核代码中的工作机制和初始化

  1. 系统调用在内核代码中的工作机制和初始化

  2. 简化后便于理解的system_call伪代码

  3. 简单浏览system_call和iret之间的主要代码

6.进程的描述和进程的创建

进程的描述

进程描述符task_struct数据结构

进程描述符task_struct数据结构

进程的创建

进程的创建概览及fork一个进程的用户态代码

理解进程创建过程复杂代码的方法

浏览进程创建过程相关的关键代码

创建的新进程是从哪里开始执行的?

使用gdb跟踪创建新进程的过程

7.可执行程序的装载

(一)预处理、编译、链接和目标文件的格式

1.可执行程序是怎么得来的

2.目标文件的格式ELF

3.静态链接的ELF可执行文件和进程的地址空间

(二)可执行程序、共享库和动态加载

1.装载可执行程序之前的工作

2.装载时动态链接和运行时动态链接应用举例

(三)可执行程序的装载

1.可执行程序的装载相关关键问题分析

2.sys_execve的内部处理过程

3.使用gdb跟踪sys_execve内核函数的处理过程

4.可执行程序的装载与庄生梦蝶的故事

5.浅析动态链接的可执行程序的装载

8.进程的切换和系统的一般执行过程

(一)进程切换的关键代码switch_to分析

1.进程进度与进程调度的时机分析

2.进程上下文切换相关代码分析

(二)Linux系统的一般执行过程

1.Linux系统的一般执行过程分析

2.Linux系统执行过程中的几个特殊情况

3.内核与舞女

(三)Linux系统架构和执行过程概览

1.Linux操作系统架构概览

2.最简单也是最复杂的操作——执行ls操作

3.从CPU和内存的角度看Linux系统的执行

总结部分

通过八周的学习,深刻认识到自己的基础薄弱,同时也在讨论中才知道自己的基础知识欠缺。课上分析的内核源码,其数据结构和算法简直让人叹为观止。课堂我们也只是查看了部分核心源码,希望在今后我可以学习更多。学习好简单精练的内核代码,使我们学习信息安全的人的追求。 linux内核,主要包括进程管理、内存管理、设备驱动、文件系统,从分析内核了解到整个系统是如何工作的,如何控制管理资源分配,进程切换并执行。各种策略和结构让系统运行时更有效率。只有懂得其中的基本工作机制才能够有效的裁剪内核,再重新编译内核,生成高效、可移植的内核模块。

对内核有了进一步的认识,对于源码能够自己去搜索查看,能通过阅读部分核心源码来验证老师所说的理论。通过这次课,就像老师所说的,有时候我们可以先动脑想一下系统是如何操作如何管理的,然后再看源码验证纠正自己的想法,这样的内核学习方式更加有效,毕竟内核源码博大精深,想要研究透彻不是一朝一夕可以做到的。总结下我这次课程的学习,遗憾还有好多没有熟练的技巧,到现在还没有把所有的知识点串起来,还需要多花时间理一理,能够有更清晰的思路才能更好的学习好内核。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: