이글은 혼자 공부하는 컴퓨터 구조 + 운영체제 (저자: 강민철) 의 인프런 강의를 참고하여 정리한 글입니다.
CPU의 구성 요소에 대해 조금 더 자세하게 알아보고 CPU의 작동 원리에 대해 알아보겠습니다.
ALU (Arithmetic Logic Unit)
- 받아들이는 정보
- 레지스터로부터 피연산자를 받아들이고, 제어장치로부터 제어신호를 받아들인다.
- 레지스터로부터 피연산자를 받아들이고, 제어장치로부터 제어신호를 받아들인다.
- 내보내는 정보
1. 피연산자와 제어 신호를 바탕으로 연산을 하고 결괏값을 레지스터에 저장한다.
(메모리가 아니라 레지스터에 저장하는 이유는 CPU가 메모리보다 레지스터에 더 빠르게 접근하기 때문이다.)
2. 연산 결과에 대한 부가 정보인 플래그를 플래그 레지스터에 저장한다.- 부호 플래그 : 연산한 결과의 부호를 나타낸다.
- 제로 플래그 : 연산 결과가 0인지 여부를 나타낸다.
- 캐리 플래그 : 연산 결과 올림수나 빌림수가 발생했는지를 나타낸다.
- 오버플로우 플래그 : 오버플로우가 발생했는지를 나타낸다.
- 인터럽트 플래그 : 인터럽트가 가능한지를 나타낸다.
- 슈퍼바이저 플래그 : 커널 모드로 실행 중인지, 사용자 모드로 실행 중인지를 나타낸다.
제어장치(Control Unit)
- 받아들이는 정보
- 클럭 : 컴퓨터의 모든 부품을 일사분란하게 움직일 수 있게 하는 시간 단위
- 해석할 명령어 : 명령어 레지스터에 저장되어 있는 명령
- 플래그 : 플래그 레지스터에 있는 플래그 값
- 제어 신호 : CPU 외부에서 발생한 제어 신호
- 내보내는 정보
- 제어 신호
- CPU 내부에 전달하는 제어 신호
(1) 레지스터에 보내는 신호
(2) ALU에 보내는 신호 - CPU 외부에 전달하는 제어 신호
(1) 메모리에 보내는 신호
(2) 입출력장치에 보내는 신호
- CPU 내부에 전달하는 제어 신호
- 제어 신호
레지스터(Register)
프로그램 속 명령어 & 데이터는 실행 전후로 레지스터에 저장된다.
세부적인 작동 원리를 알기 전에 반드시 알아야 할 레지스터에 대해 알아보겠습니다.
- 프로그램 카운터 : 메모리에서 가져올 명령어의 주소가 저장된다. (명령어 포인터라고 하기도 한다.)
- 명령어 레지스터 : 해석할 명령어 즉, 방금 메모리에서 가져온 명령어가 저장된다. (이것을 제어장치가 해석한다.)
- 누산기 : 연산된 결과를 일시적으로 저장하는 레지스터이다.
- 메모리 주소 레지스터 : 메모리의 주소가 저장된다. 이 레지스터는 CPU가 읽어 들이고자 하는 주소를 주소 버스로 보낼때 거치는 레지스터이다.
- 메모리 버퍼 레지스터 : 메모리와 주고받을 값(데이터/명령어)이 저장된다. 이 레지스터는 CPU가 정보를 데이터 버스로 주고받을 때 거치는 레지스터이다.
- 플래그 레지스터 : 연산 결과 또는 CPU 상태에 대한 부가적인 정보가 저장된다.
- 범용 레지스터 : 다양하고 일반적인 상황에서 자유롭게 사용되는 레지스터이다. 즉, 명령어가 저장될 수도 있고, 메모리의 주소가 저장될 수도 있는 등 상황에 따라 역할이 바뀐다.
- 스택 포인터 : 스택의 꼭대기를 가리키는 레지스터로 스택이 어디까지 차 있는지에 대해 표시한다.
- 스택 주소 지정 방식 : 스택과 스택 포인터를 이용한 주소 지정 방식이다.
- 스택 주소 지정 방식 : 스택과 스택 포인터를 이용한 주소 지정 방식이다.
- 베이스 레지스터 : 기준 주소가 저장된다.
- 변위 주소 지정 방식
- 상대 주소 지정 방식 : 오퍼랜드 필드의 값(변위)과 프로그램 카운터의 값을 더하여 유효 주소를 얻는 방식이다.
- 베이스 레지스터 주소 지정 방식 : 오퍼랜드 필드의 값(변위)과 베이스 레지스터의 값을 더하여 유효 주소를 얻는 방식이다.
- 변위 주소 지정 방식
명령어 사이클과 인터럽트
명령어 사이클
프로그램 속 명령어들은 일정한 주기가 반복되며 실행되는데 이 주기를 명령어 사이클이라고 한다.
- 인출 사이클 : CPU가 메모리 안에 있는 프로그램을 실행하기 위해서 메모리에 저장되어 있는 값을 CPU 내부로 가져오는 작업을 인출(fetch)이라고 하고, 인출하는 주기를 인출 사이클이라고 한다.
- 실행 사이클 : CPU에서 실행하는 사이클 (decode, execution)
- 간접 사이클 : CPU로 명령어를 가지고 와도 바로 실행이 불가능한 경우(추가적으로 메모리에 접근해야 하는 경우) 간접 사이클이 추가된다.
인터럽트
정해진 흐름 대로 CPU가 실행되고 있는데 이것을 끊는 것을 인터럽트라고 한다.
인터럽트의 종류
- 동기 인터럽트(예외) : CPU에 의해 발생하는 인터럽트이다. CPU가 명령어들을 수행하다가 예상치 못한 상황이 발생하면 동기 인터럽트가 발생한다.
- 비동기 인터럽트(하드웨어 인터럽트) : 특정한 동기화 신호 없이 다른 프로세스, 장치, 또는 외부 이벤트에 의해 발생 (ex. 전화/문자 메시지, 웹 브라우저의 팝업 창, 입출력장치 등)
하드웨어 인터럽트를 사용하는 이유는 입출력 작업 도중에도 효율적으로 명령어를 처리하기 위해서이다. 예를 들어 프린트를 하는 상황에서 만약 인터럽트가 없다면, CPU는 프린트 완료 여부를 확인하기 위해 주기적으로 확인해야 한다. 그러나 인터럽트가 있다면 입출력 작업 동안 CPU는 다른 일을 할 수 있다.- 하드웨어 인터럽트의 처리 순서
- 입출력장치는 CPU에 인터럽트 요청 신호를 보낸다.
- CPU는 실행 사이클이 끝나고 명령어를 인출하기 전 항상 인터럽트 여부를 확인한다.
- CPU는 인터럽트 요청을 확인하고 인터럽트 플래그를 통해 현재 인터럽트를 받아들일 수 있는지 여부를 확인한다.
- 인터럽트를 받아들일 수 있다면 CPU는 지금까지의 작업을 백업한다. → 레지스터에 있던 현재 실행 중이던 프로그램 정보들을 스택에 백업한다.
- CPU는 인터럽트 벡터를 참조하여 인터럽트 서비스 루틴을 실행한다.
- 인터럽트 서비스 루틴 실행이 끝나면 4번에서 백업해 둔 작업을 복구하여 실행을 재개한다.
- 인터럽트 요청 신호 : 장치/프로그램이 CPU의 처리를 필요로 할 때, CPU에게 해당 처리를 요청하는 신호
- 인터럽트 플래그 : 인터럽트 요청 신호를 받은 다음 현재 인터럽트를 받아들일 수 있는지 없는지 표시하는 플래그이다. 그러나, 모든 인터럽트를 인터럽트 플래그로 막을 수 있는 건 아니다. 예를 들어, 정전, 하드웨어 고장 등 꼭 처리해야 하는 너무 중요하고 긴급한 인터럽트는 막지 못한다. (Non Maskable Interrupt)
- 인터럽트 벡터 : 각각의 인터럽트를 구분하기 위한 정보이다. 인터럽트 마다 각각의 서비스 루틴을 위한 시작 주소를 가지고 있으며 인터럽트 벡터를 통해 시작 주소를 알 수 있다. 메모리에 인터럽트 벡터를 모아놓은 인터럽트 벡터 테이블이 있다.
- 인터럽트 서비스 루틴 : 인터럽트가 발생했을 때 해당 인터럽트를 어떻게 처리하면 되는지 적혀있는 프로그램이다. 프로그램이기 때문에 메모리에 저장되어 있다. (마우스, 키보드, 프린터 등 각각에 대한 인터럽트 서비스 루틴이 있다.)
- 하드웨어 인터럽트의 처리 순서
CPU의 작동 원리
- 명령어 해독 과정
CPU는 프로그램을 실행하기 위해 주기억장치에서 명령어와 데이터를 읽어온다.
이때, CPU는 명령어를 해독하여 다음에 실행할 명령어와 필요한 데이터를 파악한다.
명령어 해독 과정에서는 제어장치가 명령어를 해독하고 다음 실행할 명령어의 주소를 계산한다. - 실행 과정
명령어 해독이 끝나면 CPU는 명령어를 실행하기 위해 필요한 데이터를 레지스터에 저장하고, ALU에서 계산을 수행한다. 계산 결과는 다시 레지스터에 저장되거나, 주기억장치나 보조기억장치로 전송되어 저장된다. - 결과 저장과 출력 과정
명령어 실행이 끝나면 CPU는 처리 결과를 주기억장치에 저장하거나, 출력장치로 보내 출력한다.
이때, 제어장치는 다음 실행할 명령어의 주소를 계산하고, 해당 주소로 분기(branch)하여 다음 명령어를 실행한다.
이러한 과정을 반복하여 CPU는 프로그램을 실행하고 컴퓨터를 동작시키게 된다.
제어장치는 이 과정에서 명령어가 순서대로 실행되도록 각 장치를 제어한다.
'Computer Science > 컴퓨터 구조' 카테고리의 다른 글
[CS][컴퓨터 구조] 캐시 메모리 (Cache Memory) (0) | 2023.05.15 |
---|---|
[CS][컴퓨터 구조] 컴퓨터의 구성 (0) | 2023.05.14 |