操作系统 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 段的特权级位也被输出用于检查

原文地址:https://www.cnblogs.com/sfzyk/p/9710916.html

时间: 2024-08-08 15:55:21

操作系统 Lab1(2)的相关文章

操作系统 Lab1

练习1 1 ucore.img 是如何生成的 使用 make V= 查看详细的步骤 cc kern/init/init.c 使用cc工具进行预处理 gcc -Idir 将dir 作为查找目录(头文件) -ggdb 符加信息到允许gdb进行debug的程度 -gstabs 将符加信息以 stabs format 格式输出 这一个是主要被dbx 在大多数bsd 系统上使用 -m32 -Wall 输出所有的警告信息 -fno-buildin 不允许不易build__in__开头的buildin 函数

[HIT操作系统][lab1]熟悉实验环境 文件交互遇到的小盲区

实验链接: https://www.shiyanlou.com/courses/115 课程链接 http://mooc.study.163.com/course/HIT-1000002004#/info 本实验主要是熟悉实验环境目录结构,如何编译Linux源文件,并在bochs模拟器下运行. 要感谢实验楼提供的环境,我在Ubuntu 16.04下自行编译和Bochs运行非常不顺利,而实验楼非常的顺滑,可以专注于课程知识的学习. 实验楼环境里按步骤操作并没有遇到什么大问题,不过我觉得老师的实验步

操作系统ucore lab1实验报告

操作系统lab1实验报告 [练习1] 理解通过 make 生成执行文件的过程.(要求在报告中写出对下述问题的回答) 在此练习中,大家需要通过阅读代码来了解: 1. 操作系统镜像文件 ucore.img 是如何一步一步生成的?(需要比较详细地解释 Makefile 中 每一条相关命令和命令参数的含义,以及说明命令导致的结果) 2. 一个被系统认为是符合规范的硬盘主引导扇区的特征是什么? [练习1.1] 1.生成ucore.img需要kernel和bootblock 生成ucore.img的代码如下

实现操作系统TOS lab1

实验目的: 操作系统是一个软件,也需要通过某种机制加载并运行它. 在这里我们将通过另外一个更加简单的软件-bootloader来完成这些工作,为此,我们需要完成一个能够切换到x86的保护模式并显示字符的bootloader,为启动操作系统TOS来做准备. lab1提供了一个非常小的boot loader和 TOS ,真个bootloader执行代码小于512字节(一个扇区),这样才能放到硬盘的主引导扇区中. 通过分析和实现这个boot loader和TOS ,可以了解到: 计算机原理 cpu的编

MIT 操作系统实验 MIT JOS lab1

JOS lab1 嘿嘿,实验环境还是相当的友好的. 很多东西都准备好了.把重点放在理论的印证上面. MIT才是改变并引领世界的牛校,心神往之,吾身不能至啊~ 国内的北大,上交等学校的OS实验都是直接用的JOS,这点证据还是容易找的...说明什么,不言而喻咯... ----------------------------------------------------------------------------------------------------------------------

ucore lab1 bootloader学习笔记

---恢复内容开始--- 开机流程回忆 以Intel 80386为例,计算机加电后,CPU从物理地址0xFFFFFFF0(由初始化的CS:EIP确定,此时CS和IP的值分别是0xF000和0xFFF0))开始执行.在0xFFFFFFF0这里只是存放了一条跳转指令,通过跳转指令跳到BIOS例行程序起始点.BIOS做完计算机硬件自检和初始化后,会选择一个启动设备(例如软盘.硬盘.光盘等),并且读取该设备的第一扇区(即主引导扇区或启动扇区)到内存一个特定的地址0x7c00处,然后CPU控制权会转移到那

MIT 操作系统实验 MIT JOS lab2

MIT JOS lab2 在/kern/kdebug.c 里面会看到这段代码,关注下面的__STAB_BEGIN__ 那段代码 __STAB_BEGIN__   __STAB_END__相关定义在/kern/kernel.ld里面 下面我给出了kernel.ld的主要内容 ENTRY(_start) SECTIONS { /* Link the kernel at this address: "." means the current address */ . = 0xF0100000

操作系统ucore lab2实验报告

操作系统lab2实验报告 实验二主要是完成Ucore操作系统的物理内存管理. 主要包括了解如何建立对物理内存的初步管理,即了解连续物理内存管理;最后了解页表相关的操作,即如何建立页表来实现虚拟内存到物理内存之间的映射,对段页式内存管理机制有一个比较全面的了解. 练习0:填写已有实验 lab2会依赖lab1,需要把做的lab1的代码填到lab2中缺失的位置上面.这道题就是一个工具的利用.这里我使用的是linux下的一个叫做meld的工具.如下图: 直接将两个文件夹拖入,然后点击compare就行了

lab1的实验练习答案

# Lab1 report ## [练习1] [练习1.1] 操作系统镜像文件 tos.img 是如何一步一步生成的?(需要比较详细地解释 Makefile 中 每一条相关命令和命令参数的含义,以及说明命令导致的结果) bin/tos.img | 生成tos.img的相关代码为 | (TOSIMG):(kernel) (bootblock)|(V)dd if=/dev/zero of=@count=10000|(V)dd if=(bootblock)of=@ conv=notrunc | (V)