익명 사용자
로그인하지 않음
계정 만들기
로그인
youngwiki
검색
Exception 문서 원본 보기
youngwiki
이름공간
문서
토론
더 보기
더 보기
문서 행위
읽기
원본 보기
역사
←
Exception
문서 편집 권한이 없습니다. 다음 이유를 확인해주세요:
요청한 명령은 다음 권한을 가진 사용자에게 제한됩니다:
사용자
.
문서의 원본을 보거나 복사할 수 있습니다.
==개요== [[파일:Flow of Exception.png|섬네일|300x300픽셀|Flow of Exception]] Exception이란 특정 이벤트가 발생함에 따라 OS kernel로 Control을 이동시키는 것을 의미한다. 이때 exception이 발생하면 커널<ref>메모리에 존재하는 OS의 핵심 부분이다. 시스템 리소스에 직접 접근하여 시스템의 상태를 관리하고 오류나 예외상황을 처리한다.</ref>에서 exception handler를 통해서 이를 처리한다. * 예시: 0나누기 / 오버플로우 / page fault<ref> 프로그램이 가상 메모리에 접근하려고 할 때, 해당 페이지(데이터 블록)가 주기억장치(RAM)에 존재하지 않으면 발생한다.</ref> / I/O request completion / Ctrl - C 또한 Exception table이란 예외 발생시 해당 예외를 처리하는 Exception Handler의 주소를 저장하는 데이터 구조를 의미한다. 각각의 Exception은 고유한 예외 코드 K를 가지고 있으며, exception handler K는 해당 예외가 발생시 Exception Table에 저장된 주소를 통해 호출된다. {| class="wikitable" |+ !Exception Number !Descrption !Exeption class |- |0 |Divide error |Fault |- |13 |General protection fault<ref>프로그램이 정의되지 않은 가상 메모리 영역을 참조하거나 읽기 전용 영역의 값을 변경하고자 할 때 발생한다. 접근할 수 없는 메모리 영역(NULL 등)을 참조하는 경우 또는 권한이 없는 영역(read-only 등)에 쓰기 또는 실행을 시도하는 경우에 해당한다.</ref><ref>가상 메모리란 각 프로세스마다 독립적인 메모리 공간을 제공하는 개념이다. 각 프로세스는 독립적인 가상주소를 가지며, 같은 주소더라도 실제로 저장되는 물리 메모리는 다르다. 또한 이를 통해서 실제 RAM보다 더욱 큰 메모리를 사용할 수 있다. 만약 물리적인 RAM의 크기가 부족하다면 disk를 이용하여 가상 메모리를 확장한다.</ref> |Fault |- |14 |Page fault |Fault |- |18 |Machine check |Abort |- |32~255 |OS-defined exception |Interrupt or trap |} {| class="wikitable" |+ !Class !Cause !Async/sync !Return behavior |- |Interrupt |Signal from I/O Device |Async |Always returns to next instruction |- |Trap |Intentional exception |Sync |Always returns to next instruction |- |Fault |Potentially recoverable error |Sync |Might returns to current instruction |- |Abort |Non recoverable error |Sync |Never returns |} ==Interrupts (Asynchronous Exceptions)== [[파일:Interrupt_Flow.png|프레임없음|300x300픽셀|테두리]] Interrupts는 프로세서 외부에서 발생하는 이벤트에 의해 발생한다.<ref>키보드의 입력, 네트워크 패킷 수신, 타이머 만료 등</ref> CPU에는 물리적인 Interrupt Pin이 따로 존재하며, 해당 핀의 신호가 0 ->1로 바뀌면 인터럽트를 감지한다. 이를 Interrupt Handler가 처리하고 다시 next instruction으로 돌아간다. ==Synchronous Exception== instruction을 실행시킴으로서 발생한 결과에 의한 이벤트에 의해서 발생하기 때문에 동기적으로 처리된다. ===Traps=== [[파일:Trap Flow.png|프레임없음|300x300픽셀|테두리]] Trap은 CPU가 할 수 없는 작업을 OS에 넘겨주는 Exception으로, 의도적으로 발생한다. System Call이 Trap의 대표적인 한 종류이다. {| class="wikitable" |+ !System Call Number !Name !Description |- |0 |read |Read file |- |1 |write |Write file |- |2 |open |Open file |- |3 |close |Close file |- |4 |stat |Get info about file |- |57 |fork |Create process |- |59 |execve |Execute a program |- |60 |_exit |Terminate process |- |62 |kill |Send signal to process |} 아래는 System Call의 파일 열기 예시이다. <pre>00000000000e5d70 <__open>: ... e5d79: b8 02 00 00 00 mov $0x2,%rax # open is syscall #2 -> syscall을 준비한다. e5d7e: of 05 syscall # 커널에 system call을 요청한다. syscall의 리턴값이 %rax에 저장된다. e5d80: 48 3d 01 f0 ff ff cmp $0xfffffffffffff001,%rax #rax 값이 해당 16진수보다 작은지 확인해 오류 여부를 확인한다. ... e5dfa: c3 retq # 함수를 종료한 후 호출한 함수로 복귀한다. </pre> %rax는 syscall number를 저장하는 레지스터이다. 다른 변수는 %rdi, %rsi, %rdx, %r10, %r8, %r9에 저장된다. return value도 %rax에 저장된다. 음수가 반환된다면 이는 errno 변수이며, 어떤 error가 발생했는지를 알려준다. ===Faults=== [[파일:Fault FLow.png|프레임없음|300x300픽셀|테두리]] Fault는 비의도적이지만 복구가능할 수도 있는 오류이다. Handler를 실행한 후 문제의(current) instruction을 재실행하거나 중단한다. * 예시: page faults(recoverable), protection fault(unrecovable) ===Aborts=== [[파일:Abort Flow.png|프레임없음|300x300픽셀|테두리]] Abort는 비의도적이고 복구도 불가능한 오류이며, 현재의 프로그램을 중단한다. * 예시: illegal instruction, parity error, machine check ==각주== [[분류:컴퓨터 시스템]]
Exception
문서로 돌아갑니다.
둘러보기
둘러보기
대문
최근 바뀜
임의의 문서로
미디어위키 도움말
위키 도구
위키 도구
특수 문서 목록
문서 도구
문서 도구
사용자 문서 도구
더 보기
여기를 가리키는 문서
가리키는 글의 최근 바뀜
문서 정보
문서 기록