[혼공컴운] 혼공단 11기 - 2주차 (4장)

shyn26·2024년 1월 8일
0

혼공학습단

목록 보기
4/20

4. CPU의 작동 원리

4-1. ALU와 제어장치

‼ ALU와 제어장치가 무엇을 내보내고, 무엇을 받아들이는지 집중 ‼️

ALU

  • 계산하는 부품

[받는 것]

  • 레지스터를 통해 피연산자를 받아들이고,
  • 제어장치로부터 수행할 연산을 알려주는 제어 신호를 받아들임

[내보내는 것]

  • 연산을 수행한 결과를 내보내고,

    • 특정 숫자
    • 문자
    • 메모리 주소

    → 이 결과값은 바로 메모리게 저장되지 않고 일시적으로 레지스터에 저장

    [WHY] 메모리가 아닌 레지스터에 우선 일시적으로 저장하나요?

    • CPU가 메모리에 접근하는 속도보다 레지스터에 접근하는 속도가 훨씬 빠르기 때문
    • CPU가 ALU에서 연산할 때마다 메모리에 자주 접근하게 될텐데 프로그램 실행 속도를 빠르게 하기 위해
  • 계산결과와 더불어 부호 플래그 를 내보냄

  • 연산 결과가 연산결과를 담을 레지스터보다 클 때, '결과값이 너무 크다(overflow)' 라는 추가정보를 내보냄

    [플래그 종류]

    • 부호 플래그 : 1일 때, 음수
    • 제로 플래그 : 1일 때, 0
    • 캐리 플래그 : 1일 때, 자릿수 올림 있음
    • 오버플로우 플래그 : 1일 때, 연산에서 결과가 표현 가능한 범위를 벗어났음
    • 인터럽트 플래그 : 1일 때, 인터럽트가 활성화되어 있음
    • 슈퍼바이저 플래그 : 1일 때, 현재 실행 중인 코드가 슈퍼바이저 모드에서 실행되고 있음

    → 플래그들은 플래그 레지스터라는 레지스터에 저장


제어장치

  • 제어 신호를 내보내고, 명령어를 해석하는 부품
    • 제어 신호 : 컴퓨터 부품들을 관리하고 작동시키는 전기 신호

[받는 것]

  1. 클럭(clock) 신호를 받아들임
  2. 해석해야 할 명령어를 받아들임
  3. 플래그 레지스터 속 플래그 값을 받아들임
  4. 시스템 버스 중에서 제어 버스로 전달된 제어 신호를 받아들임

[(외부로) 내보내는 것]

  1. 메모리로 제어 신호를 내보냄 : 메모리에 저장된 값을 읽거나 메모리에 새로운 값을 쓰고 싶을 때
  2. 입출력장치로 제어 신호를 내보냄 : 입출력장치의 값을 읽거나 입출력장치에 새로운 값을 쓰고 싶을 때

[(내부로) 내보내는 것]

  1. ALU에 제어 신호를 내보냄 : 수행할 연산을 지시하기 위해
  2. 레지스터에 제어 신호를 내보냄 : 레지스터 간에 데이터를 이용시키거나, 레지스터에 저장된 명령어를 해석하기 위해

4-2. 레지스터

반드시 알아야 할 레지스터

1. 프로그램 카운터 (PC; Program Counter)

  • 메모리에서 가져올 명령어의 주소
  • 메모리에서 읽어 들일 명령어의 주소를 저장
  • 명령어 포인터 (IP; Instruction Pointer) 라고 부르기도 함
  • 변위 주소 지정 방식이라는 주소 지정 방식에 사용

2. 명령어 레지스터 (IR; Instruction Register)

  • 해석할 명령어, 즉 방금 메모리에서 읽어 들인 명령어를 저장하는 레지스터

3. 메모리 주소 레지스터 (MAR; Memory Address Register)

  • 메모리의 주소를 저장하는 레지스터

4. 메모리 버퍼 레지스터 (MBR; Memory Buffer Register)

  • 메모리와 주고받을 값(데이터와 명령어)을 저장하는 레지스터
  • 메모리 데이터 레지스터(MDr; Memory Data register)라고도 부름

5. 플래그 레지스터 (flag register)

  • ALU 연산 결과에 따른 플래그를 플래그 레지스터에 저장

6. 범용 레지스터 (general purpose register)

  • 이름 그대로 다양하고 일반적인 상황에서 자유롭게 사용할 수 있는 레지스터


특정 레지스터를 이용한 주소 지정 방식(1): 스택 주소 지정 방식 (stack addressing mode)

  • 스택과 스택 포인터를 이용한 주소 지정 방식

7. 스택 포인터 (stack pointer)

  • 주소 지정에 사용될 수 있는 특별한 레지스터
  • 스택 주소 지정 방식이라는 주소 지정 방식에 사용
  • 스택의 꼭대기를 가리키는 레지스터
  • 스택에 마지막으로 저 장한 값의 위치를 저장하는 레지스터

특정 레지스터를 이용한 주소 지정 방식(2): 변위 주소 지정 방식 (displacement addressing mode)

  • 오퍼랜드 필드의 값(변위)과 특정 레지스터의 값을 더하여 유효 주소를 얻어내는 주소 지정 방식

8. 베이스 레지스터

  • 주소 지정에 사용될 수 있는 특별한 레지스터
  • 변위 주소 지정 방식이라는 주소 지정 방식에 사용

[⭐️혼공단 미션 인증!⭐️]

p.125-2번
1. (플래그 레지스터) : 연산 결과 혹은 CPU 상태에 대한 부가 정보를 저장하는 레지스터
2. (프로그램 카운터) : 메모리에서 가져올 명령어의 주소를 저장하는 레지스터
3. (범용 레지스터) : 데이터와 주소를 모두 저장할 수 있는 레지스터
4. (명령어 레지스터) : 해석할 명령어를 저장하는 레지스터


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

명령어 사이클 (instruction cycle)

  • 내가 실행하는 프로그램은 수많은 명령어로 이루어져 있고, CPU는 이 명령어들을 하나씩 실행함
  • 이때 프로그램 속 각각의 명령어들은 일정한 주기가 반복되며 실행됨
    → 이 주기를 명령어 사이클이라 함

[메모리에 저장된 명령어 하나를 실행한다고 가정]

  1. 인출 사이클 (fetch cycle) : 메모리에 있는 명령어를 CPU로 가지고 오는 단계

  2. 실행 사이클 (execution cycle) : CPU로 가져온 명령어를 실행하는 단계
    제어장치가 명령어 레지스터에 담긴 값을 해석하고, 제어 신호를 발생시키는 단계

  3. 명령어를 인출하여 CPU로 가져왔다 하더라도 바로 실행 사이클에 돌입할 수 없는 경우가 있음
    명령어를 실행하기 위해서는 메모리 접근을 한 번 더 해야 하기 때문
    → 간접 사이클 (indirect cycle)


인터럽트(Interrupt)

  • 사전적 의미 : 방해하다, 중단시키다.
  • CPU가 수행 중인 작업은 방해를 받아 잠시 중단될 수 있는데, 이렇게 CPU의 작업을 방해하는 신호

동기 인터럽트 (synchronous interrupts) : CPU에 의해 발생하는 인터럽트, 예외(exception)라고 부름

비동기 인터럽트 (asynchronous interrupts) : 입출력장치에 의해 발생하는 인터럽트, 일반적으로 비동기 인터럽트를 인터럽트라 칭함 → 책에서는 혼동방지로 하드웨어 인터럽트라고 함

profile
Without haste, but without rest - J.W. von Goethe

0개의 댓글