컴퓨터 구조#3 CPU의 작동원리(ALU ,제어장치,명령어 사이클)

성찬홍·2025년 11월 6일

Computer Science

목록 보기
6/17

ALU와 제어 장치

ALU

받아들이는 정보

  • 계산을 하기 위해서는 피연산자와 수행할 연산이 필요하다
  • ALU는 레지스터로부터 피연산자를 받아들이고 , 제어장치를 제어 신호를 받아들인다.

플래그 종류

  • 부호 플래그
    • 연산한 결과의 부호를 나타낸다
    • ex) 부호 플래그가 1일 경우 계산 결과는 음수. 0일 경우 계산 결과는 양수를 의미한다
  • 제로 플래그
    • 연산 결과가 0인지 여부를 나타낸다.
    • ex) 제로 플래그가 1일 경우 연산 결과는 0,0일 경우 연산 결과는 0이 아님을 의미한다.
  • 캐리 플래그
    • 연산 결과 올림수나 빌림수가 발생했는지를 나타낸다.
    • 캐리 플래그가 1일 경우 올림수나 빌림수가 발생했음을 의미하고, 0일 경우 발생하지 않았음을 의미한다.
  • 오버플로우 플래그
    • 오버플로우가 발생했는지를 나타낸다
    • 오버플로우 플래그가 1일 경우 오버플로우가 발생했음을 의미하고, 0일 경우 발생하지 않았음을 의미한다.
  • 인터럽트 플래그
    • 인터럽트가 가능한지를 나타낸다.
    • ex) 인터럽트 플래그가 1일 경우 인터럽트가 가능함을 의미하고 , 0일 경우 인터럽트가 불가능함을 의미한다.
  • 슈퍼바이저 플래그
    • 커널 모드로 실행 중인지, 사용자 모드로 실행중인지를 나타낸다.
    • ex) 슈퍼바이저 플래그가 1일 경우 커널 모드로 실행 중임을 의미하고 , 0일 경우 사용자 모드로 실행중임을 의미한다.
  • 클럭
    • 컴퓨터나 전자기기에서 동작하는 속도를 맞춰주는 기준 리듬

레지스터

: CPU 내부의 작은 임시저장장치
→ 프로그램 속 명령어 & 데이터는 실행 전후로 레지스터에 저장
→ CPU 내부에는 다양한 레지스터들이 있고 , 각기 다른 역할을 가진다

1. 프로그램 카운터

: 메모리에서 가져올 명령어의 주소 ( 메모리에서 읽어 들일 명령어의 주소 )

2. 명령어 레지스터

: 해석할 명령어 ( 방금 메모리에서 읽어 들인 명령어 )

3. 메모리 주소 레지스터
: 메모리의 주소를 저장

4. 메모리 버터 레지스터

: 메모리와 주고받을 값( 데이터와 명령어 )
→ CPU가 정보를 데이터 버스로 주고받을 때 거치는 레지스터

5. 플래그 레지스터
: 연산 결과 또는 CPU 상태에 대한 부가적인 정보

6. 범용 레지스터
: 다양하고 일반적인 상황에서 자유롭게 사용

7. 스택 포인터
: 주소 지정에 사용

(1) 스택 주소 지정 방식 : 스택과 스택 포인터를 이용한 주소 지정 방식
스택 포인터 : 스택의 꼭대기를 가리키는 레지스터

(2) 변위 주소 지정 방식
: 오퍼랜드 필드의 값과 특정 레지스터의 값을 더하여 유효 주소 얻기

(3) 상대 주소 지정 방식
: 오퍼랜드 필드의 값과 프로그램 카운터의 값을 더하여 유효 주소 얻기

8. 베이스 레지스터

베이스 레지스터 주소 지정 방식
: 오퍼랜드 필드의 값과 베이스 레지스터의 값을 더하여 유효 주소 얻기

명령어 사이클

: 프로그램 속 명령어들은 일정한 주기가 반복되며 실행하는데 이 주기를 명령어 사이클이라고 한다.

인터럽트

: 하드웨어/소프트웨어가 CPU에 “지금 이거 먼저 처리해!”라고 알려 현재 작업을 잠시 중단하고 지정된 처리 루틴으로 즉시 전환하게 하는 메커니즘입니다.

동기 인터럽트
- CPU가 예기치 못한 상황을 접했을 때 발생

비동기 인터럽트 ( 하드웨어 인터럽트 )
- 주로 입출력장치에 의해 발생한다.
- 알림과 같은 역할
- 입출력 작업 도중에도 효율적으로 명령어를 처리하기 위해 하드웨어 인터럽트를 사용한다.
- 입출력 장치는 CPU에 비해 느리다.
- 인터럽트가 없다면 CPU는 프린트 완료여부를 확인하기 위해 주기적으로 확인해야 한다.

하드웨어 인터럽트의 처리 순서

(1) 입출력장치는 CPU에 인터럽트 요청 신호를 보낸다.

→ 인터럽트 요청 신호 : 하드웨어/소프트웨어가 “지금 처리 필요!”라고 CPU에 보내는 신호/요청 라인입니다

(2) CPU는 실행 사이클이 끝나고 명령어를 인출하기 전 항상 인터럽트 여부를 확인한다.

(3) CPU는 인터럽트 요청을 확인하고 인터럽트 플래그를 통해 현재 인터럽트를 받아들일 수 있는지 여부를 확인한다.

→ 인터럽트 플래그 : CPU가 인터럽트를 받을지 말지를 결정하는 허용 비트

(4) 인터럽트를 받아들일 수 있다면 CPU는 지금까지의 작업을 백업한다.

→ 인터럽트 벡터 : “어떤 인터럽트가 발생했는지”에 따라 점프해야 할 처리 루틴의 시작 주소 표
→ 인터럽트 서비스 루틴 : 인터럽트가 발생했을 때 실행되는 전용 함수

(5) CPU는 인터럽트 벡터를 참조하여 인터럽트 서비스 루틴을 실행한다.

(6) 인터럽트 서비스 루틴 실행이 끝나면 (4)에서 백업해 둔 작업을 복구하여 실행을 재개한다.


→ 하드웨어 인터럽트에는 인터럽트 플래그로 막을 수 있는 인터럽트와 막을 수 없는 인터럽트가 있다.

→ 명령어 사이클은 인출 , 실행, 간접, 인터럽트 사이클로 구성된다.

정리

ALU와 제어장치

ALU는 레지스터에서 피연산자를 받아 제어장치의 제어 신호대로 연산을 수행하고, 결과와 플래그(부호·제로·캐리·오버플로우·인터럽트·슈퍼바이저)를 갱신한다.

제어장치는 명령어 해석·제어 신호 생성·흐름 제어를 담당하며, 클럭을 기준으로 단계별 동작을 맞춘다.

레지스터는 PC(다음 명령 주소), IR(현재 명령), MAR/MDR(메모리 주소/데이터), FLAG, 범용 레지스터, SP(스택 꼭대기), 베이스 레지스터 등으로 구성된다.

주소 지정은 스택, 변위(레지스터+즉치값), 상대(PC+오프셋), 베이스(베이스+오프셋) 방식이 핵심이다.

명령어 사이클
명령어 사이클은 인출(Fetch) → 해독(Decode) → 오퍼랜드 접근 → 실행(Execute) → 기록(Write-back)로 반복된다.

출처

https://www.inflearn.com/course/%ED%98%BC%EC%9E%90-%EA%B3%B5%EB%B6%80%ED%95%98%EB%8A%94-%EC%BB%B4%ED%93%A8%ED%84%B0%EA%B5%AC%EC%A1%B0-%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C/dashboard

profile
꾸준한 개발자

0개의 댓글