计算机是如何工作的?
存储程序计算机工作模型,计算机系统最最基础性的逻辑结构;
函数调用堆栈,高级语言得以运行的基础,只有机器语言和汇编语言的时候堆栈机制对于计算机来说并不那么重要,但有了高级语言及函数,堆栈成为了计算机的基础功能;
enter
--pushl %ebp
--movl %esp,%ebp
leave
--movl %ebp,%esp
--popl %ebp
函数参数传递机制和局部变量存储
中断,多道程序操作系统的基点,没有中断机制程序只能从头一直运行结束才有可能开始运行其他程序。
♦ 堆栈相关的寄存器
– esp,堆栈指针(stack pointer)
– ebp,基址指针(base pointer)
♦ 堆栈操作
– push
栈顶地址减少4个字节(32位)
– pop
栈顶地址增加4个字节
♦ ebp在C语言中用作记录当前函数调用基址
♦ 其他关键寄存器
– cs : eip:总是指向下一条的指令地址
• 顺序执行:总是指向地址连续的下一条指令
• 跳转/分支:执行这样的指令的时候,cs : eip的值会
根据程序需要被修改
• call:将当前cs : eip的值压入栈顶,cs : eip指向被
调用函数的入口地址
• ret:从栈顶弹出原来保存在这里的cs : eip的值,放
入cs : eip中
以下是实验内容:
qemu窗口可以看到my_start_kernel在执行,同时my_timer_handler时钟中断处理程序周期性执行。
内核头文件;
执行my_start_kernel,83行之前是硬件初始化,83行及以后是操作系统。
比较简单,每循环100000次打印“my_start_kernel here”
同样是硬件初始化;
每次时钟中断调用一次printk,输出一个">>>>>>>>my_timer_handler here<<<<<<<<",中断处理动作
作者: 王雪铖
原创作品转载请注明出处
《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000