您的位置:首页 > 其它

20135202闫佳歆--week2 操作系统是如何工作的--学习笔记

2016-03-06 00:31 288 查看
此为个人学习笔记存档

week 2 操作系统是怎么工作的

一、计算机是如何工作的?——三个法宝

(一)三个法宝

1.存储程序计算机

所有计算机的基础性的逻辑框架。

2.函数调用堆栈

在低级语言中并不很重要,但是堆栈技术是高级语言可以运行的基础。

3.中断机制

有了中断后,就有了多道程序设计

每个程序有自己的执行流。

中断发生时,cpu把当前的eip等压入内核堆栈中,然后把eip指向中断处理程序的入口。

(二)深入理解函数调用堆栈

1.堆栈

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

函数调用框架

传递参数(32位x86)

保存返回地址

提供局部变量空间

……

2.堆栈相关寄存器

esp 堆栈指针

ebp 基址指针(在c语言中用作记录当前函数调用基址)

3.堆栈操作

push 栈顶地址减少4个字节(32位)

pop 栈顶地址增加4个字节

4.其他关键寄存器

代码段寄存器cs

cs:eip:总是指向下一条指令的地址。

更改?

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

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

5.函数的堆栈框架

建立被调用函数的堆栈框架

在该函数的函数体前加:

pushl %ebp

movl %esp, %ebp

拆除被调用函数的堆栈框架

在该函数的函数体后加:

movl %ebp, %esp

popl %ebp

ret

(三)参数传递与局部变量

在例子中,参数传递?

z = p2(x,y);

pushl 0xfffffff8(%ebp)
pushl 0xfffffff4(%ebp)  ;先把y压入栈,再把x压入栈。因为都存在栈里,所以可以变址寻址
call 804839b<p2>
add $0x8,%esp   ;把之前压进来的取消掉
mov %eax,0xfffffffc(%ebp)   ;赋给z

二、借助linux内核部分源代码模拟存储程序计算机工作模型及时钟中断

1.利用mykernel实验模拟计算机硬件平台

三、在mykernerl基础上构造一个简单的操作系统内核

(一)C语言中嵌入汇编代码的写法

注意事项:

movl $0,%%eax\n\t中,第一个百分号是转义字符,第二个是%eax

addl %1,%%eax\n\t中,%1是指下文中输出和输入的编号,编号从0开始。

"c"(val1)表示用ecx寄存器存储val1的值。同理,"d"(val2)表示用edx寄存器存储val2的值。

"=m"(val3)表示把val3的值写入内存变量。=只写,m指内存。

具体见修饰符。

(二)一个简单的操作系统内核源代码

操作系统的“两把剑”:

1.中断上下文,即中断处理程序。

2.进程上下文的切换

两个情况:

1.下一个进程next->state == 0 即正在执行时。

2.进程是一个新进程,还从未执行过。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: