《Linux内核分析》期终总结
作者:杨舒雯,原创作品转载请注明出处,《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000
目录:
1.通过简单的汇编程序谈谈对计算机工作方式的认识
http://www.cnblogs.com/yswysw/p/5210942.html
2.浅析基于mykernel实现的时间片轮转调度代码
http://www.cnblogs.com/yswysw/p/5242408.html
3.初始内核启动
http://www.cnblogs.com/yswysw/p/5258239.html
4.从一个简单的系统调用开始
http://www.cnblogs.com/yswysw/p/5280771.html
5.从内核角度浅析系统调用Linux
http://www.cnblogs.com/yswysw/p/5303777.html
6.Linux内核如何创建一个新进程
http://www.cnblogs.com/yswysw/p/5329994.html
7.浅谈Linux内核对可执行程序的装载、启动
http://www.cnblogs.com/yswysw/p/5352054.html
8.gdb跟踪分析进程调度和进程切换
http://www.cnblogs.com/yswysw/p/5388906.html
1. 对Linux操作系统的理解:
我认为linux系统是这样运行的:
- 首先由0号进程idle创建其子进程1号进程init和2号进程kthreadd,1号进程init是所有用户态进程的祖先,init将会创建新的子进程用来执行用户命令;,2号进程kthreadd是所有内核线程的祖先。
- 在这个过程中,有可能会发生冲突,根据进程优先级的不同,或者该进程是否是I/O密集型进程来决定谁先抢占CPU,这涉及到进程调度策略,并且在这个过程中会发生进程切换。
- 进程切换的具体细节,就涉及到内核堆栈和用户堆栈之间数据保存和交换,即保存进程上下文。
- 进程是依附于程序存在的,这就需要读取文件信息,通过预编译、编译、汇编、链接,生成可执行未见,才能执行。Linux中大部分可执行文件都是ELF格式,通过该格式文件头信息,可以找到程序执行的起点。
2. 收获
- 系统的了解了操作系统内核的相关结构和设计原理,学会了gdb调试与分析内核代码的方法。
- 虽然,学完linux内核分析之后我并不能自己编写一个小型的操作系统,但是我学会了分析内核代码的方法,如何使用gdb调试内核代码,以及在调试的过程中,理解内核代码的具体实现。
3. 学习完《Linux内核分析》课程后您最大的遗憾是什么?
这八周的MOOC学习下来,我觉得只是简单的了解了Linux内核的相关知识,在脑海里形成了大致的框架。但是在实际的操作应用层面上,自己还很缺乏。在学习的过程中,大多数实验只能根据老师的指导来进行,对于内核中其他的东西还没有彻底的了解。
最后,感谢孟老师八周来的幸苦教学!
《Linux内核分析》期终总结的更多相关文章
- 《Linux内核分析》期终总结&《Linux及安全》期中总结
<Linux内核分析>期终总结&<Linux及安全>期中总结 [李行之 原创作品 转载请注明出处 <Linux内核分析>MOOC课程http://mooc. ...
- 《Linux及安全》期中总结&《Linux内核分析》期终总结
[5216 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000] WEEK NINE ...
- linux内核分析作业8:理解进程调度时机跟踪分析进程调度与进程切换的过程
1. 实验目的 选择一个系统调用(13号系统调用time除外),系统调用列表,使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用 分析汇编代码调用系统调用的工作过程,特别是参数的传递的方 ...
- Linux内核分析作业7:Linux内核如何装载和启动一个可执行程序
1.可执行文件的格式 在 Linux 平台下主要有以下三种可执行文件格式: 1.a.out(assembler and link editor output 汇编器和链接编辑器的输出) ...
- linux内核分析作业6:分析Linux内核创建一个新进程的过程
task_struct结构: struct task_struct { volatile long state;进程状态 void *stack; 堆栈 pid_t pid; 进程标识符 u ...
- linux内核分析作业5:分析system_call中断处理过程
1.增加 Menu 内核命令行 调试系统调用. 步骤:删除menu git clone (tab) make rootfs 这就是我们将 fork 函数写入 Menu 系统内核后的效果, ...
- linux内核分析作业:以一简单C程序为例,分析汇编代码理解计算机如何工作
一.实验 使用gcc –S –o main.s main.c -m32 命令编译成汇编代码,如下代码中的数字请自行修改以防与他人雷同 int g(int x) { return x + 3; } in ...
- linux内核分析作业:操作系统是如何工作的进行:完成一个简单的时间片轮转多道程序内核代码
计算机如何工作 三个法宝:存储程序计算机.函数调用堆栈.中断机制. 堆栈 函数调用框架 传递参数 保存返回地址 提供局部变量空间 堆栈相关的寄存器 Esp 堆栈指针 (stack pointer) ...
- linux内核分析作业3:跟踪分析Linux内核的启动过程
内核源码目录 1. arch:录下x86重点关注 2. init:目录下main.c中的start_kernel是启动内核的起点 3. ipc:进程间通信的目录 实验 使用实验楼的虚拟机打开shell ...
随机推荐
- ABP模块运行解析
从官方创建一份ASP.NET CORE 2.0的项目,并加入源码调试,可以看出如下图的加载顺序 1.ABP是通过什么样的机制加载的 既然ABP中模块需要添加DLL到引用中,又要加入DependsOn在 ...
- Java设计模式之十一 ---- 策略模式和模板方法模式
前言 在上一篇中我们学习了行为型模式的访问者模式(Visitor Pattern)和中介者模式(Mediator Pattern).本篇则来学习下行为型模式的两个模式,策略模式(Strategy Pa ...
- Js 不支持函数的重载
Js 不支持函数的重载,可以用相同的名字在同一作用区域,定义两个函数,而不会引起错误,但真正使用的是最后一个. Js 不会验证传递给函数的参数个数是否和函数定义的参数的个数相同,开发人员定义的函数都可 ...
- 如何使用openscad绘制一个简单的键帽.
1 新建空项目 2测数据 测量得出数据.这个长方体的长宽高分别是1.6.4.6.8 注意,这三个数据并不是测量得到的数据,而且加了一点公差值(为3D打印做准备) 3画图 写代码 导入模型 为了方便以后 ...
- mybatis基础系列(四)——关联查询、延迟加载、一级缓存与二级缓存
关本文是Mybatis基础系列的第四篇文章,点击下面链接可以查看前面的文章: mybatis基础系列(三)——动态sql mybatis基础系列(二)——基础语法.别名.输入映射.输出映射 mybat ...
- oracle(sql)基础篇系列(五)——PLSQL、游标、存储过程、触发器
PL/SQL PL/SQL 简介 每一种数据库都有这样的一种语言,PL/SQL 是在Oracle里面的一种编程语言,在Oracle内部使用的编程语言.我们知道SQL语言是没有分支和循环的,而PL语言是 ...
- 使用js切割URL的参数
对于一些开发场景,不使用Jsp或freemarker及其其他的模板引擎时,通常通过切割url获得对应的参数,然后通过AJAX与后台交互得到对应的数据 下面是演示实例: test.html <!D ...
- C++ 函数模板&类模板
函数模板 #include <iostream> #include <string> using namespace std; template <typename T& ...
- 通过重建清理SVN服务器无用目录,不丢失其他目录修改记录
1.主要时有时间希望调整一些文件的目录结构,或者移除一个大量占用空间的文件节省服务器磁盘,但是又不希望调整后,对应的修改记录丢失.这时可以通过服务器目录重建实现. 2.重建后只是被排除掉的目录的修改记 ...
- 理解maven中SNAPSHOT版本的作用
https://leokongwq.github.io/2017/08/24/understanding-maven-snapshot.html 一次针对现有的http服务开发了一个SNAPSHOT版 ...