20135316王剑桥Linux内核学习笔记

20135316王剑桥
《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000
一、计算机是如何工作的?(总结)——三个法宝
存储程序计算机工作模型,计算机系统最最基础性的逻辑结构;
函数调用堆栈,高级语言得以运行的基础,只有机器语言和汇编语言的时候堆栈机制对于计算机来说并不那么重要,但有了高级语言及函数,堆栈成为了计算机的基础功能;
enter 
pushl %ebp
 movl %esp,%ebp
leave 
movl %ebp,%esp
popl %ebp
函数参数传递机制和局部变量存储
中断,多道程序操作系统的基点,没有中断机制程序只能从头一直运行结束才有可能开始运行其他程序。
二、堆栈是C语言程序运行时必须的一个记录调用路径和参数的空间
三、堆栈相关寄存器:esp(栈顶指针)ebp(栈底指针)
ebp在C语言中用作记录当前函数调用基址
cs:eip:总是指向下一条的指令地址(顺序执行)
跳转/分支:call,将当前cs:eip的值压入栈顶,cs:eip指向被调用函数的入口地址
Ret,将保存在栈顶的cs:eip的值弹出,放入cs:eip中
四、堆栈相关操作:push(压栈,栈顶减少四个字节)pop(出栈,栈顶增加四个字节)
五、call指令执行时,cs:eip指向原来call下一条指令,该值被保存到栈顶,然后cs:eip指向被调用函数的入口;进入被调用函数,pushl ebp;movl esp ebp;退出被调用函数,movl ebp esp;popl ebp;ret。
六、由CPU和内核代码共同实现了保存现场和恢复现场
七、C代码中嵌入汇编代码的写法:
asm(汇编语句模板:输出部分:输入部分:破坏描述部分)
如:asm(“statements”:output-regs:input-regs:clobbered-regs)
asm可以用“-asm-”来代替。
20135316王剑桥Linux内核学习笔记
九、内嵌汇编常用限定符
20135316王剑桥Linux内核学习笔记
$1f:接下来标号1:的位置
十、进程切换的汇编代码:
20135316王剑桥Linux内核学习笔记
十一、操作系统两把剑:中断上下文和进程上下文切换。
十二、切换到一个新进程
20135316王剑桥Linux内核学习笔记
十三、实验截图
20135316王剑桥Linux内核学习笔记
20135316王剑桥Linux内核学习笔记
总结:从我对这节课所学内容以及实验分析的理解,我认为操作系统是通过中断处理和进程切换来调度执行每一个进程的。在这个过程中CPU和内核代码起到了关键性作用。当一个进程出现中断时cpu会访问中断处理代码,然后进行处理之后重新返回进程,当一个进程执行结束时,cpu会切换到下一个即将被执行的进程。