• 大小: 40KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-05-17
  • 语言: 其他
  • 标签: pintos  

资源简介

学生所做的pintos project2代码,附带实验报告。。。。。

资源截图

代码片段和文件信息

#include “userprog/exception.h“
#include 
#include 
#include “userprog/gdt.h“
#include “threads/interrupt.h“
#include “threads/thread.h“
#include “threads/vaddr.h“
#include “userprog/syscall.h“
/* Number of page faults processed. */
static long long page_fault_cnt;

static void kill (struct intr_frame *);
static void page_fault (struct intr_frame *);

/* Registers handlers for interrupts that can be caused by user
   programs.

   In a real Unix-like OS most of these interrupts would be
   passed along to the user process in the form of signals as
   described in [SV-386] 3-24 and 3-25 but we don‘t implement
   signals.  Instead we‘ll make them simply kill the user
   process.

   Page faults are an exception.  Here they are treated the same
   way as other exceptions but this will need to change to
   implement virtual memory.

   Refer to [IA32-v3a] section 5.15 “Exception and Interrupt
   Reference“ for a description of each of these exceptions. */
void
exception_init (void) 
{
  /* These exceptions can be raised explicitly by a user program
     e.g. via the INT INT3 INTO and BOUND instructions.  Thus
     we set DPL==3 meaning that user programs are allowed to
     invoke them via these instructions. */
  intr_register_int (3 3 INTR_ON kill “#BP Breakpoint Exception“);
  intr_register_int (4 3 INTR_ON kill “#OF Overflow Exception“);
  intr_register_int (5 3 INTR_ON kill
                     “#BR BOUND Range Exceeded Exception“);

  /* These exceptions have DPL==0 preventing user processes from
     invoking them via the INT instruction.  They can still be
     caused indirectly e.g. #DE can be caused by dividing by
     0.  */
  intr_register_int (0 0 INTR_ON kill “#DE Divide Error“);
  intr_register_int (1 0 INTR_ON kill “#DB Debug Exception“);
  intr_register_int (6 0 INTR_ON kill “#UD Invalid Opcode Exception“);
  intr_register_int (7 0 INTR_ON kill
                     “#NM Device Not Available Exception“);
  intr_register_int (11 0 INTR_ON kill “#NP Segment Not Present“);
  intr_register_int (12 0 INTR_ON kill “#SS Stack Fault Exception“);
  intr_register_int (13 0 INTR_ON kill “#GP General Protection Exception“);
  intr_register_int (16 0 INTR_ON kill “#MF x87 FPU Floating-Point Error“);
  intr_register_int (19 0 INTR_ON kill
                     “#XF SIMD Floating-Point Exception“);

  /* Most exceptions can be handled with interrupts turned on.
     We need to disable interrupts for page faults because the
     fault address is stored in CR2 and needs to be preserved. */
  intr_register_int (14 0 INTR_OFF page_fault “#PF Page-Fault Exception“);
}

/* Prints exception statistics. */
void
exception_print_stats (void) 
{
  printf (“Exception: %lld page faults\n“ page_fault_cnt);
}

/* Handler for an exception (probably) caused by a user process. */
static void
kill (struct intr_frame *f) 
{
  /* This interrupt is one (probably) caused by a user proces

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2016-12-29 22:05  操作系统proj2\
     目录           0  2016-12-29 22:05  操作系统proj2\code\
     文件        6668  2016-12-29 22:02  操作系统proj2\code\exception.c
     文件       18142  2016-12-29 22:02  操作系统proj2\code\process.c
     文件       10109  2016-12-29 22:02  操作系统proj2\code\syscall.c
     文件         162  2016-12-29 22:02  操作系统proj2\code\syscall.h
     文件       23686  2015-06-24 10:48  操作系统proj2\code\thread.c
     文件        6888  2015-06-24 10:48  操作系统proj2\code\thread.h
     文件         162  2016-12-29 22:04  操作系统proj2\~$昂project2.doc
     文件       62976  2016-12-29 21:58  操作系统proj2\李欣昂project2.doc

评论

共有 条评论

相关资源