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. apache 虚拟主机及phpmyadmin 配置

    NameVirtualHost *:80 <VirtualHost *:80> ServerName www.ly.comDocumentRoot E:/mywww </Virtua ...

  2. CentOS7安装Java

    通过下载Oracle官网的jdk来安装 不使用openjdk 访问 http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downl ...

  3. requirejs原理深究以及r.js和gulp的打包【转】

    转自:http://blog.csdn.net/why_fly/article/details/75088378 requirejs原理 requirejs的用法和原理分析:https://githu ...

  4. loli的搜索测试-5

    今天早上听说不放假感觉很sad,又听说要考试感觉更sad了,早读的时候Juan_feng表示即使考也不会考虫食算,结果上午并没有考试,就自己做了几道题.不得不说做题的决定实在是太明智了,做NOIP历年 ...

  5. 解压版中文乱码问题MYSQL中文乱码

    安装的是解压版的MYSQL,具体配置参考:https://jingyan.baidu.com/article/9c69d48f85032f13c9024e15.html . 1:解压之后copy 一个 ...

  6. mapreduce设置setMapOutputKeyClass与setMapOutputValueClass原因

    一般的mapreduce的wordcount程序如下: public class WcMapper extends Mapper<LongWritable, Text, Text, LongWr ...

  7. laravel记录笔记Laravel 连接数据库、操作数据库的三种方式

    laravel中提供DB facade(原始查找).查询构造器.Eloquent ORM三种操作数据库方式 1.连接数据库 .env 数据库配置 DB_HOST=localhost dbhost DB ...

  8. Kafka学习之路 (五)Kafka在zookeeper中的存储

    一.Kafka在zookeeper中存储结构图 二.分析 2.1 topic注册信息 /brokers/topics/[topic] : 存储某个topic的partitions所有分配信息 [zk: ...

  9. /etc/hosts,GoldenGate

    [oracle@g]$ netstat -alp|grep 7809(Not all processes could be identified, non-owned process info wil ...

  10. 关于Android开发环境的演变

    是不是我天生就不适合安装软件——经过eclipse.jdk.Android Studio的历次安装,我发觉自己似乎永远都装不好.去年eclipse断断续续装了三四天,那时希望能附加C++的软件包,却始 ...