20135202闫佳歆--week2 操作系统是如何工作的--学习笔记
2016-03-06 00:31
288 查看
此为个人学习笔记存档
每个程序有自己的执行流。
中断发生时,cpu把当前的eip等压入内核堆栈中,然后把eip指向中断处理程序的入口。
函数调用框架
传递参数(32位x86)
保存返回地址
提供局部变量空间
……
ebp 基址指针(在c语言中用作记录当前函数调用基址)
pop 栈顶地址增加4个字节
cs:eip:总是指向下一条指令的地址。
更改?
call:将当前cs:eip的值压入栈顶,cs:eip指向被调用函数的入口地址
ret:从栈顶弹出原来保存在这里的cs:eip的值,放入cs:eip中
在该函数的函数体前加:
pushl %ebp
movl %esp, %ebp
拆除被调用函数的堆栈框架
在该函数的函数体后加:
movl %ebp, %esp
popl %ebp
ret
z = p2(x,y);
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指内存。
具体见修饰符。
2.进程上下文的切换
两个情况:
1.下一个进程next->state == 0 即正在执行时。
2.进程是一个新进程,还从未执行过。
week 2 操作系统是怎么工作的
一、计算机是如何工作的?——三个法宝
(一)三个法宝
1.存储程序计算机
所有计算机的基础性的逻辑框架。2.函数调用堆栈
在低级语言中并不很重要,但是堆栈技术是高级语言可以运行的基础。3.中断机制
有了中断后,就有了多道程序设计每个程序有自己的执行流。
中断发生时,cpu把当前的eip等压入内核堆栈中,然后把eip指向中断处理程序的入口。
(二)深入理解函数调用堆栈
1.堆栈
堆栈是c语言程序运行时必须的一个记录调用路径和参数的空间函数调用框架
传递参数(32位x86)
保存返回地址
提供局部变量空间
……
2.堆栈相关寄存器
esp 堆栈指针ebp 基址指针(在c语言中用作记录当前函数调用基址)
3.堆栈操作
push 栈顶地址减少4个字节(32位)pop 栈顶地址增加4个字节
4.其他关键寄存器
代码段寄存器cscs: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.进程是一个新进程,还从未执行过。
相关文章推荐
- java合并排序
- @synthesize和@dynamic分别有什么作用?
- 中缀转前缀 c语言
- android使用Fresco在xml中固定宽高比
- 为推文优化的Lucene Analyzer类
- 如何监控GC及内存问题解决方案概述
- get和post区别
- pom.xml(Project Object Model) 文件简单介绍
- JVM调优总结
- java 知识点(测试过)
- Maximum Depth of Binary Tree
- 按字段分组的Reducer
- 按字段分组的Mapper
- C++中变量的作用域与生命周期
- 用过coreData或者sqlite吗?读写是分线程的吗?
- GCD中有哪几种Queue?你自己建立过串行Queue吗?背后的线程模型是什么样的
- Maven 的基本用法
- ubuntu建立快捷方式
- ubuntu建立快捷方式
- 20145208 《Java程序设计》第一周学习总结