본문 바로가기

프로그래밍/운영체제

컴퓨터 시스템의 간단한 소개 - 명령어 처리와 인터럽트

입력 기기를 통해 컴퓨터에 유입되는 정보는 크게 데이터와 명령어로 구분됩니다.

명령어는 앞으로 실행할 산술*논리 연산의 동작을 명시하는 문장으로, 명령어들이 모여 이루는 것을 프로그램이라고 합니다.

 

- 명령어의 구조

명령어는 주로 연산자와 피연산자로 이루어져 있는데, 연산자는 보통 1개인 반면 피연산자는 2개 이상일 수도 있습니다.

명령어는 아래와 같은 구조를 가집니다.

명령부 주소부
연산 부호 피연산자 피연산자 피연산자

 

- 연산 부호(Operation Code, OPcode)

프로세서가 실행할 동작인 연산을 지정합니다.

산술, 논리, 시프트, 보수 연산 등을 지정할 수 있습니다.

연산 부호의 비트 수 N이 있다면, 2^N개의 연산이 가능합니다.

 

- 피연산자(Operand)

연산할 데이터의 정보를 저장합니다.

데이터는 어떠한 저장공간에 위치할 수 있기 때문에, 그 곳을 가리키는 주소를 저장하거나

상수를 이용하는 경우에는 그 값 자체를 저장합니다.

 

- 명령어의 표현

Y += x

이 표현을 명령어로 바꿔보면..

+ Y x

와 같이 됩니다.

 

- 명령어를 저장하는 방법

명령어는 식 하나가 블록을 이뤄 메인 메모리에 적재됩니다.

프로그램은 PC를 이용해 명령어를 차례대로 읽어나가며 실행합니다.

 

- 모드 비트

명령어에서, 피연산자를 나타내는 방법은 아까 설명했듯이 두 가지 이상의 방법이 있습니다.

  1. 직접 주소 지정: 피연산자 영역이, 값이 위치한 주소를 직접 지시합니다.
  2. 간접 주소 지정: 피연산자 영역이, 값을 가리키는 포인터의 주소를 지시합니다.
  3. 즉시 주소 지정: 피연산자 영역이, 실제 값을 저장합니다.

각각의 장단점이 있습니다.

직접 주소 지정 참조 방법이 간단하다. 주소부의 길이와 일치하는 메모리 공간만 사용가능하다.
간접 주소 지정 융통성 발휘에 좋고, 긴 메모리 공간을 가질 수 있다. 메모리 참조를 두 번 요구한다.
즉시 주소 지정 명령어 사이클을 줄일 수 있어 속도가 빠르다. 사용 가능한 데이터의 크기가 해당 필드의 크기와 같다. (작다)

여러가지 지정방법이 있으므로, 명령어는 자신의 지정방법이 어떤 방법인지 프로세서에게 알려줘야 합니다.

이를 위해 가지는 것이 바로 모드 비트입니다. 

모드 비트를 가지는 명령어의 경우, 아래와 같은 구조를 가집니다.

모드 비트 OPcode 피연산자 피연산자 피연산자

만약 모드 비트의 크기가 1비트이, 간접 주소와 직접 주소를 가질 수 있다면, 

모드비트가 0일때, 1일때의 처리 방식이 달라질 것입니다.

 

- 명령어의 실행

명령어는 다음과 같은 과정을 거쳐 실행됩니다.

  1. 명령어 인출
  2. 명령어 해석 및 프로그램 카운터 변경
  3. 피연산자 인출
  4. 명령어 실행
  5. 결과 저장
  6. 다음 명령어로 이동

프로세서의 제어장치는 위와 같은 방식을 반복하며, 적재되어 있는 명령어를 차례대로 가져와 실행합니다.

명령어를 인출하는 것부터 연산을 완료할 때까지를 인출-해석-실행 사이클이라고 합니다. 간단하게 명령어 실행 사이클이라고도 합니다.

위의 명령어 실행 사이클은 다시 인출 사이클, 실행 사이클, 인터럽트 사이클, (간접 주소 방식의 경우) 간접 사이클로 세분화됩니다.

 

- 인출 사이클

인출 사이클에 소요되는 시간을 명령어 인출 시간이라고 합니다.

  1. PC에 저장된 주소를 MAR에 전달한다.
  2. MAR에 저장된 명령어를 MBR에 저장한다.
  3. MBR에 저장된 정보를 읽도록, 제어장치가 신호를 발생시킨다.
  4. 이와 동시에 PC는 다음 명령어를 지시한다.
  5. MBR에 저장된 명령어를 IR로 전달한다.

 

- 실행 사이클

실행 사이클에 소요되는 시간을 실행 시간이라고 합니다.

인출한 명령어를 해독하고, 그 결과에 따라 제어신호를 발생시켜 명령어를 실행합니다.

 

- 간접 사이클

간접 주소 지정 방식의 경우, 주소의 값을 불러오는 행동을 1회 반복합니다.

  1. IR에 저장된 명령어의 피연산자를 MAR에 전달한다.
  2. MAR에 전달된 주소에 담긴 데이터를 인출해서 MBR로 전송한다.
  3. MBR에 저장된 내용을 IR에 전달한다.

 

- 인터럽트 사이클

인터럽트는 프로세서가 프로그램을 수행하는 동안 컴퓨터 시스템의 내부나 외부에서 발생하는 예기치 못한 사건을 의미합니다.

인터럽트가 발생하면 인터럽트에 맞는 동작을 수행해야 하기 때문에, 현재 작업을 중단할 필요가 있습니다.

따라서 명령어 실행이 끝날 때마다, 인터럽트 사이클을 실행해서 인터럽트가 있는지 없는지 검사하고, 각각에 맞는 조치를 취합니다.

  1. PC의 내용을 MBR에 저장한다.
  2. PC가 인터럽트 루틴 주소를 지시하도록 한다.
  3. PC에 저장된 인터럽트 루틴 주소를 MAR로 전송한다. (인터럽트 루틴 시작)
  4. MBR에 있는 주소의 내용을 지시된 메모리 셀로 옮긴다. (원래 프로그램의 진행사항 저장)

 

- 인터럽트 명령어

인터럽트는 현재 실행 중인 프로그램을 중단하고 다른 프로그램의 실행을 요구하는 명령어입니다.

다중 프로그래밍에도 사용되며, 입출력 기기에서 상태를 전달하는 신호로서 쓰이기도 합니다.

위와 같은 기기 간 상태 전달을 위해, 제어 버스 중, 인터럽트 요청 회선이라는 것이 존재합니다.

그리고 인터럽트는 이를 이용한 인터럽트 요청인터럽트 서비스 루틴으로 나뉩니다.

 

- 인터럽트 요청 회선

인터럽트 요청 회선은 그 연결 방식에 따라 단일 회선과 다중 회선으로 나뉩니다.

단일 회선은 프로세서와 다수의 입출력 기기를 하나의 회선으로 연결하는 방법입니다.

단일 회선을 사용할 때에는, 어떤 입출력 기기가 인터럽트를 요청했는지 판별하는 별도의 기능이 필요합니다.

다중 회선은 프로세서와 다수의 입출력 기기를 여러개의 회선으로 연결하는 방법입니다.

각각의 입출력기기를 프로세서와 개별적으로 연결해서, 장치를 판별하는 기능이 필요없습니다.

이후에 운영체제와 스레드 과정에서 배울 PCB와 문맥교환을 이해하면 인터럽트에 대해 더 자세하게 공부할 기회가 있을 것입니다.