二,操作系统是如何工作的
1、函数调用堆栈
三大法宝:存储程序计算机 函数调用堆栈 中断机制
堆栈:是C语言程序运行时必须的一个记录调用路径和参数的空间。是计算机内部现成的东西,我们直接使用。
包括函数调用框架、传递参数、保存返回地址、提供局部变量的空间等等。
堆栈相关寄存器:esp堆栈指针(栈顶)、ebp基址指针(栈底) * ebp在C语言中用作记录当前函数调用基址。
堆栈操作:push(栈顶地址减少四个字节)、pop(栈顶地址增加四个字节)(32位)
其他关键寄存器:cs:eip,总是指向下一条指令的地址。(call、ret)
//建立被调用函数的堆栈框架
pushl %ebp
movl %esp,%ebp
//被调用者函数体
//do sth
//拆除被调用者函数的堆栈框架
movl %ebp,%esp
popl %ebp
ret
call指令是将eip中下一条指令的地址保存在栈顶,设置eip指向被调用程序的代码开始处。
ret将该地址恢复到eip中
* 举例应用:首先,使用gcc -g 生成test.c的可执行文件test;然后再使用objdump -s获得test的反汇编文件。
有压栈必有出栈,有生必有死。
函数的返回值通过eax寄存器传递。
2,借助Linux内核部分源代码模拟存储程序计算机工作模型及时钟中断
中断机制如何工作:CPU和内核代码共同实现保存现场和恢复现场。
mykernel的实验,诸如下图:
3,在mykernel基础上构造一个简单的操作系统内核
C语言代码中嵌入汇编代码: asm("statements" : output_regs :inout_regs :clobbered_regs); 输入、输出、破会描述、编译器优化、不允许编译器优化等等。
mysceh的具体内容
两个正在运行的进程之间做进程上下文转换
* 操作系统的两把剑:中断上下文和进程上下文的切换
时间片轮转的例子,时间片可以改小一点。
4,学习心得体会
基本了解了函数调用堆栈的过程和原理,中断机制的工作原理,以及mykernel的一些相关知识,最后学习了一下时间片轮转的实验举例。总的来说内容不多也不算少,还是需要一些时间来消化和理解的。很不错的一次自学。