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

     经过了这几周的学习,我对Linux内核的构架和原理,有了一些初步的了解,明白了内核的工作流程。

    在今后的学习中,我将会更加努力,按照老师的教学思路,多多实践,争取将理论知识运用到实际中。

    在这几周的学习中,我最大的收获是从孟宁老师的教学中学会了从实践中学习和验证知识。

    在此,十分感谢孟宁老师的教导。 最大的遗憾大概就是遗憾网课时间太短,没能继续听老师说舞女的故事。

    最后,还是要感谢孟老师这几周以来的辛勤教导!

    在下学期的李春杰老师的内核实践课中也是收获颇多!

    李老师教会我们很多做人的道理。

    感谢二位老师!!

    Linux是一个多进程的操作系统,所以,其他的进程必须等到正在运行的进程空闲CPU后才能运行。

    当正在运行的进程等待其他的系统资源时,Linux内核将取得CPU的控制权,并将CPU分配给其他正在等待的进程,这就是进程切换。

    内核中的调度算法决定将CPU分配给哪一个进程。

    Linux系统有一个进程控制表(process table),一个进程就是其中的一项。

    进程控制表中的每一项都是一个task_struct结构,在task_struct结构中存储各种低级和高级的信息,包括从一些硬件设备的寄存器拷贝到进程的工作目录的链接点。

    进程控制表既是一个数组,又是一个双向链表,同时又是一个树,其物理实现是一个包括多个指针的静态数组。

    系统启动后,内核通常作为某一个进程的代表。一个指向task_struct的全局指针变量current用来记录正在运行的进程。

    刚开始,我认为主要的问题在于你知道不知道,而不是理解不理解,某个子系统的实现采用了某种策略、方法,

    而在学习中需要做的就是知道有这么一回事儿,然后才是理解所描述的策略或者方法。但是经过老师讲解后,才发现理解更重要。

    学完课程后,能在自己的脑海中建立起内核的大体框架。

    理解各个子系统的设计理念和构建思想,这些理念和思想会从宏观上呈献给你清晰的脉络,就像一个去除了枝枝叶叶的大树的主干,一目了然。

    当然,肯定还会涉及到具体的实现方法、函数。

    但是此时接触到的函数或者方法位于内核实现的较高的层次,是主(要)函数,已经了解到这些函数,

    针对的是哪些设计思想,实现了什么样的功能,达成了什么样的目的。

    至于该主函数所调用的其它的辅助性函数就等同于枝枝叶叶了,不必太早就去深究。

    此时,也就初步建立起了内核子系统框架和代码实现之间的关联,关联其实很简单,比如一看到某个函数名字,就想起这个函数是针对哪个子系统的,实现了什么功能。

    第一周:

    我们学习了linux下的C语言堆栈,学习了基本的汇编指令,

    然后分析了存储程序计算机工作模型,最后汇编一个简单的C程序分析其汇编指令执行过程

    第二周:

    我们学习了函数调用堆栈,借助Linux内核部分源代码模拟存储程序计算机工作模型及时钟中断,

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

    第三周: 

    我们学习了Linux内核源代码的简介,构造一个简单的Linux系统,

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

    第四周:

    我们学习了系统调用概述和系统调用的三层皮,

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

    第五周:

    我们学习了使用gdb跟踪系统调用内核函数sys_time, 

    然后简单浏览system_call和iret之间的主要代码

    第六周:

    我们学习了进程的创建,分析fork一个进程的用户态代码,

    然后分析创建的新进程是从哪里开始执行的

    第七周:

    我们学习了可执行文件的格式ELF ,装载可执行程序之前的工作,

    然后使用gdb跟踪sys_execve内核函数的处理过程

    第八周:

    我们学习了进程切换的关键代码switch_to,分析了进程上下文切换相关代码

     
     
    Linux内核总结
    实验一:初步认识程序在内存中运行
    实验二:基于mykernel实现的时间片轮转调度
    实验三:gdb跟踪调试内核从start_kernel到init进程启动
    实验四:使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用
    实验五:分析system_call中断处理过程
    实验六:分析Linux内核创建一个新进程的过程
    实验七:Linux内核如何装载和启动一个可执行程序
    实验八:进程的切换和系统的一般执行过程
     
     
     
  • 相关阅读:
    1014 Waiting in Line (30)(30 point(s))
    1013 Battle Over Cities (25)(25 point(s))
    1012 The Best Rank (25)(25 point(s))
    1011 World Cup Betting (20)(20 point(s))
    1010 Radix (25)(25 point(s))
    1009 Product of Polynomials (25)(25 point(s))
    1008 Elevator (20)(20 point(s))
    1007 Maximum Subsequence Sum (25)(25 point(s))
    1006 Sign In and Sign Out (25)(25 point(s))
    1005 Spell It Right (20)(20 point(s))
  • 原文地址:https://www.cnblogs.com/ailx10/p/5449463.html
Copyright © 2011-2022 走看看