• MIT 6.828 xv6/jos LAB3-PARTB


    这一部分是希望能够处理页错误、断点和系统调用

    处理系统页错误

    在发生了page fault之后,进入到系统中断中,然后经过_alltraps,进入到trap,再经过trap_dispatch分发,应该对中断类型为T_PGFLT的中断进行处理

    clip_image001

    当然,页错误也有内核页错误和用户页错误

    clip_image002

    处理断点

    在JOS中,断点中断被“滥用”了,几乎是一种系统调用,用作调用系统的Monitor,实现很简单

    clip_image003

    系统调用

    系统调用的汇编部分已经写好了

    clip_image004

    引发一个中断,中断号是T_SYSCALL,而具体的系统调用号写在了num中,也就是寄存器ax中,然后在trap_dispatch中,调用syscall就可以了

    clip_image005

    而syscall的实现如下所示

    clip_image006

    User-mode startup

    在系统启动时刻加载的链接进内核的程序是user/hello.c

    就是打印hello world和自己的环境信息

    但是这里涉及到好几次的中断和系统调用

    clip_image007

    第一次调用系统调用sys_getenvid是

    clip_image008

    然后进入umain函数之后

    clip_image009

    这里输出了两次,所以会产生两次系统调用

    当umain函数执行结束之后,回到Libmain函数,此时会执行exit函数,而exit函数内部会调用env_destroy

    这样上面的中断和系统调用就都解释清楚了

    Page fault and memory protection

    非常重要的内容,保护内存,在进行内存操作的时候,检查当前的内存范围是不是当前进程可以访问的,如果不是的话,检查失败,结束进程

    clip_image010

    上面这段代码是参考别人的程序

    检查给定的内存范围内的所有页,看当前的用户有没有权限访问

    至此本次实验结束,折腾了一天半。。。

  • 相关阅读:
    我有好多东西要学
    不科学计数法
    遍历生成dataframe
    搭建个人博客,Docsify+Github webhook+JGit解决方案
    从1开始实现一个中间件
    python通过youget下载B站系列视频
    JS 中深拷贝的几种实现方法
    addEventListener() 方法,事件监听
    css背景透明文字不透明
    如何理解dispatch( 'tagsView/delAllViews',null,{root:true} )里面的root:true
  • 原文地址:https://www.cnblogs.com/bdhmwz/p/5071085.html
Copyright © 2020-2023  润新知