ucore练习六

练习六

1、 中断描述符表(也可简称在保护模式下的中断向量表)中的一个表项占多少字节?其中哪几位代表中断处理代码的入口?

在保护模式下,中断向量表中的表项由8个字节组成,中断向量表的表项形式如下:
在这里插入图片描述在这个表项中,由8到12位用于表示门类型,门类型有三种,包括中断门,陷阱门,任务门。通过对XXX的不同取值,达到访问不同门的效果
从上图可以看出,其中的第16位到第31位为中断历程的段选择子,第0到15位以及第48到63位分别代表偏移量的低位和高位。这三个数据通过组合决定了中断处理代码的入口地址。

2、请编程完善kern/trap/trap.c中对中断向量表进行初始化的函数idt_init。在idt_init函数中,依次对所有中断入口进行初始化。使用mmu.h中的SETGATE宏,填充idt数组内容。每个中断的入口由tools/vectors.c生成,使用trap.c中声明的vectors数组即可。

  • 由于idt_init函数需要对所有的中断入口进行初始化,在这里需要对中断有一个大致的了解
    1、由CPU外部设备引起的外部事件如I/O中断、时钟中断、控制台中断等是异步产生的(即产生的时刻不确定),
    与CPU的执行无关,我们称之为异步中断,也称外部中断。
    2、把在CPU执行指令期间检测到不正常的或非法的条件(如除零错、地址访问越界)所引起的内部事件,
    称作同步中断,也称内部中断,简称异常。
    3、把在程序中使用请求系统服务的系统调用而引发的事件, 称作陷入中断,也称软中断,系统调用简称trap。
    中断描述符表就是将每个中断或异常的编号和一个指向中断服务例程的描述符联系起来。

  • 对idt_init函数中用到的其他文件中的内容做一下介绍

  • mmu.h中的SETGATE宏:
    在这里插入图片描述
    上述代码段用于中断/陷阱门的描述表:
    istrap:istrap只有两种状态,1或者0,0代表的是中断门 ,1代表的是陷阱门
    sel:sel表示用于中断/陷阱处理程序的代码段选择器,也就是说处理中断/陷阱是要在内核段中执行 还是在用户段中执行
    off:off表示中断/陷阱处理程序的代码段偏移地址
    dpl:dpl用于表示描述符的特权级别。包括内核权限以及用户权限

  • tools/vector.c中生成中断入口

由一开始中断分类我们可以知道,再使用idt_init函数初始化时需要对中断进程分类处理,针对不同的权限进行不同的初始化,所以在编写idt_init代码是需要对内核权限和用户权限进行区分。对于ucore操作系统来说,只有从用户态转变为内核态时权限是用户态,所以在下面编写代码时,需要将这一点拿出来单独初始化。

代码如下:
在这里插入图片描述

3、请编程完善trap.c中的中断处理函数trap,在对时钟中断进行处理的部分填写trap函数中处理时钟中断的部分,使操作系统每遇到100次时钟中断后,调用print_ticks子程序,向屏幕上打印一行文字"100 ticks"

在上述问题中已经完成了对idt中断向量表的初始化操作,那么在trap_dispatch就可以对其进行调用处理。由于中断描述表中的一个表项占8个字节,其中16到31位表示段选择子,0到15位以及48到63为表示偏移地址。偏移地址和段选择子组合之后便是中断处理程序的入口地址。当发生中断之后,可以通过IDTR寄存器寻找到对应的中断号,之后通过 基地址+8×n可以找到相应的中断地址,然后跳转到相应的程序段中完成中断处理。上述表示中断处理的历程。在这一问中,需要用到时钟中断,并且完成对时钟中断的相关操作。

  • 对于trap_dispatch()中用到的其他函数做一下介绍:
    print_ticks()在trap_dispatch()函数中会被调用,此函数的作用是每次到达100次时钟中断时就打印时钟中断信息。
    在这里插入图片描述
  • 下面为trap_dispatch()对于时钟中断信息的完善:

在这里插入图片描述

上述练习完毕之后,lab1的执行结果如下:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值