期末总结20135320赵瀚青LINUX内核分析与设计期末总结

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

对LINUX内核分析与设计这门课程的理解

LINUX内核在我看来就是操作系统和深入理解计算机系统的结合。Linux是一种开源电脑操作系统内核。它是一个用C语言写成,符合POSIX标准的类Unix操作系统。我觉得LINUX操作系统和WINDOWS操作系统最大的不同就是,WINDOWS操作系统的内核源代码是不公开的,也不共享,这样一些编程的爱好者无法参与自己的思想,但是这样有利于形成自己的逻辑体系,LINUX则相反,各个编程爱好者可以提交自己的想法,一同进步。
而从体系结构上来看Linux 内核实现了很多重要的体系结构属性。在或高或低的层次上,内核被划分为多个子系统。Linux 也可以看作是一个整体,因为它会将所有这些基本服务都集成到内核中。这与微内核的体系结构不同,后者会提供一些基本的服务,例如通信、I/O、内存和进程管理,更具体的服务都是插入到微内核层中的。
而我认为,LINUX操作系统最重要的就是,进程的创建,可执行程序的装载以及进程的切换。我认为一个操作系统的运行,无疑是需要各个进程相互配合。而如何很好的调用这些进程,同时又不降低处理器的处理速度,以及用户的体验,则是衡量一个操作系统优劣的标准。而堆栈我觉是理解一个程序的核心,它反映了代码中各个函数的调用关系,以及占用内存的情况。而本学期理解LINUX内核最重要的方式也是通过gdb调试,看这些操作系统行为究竟是如何发生的,存在什么,调用了什么,以及是如何结束的。上述就是我对这门课的理解,如果有失偏颇,还请老师见谅

链接总结

第一周学习笔记:http://www.cnblogs.com/5320zhq/p/5225661.html
第二周学习笔记:http://www.cnblogs.com/5320zhq/p/5246702.html
第三周学习笔记:http://www.cnblogs.com/5320zhq/p/5270056.html
第四周学习笔记:http://www.cnblogs.com/5320zhq/p/5299100.html
第五周学习笔记:http://www.cnblogs.com/5320zhq/p/5317422.html
第六周学习笔记:http://www.cnblogs.com/5320zhq/p/5339327.html
第七周学习笔记: http://www.cnblogs.com/5320zhq/p/5361310.html
第八周学习笔记:http://www.cnblogs.com/5320zhq/p/5388756.html
期中总结:http://www.cnblogs.com/5320zhq/p/5408103.html

每周学习内容概括

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

  • 冯诺依曼体系结构
  • X86汇编基础
  • 汇编一个简单的C程序分析其汇编指令执行过程

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

  • 函数调用堆栈
  • 借助Linux内核部分源代码模拟存储程序计算机工作模型及时钟中断
  • 在mykernel基础上构造一个简单的操作系统内核

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

  • Linux内核源代码简介
  • 构造一个简单的Linux系统
  • 跟踪调试Linux内核的启动过程

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

  • 用户态、内核态和中断处理过程
  • 系统调用概括
  • 使用库函数API获取系统当前时间
  • 使用C代码中嵌入汇编代码触发系统调用获取系统当前时间

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

  • 给MenuOS增加time和time-asm命令
  • 使用gdb跟踪系统调用内核函数sys_time
  • 系统调用在内核代码中的工作机制和初始化
系统调用在内核代码中的工作机制和初始化,简化后便于理解的system_call伪代码,简单浏览system_call和iret之间的主要代码。

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

  • 进程的描述
  • 进程的创建
进程的创建概览及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系统执行过程中的几个特殊情况


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

1.Linux操作系统架构概览

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

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

心得与体会以及遗憾

本学期学了LINUX内核分析与设计最大的感受我觉得可以分为以下四点来说

1、拥有了每周定时学习的习惯,以前的学习大多数为突击式学习, 快到考试或者快到测试才突然学习,但是本门课不允许这种行为,每周要看视频,做实验,以及小测,根本不可能堆积在一下做完,也不可能理解好知识,只有每天学习一点,慢慢理解,才能将一周的内容理解完全。

2、第二点就是动手操作能力得到了提高,以前的大多数课程都是学习书本上的知识,但是这门课学到了许多操作的知识,例如用gdb调试程序,可以让我们理解程序的堆栈变化,以及各个函数之间的调用情况。

3、第三点就是养成了写笔记的习惯,每周的博客,以及读书笔记,让我养成了将重要的知识点记下来的习惯,不一定要写在博客上,但是总结成几个小点是十分有用的解决方式。

4、第四点也是最重要的一点就是学会了自己动手解决问题,以前碰到问题,大多数都是放弃,或者是等着老师讲,但是每周实验,让我们必须要自己去解决,要么需要去百度,或者请教同学或者老师,然后解决了问题的那种成就感,也是以前从未有过的体验。

遗憾之处

遗憾之处总的来说可以概括为两点

对老师不要求的问题没有深入研究,每次实验或者视频,老师都会讲到一些比较高深的东西,这些东西不理解,或者说在百度上也没有明确解释的时候,往往就不了了之,没有想办法再去深究,这也是我以后需要加强的地方。

还有一个遗憾之处就是对这门课还没有一个明确的系统,感觉理解的知识点都是分散的,没有整合在一起,用一条线串起来,但是相信在日后的学习中我能够克服这些问题,更加好的投入未来的学习中。

参考资料

  • 360百科LINUX内核讲解
  • cindy_忻博客
原文地址:https://www.cnblogs.com/5320zhq/p/5443253.html