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

下面是对8个课题的总结,标题已编辑为链接模式,单击即可

   1. 图解分析汇编代码以及理解计算机是如何工作的

冯诺依曼体系结构的计算机,又叫存储程序计算机,从硬件的角度来看,其工作模型是CPU依次读取内存中的指令来完成工作。这节课详细介绍了CPU计算模块、寄存器和内存是如何配合工作的。

2. 基于mykernel的一个简单的时间片轮转多道程序内核代码分析

mykernel是由老师建立的一个用于开放自己的操作系统的内核平台,它基于Linux Kernel 3.9.4 source code。通过本讲的学习和实验,我们知道操作系统的核心功能就是:进程调度和中断机制,通过与硬件的配合实现多任务处理,再加上上层应用软件的支持,最终变成可以使用户可以很容易操作的计算机系统。还了解到进程的调度和时间中断的概念。知道了一个进程在内核中,被描述为一个结构体,储存了进程的pid,运行状态,堆栈,以及sp和ip等重要信息。通过分析my_schedule的汇编代码,了解到了进程切换的关键过程。我们可以认为一个进程相当于一个堆栈,每个进程有自己的堆栈空间。如果将ebp和esp修改为另一个进程的ebp和esp,并且完成一些寄存器的保存,就相当于完成的进程的切换。

3. 使用gdb跟踪Linux内核启动过程

start_kernel()是内核的汇编与C语言的交接点,在该函数以前,内核的代码都是用汇编写的,完成一些最基本的初始化与环境设置工作。start_kernel就像是c代码中的main函数。不管你关注Linux的内核模块,总是离不开start_kernel函数的,因为大部分模块的初始化工作都是在start_kernel中完成的。按照这节课的实验步骤,跟踪Linux内核的启动过程。通过自己编译内核源码,并且调试了启动过程,了解到内核在启动时经历了哪些初始化。内核几乎所有的初始化都是在start_kernel进行的,在start_kernel之前主要是汇编代码完成的一些操作。在start_kernel中会初始化中断向量,内存管理模块,调度模块等一系列初始化。在最后的rest_init()中会初始化0号进程和1号用户态进程,然后最终启动系统。

4. 使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用

即便是最简单的程序,也难免要用到诸如输入、输出以及退出等操作,而要进行这些操作则需要调用操作系统所提供的服务,也就是系统调用。除非你的程序只完成加减乘除等数学运算,否则将很难避免使用系统调用。在 Linux 平台下有两种方式来使用系统调用:利用封装后的 C 库(libc)或者通过汇编直接调用。这节课介绍了系统调用的概念,以及如何使用系统调用。

5. 分析system_call中断处里过程

通过gdb我们可以给系统调用内核处里程序如sys_write, sys_time设置断点,并让程序停在断点处,进行断点跟踪系统调用处里过程。由于system_call是完全用汇编写就一个的函数,虽然我们也可以在system_call处设置断点,但却无法让系统停在system_call处,所以也无法通过单步跟踪学习其处里流程。但system_call是所有系统调用的入口,也是程序由用户态转入内核态执行时无法越过的一个函数,其重要性不言而喻,所以我们跟随老师简化的汇编代码以及源代码学习其主要的流程。

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

为了管理进程,内核必须对每个进程进行清晰的描述,进程描述符提供了内核所需了解的进程信息。在Linux应用程序的开发中,可以通过fork、vfork和clone等API来创建一个子进程,它们在Linux内核中对应的系统调用分别为sys_fork、sys_vfork和sys_clone函数,而这些函数最终都会调用do_fork完成子进程的创建。do_fork主要是复制了父进程的task_struct,然后修改必要的信息,从而得到子进程的task_struct。

7. Linux内核如何装载和启动一个可执行程序

Linux系统可以通过execve API启动一个新进程,该API又呼叫sys_execve系统调用,负责将新的程序代码和数据替换到新的进程中,打开可执行 文件,载入依赖的库文件,申请新的内存空间,最后执行 start_thread(regs, elf_entry, bprm->p) ,设置 new_ip, new_sp ,完成新进程的代码和数据替换,然后返回,接下来就是执行新的进程代码了。

8. Linux中进程调度与进程切换过程

Linux系统的一般执行过程,最一般的情况是:正在运行的用户态进程X切换到运行用户态进程Y的过程要经过以下步骤

1). 正在运行的用户态进程X

2). 发生中断:save cs:eip/esp/eflags(current) to kernel stack, then load cs:eip(entry of a specific ISR) and ss:esp(point to kernel stack).

3). SAVE_ALL //保存现场,这里是已经进入内核中断处里过程

4). 中断处理过程中或中断返回前调用了schedule(),其中的switch_to做了关键的进程上下文切换

5). 标号1之后开始运行用户态进程Y(这里Y曾经通过以上步骤被切换出去过因此可以从标号1继续执行)

6). restore_all //恢复现场

7). iret - pop cs:eip/ss:esp/eflags from kernel stack

8). 继续运行用户态进程Y

总结:这学期选了Linux课程,第一堂课老师就说了这个课要跟网上学习结合在一起,虽然之前也听说过网上学习,但自己还没有亲身经历过,而老师给我们介绍了一个很好的平台。对于翻转课堂的混合式教学,我真的和受益,首先,我们在网上跟随课程进度进行对课程的基本了解,而课后独自思考之后,再找出自己有所疑惑的地方找老师进行答疑,这样可以让我对课程形成 自己的认识。通过这门课,也让我了解到了mooc这个学习平台,这使我不仅仅学到了linux,更给了我一个学自己感兴趣的课程的机会,而且mooc课程属于云资源,可以进行缓存,这使得学习安排很自由。另外,mooc提供了很好的教学方法,每一周的任务都很清楚,而且作业量也也很适当,还有一个每一周的测试,可以让自己及时的总结和衡量自己一周学习的内容和知识,不懂的地方也可以在论坛发帖,和老师同学们一起讨论。还有就是实验楼这个网络实验平台了,这个平台给我莪们提供了非常大的便利,让我们不用在做实验的时候还在电脑上专门装一个虚拟机,而且可以根据实验内容设定实验楼环境,针对性较强。不得不说通过mooc,实验楼和老师的翻转课堂,我真的受益良多。提到收获,那么最大的就应该是自学能力的提升了。俗话说师父领进门,修行在个人。老师在这门课中扮演的是引路人的角色,而这条路走得好不好主要还是看我们努力修行的够不够。通过不断地学习、总结、测验,让我收获了很多很好的学习方法,而在今后的学习生活中,这些经历可以使我更快的进入状态,少走一些弯路。当然,我还有很多不足之处,比如没有将遇到的问题及时反馈,而形成了一些错误的认识,这对于我之后的学习形成了很大的阻碍。在我看来,提出问题的能力固然重要,但是出现问题之后,解决问题的能力也是必不可少的。今后我会将这种感悟应用在生活之中。

网易云课堂-----Linux内核分析-----期末主观题的更多相关文章

  1. Linux内核分析 期末总结

    Linux内核分析 期末总结 一.知识概要 1. 计算机是如何工作的 存储程序计算机工作模型:冯诺依曼体系结构 X86汇编基础 会变一个简单的C程序分析其汇编指令执行过程 2. 操作系统是如何工作的 ...

  2. Linux内核分析——期末总结

    Linux内核学习总结 首先非常感谢网易云课堂这个平台,让我能够在课下学习,课上加强,体会翻转课堂的乐趣.孟宁老师的课程循序渐进,虽然偶尔我学习地不是很透彻,但能够在后续的课程中进一步巩固学习,更加深 ...

  3. LINUX内核分析期末总结

    韩玉琪 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.课程总结 1 ...

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

    LINUX内核分析第七周学习总结:可执行程序的装载 韩玉琪 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/cours ...

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

    韩玉琪 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.进程切换的关 ...

  6. linux内核分析第二周

    网易云课堂linux内核分析第二周 20135103                王海宁 <Linux内核分析>MOOC课程http://mooc.study.163.com/cours ...

  7. 期末总结:LINUX内核分析与设计期末总结

    朱国庆原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一,心得体会 关于网上听课这 ...

  8. Linux内核学习期末总结(网课)

    标签(空格分隔): 20135321余佳源 余佳源(原创作品转载请注明出处) <Linux内核分析> MOOC课程http://mooc.study.163.com/course/USTC ...

  9. 《Linux内核分析》期末总结

    Linux内核设计期中总结 版权声明:本文为博主原创文章,未经博主允许不得转载. 前八周博客汇总及总结 Linux内核设计第一周——从汇编语言出发理解计算机工作原理 我们学习了汇编语言的基础知识,这一 ...

随机推荐

  1. NetCore开源项目集合

    具体见:https://github.com/thangchung/awesome-dotnet-core 半年前看到的,今天又看到了,记录下. 框架类: ZKWeb ABP General ASP. ...

  2. 寒假训练 A - A Knight's Journey 搜索

    Background The knight is getting bored of seeing the same black and white squares again and again an ...

  3. Django之权限管理

    Django权限管理之初步完整版 项目背景:这是一个权限管理系统(给一些角色和他们的权限指URL和页面可以删除的按钮比如:增删改查) 使用到了中间件,和初始化权限,使用了admin的后台管理系统. 我 ...

  4. Android Activity学习笔记——Activity的启动和创建

    http://www.cnblogs.com/bastard/archive/2012/04/07/2436262.html 最近学习Android相关知识,感觉仅仅了解Activity几个生命周期函 ...

  5. JS操作DOM节点大全

    1.Javascript删除节点 在Javascript中,只提供了一种删除节点的方法:removeChild(). removeChild() 方法用来删除父节点的一个子节点. 语法:parent. ...

  6. 史上最全脉搏心率传感器PulseSensor资料(电路图+中文说明书+最全源代码)

    准确度说明: 1 输入引脚一定要接在模拟输入口上 ESP-D1  只有一个模拟输入口  A0  0-3.3V  心跳不要接在5v上,否则电压不准  ESP-D1开发板有一个5V和一个3.3v 普通ar ...

  7. ORA-600 [Kcbz_check_objd_typ_1] Running a Job (Doc ID 785899.1)

    ORA-600 [Kcbz_check_objd_typ_1] Running a Job (Doc ID 785899.1) To Bottom In this Document   Symptom ...

  8. oracle 12C ORA-07445 12.1.0.2.0

    Mon Jun 11 14:06:23 2018 Exception [type: SIGSEGV, SI_KERNEL(general_protection)] [ADDR:0x0] [PC:0xC ...

  9. Java 中数组的内存分配

    Java 中数组的内存分配 1.Java 程序在运行时,需要在内存中分配空间.为了提高运算效率,就对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据和内存管理方式. 2.数组基本概念 数组是 ...

  10. Photoshop 基础三 制作简单按钮

    要求知识点:移动工具.选择工具.套索工具.多边行工具.文本工具.路径选择工具.裁剪.填充 一.制作简单按钮 1)新建画布,大小随便 2)画圆角矩形工具(同时定义背景色.边框是否需求.边框颜色) 3)打 ...