[System Programming ]제어 이동 ECF, Exceptional Control Flow
제어 흐름
제어 이동
PC값을 하나씩 증가시키면서 순서대로 인스트럭션을 실행시키는 것을 제어 이동이라고 부른다. 때로는 jmp와 같이 더 멀리 건너뛰는 경우도 있지만 PC값을 바꾸어 제어하는 상황을 제어 이동이라고 부른다.
예외적인 제어 이동 Exceptional Control Flow
예외란 시스템이 제어권을 가지고 처리해줘야 하는 상황을 말한다.
각 예외 요청에는 고유의 번호가 있고 각각 예외를 처리하는 시스템 함수가 있는데 이를 핸들러라고 부른다. 시스템 예외 테이블은 각 예외 번호를 key로 하고 핸들러의 주소를 값으로 하는 테이블을 부팅시에 메모리에 올리게 된다. 총 0~ 255번까지의 예외 번호중에서 0번 ~ 31번까지는 하드웨어에 관한 예외로 지정되어 있고 32 ~ 255번까지는 운영체제가 직접 설정한 예외로 구성되어 있다.
예외는 응용프로그램이나 외부 디바이스에서 요청할 수 있는데 그 특징에 따라서 4가지 유형으로 나눌 수 있다.
1. 인터럽트
키보드나 마우스와 같은 외부 디바이스의 입출력 장치에서 시스템에게 요청하는 것으로 응용프로그램의 인스트럭션과는 상관없는 유일한 예외이다. 시스템은 외부 디바이스로부터 인터럽트를 받으면 응용 프로그램을 중지하고 사용자 모드에서 커널모드로 전환한 후에 중지한 응용 프로그램의 환경을 커널 스택에 기록한 후에 핸들러를 불러 인터럽트를 처리한다. 커널의 스택 정보를 다시 pop한 후에 사용자 모드로 들어가 중지되었던 인스트럭션 다음 인스트럭션으로 돌아가 응용 프로그램을 수행한다. 인터럽트 시간이 매우 짧기 때문에 응용 프로그램이 끊임없이 실행되는 것처럼 보일 수 있다.
2. 트랩
트랩은 응용 프로그램의 인스트럭션 수행중 발생하는 것으로 의도적인 예외 요청이다. 예를 들어 파일을 open 한다던지 close 하는 것처럼 시스템에 접근해야 할 경우 트랩을 통해서 처리한다.
3. 에러
에러란 복구할 수 있는 예외로서 페이지 오류가 그 예이다. 인스트럭션을 수행중 잘못된 페이지 주소로 접근하는 것이 밝혀지만 커널모드로 돌아가 핸들러로 예외를 처리한 후에 응용 프로그램을 중단된 시점에서 실행시킬 수 있다면 다시 돌아가며 실행시킬 수 없다면 abort(중단) 시킨다.
4. 중단
중단은 절대로 응용프로그램에게 제어권을 돌려주지 않는 심각한 예외로서 하드웨어 자체에서 오는 예외이다. 예를 들어 cpu에 문제가 생기거나 하는 중요한 문제이다.
시그널
시그널이란 사용자 프로세서에게 예외 정보를 전달해주는 프로시저를 말한다. 프로세스를 종료하거나 프로세스를 중단하거나 하는 시그널이 존재하며, 시그널 비트를 통해 전달된다.
kill
bin/kill -9 pid : pid를 종료시킨다.
bin/kill -9 -pid : -로 넘겨줄 때는 gpid(group pid)로 인식해서 같은 그룹에 속하는 모든 프로세스에 시그널을 전달한다.
댓글
댓글 쓰기