《linux内核分析》 第二周

20135130 王川东

 

计算机三个“法宝”:存储程序计算机、函数调用堆栈和中断机制

深入理解函数调用堆栈:

  堆栈是C语言运行时必须的一个记录调用路径和参数的空间:

    作用包括:

        函数调用框架;

        保存参数;

        保存返回地址;

        提供局部变量等等

  相关寄存器:esp:堆栈指针

         ebp:基址指针

  push:栈顶地址减少4字节(32位),并将数值放入

  pop:栈顶地址增加4字节

  cs(代码段寄存器) : eip:总是指向下一条的指令地址

                顺序执行:总是指向地址连续的下一条指令

                跳转/分支:执行这样的指令的时候, cs : eip的值会根据程序需要被修改

            call:将cs.eip的值压入栈顶,cs.eip指向调用函数的入口地址。

            ret:从栈顶弹出原来保存在这里的cs.eip的值,放入cs.eip中。

例:call的执行过程:

参数传递与局部变量:

  建立堆栈框架:push  %ebp

         mov  %esp  %ebp

  拆除堆栈框架:mov  %ebp  %esp

         pop  %ebp

  函数的返回值通过eax寄存器传递

mykernel实验:

CPU和内核代码共同实现了保存现场和恢复现场

实验过程:

 

执行结果:

进程的启动和进程的切换机制分析如图:

posted on 2016-03-06 17:20  dve  阅读(175)  评论(0编辑  收藏  举报