04-1. ALU와 제어장치
#ALU
#플래그
#제어장치
#제어신호
01장의 기억을 되살려 보면 CPU는 메모리에 저장된 명령어를 읽어 들이고, 해석하고, 실행하는 장치라고 했습니다.
그리고 CPU 내부에는 계산을 담당하는 ALU, 명령어를 읽어 들이고 해석하는 제어장치, 작은 임시 저장 장치인 레지스터라는 구성요소가 있다고 했죠. 이번 절에서는 ALU와 제어장치에 대해 자세히 알아보도록 하겠습니다!
1. ALU
위의 그림을 보면 ALU는 피연산자와 제어신호를 받고 있고, 연산한 결괏값과 플래그를 내보내고 있습니다.
ALU가 계산하기 위해서는 1+2를 계산할 때 1과 2라는 피연산자와 수행할 연산이 필요하듯 피연산자와 수행할 연산이 필요합니다.
그래서 ALU는 레지스터를 통해 피연산자를 받아들이고, 제어장치로부터 수행할 연산을 알려주는 제어신호를 받아들입니다.
즉, 계산을 하기 위해서는 피연사자와 수행할 연산이 필요합니다.
그리고 그 결괏값을 레지스터에 내보냅니다. 이것이 ALU가 내보내는 정보 중 하나입니다.
+ CPU보다 레지스터가 더 빠르기 때문에 레지스터에 저장을 해줍니다.
플래그는 연산 결과에 대한 부가정보입니다. 음수인지 양수인지 등에 관한 정보를 제공해줍니다.
2. 제어 장치
제어 장치는 컴퓨터의 모든 하드웨어 구성 요소 간의 데이터 전송 및 작업 제어를 담당하는 부분입니다.
명령어를 해석하고 각 구성 요소에 대한 작업을 지시하여 프로그램의 실행을 조정해줍니다.
- 메모리에서 읽어들인 명령어를 해석하고 해당하는 동작을 수행할 ALU나 기타 장치를 선택합니다.
- ALU, 레지스터, 메모리 등과 같은 다양한 하드웨어 구성 요소에 동작을 지시하는 제어 신호를 생성합니다.
- 조건에 따라 프로그램 카운터를 변경하여 분기 및 점프 명령어를 수행합니다.
- 각 구성 요소의 작업이 동기화되어 제대로 실행되도록 타이밍을 조절합니다.
앞서 설명한 두 요소는 함께 작동하여 컴퓨터의 명령어를 처리하고 프로그램을 실행하는 데 중요한 역할을 합니다!
ALU는 데이터를 처리하고 제어 장치는 프로그램 흐름을 제어하여 효율적으로 명령어를 실행하도록 합니다.
04-2. 레지스터
1. 반드시 알아야 할 레지스터
레지스터는 프로그램 속 명령어와 데이터가 실행 전후로 저장되는 CPU 내부의 작은 임시 저장 장치입니다.
레지스터의 종류에는 프로그램 카운터, 명령어 레지스터, 메모리 주소 레지스터, 메모리 버퍼 레지스터, 범용 레지스터, 플래그 레지스터 등이 있습니다.
다음은 잘 알아두면 좋은 레지스터입니다!
1) 데이터 레지스터(Data Register)
- 데이터를 일시적으로 저장하거나 처리하는 데 사용됩니다. ALU(산술 논리 장치)에서 연산에 필요한 데이터가 주로 이곳에 저장됩니다.
2) 주소 레지스터(Address Register)
- 메모리 주소를 저장하는 데 사용됩니다. 프로그램 카운터(PC)나 메모리 주소 레지스터(MAR) 등이 여기에 속합니다.
3) 일반 레지스터(General Purpose Register)
- 범용적으로 사용되는 레지스터로, 프로그램이나 데이터 처리에 필요한 임시 데이터를 저장하는 데에 사용됩니다.
2. 특정 레지스터를 이용한 주소 지정 방식(1) : 스택 주소 지정 방식
스택 메모리의 최상단 주소를 가리키는 레지스터입니다. 스택은 후입선출(LIFO) 구조로 데이터를 저장하므로, 스택 포인터는 스택에 데이터를 푸시(push)하거나 팝(pop)할 때 사용됩니다.
3. 특정 레지스터를 이용한 주소 지정 방식(2) : 변위 주소 지정 방식
베이스 레지스터(Base Register) 또는 인덱스 레지스터(Index Register)
이 레지스터는 메모리 주소에 상대적인 변위(offset)를 나타내는 데 사용됩니다. 베이스 주소나 인덱스 주소에 변위를 더하거나 뺌으로써 실제 메모리 주소를 계산합니다. 이것은 특히 배열과 같은 데이터 구조에 접근할 때 유용합니다.
알아보기 ) 사용화된 CPU 속 레지스터 및 주소 지정 방식
현대의 CPU에서는 여러 종류의 레지스터가 사용되고, 주소 지정 방식도 다양합니다.
몇 가지 대표적인 레지스터와 주소 지정 방식은 아래와 같습니다!
프로그램 카운터(PC)
- 다음에 실행될 명령어의 주소를 가리키는 레지스터로, 순차적으로 프로그램을 실행합니다.
데이터 레지스터들
- ALU에서 연산에 필요한 데이터를 저장하는 데 사용됩니다.
스택 포인터(SP)
- 스택의 최상단을 가리키며, 함수 호출과 리턴 등에서 스택을 사용할 때 중요합니다.
베이스 레지스터와 인덱스 레지스터
- 메모리 주소에 상대적인 변위를 나타내는 데 사용되어 효율적인 데이터 접근을 도와줍니다.
이러한 레지스터들과 주소 지정 방식은 프로세서의 아키텍처 및 목적에 따라 다르며, 각각의 기능은 효율적인 프로그램 실행을 위해 조화롭게 동작합니다.
04-3. 명령어 사이클과 인터럽트
1. 명령어 사이클
명령어 사이클(Instruction Cycle): 컴퓨터에서 명령어를 실행하기 위한 기본 단위로, 명령어를 가져오고 해독하며 실행하는 일련의 과정을 포함합니다. 일반적으로 명령어 사이클은 Fetch(가져오기), Decode(해독), Execute(실행) 세 단계로 나뉩니다.
- Fetch(가져오기):
- 메모리로부터 다음에 실행될 명령어를 가져옵니다. 프로그램 카운터(PC)가 명령어의 주소를 가리키고, 해당 주소에서 명령어를 메모리로부터 읽어옵니다.
- Decode(해독):
- 가져온 명령어를 해독하여 CPU가 이해할 수 있는 내부 형식으로 변환합니다. 명령어가 어떤 동작을 수행해야 하는지를 결정합니다.
- Execute(실행):
- 명령어에서 결정된 동작을 수행합니다. ALU(산술 논리 장치) 등을 사용하여 데이터를 처리하고, 결과를 레지스터에 저장하거나 메모리에 쓰거나 다음 명령어로 제어를 전달합니다.
2. 인터럽트
인터럽트(Interrupt): 인터럽트는 CPU가 프로그램을 실행 중에 예외 상황이나 외부 이벤트로부터 주의를 돌리고 다른 코드를 실행할 수 있게 하는 메커니즘입니다. 주로 하드웨어나 소프트웨어 이벤트로 발생하며, 다양한 종류의 인터럽트가 있습니다.
인터럽트 | ||
종류 | 설명 | 예시 |
하드웨어 인터럽트 | 외부 장치에서 발생하는 이벤트로, 타이머 인터럽트, 입출력 장치의 완료 신호 등이 포함됩니다. | 타이머 인터럽트: 정해진 시간이 경과했을 때 발생 |
입출력 완료 인터럽트: 데이터 전송이 완료될 때 발생 | ||
소프트웨어 인터럽트 | 명령어 실행 도중에 발생하는 예외 상황으로, 0으로 나누기, 잘못된 명령어 실행, 메모리 접근 오류 등이 여기에 해당됩니다. | 0으로 나누기 예외: 어떤 수를 0으로 나눌 때 발생 |
잘못된 명령어 실행: 프로그램 카운터가 범위를 벗어날 때 | ||
외부 인터럽트 | 주로 입출력 장치에서 발생하는 인터럽트로, 외부 장치에서 CPU에 신호를 보내는 경우를 말합니다. | 키보드 입력 인터럽트: 사용자가 키를 누를 때 발생 |
마우스 클릭 인터럽트: 마우스 버튼을 클릭할 때 발생 |
3. 예외의 종류
- 페이지 부재 예외(Page Fault Exception):
- 필요한 페이지가 메모리에 없는 경우 발생하는 예외로, 운영 체제는 해당 페이지를 디스크에서 가져와 메모리에 로드합니다.
- 일반 보호 예외(General Protection Exception):
- 잘못된 메모리 접근이나 허용되지 않은 명령어 실행 등과 같은 보호 위반으로 인해 발생하는 예외입니다.
- 부동 소수점 예외(Floating Point Exception):
- 부동 소수점 연산 중에 발생하는 예외로, 0으로 나누기나 무한대 값 등이 여기에 해당합니다.
- 시스템 호출 예외(System Call Exception):
- 사용자 프로그램이 운영 체제에 서비스를 요청할 때 발생하는 예외입니다. 예를 들어 파일 입출력, 프로세스 생성 등이 여기에 해당합니다.
인터럽트와 예외는 프로그램의 흐름을 변경하여 특정 상황에서 추가적인 작업을 수행할 수 있도록 합니다.
'혼공학습단 > 컴퓨터 구조 with 운영체제' 카테고리의 다른 글
[컴퓨터 구조] Chapter05 : CPU 성능 향상 기법 (0) | 2024.01.10 |
---|---|
[컴퓨터 구조] 혼공학습단 11기_2주차 (2) | 2024.01.10 |
[컴퓨터 구조] Chapter01 ~ 03 (0) | 2023.12.21 |
스택과 큐 개념 정리하기 (0) | 2023.12.21 |
[컴퓨터 구조] 혼공학습단 11기_1주차 (0) | 2023.12.21 |