Linux内核学习总结(final)
Linux内核学习总结
符钰婧 原创作品转载请注明出处
《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000
这八周以来,我从拼不出来"Linux"这个词到知道了很多专有名词,也能大概了解Linux的工作机制,这一系列的进步都是一周周积累下来的。现在回过头来看,有种阳光总在风雨后的感觉,虽然这个比喻好像不太恰当。
闲话少说,接下来就进入这次的正题。
一、首先是对Linux操作系统的理解
1、操作系统的三大功能:进程管理(最核心)、内存管理和文件系统
2、这张图是孟老师视频的截图,是典型的Linux操作系统架构
底层:磁盘管理、物理内存的管理、内存控制器和控制台等等
上一层:对硬件资源的管理
绿色层:内核的实现(CPU的调度、内存管理、虚拟内存、磁盘管理、文件系统等等)
再上一层:系统调用接口
橘色层:基础软件(shell、共享库lib、编译器、动态加载器等等)
顶层:用户程序
3、Linux系统的一般执行过程(从CPU的角度看)
在32位x86的系统下,一个进程的地址空间有4G;0到3G是用户态的,3G以上的部分仅仅是内核态可以访问的(对所有的进程来说,3G以上的部分是完全共享的)。
陷入内核态之后,进程X切换到了进程Y。
切换过程如下:
(1)正在运行的用户态进程X
(2)发生中断//把当前的CPU上下文压到当前用户态进程X的内核堆栈中,然后加载当前进程的内核堆栈的相关信息(当前中断对应的服务例程的起点、ss:esp等)。这些动作都是由CPU自动完成的
(3)SAVE_ALL //系统调用处理过程中保护现场使用的宏
(4)中断处理过程中或中断返回前调用了schedule(),其中的switch_to做了关键的进程上下文切换//在中断处理过程中总有一个发生调度的时机,有可能会发生调度
(5)标号1之后开始运行用户态进程Y(这里Y曾经通过以上步骤被切换出去过因此可以从标号1继续执行,即这个next进程曾经做过prev)//这里是用户态进程Y的内核部分
(6)restore all//恢复现场
(7)iret //pop 出Y进程在发生中断时保存到内核堆栈中的信息
(8)继续运行用户态进程Y
内核实际上也可以比喻成出租车,哪个进程招手都可以陷入进内核态,做一些工作之后再返回到用户态;接下来发生中断又可以进入内核态;当出租车没有客人的时候,就进入CPU idle(0号进程)。
小结:内核是各种中断处理过程和内核线程的集合。
4、自己的理解
(1)Linux操作系统工作过程中最主要的事情就是进程的切换,在进程切换的过程中会发生中断处理,这时会有内核堆栈的切换,汇编代码是理解的关键。其中中断和中断返回过程会有一个CPU上下文的切换;在进程调度的过程中有一个进程上下文的切换,即从一个进程的内核堆栈切换到另一个进程的内核堆栈。
在理解进程切换的工作过程时,我们可以利用gdb命令对内核代码设置断点进行调试跟踪,其中switch_to、sys_clone、do_fork等等都是很重要的函数。
(2)在运行某个进程的时候,系统会先调用gets从用户态进入内核态,把各种信息压栈之后,进入系统调用等待键盘的输入,此时它处于阻塞态。在等待的过 程中CPU可能会先调度到执行其他的进程,当有键盘输入后,就会发生I/O中断,然后就可以调度回一开始的进程。当前进程执行完之后可能会进入idle, 也可能会执行其他进程。
在进程等待的过程中,若键盘输入了ls,CPU就会开始执行中断处理程序,进程管理就会切换到此进程,当gets系统调用获得数据后就会返回到用户态,继续执行下面的指令。
二、所有博客作业的目录列表
1、http://www.cnblogs.com/fuyujing/p/5210307.html
2、http://www.cnblogs.com/fuyujing/p/5238627.html
3、http://www.cnblogs.com/fuyujing/p/5260806.html
4、http://www.cnblogs.com/fuyujing/p/5286342.html
5、http://www.cnblogs.com/fuyujing/p/5314258.html
6、http://www.cnblogs.com/fuyujing/p/5336361.html
7、http://www.cnblogs.com/fuyujing/p/5358368.html
8、http://www.cnblogs.com/fuyujing/p/5381660.html
三、总结
学习完这个课程之后,我最大的收获是学到了一种新的,以前完全没有概念的知识,课程一开始讲到的一些关于寄存器的知识点也相当于让我复习了一遍之前学过的 东西。还有就是现在我能够分析一些相对简单的堆栈变化过程,看得懂一些简单的内核代码,记住了一些Linux命令行界面的操作指令。总的来说,就是以后听 到Linux这个名词再不会感到很陌生,因为每周的网课还是相当令人印象深刻的。
Linux内核学习总结(final)的更多相关文章
- Linux 内核学习的经典书籍及途径
from:http://www.zhihu.com/question/19606660 知乎 Linux 内核学习的经典书籍及途径?修改 修改 写补充说明 举报 添加评论 分享 • 邀请回答 ...
- 关于Linux内核学习的误区以及相关书籍介绍
http://www.hzlitai.com.cn/article/ARM9-article/system/1605.html 写给Linux内核新手-关于Linux内核学习的误区 先说句正经的:其实 ...
- linux内核学习之二:编译内核
在linux内核学习系列的第一课中讲述了搭建学习环境的过程(http://www.cnblogs.com/xiongyuanxiong/p/3523306.html),环境搭好后,马上就进入到下一环节 ...
- linux内核学习之一:环境搭建--安装Debian7.3
本系列文章假设读者已对linux有一定的了解,其实学习linux内核不需要有很深的关于linux的知识,只需要了解以下内容:linux基础知识及基本shell命令:现代操作系统的基本概念:C语言和gc ...
- Linux内核学习笔记-2.进程管理
原创文章,转载请注明:Linux内核学习笔记-2.进程管理) By Lucio.Yang 部分内容来自:Linux Kernel Development(Third Edition),Robert L ...
- Linux内核学习笔记-1.简介和入门
原创文章,转载请注明:Linux内核学习笔记-1.简介和入门 By Lucio.Yang 部分内容来自:Linux Kernel Development(Third Edition),Robert L ...
- Linux内核学习趣谈
本文原创是freas_1990,转载请标明出处:http://blog.csdn.net/freas_1990/article/details/9304991 从大二开始学习Linux内核,到现在已经 ...
- Linux 内核学习经验总结
Linux 内核学习经验总结 学习内核,每个人都有自己的学习方法,仁者见仁智者见智.以下是我在学习过程中总结出来的东西,对自身来说,我认为比较有效率,拿出来跟大家交流一下. 内核学习,一偏之见:疏漏难 ...
- Linux内核分析——Linux内核学习总结
马悦+原创作品转载请注明出处+<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 Linux内核学习总结 一 ...
随机推荐
- Json.Net用法
基本用法 Json.Net是支持序列化和反序列化DataTable,DataSet,Entity Framework和Entity的.下面分别举例说明序列化和反序列化. DataTable: //序列 ...
- facebook api & oauth protocal
http://tools.ietf.org/html/draft-ietf-oauth-v2-31#section-10.5 http://stackoverflow.com/questions/14 ...
- FastDFS_v5.05+nginx+cache集群安装配置手册
转载请出自出处:http://www.cnblogs.com/hd3013779515/ 1.FastDFS简单介绍 FastDFS是由淘宝的余庆先生所开发,是一个轻量级.高性能的开源分布式文件系统, ...
- js 判断元素是否在列表中
/** * 使用循环的方式判断一个元素是否存在于一个数组中 * @param {Object} arr 数组 * @param {Object} value 元素值 */ function isInA ...
- [luogu2469] 星际竞速
题面 巨佬一眼就能看出这是最小路径覆盖, 我这个蒟蒻还是太弱了... 我们可以知道跳跃值为点权w[i], 两点之间距离为边权ww 对于每个点, 在最小路径覆盖问题中, 假设每个点都是一条路 ...
- JS简单的倒计时(代码优化)
倒计时网上一大堆,所以也没有什么好说的,支持:1.年,月,日,天,时分秒等倒计时. JS代码如下: /* * js简单的倒计时 * @param {date,obj} 日期 对象格式 */ funct ...
- 微信小程序开发 [01] 小程序基本结构和官方IDE简介
1.小程序账户注册 实际上在进行开发时没有注册小程序账户也是可以的,官方提供的IDE提供实时编译模拟预览,和当前你有没有绑定小程序账户没有关系. 当然,最终你要正式上线你的小程序的话,肯定还是需要账户 ...
- Pythoner使用的豆瓣pip源
主要示例: sudo pip install -i http://pypi.douban.com/simple/ flask-script Flask的扩展: flask-script是一个可以在f ...
- SharePoint2016配置工作流开发环境
1,下载Web PlatForm5.0 地址:https://www.microsoft.com/web/downloads/platform.aspx 2,保证开发环境能连网,安装Web Plat ...
- Android开发——进程间通信之Messenger
0. 前言 不论是Android还是其他操作系统,都会有自己的IPC机制,所谓IPC(Inter-Process Communication)即进程间通信.首先线程和进程是很不同的概念,线程是CPU ...