20135202闫佳歆--week2 操作系统是如何工作的--学习笔记
此为个人学习笔记存档
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.进程是一个新进程,还从未执行过。
20135202闫佳歆--week2 操作系统是如何工作的--学习笔记的更多相关文章
- 20135202闫佳歆--week6 进程的描述与创建--学习笔记
此为个人学习笔记存档! week 6 进程的描述与创建 一.进程的描述 1.进程控制块task_struct 以下内容来自视频课件,存档在此. 为了管理进程,内核必须对每个进程进行清晰的描述,进程描述 ...
- 20135202闫佳歆--week 8 课本第4章学习笔记
第四章 进程调度 一.多任务 多任务操作系统就是能同时并发的交互执行多个进程的操作系统. 多任务操作系统使多个进程处于堵塞或者睡眠状态,实际不被投入执行,这些任务尽管位于内存,但是并不处于可运行状态. ...
- 20135202闫佳歆--week2 一个简单的时间片轮转多道程序内核代码及分析
一个简单的时间片轮转多道程序内核代码及分析 所用代码为课程配套git库中下载得到的. 一.进程的启动 /*出自mymain.c*/ /* start process 0 by task[0] */ p ...
- 20135202闫佳歆--week1 计算机是如何工作的
计算机是如何工作的 这一周我学习了计算机工作的相关知识. 最基础的,就是冯诺依曼体系结构结构,它最核心的思想是存储程序计算机,要点是:数字计算机的数制采用二进制:计算机应该按照程序顺序执行. 除了思想 ...
- 20135202闫佳歆--week 7 Linux内核如何装载和启动一个可执行程序--实验及总结
week 7 实验:Linux内核如何装载和启动一个可执行程序 1.环境搭建: rm menu -rf git clone https://github.com/megnning/menu.git c ...
- 20135202闫佳歆--week 9 期中总结
期中总结 前半学期的主要学习内容是学习mooc课程<Linux内核分析>以及课本<Linux内核设计与实现>. 所涉及知识点总结如下: 1. Linux内核启动的过程--以Me ...
- 20135202闫佳歆--week3 跟踪分析Linux内核的启动过程--实验及总结
实验三:跟踪分析Linux内核的启动过程 一.调试步骤如下: 使用gdb跟踪调试内核 qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd r ...
- 20135202闫佳歆--week6 分析Linux内核创建一个新进程的过程——实验及总结
week 6 实验:分析Linux内核创建一个新进程的过程 1.使用gdb跟踪创建新进程的过程 准备工作: rm menu -rf git clone https://github.com/mengn ...
- 20135202闫佳歆--week3 构造一个简单的Linux系统MenuOs--学习笔记
此为个人学习笔记存档 week 3 构造一个简单的Linux系统MenuOs 复习: 计算机有三个法宝:存储程序计算机,函数调用堆栈,中断 操作系统有两把剑: 1.中断上下文的切换,保存现场和恢复现场 ...
随机推荐
- Spring Boot 验证表单
在实际工作中,得到数据后的第一步就是验证数据的正确性,如果存在录入上的问题,一般会通过注解校验,发现错误后返回给用户,但是对于逻辑上的错误,很难使用注解方式进行验证了,这个使用可以使用Spring所提 ...
- sphinx编译安装
install sphinx wget http://sphinxsearch.com/files/sphinx-2.0.8-release.tar.gz tar zxvf sphinx--relea ...
- http的长连接和短连接(数据库也一样)
长连接与短连接 所谓长连接,指在一个TCP连接上可以连续发送多个数据包,在TCP连接保持期间,如果没有数据包发送,需要双方发检测包以维持此连接,一般需要自己做在线维持. 短连接是指通信双方有数据交互时 ...
- 通过SSH秘钥登录线上MySQL数据库(基于Navicat)
前言 生产环境的数据库往往需要经过严格的安全限制,所以禁用密码登录,使用秘钥的方式是一种相对安全的登录方式. 原理: 角色: 主机A:其他主机,有访问线上数据库的权限 主机B:线上数据库的主机 主机C ...
- Python2.7-tempfile
tempfile 模块,生成临时文件夹或文件,所生成的文件(夹)的名字都是随机的,但可以指定前缀.后缀和路径,中间由6位随机字符组成.应用程序经常要保存一些临时的信息,这些信息不是特别重要,没有必要写 ...
- Taints和Tolerations -- 污点- 容忍
1.taint 定义在node上,排斥pod 2.toleration定义在pod中,容忍pod 3.可以在命令行为Node节点添加Taints: kubectl taint nodes node1 ...
- 用python2.7.9 写个小程序搜索某个目录下行有某关键字
# -*- coding: utf-8 -*-import sysreload(sys)sys.setdefaultencoding("utf-8")import os def p ...
- 复习zabbix配置agent过程
1. 创建主机configuration(配置)-->Hosts(主机)-->Create host(创建主机) 不使用proxy --- enabled 2.链接监控模板Templa ...
- A Theoretical Analysis of Feature Pooling in Visual Recognition
这篇是10年ICML的论文,但是它是从原理上来分析池化的原因,因为池化的好坏的确会影响到结果,比如有除了最大池化和均值池化,还有随机池化等等,在eccv14中海油在顶层加个空间金字塔池化的方法.可谓多 ...
- Windows安装mapnik
windows安装mapnik,首先去官网下载windows压缩包:http://mapnik.org/,解压位置C:\mapnik-v2.2.0 然后下载安装python2.7,安装位置 C:\P ...