Computer Science 기본 지식/운영체제

[운영체제] 명령어 구조와 사이클 / 인터럽트 / 커널

로파이 2021. 1. 12. 13:50

독학사- 운영체제 편을 공부하고 정리한 내용입니다.

 

명령어 구조

프로세서는 명령어에 따라 레지스터 값(피연산자)을 이용하여 연산을 실행한다.

연산 부호(명령부)와 피연산자들(주소부로)로 나누어져 명령 레지스터 IR(Instruction Register)에 저장되어있다.

연산 부호
(+,-,*,/,mov,cmp)
피연산자1 피연산자2 ... 피연산자n

1) 연산 부호

프로세서가 실행할 연산을 정의한다. 산술 연산, 논리 연산, 비트 쉬프트, 보수 등의 연산을 실행한다.

 

2) 피연산자

연산할 데이터 정보를 저장한다. 일반적으로 메모리, 외부 기억장치, 입출력 장치 등에 있는 메모리 주소를 피연산자(레지스터)로 가져와 필요한 연산을 수행한다.

 

명령어 실행

 

- 관련 CPU 내부 레지스터

IR: Instruction Register 명령 레지스터

MAR: Memory Address Register 주 기억장치 레지스터 혹은 주소 레지스터

MBR: Memory Buffer Register 혹은 Memory Data Register 임시 데이터가 저장되는 레지스터

PC: Program Counter 다음 실행할 명령어의 주소(기계어 코드의 위치)를 저장한다.

SP: Stack Pointer 저장할 피연산자 정보가 쌓일 때 스택의 맨 위 주소를 가리키는 레지스터

AC: Accumulator 임시 연산 결과나 피연산자자가 저장되는 레지스터 

GPR: Gerneral Purpose Register 위 특수 레지스터를 제외한 일반적인 데이터 저장용으로 사용되는 범용 레지스터

 

- 명령어 실행과정

단계 실행 내용
1 명령어 인출
2 명령어 해석, Program Counter 변경
3 피연산자 인출
4 명령어 실행
5 결과 저장
6 다음 명령어로 이동 후 1단계부터 시작
  • 인출 사이클: 주소를 참조하여 메모리에 있는 데이터를 레지스터로 옮기는 작업
  • 실행 사이클: 주어진 연산 명령어와 피연산자 데이터를 이용하여 명령을 실행

- 명령어 실행 사이클

프로그램 전체가 실행되는 과정은 인출-실행 사이클의 반복이라고 할 수 있다.

인출, 실행 사이클 외에도 데이터의 유효 주소 참조에 의한 간접 사이클과 인터럽트 발생으로 인터럽트 처리를 위한

인터럽트 사이클이 있다.

인출-실행 사이클

 

1) 명령어 인출 사이클

(1) PC에 저장된 명령어 주소를 프로세서 내부 버스를 통해 MAR에 전달한다.

(2) 제어 장치는 다음 실행할 명령어 위치를 가리키도록 PC를 1 만큼 증가시킨다. MAR에 저장된 주소에 해당하는 메모리 위치에서 명령어를 인출한 후 이 명령어를 MBR에 저장한다.

 

(3) MBR에 저장된 명령어를 IR에 전달한다.

 

이때 IR에는 명령어 내용(연산 부호, 피연산자)이 저장되어있다.

ex) 어셈블리 명령어: ADD(+), SUB(-), DIV(/), MUL(*), MOV(대입), CMP(비교) 

 

2) 실행 사이클

인출한 명령어를 해독하고 제어신호를 발생시켜 명령어를 실행한다.

 

3) 간접 사이클

IR에 저장된 주소가 간접 주소일 경우 간접 주소가 가르키는 유효 주소를 IR에 다시 가져온다.

(1) IR에 저장된 명령어의 피연산자(주소부)를 MAR에 전달한다.

(2) MAR에 저장된 주소에 해당하는 메모리 위치에서 읽을 수 있도록 제어신호를 발생시키고 읽은 데이터를 MBR에 저장한다.

(3) MBR에 저장된 내용을 IR에 전달한다.

 

4) 인터럽트 사이클

실행 사이클 종료 후 프로그램 실행 중에 발생하는 예외적인 사건으로 인터럽트 요구에 따라

복귀할 함수의 주소(프로그램 카운터)를 스택이나 특정 메모리 주소에 기록해두고 인터럽트 처리 루틴을 실행한다.

이때 프로그램 카운터는 인터럽트 루틴의 시작을 가리키게 되며 모든 인터럽트 실행이 완료되면 스택에 저장해두었던 복귀 주소를 꺼내어 프로그램 카운터에 다시 가져온다.

(1) PC 내용을 MBR에 저장한다.

(2) 인터럽트 루틴 주소를 PC에 저장하고 PC에 저장된 인터럽트 루틴 주소를 다시 MAR에 저장한다.

(3) MBR에 있는 내용(이전 PC값)을 스택이나 메모리의 특정 주소에 저장한다.

 

인터럽트

초기 CPU는 폴링 방식으로 직접 입출력 장치의 상태를 주기적으로 확인하여 데이터를 처리하였다.

이 과정에서 낭비되는 CPU 자원을 방지하고 인터럽트 신호를 받았을 때 해당 입출력 관련 처리를 할 수 있도록 인터럽트 방식을 도입하였다. 

 

- 인터럽트 종류

  • 입출력(I/O) 인터럽트: 입출력 하드웨어가 입출력 동작을 완료하였을 때나 오류 등이 발생했을 때
  • 외부 인터럽트: 시스템 타이머 만료, 사용자 콘솔상에서 인터럽트 신호를 받았을 때
  • SVC 인터럽트: 입출력 수행 중 SuperVisor(운영체제)의 권한이 필요할 때
  • 기계 검사 인터럽트: 컴퓨터 자체의 기계적인 장애나 오류로 인해
  • 프로그램 인터럽트: division zero (0으로 나누기), 권한 없는 메모리에 접근, 스택, 힙 오버플로우 같은 실행 단계의 오류
  • 재시작 인터럽트: 재시작 키를 누를 때

- 인터럽트 동작 과정

  1. 프로그램 A가 실행 중이었다면 PC는 실행 중인 명령어를 가리킨다.
  2. 프로세서가 인터럽트 신호를 받고 현재 명령어를 종료한다.
  3. 레지스터 모든 내용을 스택 영역(혹은 프로세서 제어 블록 PCB)에 보낸다.
  4. PC는 인터럽트 처리 프로그램 B의 시작 위치를 저장하고 프로그램 B를 실행한다.
  5. 인터럽트 처리가 끝나면 저장해두었던 레지스터 내용을 불러오고 PC는 실행 중이었던 명령어를 가리키고 A를 실행한다.

- 일반적인 서브 루틴 vs 인터럽트 루틴

 

서브 루틴은 실행 중인 프로그램과 관련된 사항을 처리하지만 인터럽트는 실행 중인 프로그램 내용과 관련이 없을 수 있다.

인터럽트 처리에 영향을 받지 않기 위해 프로세서는 인터럽트를 처리하기 전에 모든 진행 사항(레지스터)을 저장하고 다시 복귀했을 때 이를 다시 불러와야 한다.

 

- 인터럽트 회선 연결 방법

  • 단일 회선: 인터럽트 요청이 가능한 외부 장치들이 공유된 회선으로 프로세서에 연결되어 있다. 인터럽트 발생 시 외부 장치를 구분해야 한다.
  • 다중 회선: 각 외부 장치가 고유한 회선으로 프로세서와 연결되어 있다.

커널의 구성

 

- 커널과 인터페이스

  • 커널: 운영체제의 핵심기능을 모은 컴퓨터의 "엔진"
  • 인터페이스: 커널에 사용자 명령을 전달하고 실행 결과를 사용자에게 알려주는 역할

 

컴퓨터 시스템 구조

- 시스템 호출과 디바이스 드라이버

 

시스템 호출

  • 사용자와 커널 사이의 인터페이스로서 커널이 제공하는 함수이다.
  • 직접 접근을 차단하고 컴퓨터 자원(하드웨어)을 보호한다.
  • 응용 프로그램이 자원을 이용하려면 시스템 호출을 이용해야 한다.

드라이버

  • 커널이 하드웨어 자원을 사용할 수 있도록 지원하는 인터페이스이다.
  • 운영체제 혹은 하드웨어 제조사가 제공한다.

- 커널의 구성

운영체제의 핵심 기능을 모아둔 커널은 프로세스 관리, 메모리 관리, 파일 시스템 관리, 입출력 관리 그리고 프로세스 간 통신을 지원한다.