컴퓨터 구조 &운영체제/컴퓨터구조 + 운영체제

CPU의 작동 원리

busy맨 2024. 2. 5. 17:45

1. ALU와 제어장치

1) ALU

  • CPU 내부의 계산을 담당
  • 레지스터로부터 피연산자를 받아들이고, 제어장치로부터 제어 신호(수행할 연산)를 받아들여 산술연산, 논리연산 등 다양한 연산을 수행
    ALU가 연산을 수행한 결과는 바로 메모리에 저장되지 않고 일시적으로 레지스터에 저장됨
    • ALU가 연산할 때마다 CPU가 메모리에 접근하게 되면 프로그램의 실행 속도가 늦어짐
    • 레지스터에 일시적으로 저장하여 접근 속도를 향상시켜 프로그램의 속도를 향상
  • 플래그는 연산 결과에 대한 추가적인 상태 정보를 의미하며 플래그 레지스터에 저장됨
    • CPU가 프로그램을 실행하는 도중 반드시 기억해야 하는 일종의 참고 정보

 

플래그 종류 의미
부호 플래그 연산한 결과의 부호를 나타냄
제로 플래그 연산 결과가 0인지 여부를 나타냄
캐리 플래그 연산 결과 올림수나 빌림수가 발생했는지를 나타냄
오버플로우 플래그 오버플로우가 발생했는지를 나타냄
인터럽트 플래그 인터럽트가 가능한지를 나타냄
슈퍼바이저 플래그 실행 중인 모드가 커널 모드인지 사용자 모드인지 나타냄

 

2) 제어장치

  • 제어장치
    • 제어 신호를 내보내고, 명령어를 해석하는 부품
  • 제어 신호
    • 컴퓨터 부품들을 관리하고 작동시키기 위한 일종의 전기 신호
  • 제어장치가 받아들이는 정보
    1. 클럭 신호
      • 클럭(clock)
        • CPU의 속도를 나타내는 단위
        • 일정 주기에 맞춰 데이터가 이동되거나 연산 수행, 명령어를 읽어들임
        • 하나의 명령어가 여러 클럭에 걸쳐 실행될 수 있음
    2. 해석해야 할 명령어
      • CPU가 해석해야 할 명령어는 명령어 레지스터에 저장됨
      • 제어장치는 명령어 레지스터로부터 해석할 명령어를 받아들이고 해석한 뒤, 제어신호를 발생시킴
    3. 플래그 레지스터 속 플래그 값
      • 플래그 값을 참고하여 제어 신호를 발생
    4. 시스템 버스(그 중 제어 버스)로 전달된 제어 신호
      • 제어 신호를 CPU 뿐만 아니라 입출력 장치를 비롯한 CPU 외부 장치도 발생 가능
      • 제어 버스를 통해 외부로부터 전달된 제어 신호를 받아들임

 

  • 제어장치가 내보내는 정보
    1. CPU 외부에 전달하는 제어 신호
      • 제어 버스로 제어 신호를 내보냄
      • 메모리에 전달하는 제어 신호, 입출력 장치(보조기억장치 포함)에 전달하는 제어 신호
    2. CPU 내부에 전달하는 제어 신호
      • ALU에 전달하는 제어 신호, 레지스터에 전달하는 제어 신호

 

2. 레지스터

  • 레지스터
    • CPU 내부의 작은 임시 저장장치
    • 프로그램 속 명령어와 데이터는 실행 전후로 반드시 레지스터에 저장됨

1) 레지스터 종류

  1. 프로그램 카운터(PC: Program Counter)
    • 메모리에서 가져올 명령어의 주소(=메모리에서 읽어 들일 명령어의 주소)를 저장
  2. 명령어 레지스터(IR: Instruction Register)
    • 해석할 명령어(=메모리에서 읽어 들인 명령어)를 저장하는 레지스터
    • 제어장치는 명령어 레지스터 속 명령어를 받아 해석한 뒤 제어신호를 생성
  3. 메모리 주소 레지스터(MAR: Memory Address Register)
    • 메모리의 주소를 저장하는 레지스터
    • CPU가 읽어 들이고자 하는 주소 값을 주소 버스로 보낼 때 거침
  4. 메모리 버퍼 레지스터(MBR: Memory Buffur Register)
    • 메모리와 주고 받을 값(데이터와 명령어)을 저장하는 레지스터
    • 데이터 버스로 주고 받을 값이 메모리 버퍼 레지스터를 거침
  5. 플래그 레지스터(flag register)
    • ALU 연산 결과에 따른 플래그를 저장
    • 연산 결과 또는 CPU 상태에 대한 부가적인 정보를 저장하는 레지스터
  6. 범용 레지스터 (general purpose register)
    • 다양하고 일반적인 상황에서 자유롭게 사용할 수 있는 레지스터
    • 데이터와 주소를 모두 저장
    • 일반적으로 CPU 안에 여러 개의 범용 레지스터가 존재
  7. 스택 포인터(stack pointer)
    • 스택 주소 지정 방식
      • 스택과 스택 포인터를 이용한 주소 지정 방식
      • 스택 포인터란 스택의 꼭대기를 가리키는 레지스터
        • 스택에 마지막으로 저장한 값의 위치를 저장하는 레지스터
      • 메모리 안에 스택 영역 안에 저장됨

 

3. 명령어 사이클과 인터럽트

1) 명령어 사이클(instruction cycle)

  • 명령어가 반복되며 실행되는 주기
  • 프로그램 속 명령어들은 명령어 사이클이 반복되며 실행됨
    • 그 중 인출 사이클과 실행 사이클이 반복

  1.  인출 사이클(fetch cycle)
    • 메모리에 있는 명령어를 CPU로 가지고 옴
  2. 실행 사이클(execution cycle)
    • CPU로 가져온 명령어를 실행
    • 제어장치가 명령어 레지스터에 담긴 값을 해석하고, 제어신호를 발생시키는 단계
  3. 간접 사이클(indirect cycle)
    • 어떤 명령어는 메모리 접근을 한 번 더 해야함
      • Ex)  간접 주소 지정 방식

 

2) 인터럽트(interrupt)

  • CPU의 작업을 방해하는 신호
  • 동기 인터럽트(synchronous interrupt)
    • CPU에 의해 발생하는 인터럽트
    • CPU가 명령어를 실행하다 예상 못한 상황(Ex.프로그래밍상의 오류)에 마주쳤을 때 발생하는 인터럽트
    • 때문에 예외(Exception)라고도 부름
  • 비동기 인터럽트(asynchronous interrupt)
    • 주로 입출력장치에 의해 발생하는 인터럽트
    • 하드웨어 인터럽트라고 함
    • 입출력 작업 도중에도 효율적으로 명령어를 처리하기 위해 '알림'과 같은 인터럽트를 사용
    • Ex) 프린터 작업의 경우, CPU가 주기적으로 프린터의 작업 완료 여부를 확인할 필요 없이,
      프린터로부터 완료 인터럽트를 받을 때까지 다른 작업을 처리 가능 → CPU의 효율적인 명령어 처리 가능
  • 하드웨어 인터럽트 처리 순서
    1. 입출력장치가 CPU에 인터럽트 요청 신호를 전송
      • 인터럽트 요청 신호: 인터럽트가 가능한지 여부를 확인
    2. CPU는 실행 사이클이 끝나고 인출 사이클 실행 전에 항상 인터럽트 여부를 확인
    3. CPU는 인터럽트 요청을 확인하고 인터럽트 플래그를 통해 현재 인터럽트를 받아들일 수 있는지 여부를 확인
      • 인터럽트 플래그: 하드웨어 인터럽트를 받아들일지, 무시할지를 결정하는 플래그
    4. 인터럽트를 받아들일 수 있다면 CPU는 지금까지의 작업을 백업
    5. CPU는 인터럽트 벡터를 참조하여 인터럽트 서비스 루틴을 실행
      •  인터럽트 서비스 루틴: 인터럽트를 처리하기 위한 프로그램
      • 인터럽트 벡터: 인터럽트 서비스 루틴을 식멸하기 위한 정보
    6. 인터럽트 서비스 루틴이 종료되면 CPU는 백업해둔 작업을 복구하여 실행을 재개

'컴퓨터 구조 &운영체제 > 컴퓨터구조 + 운영체제' 카테고리의 다른 글

메모리와 캐시 메모리  (0) 2024.02.07
CPU 성능 향상 기법  (1) 2024.02.06
명령어  (0) 2024.02.02
데이터  (1) 2024.01.22
CPU Scheduling  (0) 2023.08.29