zoukankan      html  css  js  c++  java
  • Linux内核学习总结

    Linux内核学习总结

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

    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.进程的描述和进程的创建

    进程的描述

    1. 进程描述符task_struct数据结构(一)
    2. 进程描述符task_struct数据结构(二)

    进程的创建

    1. 进程的创建概览及fork一个进程的用户态代码
    2. 理解进程创建过程复杂代码的方法
    3. 浏览进程创建过程相关的关键代码
    4. 创建的新进程是从哪里开始执行的?
    5. 使用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系统的理解及学习Linux内核的心得

          首先,上个学期开始接触Linux,这次又通过这门课的学习,加深了对操作系统理论的理解,知道了Linux系统是如何工作的,如何通过代码阅读、调试去跟踪验证Linux系统的运行机制。其次,Linux作为一个极其成功的操作系统,其内核纷繁复杂、博大精深,我个人学习起来也是相当困难。虽然完成了网课、看了课本,孟老师您也讲得很幽默,但我还是感觉自己刚刚开始学习,而且需要在深入挖掘的东西还有很多很多。

          通过半个学期的学习,我认为重要的不是学习到了多少内核代码(其实也很重要);但更重要重要的是学习方法,即从何处着手学习Linux内核,例如:如何调试内核、如何看懂内核中的汇编代码,如何分析系统调用等。这也是我学习之后最大的收获。总之,虽然网课结束了但学习还没有结束,继续加油~Linux是一个多进程的操作系统,所以,其他的进程必须等到正在运行的进程空闲CPU后才能运行。当正在运行的进程等待其他的系统资源时,Linux内核将取得CPU的控制权,并将CPU分配给其他正在等待的进程,这就是进程切换。内核中的调度算法决定将CPU分配给哪一个进程。刚开始,我认为主要的问题在于你知道不知道,而不是理解不理解,某个子系统的实现采用了某种策略、方法,而在学习中需要做的就是知道有这么一回事儿,然后才是理解所描述的策略或者方法。但是经过老师讲解后,才发现理解更重要。

          如果说有什么遗憾的话,那就是还有很多地方理解的不够好,不明白,我觉得学习是一个很漫长的过程,还需要继续探索下去!

  • 相关阅读:
    mysql查询字段时实现左右补零
    两种方法获取MyBatis刚刚插入的id
    SpringBoot扫描包提示找不到mapper的问题
    如何删除mac keeper
    mongodb如何设置主键自增
    java数组和字符串相互转换
    algid parse error, not a sequence错误
    java数字转换成文字方法
    maven的groupid和artifactId
    mysql中的日期转换函数(类似oracle中的to_date)
  • 原文地址:https://www.cnblogs.com/huangbobo/p/5450718.html
Copyright © 2011-2022 走看看