1. 프로세스의 주소 공간
프로세스 주소 공간에는 코드, 데이터, 스택으로 이루어져 있다.
코드 : 프로그램 소스 코드 저장
데이터 : 전역 변수 저장
스택 : 함수, 지역 변수 저장
* 구역을 나눈 이유는 ?
-
최대한 데이터를 공유하여 메모리 사용량을 줄여야 한다.
-
Code는 같은 프로그램 자체에서는 모두 같은 내용이기 때문에 따로 관리하여 공유한다.
-
Stack과 data를 나눈 이유는, 스택 구조의 특성과 전역 변수의 활용성을 위한 것이다.
-
프로그램의 함수와 지역 변수는 LIFO 특성을 가진 스택에서 실행된다.
2. 인터럽트 (Interrupt)
-
프로그램을 실행하는 도중에 예외의 상황이 발생할 경우, 현재 실행 중인 작업을 즉시 중단하고, 발생된 상황을 우선 처리한 후 실행 중이던 작업으로 복귀하여 계속 처리하는 것.
-
현재 수행중인 작업보다 더 중요한 작업(ex. 입출력, 우선 순위 연산 등)이 발생하면 그 작업을 먼저 처리한 후 하던 작업을 계속 한다.
- 외부/내부 인터럽트는 CPU의 HW 신호에 의해 발생
- SW 인터럽트는 명령어의 수행에 의해 발생
* 외부 인터럽트
- 입출력 장치, 타이밍 장치, 전원 등 외부적인 요인으로 발생 ex) 전원 이상(Power fail), 기계 착오(Machine check), 외부(External) , 입출력(I/O)
* 내부 인터럽트
- 잘못된 명령이나 데이터를 사용할 때 발생
- Trap이라고도 함 ex) 0으로 나누기, 오버플로우/언더플로우, 기타 프로그램 Exception
* SW 인터럽트
- 프로그램 처리 중 명령의 요청에 의해 발생한 것
- SVC(SuperVisor Call) : 사용자가 프로그램을 실행시키거나 감시프로그램(Supervisor)을 호출하는 동작을 수행하는 경우, 복잡한 입출력 처리를 하는 경우
인터럽트 동작 순서
- 인터럽트 요청
- 프로그램 실행 중단 (현재 실행중이던 Micro Operation까지는 실행)
- 현재의 프로그램 상태 보존 : PCB(Process Control Block), PC(Program Counter) 등에 기록
- 인터럽트 처리루틴 실행 : 인터럽트를 요청한 장치를 식별
- 인터럽트 서비스 루틴 실행
- 상태복구 : 3번에서 저장해둔 PC를 다시 복구한다.
- 중단된 프로그램 실행 재개 : 6에서 복구한 PC의 값을 이용해 이전에 수행중이던 프로그램을 재개
* if) 인터럽트 기능이 없었다면
- 컨트롤러는 특정한 어떤 일을 할 시기를 알기 위해 계속 체크를 해야 한다. (이를 폴링(Polling)이라고 한다.)
* 폴링 방식
- 소프트웨어적인 방법
- 회로가 간단하고 융통성이 있으며, 별도의 하드웨어가 필요 없다.
* 인터럽트 방식
- 하드웨어적인 방법
- 회로가 복잡하고 융통성이 없으나, 별도의 소프트웨어가 필요없이 하드웨어로 처리되므로 속도가 빠르다.