操作系统 Lab1(2)
中断很久,一看发现又多了一些内容。
打算完成了
Lab1 challenge 1
中断像量表设置的时候我们需要设置一个用于系统调用的 trap门
也就是
利用中断切换特权级
To kernel
调用 Tokernel 的时候由于由特权及的转换,所以这里会在 Tss 中取出当前函数的内核栈 并且做相应的切换
依次压栈 eflags cs eip err trapno ds es sf gs tregs 等
将这个 调用栈压入 栈中
最后执行 push esp 这样是把 栈顶的指针放在栈顶作为tarp 的参数 tf 传入
在dispatch 中 增加一个另外的空间将修改后的 trapframe 填入
将新的 指针入栈
这样 Pop 的时候 也就返回的时候会使用新的 esp 栈作为返回
iret 的时候 会客而已进行正确的执行了
因为压栈的时候压栈了 esp 和 ss ,但是出栈的时候不需要 esp 和 ss 所以返回的栈帧 中没有 esp 和 ss ??
To User
压栈的时候压栈了 调用栈帧 但是不完整
所以在另外一个地方申请一个栈帧 完整设置esp 和 ss 返回
解答:
就硬件来说,执行iret时存在两种情况,一是栈上保存的CS的权限级别(内核态或用户态)与当前一致,不考虑ss和esp;二是栈上保存的权限级别与当前不同,需要恢复ss和esp。OS的任务,是利用iret的功能,在修改CS的同时不改动其它寄存器的值。
(所以to kernel 的时候iret 会发现cs 的特权及一致(已经修改过了,从而没有esp 和 ss))
(to user 同理)
附:lab1_prinit_cur_status
是输出了当前几个寄存器的置 cs 段的特权级位也被输出用于检查
操作系统 Lab1(2)的更多相关文章
- 操作系统 Lab1
练习1 1 ucore.img 是如何生成的 使用 make V= 查看详细的步骤 cc kern/init/init.c 使用cc工具进行预处理 gcc -Idir 将dir 作为查找目录(头文件) ...
- 操作系统Lab1 详解(boot|kern/debug)
总体 : boot kern libs tools boot asm.h bootmain.c bootasm.S asm.h 汇编头文件 SEG_NULLASM 定义一个空段描述符 SEG_ASM ...
- 北航内核操作系统-lab1
1.实验目的. 2.实验内容. 2.1Exercise 1.1 请修改 include.mk 文件,使交叉编译器的路径正确.之后执行 make指令,如果配置一切正确,则会在gxemul 目录下生成v ...
- ucore操作系统学习笔记(一) ucore lab1系统启动流程分析
一.ucore操作系统介绍 操作系统作为一个基础系统软件,对下控制硬件(cpu.内存.磁盘网卡等外设),屏蔽了底层复杂多样的硬件差异:对上则提供封装良好的应用程序接口,简化应用程序开发者的使用难度.站 ...
- 清华大学OS操作系统实验lab1练习知识点汇总
lab1知识点汇总 还是有很多问题,但是我觉得我需要在查看更多资料后回来再理解,学这个也学了一周了,看了大量的资料...还是它们自己的80386手册和lab的指导手册觉得最准确,现在我就把这部分知识做 ...
- MIT 操作系统实验 MIT JOS lab1
JOS lab1 首先向MIT还有K&R致敬! 没有非常好的开源环境我不可能拿到这么好的东西. 向每个与我一起交流讨论的programmer致谢!没有道友一起死磕.我也可能会中途放弃. 跟丫死 ...
- LAB1 启动操作系统
从机器上电到运行OS发生了什么? 在电脑主板上有一个Flash块,存放了BIOS的可执行代码.它是ROM,断电不会丢掉数据.在机器上电的时候,CPU要求内存控制器从0地址读取数据(程序第一条指令)的时 ...
- 【操作系统作业—lab1】linux shell脚本 遍历目标文件夹和所有文件 | 包括特殊字符文件名的处理
要求:写一个linux bash脚本来查看目标文件夹下所有的file和directory,并且打印出他们的绝对路径. 运行command:./myDir.sh input_path output_ ...
- MIT 操作系统实验 MIT JOS lab2
MIT JOS lab2 首先把内存分布理清楚,由/boot/main.c可知这里把kernel的img的ELF header读入到物理地址0x10000处 这里能够回想JOS lab1的一个小问.当 ...
随机推荐
- 使用navicat 使用IP、用户名、密码直接连接linux服务器里面的数据库
一般新申请的服务器,没有开通3306端口的吧,反正我遇到的,要用Navicat去连接linux下的数据库,都必须填写两个地方的信息,才能链接成功. 如果想要只通过填写ip还有数据库用户名还有密码就可以 ...
- rem换算公式
当前rem基准值=预设的基准值/设计稿宽度*当前设备的宽度
- css 苹方字体
苹方-简 常规体 font-family: PingFangSC-Regular, sans-serif; 苹方-简 极细体 font-family: PingFangSC-Ultralight, s ...
- 配置文件一spring-mvc.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...
- Flink SQL 系列 | 5 个 TableEnvironment 我该用哪个?
本文为 Flink SQL 系列文章的第二篇,前面对 Flink 1.9 Table 新架构及 Planner 的使用进行了详细说明,本文详细讲解 5 个 TableEnvironment 及其适用场 ...
- 阿里云应用上边缘云解决方案助力互联网All in Cloud
九月末的杭州因为一场云栖大会变得格外火热. 9月25日,吸引全球目光的2019杭州云栖大会如期开幕.20000平米的展区集结数百家企业,为数万名开发者带来了一场前沿科技的饕餮盛宴. 如同往年一样,位于 ...
- C++——多态
1. 多态定义的构成条件 多态是在不同继承关系的类对象,去调同一函数,产生了不同的行为. 就是说,有一对继承关系的两个类,这两个类里面都有一个函数且名字.参数.返回值均相同,然后我们通过调用函数来实现 ...
- inspect模块的使用
一.介绍 inspect模块主要的四种用处: 1.对是否是模块.框架.函数等进行类型检测 2.获取源码 3.获取类或函数的参数信息 4.解析堆栈 二.使用 只写了2个自己用到的方法,方法太用,http ...
- 阿里P8架构师谈:数据库分库分表、读写分离的原理实现,使用场景
本文转载自:阿里P8架构师谈:数据库分库分表.读写分离的原理实现,使用场景 为什么要分库分表和读写分离? 类似淘宝网这样的网站,海量数据的存储和访问成为了系统设计的瓶颈问题,日益增长的业务数据,无疑对 ...
- Hamilton回路 旅行商TSP问题 /// dp oj1964
题目大意: 给出一个n个顶点的无向图,请寻找一条从顶点0出发,遍历其余顶点一次且仅一次.最后回到顶点0的回路——即Hamilton回路. Input 多测试用例.每个测试用例: 第一行,两个正整数 n ...