《Linux内核分析》期末总结

Linux内核设计期中总结

版权声明:本文为博主原创文章,未经博主容许不得转载。


前八周博客汇总及总结

Linux内核设计第一周——从汇编语言出发理解计算机工做原理html

咱们学习了汇编语言的基础知识,这一部分和内核代码没有直接的关系,可是,老师具体带咱们了解了函数调用过程当中的堆栈变化,以及函数在调用的过程当中是如何传递参数的。这一部分是为了以后学习进程上下文切换、中断上下文切换打基础的。java

Linux内核设计第二周——操做系统工做原理linux

老师编写了一个简单小型的内核代码,并带领咱们阅读了其中的关键代码。主要介绍了my_ schedule函数、my_ start_ kernel函数以及本身编写的中断处理程序my_ time_ handler函数。利用这三个函数,就能够模拟内核进行中断上下文切换的过程。与之相关的,还定义了mypcd的数据结构,经过自定义进程PCB结构,理解进程调度级进程上下文切换的大体过程。windows

Linux内核设计第三周——构造一个简单的Linux系统数据结构

老师利用了一个简单的Linux内核MenuOS系统,来为咱们介绍了操做系统内核启动的过程。学习了如何使用gdb进行内核调试,经过在关键函数位置设置断点,单步调试,逐步分析每一句代码的做用。这一周最重要的部分就是教给咱们如何经过gdb调试学习内核代码,这个能力在以后的各个章节中都有体现。函数

Linux内核设计第四周——扒开系统调用三层皮(上)学习

第四周咱们学习了系统调用的相关知识,理解了系统调用是沟通用户态和内核态的枢纽,是二者间联系的通道。其次,咱们经过编写汇编代码,来理解系统调用机制。要注意,使用汇编语言编写系统调用代码时,要注意寄存器传递参数和堆栈传递参数的区别,不要弄混,在系统调用中,使用的是寄存器传递参数。操作系统

Linux内核设计第五周——扒开系统调用三层皮(下)线程

第五周是在第四周的基础上,将本身用汇编代码修改的系统调用函数,添加到MenuOS中,这就须要咱们修改内核代码,增长新的系统调用,以及学习如何从新加载,编译写好的代码。在这个周,老师重点带咱们分析了系统调用是如何返回的,即内核如何执行从syscall_ call到iret的过程,包括一些具体的细节。设计

Linux内核设计第六周——进程的描述和建立

主要讲了进程的描述和建立,具体到进程的控制块pcb的组织形式,以及进程建立设计到的数据结构;详细分析了task_ struct结构的组成,以及其各部分的用途;分析了fork系统调用的执行过程和返回原理,强调了fork建立的子进程时经过ret_ from_ fork返回的;从sys_ clone代码出发,分析了do_ fork函数执行的关键过程。

Linux内核设计第七周——可执行程序的装载

本周主要讲解了Linux系统中的文件格式——ELF格式,具体到ELF格式的起源发展、ELF文件格式的分类、具体文件头的组成等。还介绍了程序是如何在计算机中执行的,即通过预编译、编译、汇编、连接的过程完成的。同时介绍了可执行程序的静态加载过程和动态加载过程。

Linux内核设计第八周——进程的切换和系统的通常执行过程

本周主要围绕进程的切换讲解,分析了I/O型进程调度和CPU密集型进程调度的区别和设计原则,介绍了批处理进程、实时进程和交互式进程的优劣;以及Linux内核的优先级策略的设计;分析了用户态进程调度和内核态进程调度的不一样;分析了进程上下文切换过程当中,关键部分的代码,包括堆栈的变化,以及内核态堆栈中传递参数的过程;分析汇编代码,从细节出发,分析先后两个进程切换的交界点;最终,总结出Linux系统的通常执行过程。

个人一些总结和理解

  • 0、具体理解详见博客汇总中的每周总结。

  • 一、内核设计是针对操做系统而言的。不一样的操做系统内核的设计是不一样的。

(咱们为何研究linux系统是由于Linux系统的内核代码是开源的,咱们能够直接分析它的源代码,而windows系统的内核代码是私有的,咱们不易得到,不过,内核的设计虽然有细节的差别,可是总的思路和原理是共通的)。

  • 二、对linux操做系统的理解。

我认为linux系统是这样运行的:

  • 首先由0号进程idle建立其子进程1号进程init和2号进程kthreadd;
  • 1号进程init是全部用户态进程的祖先,init将会建立新的子进程用来执行用户命令;
  • 2号进程kthreadd是全部内核线程的祖先。
  • 在这个过程当中,有可能会发生冲突,根据进程优先级的不一样,或者该进程是不是I/O密集型进程来决定谁先抢占CPU,这涉及到进程调度策略,而且在这个过程当中会发生进程切换。
  • 进程切换的具体细节,就涉及到内核堆栈和用户堆栈之间数据保存和交换,即保存进程上下文。
  • 进程是依附于程序存在的,这就须要读取文件信息,经过预编译、编译、汇编、连接,生成可执行未见,才能执行。Linux中大部分可执行文件都是ELF格式,经过该格式文件头信息,能够找到程序执行的起点。
  • 二、在学习《Linux内核分析》课程中最大的收获?
  • 第一次了解了操做系统内核的相关结构和设计原理;
  • 被内核设计者严谨的逻辑和巧妙的设计所折服;
  • 虽然,学完linux内核分析以后我并不能本身编写一个小型的操做系统,可是我学会了分析内核代码的方法,如何使用gdb调试内核代码,以及在调试的过程当中,理解内核代码的具体实现。
  • 授人以鱼不如授人以渔。我感受学习这么课我最大的收获,就是学会了学习内核代码的方法,这远比理解一种内核设计重要的多,也有用的多。
  • 三、学习完《Linux内核分析》课程后您最大的遗憾是什么?

我最大的遗憾就是,在进程课程的过程当中,对内核代码没有彻底理解,只是对关键代码有必定的了解,我相信内核部分的学习远远不是短短几个周就能够学习的充分的,我应该在之后的学习中,多多关注内核部分的设计和实现,必要的时候,亲自动手实践。在实践的过程当中,加深对所学知识的理解。

相关文章
相关标签/搜索