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)的更多相关文章

  1. Linux 内核学习的经典书籍及途径

    from:http://www.zhihu.com/question/19606660 知乎 Linux 内核学习的经典书籍及途径?修改 修改 写补充说明 举报   添加评论 分享 • 邀请回答   ...

  2. 关于Linux内核学习的误区以及相关书籍介绍

    http://www.hzlitai.com.cn/article/ARM9-article/system/1605.html 写给Linux内核新手-关于Linux内核学习的误区 先说句正经的:其实 ...

  3. linux内核学习之二:编译内核

    在linux内核学习系列的第一课中讲述了搭建学习环境的过程(http://www.cnblogs.com/xiongyuanxiong/p/3523306.html),环境搭好后,马上就进入到下一环节 ...

  4. linux内核学习之一:环境搭建--安装Debian7.3

    本系列文章假设读者已对linux有一定的了解,其实学习linux内核不需要有很深的关于linux的知识,只需要了解以下内容:linux基础知识及基本shell命令:现代操作系统的基本概念:C语言和gc ...

  5. Linux内核学习笔记-2.进程管理

    原创文章,转载请注明:Linux内核学习笔记-2.进程管理) By Lucio.Yang 部分内容来自:Linux Kernel Development(Third Edition),Robert L ...

  6. Linux内核学习笔记-1.简介和入门

    原创文章,转载请注明:Linux内核学习笔记-1.简介和入门 By Lucio.Yang 部分内容来自:Linux Kernel Development(Third Edition),Robert L ...

  7. Linux内核学习趣谈

    本文原创是freas_1990,转载请标明出处:http://blog.csdn.net/freas_1990/article/details/9304991 从大二开始学习Linux内核,到现在已经 ...

  8. Linux 内核学习经验总结

    Linux 内核学习经验总结 学习内核,每个人都有自己的学习方法,仁者见仁智者见智.以下是我在学习过程中总结出来的东西,对自身来说,我认为比较有效率,拿出来跟大家交流一下. 内核学习,一偏之见:疏漏难 ...

  9. Linux内核分析——Linux内核学习总结

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

随机推荐

  1. 智能家居 (2)手机一键自配置APP

    说明 本教程主要记录APP端一键自配置功能+TCP/IP通信 0配套使用单片机烧录 /* 文件名称:smartconfig.ino 功能:ESP8266快速配置功能 作者:www.doit.am 日期 ...

  2. 客户端本地存储的比较及使用window.name数据传输

    一:cookie: 1. 什么是cookie? Cookie是在客户端用于存储会话信息的,用户请求页面在web服务器与浏览器之间传递.每当同一台计算机通过浏览器请求某个页面时,就会发送这个 cooki ...

  3. Python2.7-StringIO和cStringIO

    官方文档:https://docs.python.org/2/library/stringio.html StringIO 和 cStringIO 都是对内存中的文件进行读写,操作方法与文件操作类似, ...

  4. 七,ESP8266-UDP(基于Lua脚本语言)

    https://www.cnblogs.com/yangfengwu/p/7533302.html 那天朋友问我为什么有UDP Sever 和 UDP Client   ,,我说:每个人想的不一样,设 ...

  5. Drupal错误:drupal Maximum execution time of 30 seconds exceeded database in解决方法

    Drupal开源内容管理框架 Drupal是使用PHP语言编写的开源内容管理框架(CMF),它由内容管理系统(CMS)和PHP开发框架(Framework)共同构成.连续多年荣获全球最佳CMS大奖,是 ...

  6. [Baltic 2011]Lamp BZOJ2346

    分析: 建图最短路,比较裸. 我们可以考虑,如果是‘\’那么,左上连右下边权为0,左下连右上边权为1,反之亦然. 卡裸spfa,加点优化能过,我就直接改成的堆优化Dijkstra 附上代码: #inc ...

  7. Scala _ 下划线

    1.引入包中的全部方法 import math._ //引入包中所有方法,与java中的*类似 2.表示集合元素 val a = (1 to 10).filter(_%2==0).map(_*2) / ...

  8. (.DS_Store)避免多人提交代码到GitHub上起冲突

    在多人合作的项目里,git pull origin master执行完之后出现以下问题: Auto-merging .DS_Store CONFLICT (content): Merge confli ...

  9. Go语言安全编码规范-翻译(分享转发)

    Go语言安全编码规范-翻译 本文翻译原文由:blood_zer0.Lingfighting完成 如果翻译的有问题:联系我(Lzero2012).匆忙翻译肯定会有很多错误,欢迎大家一起讨论Go语言安全能 ...

  10. Exp7:网络欺诈防范

    Exp7:网络欺诈防范 基础问题回答 通常在什么场景下容易受到DNS spoof攻击? 答:同一局域网下,以及各种公共网络. 在日常生活工作中如何防范以上两攻击方法? 答: 使用最新版本的DNS服务器 ...