資源簡介
學生所做的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
評論
共有 條評論