x86 OS interrupts routine
x86 운영체제에서는 다음과 같은 과정을 거쳐 interrupt 를 호출한다 1. interrupt n instruction 수행 . 2. IDT 에 등록되어있는 ISR(interrupt Service Routine) 수행 . xv6 는 위의 두 과정을 아래와 같이 진행한다 . 1. interrupt n instruction - “int n” instruction workflow. 1) IDT(interrupt descriptor table) 에서 n’th descriptor 를 읽어온다 . - 시스템 부팅시 tvinit() 함수로 vertors.S 의 번호 , DPL 을 다 초기화 해줌 . - system call은 DPL이 유저 레벨로 세팅됨 2) CPL 이 DPL 보다 작거나 같은지를 확인함 ( 커널 모드 : 0, 유저 모드 : 3, 부를 수 있는지 없는지를 확인하는 것 ) - 이 조건을 충족하지 못하면 부를 수 없는 interrupt 를 부른 것이라 exception 이 발생한다 . 3) 만약 target segment selector 의 PL 이 CPL 보다 작으면 PL 의 변환이 필요하다 (ex PL 이 커널모드인 경우 ). 다음 3 단계를 거쳐서 변환이 일어남 . (1) 현재 유저모드니깐 , 유저모드의 esp, ss register 를 임시로 저장함 ( 임시로 저장하는 이유는 커널 스택에다 푸시하기 위해서 ) (2) task segment descriptor 에서 esp, ss 를 불러와서 CPU-internal registers 에 저장함 . (3) 이제...