资源简介
学生所做的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
评论
共有 条评论