Linux内核学习总结

来源:互联网 发布:知乎网络加载错误 编辑:程序博客网 时间:2024/06/10 18:33

Linux内核学习总结

陈良 + 原创作品转载请注明出处 +《Linux操作系统分析》MOOC课程
/about”>http://www.xuetangx.com/courses/course-v1:ustcX+USTC001+/about

  • Linux内核学习总结
    • 我对Linux操作系统分析的理解 点击标题可进入
      • 通过汇编一个简单的C程序分析汇编代码理解计算机是如何工作的
      • 使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用
      • 分析SYSTEM_CALL中断处理过程
      • 分析LINUX内核创建一个新进程的过程
      • Linux内核如何装载和启动一个可执行程序
      • 理解进程调度时机跟踪分析进程调度与进程切换的过程
    • 总结

我对Linux操作系统分析的理解 (点击标题可进入)

1.通过汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的

这一周教会了我计算机的工作原理就是cpu中的寄存器读取内存中的指令,并运行读取到的指令的工作过程,过程中cpu中的寄存器不断地变化数值就是计算的过程。

2.使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用

这一周教会了我系统调用实质就是用户态代码调用系统调用API,在这个API中调用系统调用中断向量,触发中断system_call,接着调用中断服务xx

3.分析SYSTEM_CALL中断处理过程

这一周教会了我系统调用处理过程大致就是:保护现场,调用系统调用对应的处理函数,再恢复现场,返回的过程。

4.分析LINUX内核创建一个新进程的过程

这一周教会了我Linux内核创建一个新进程的过程中,因为copy_process中copy_thread的作用,子程序得以从ret_from_fork处开始后正常地运行下去。

5.Linux内核如何装载和启动一个可执行程序

这一周教会了我内核装载和启动一个新的可执行程序的过程
1.新的可执行程序从res->ip = new_ip处开始执行,也就是hello的程序起始地址
2.因为start_thread函数将新进程的堆栈信息都完成赋值了,原本进程的堆栈信息被新进程所覆盖,当系统调用返回后,从new_ip这个点开始运行新进程
3.动态链接返回的是动态链接器的程序入口,静态链接则是返回新的进程的程序入口

动态连接器会加载所有链接到的动态链接库文件,之后再加载可执行程序

6.理解进程调度时机跟踪分析进程调度与进程切换的过程

最后这一周教会了我进程切换的简单过程
一般执行过程(用户进程x切换到用户进程y)
(1)中断,保存x用户堆栈,载入x内核堆栈,进入x内核态
(2)内核态下运行schedule,使用switch_to进行进程上下文切换
(3)进入y内核态
(4)恢复现场,返回y用户态
(5)结束

总结

这是我第一次接触Linux内核代码,带着一点神秘感的内核代码就在老师的一点一丝抽丝剥茧的过程中渐渐明晰了起来。
最大的收获
在学习《Linux内核分析》的过程中,我的最大收获就是明白了基本的进程创建,运行和切换机制,尤其是调用系统调用产生中断等等压栈出栈的过程,对计算机的原理理解得更透彻
最大的遗憾
我对IO中断操作也有很大的兴趣,毕竟我们每一天都在用键盘打字,用鼠标控制光标,但是老师还没有提供这门课程,希望以后能有相关方面的课程教授,谢谢

原创粉丝点击