Linux内核分析——第二周学习笔记
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux内核分析——第二周学习笔记相关的知识,希望对你有一定的参考价值。
第二周 操作系统是如何工作的
第一节 函数调用堆栈
存储程序计算机:是所有计算机基础的框架
堆栈:计算机中基础的部分,在计算机只有机器语言、汇编语言时,就有了堆栈。堆栈机制是高级语言可以运行的基础。
计算机“三宝”:存储程序计算机、函数调用堆栈和中断机制。
- 堆栈是C语言程序运行时必须的一个记录调用路径和参数的空间
- 函数调用框架(eg:enter、leave )
- 传递参数(32位,通过堆栈来传递参数)
- 保存返回地址(用eax)
- 提供局部变量空间
- 等等
♦ C语言编译器对堆栈的使用有一套的规则,不同的系统中,编译C代码会有不同的汇编代码。
♦ 了解堆栈存在的目的和编译器对堆栈使用的规则是理解操作系统一些关键性代码的基础。
一、堆栈寄存器和堆栈操作
pop:从高地址向低地址
push:从低地址向高地址
二、利用堆栈实现函数的调用和返回
1.其他关键寄存器
- cs : eip:总是指向下一条的指令地址
• 顺序执行:总是指向地址连续的下一条指令 • 跳转/分支:执行这样的指令的时候,cs : eip的值会 根据程序需要被修改 • call:将当前cs : eip的值压入栈顶,cs : eip指向被 调用函数的入口地址 • ret:从栈顶弹出原来保存在这里的cs : eip的值,放 入cs : eip中
中断机制是如何工作的?
call指令: 1)将eip中下一条指令的地址A保存在栈顶 2)设置eip指向被调用程序代码开始处
三、函数堆栈框架的形成
- call xxx
- 执行call之前
- 执行call时,cs : eip原来的值指向call下一条指令,该值被保存到栈顶,然后cs : eip的值指向xxx的入口地址
2. 进入xxx
- 第一条指令: pushl %ebp
- 第二条指令: movl %esp, %ebp
- 函数体中的常规操作,可能会压栈、出栈
3. 退出xxx
- movl %ebp,%esp
- popl %ebp
- ret
第二节 借助Linux内核部分源代码模拟存储程序计算机工作模型及时钟中断
当一个中断信号发生时,CPU把当前的eip,esp,ebp压到内核堆栈中去,并把eip指向中断处理程序的入口。
C代码中嵌入汇编代码
第三节 在mykernel基础上构造一个简单的操作系统内核
实验:完成一个简单的时间片轮转多道程序内核代码
以上是关于Linux内核分析——第二周学习笔记的主要内容,如果未能解决你的问题,请参考以下文章