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

  • 相关阅读:
    当 IDENTITY_INSERT 设置为 OFF 时,不能向表 'tb_User' 中的标识列插入显式值。
    版本控制器Vss和svn
    判断浏览器刷新与关闭的代码
    web开发过程中要注意的问题(二)【转】
    JS版include函数
    兼容FF/IE的添加收藏夹的代码
    jQuery技巧总结
    把JS与CSS写在同一个文件里
    CSS hack浏览器兼容一览表
    利用JS获取IE客户端IP及MAC的实现
  • 原文地址:https://www.cnblogs.com/sfzyk/p/9710916.html
Copyright © 2020-2023  润新知