《Linux内核分析》课程总结

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

不知不觉,在网易云课堂上追了两个多月的课程《Linux内核分析》就要告一段落了。在课程即将结束的时刻,我想将这八周的课程串起来,进行一个简单的总结,同时讲一讲自己上这门课的感悟和体会,以期再接再厉,继往开来。

每一周的视频,我都认真看过,并完成了测验,撰写了相关的博客,下面首先进行简单的回顾和总结:

第一周:从一段代码的汇编看计算机的工作原理

第二周:一个简单的时间片轮转多通道程序内核

第三周:从Linux内核代码分析操作系统启动过程

第四周:由一段代码解析系统调用原理

第五周:分析system_call中断处理过程

第六周:Linux进程启动过程简析

第七周:linux装载可执行程序简析

第八周:Linux进程切换代码分析

第一周老师介绍了计算机的基础架构:冯诺依曼架构,CPU将内存中的代码和数据读取到自己的寄存器中,再根据一条条命令调用寄存器进行进一步的操作;同时,老师对基础的汇编语言语法进行了讲解。第二周则是第一周的延伸,在课上老师讲解了一个基于C和汇编语言的程序,实现了时间片轮转多通道程序的功能,我也亲自体验了一遍上下文保存、切换、代码跳转的具体实现。

第三周,老师带我们分析了linux启动的过程,我们亲眼目睹了第一个进程的创建和idle进程的循环,对操作系统的启动过程有了更深入的了解。

第四和第五周,深入到了系统调用这个linux内核中一个重要的模块里,我们了解了系统调用的“三层皮”(API、中断向量、中断服务程序);通过汇编实现一个系统调用,认识了int 0x80的作用(这应该是我印象最深刻的一句汇编代码,O(∩_∩)O哈哈~);通过深入追踪sys_call系统调用的内核代码,我们对系统调用的具体实现有了更为深入的理解。(感谢老师提供的简化汇编代码,大大方便了我分析的工作ORz)

第六、七、八周则是分别分析了Linux内核的三个具体功能模块:进程创建、可执行程序装载、进程上下文切换,尤其注意fork这个比较特殊的系统调用,它具有“一次调用,两次返回”的特点,这是和linux中一般的进程不一样的地方。

在第八周的最后,老师对linux系统的架构和执行过程进行了总结,简单来说,用户态进程位于内存的0~3G空间中, 内核代码则位于内存3G以上的部分,如同大(cang)舞(lao)女(shi)一样任由用户态进程公共地使用。在进程由用户态陷入内核态或者进程间切换之前,都要进行上下文的保存,以便返回时回复之前的环境。

linux系统架构镇楼

/*---------------------------------------------我是萌萌的分割线,咿呀咿呀呦-----------------------------------------*/

我是一名西电大四的学生,如今已经保送浙江大学CAD实验室,即将开始自己的研究生生涯。本科期间,我们也上过操作系统之类的课程,但课上老师对操作系统的讲解偏于理论,很少涉及操作系统具体的实现,以至于我一直对操作系统的实现细节一头雾水。而通过学习这门课,我一方面复习了本科时所学习的操作系统概念,更重要的是,通过分析linux系统的内核代码,我初窥操作系统内核编程的门径,对操作系统各种功能的具体实现,如进程创建、切换、操作系统启动都有了更为深入的认识和理解,这就是我上这门课最大的收获。

上完这门课之后,我想重新捧起本科时操作系统课程的教科书《现代操作系统》,认真地再看一遍书中后面探讨各种操作系统实现细节的章节(我们本科时只讲了理论部分,后面没讲);有机会的话,希望深入钻研操作系统架构,参考《三十天自制操作系统》、《Orange S:一个操作系统的实现》等书自己实现一个小型的操作系统,毕竟操作系统的知识对于以后的上研、工作还是很有帮助的。

说起遗憾,主要是这门课开设期间正好也是我本科毕业设计时间,我每天忙于毕业设计,晚上10点多从实验室回到宿舍后才能开始课程的学习,很多时候包括做作业都搞得比较仓促,有一次甚至忘了提交作业(TAT),感觉自己对课上老师讲解的知识点还是有待进一步消化。课程已经结束,自己研究生阶段会继续关注这一领域,不断提升自己在这一方面的专业技能。

另外,我觉得老师这门课没有讲文件系统这个linux内核的大头实在是有点遗憾,如果以后开课的话,希望能将这个模块纳入课程的讲解中。

这就是我在这门课期间的总结,感谢网易云课堂和孟宁老师提供了这个学习的机会,也祝云课堂平台越办越好,孟老师家庭生活幸福美满,事业步步高升!

路漫漫其修远兮,吾将上下而求索!

时间: 2024-10-10 20:49:57

《Linux内核分析》课程总结的相关文章

[js高手之路]设计模式系列课程-组合模式+寄生组合继承实战新闻列表

所谓组合模式,就是把一堆结构分解出来,组成在一起,现实中很多这样的例子,如: 1.肯德基套餐就是一种组合模式, 比如鸡腿堡套餐,一般是是由一个鸡腿堡,一包薯条,一杯可乐等组成的 2.组装的台式机同理,由主板,电源,内存条,显卡, 机箱,显示器,外设等组成的 把一个成型的产品组成部件,分成一个个独立的部件,这种方式可以做出很多灵活的产品,这就是组合模式的优势 比如:家用台式机电脑,要求配置比较低, 这个时候只需要主板+电源+内存条+机箱+显示器+外设就可以了,不需要配置独立显卡 鸡腿堡+鸡翅+紫薯

对软件工程课程的期望

学习到的能力预期: 1.首先,尽量能学会书中大部分知识,并能掌握和运用. 2.能体会到团队协作时互帮互助的乐趣和团队合作的重要性. 3..通过项目掌握更多的编程知识,加强自己的编程能力. 4.能在项目的基础上添加一些自己的功能. 对项目课程的期望: 1.希望做的项目可以激发我对编程的乐趣. 2.最好能完美做出给的项目. 对项目的愿景规划: 1.项目可以成功完成并且得到好的评价 2.每个成员都可以有所收获 3.每个人能提高自己的编程能力 4.没争执最好,有争执更能体现出每个人的学习态度.

《对软件工程课程的期望》

实践项目完成后学习到的能力的预期: 1. 能合理运用书本上的知识,不在是理论上的知识. 2. 提升自己的水平. 3. 与队友合作,取长补短,发挥长处,弥补不足. 对项目课程的期望: 1. 不要太难 2. 快乐学习 3. 学好,学精 对项目的愿景规划: 1.开发出的安卓具有: (1)实用且对大家都有帮助 (2)让用户有好的体验,比如界面和功能 (3)好玩,并且大家都喜欢用 2)每个成员体会到自己做出的软件的价值,能够有所收获. 3)拥有解决问题的体现. 4)每个人都有自己的价值,发挥自己的长处,弥

linux课程以及Linux主要学习哪些内容

7年线下Linux课程研发教学经验,课程设计个个知识循环相扣,让学员在实战学习解决问题过程中,来掌握Linux运维这门技能,整个学习过程,实战项目贯穿整个Linux运维所需的知识点,主要阶段包括如下: 第一阶段:Linux基础Linux入门.常用的基础命令.FHS .bash常用功能.I/O重定向及管道 .用户和组.权限管理.bash环境.sudo.grep及基本正则表达式.vim编辑器.文件查找(学完此阶段可:) 第二阶段:Linux系统管理磁盘及分区.Linux文件系统.逻辑卷.RAID .

Python自动化运维课程学习--Day3

本文为参加老男孩Python自动化运维课程第三天学习内容的总结. 大致内容如下: 1.文件操作 2.字符编码转码相关操作 3.函数 0.关于本文中所有运行Python代码的环境: --操作系统:Ubuntu 16.10 (Linux 4.8.0) --Python版本:3.5.2 python2.7.12 --Python IDE: PyCharm 2016.3.2 一.文件操作: 1.文件操作流程:以只读.写(覆盖写).追加写.读写.追加读写.二进制读写等模式打开文件 ==> 得到文件句柄,并

PHP课程总结20161128

今天的课程,老师主要给我们复习了上周学习的函数和流程控制的内容,编写了查找水仙花数和质数的程序,复习了九九乘法表和表格的编程过程. 一.总结 1.编程中思路不清时,画流程图.常用的表达图形:"平行四边形"代表输入和输出:"长方形"代表流程:"菱形"代表判断:"圆形"代表连接符(一页未完,接第二页). 2.常用符号:"&&"代表并且:"||"代表或:"!"

php课程的第一天

今天是php课程的第一天,怀着激动懵逼的复杂心情,写下今天所学的内容. 首先是三个名词.即http,HyperText Transfor Protoca超文本传输协议:http通常发生在TCP/IP连接之上,默认端口80.URL,uniform resorce locaor,统一资源定位符(网址).html,Hypertext Marked Language,超文本标记语言.css,Cascading style sheets,层叠样式表.                      然后是开始写

第16周课程总结

20145339顿珠达杰 <Java程序设计>第16周课程总结 实验报告链接汇总 实验一 "Java开发环境的熟悉" http://www.cnblogs.com/dj20145339/p/5375062.html 实验二 "Java面向对象程序设计"http://www.cnblogs.com/dj20145339/p/5402289.html 实验三 "敏捷开发与XP实践"http://www.cnblogs.com/dj2014

《软件工程》 的课程总结附加题。

附加作业回答以下几个问题: 1. 你认为本门课程需要在哪里进行改进,具体措施有哪些,包括:时间进度安排,项目难度等均可: 答:可能因为课改比较急,很多地方还没适应.时间安排上可能老师就是没过多的考虑学生除了本课程之外需要忙的事情. 项目难度来说并没有,因为不是说了吗,难度自定,取决于你自己对自己的要求.更多的可能是衔接上的问题,之前 可能是没太多实践经验. 2. 你认为助教/老师哪里做的不足,哪里限制太多等: 答:首先先感谢各位助教百忙之中监督我们完成作业,都做得比较好了.对于老师来说,以我的观

《软件工程》课程总结

随着时间的推移,学期进入了尾声,我们的软件工程课也将告一段落.下面是我对这学期进行的总结: 通过这16周的学习,我收获了很多,学习上的漏洞.同学之间的沟通及配合.自己处理事情的能力和开发程序的宝贵经验.在上课期间,老师说过我们的软件工程课上所讲的东西和毕业设计有关,例如:可能性分析和需求分析.就拿需求分析来说,在一个程序的开发初期所要做的就是深入的了解分析形成需求分析.通过用户调研了解用户需求,明确用户想要用这个程序干什么,适用于什么人群去使用,之后再通过需求分析框架能明确程序的设计目的,只有通