250816 CS스터디

LIHA·2025년 8월 16일
post-thumbnail

학습목표

혼공컴운 4~5장

4장: 4-1 ALU와 제어장치

CPU는 계산담당 ALU, 명령어 읽기/해석 담당 제어장치, 임시 저장장치 레지스터로 크게 구분한다고 했음. ALU와 제어장치가 무엇을 내보내고 무엇을 받아들이는 지 알아볼 것.

ALU와 제어장치 - ALU

  • ALU가 계산하려면 피연산자와 연산이 필요함
  • 그래서 ALU는 레지스터를 통해 피연산자를 받고, 제어장치를 통해 수행할 연산을 알려주는 제어신호를 받음
  • 연산 수행 결과는 일시적으로 레지스터에 저장됨
    => 레지스터는 CPU 안에 있고 메모리는 CPU 밖에 있기 때문에 일반적으로 메모리에 접근하는 속도가 레지스터에 접근하는 속도보다 훨씬 느림. 그래서 레지스터에 저장하는 것.
  • ALU는 연산 결과와 함께 플래그 라는 것을 같이 내보냄. 플래그는 여러 종류가 있음

ALU가 내보내는 플래그

1. 부호 플래그 - 마이너스가 있는가
2. 제로 플래그 - 연산결과가 0인가
3. 캐리 플래그 - 올림수나 빌림수가 발생하였는가
4. 오버플로우 플래그 - 오버플로우가 발생했는가
5. 인터럽트 플래그 - 인터럽트가 가능한가
6. 슈퍼바이저 플래그 - 커널모드로 실행중인가

위 각각에 해당하면 플래그가 1로 켜진다🚩

ALU와 제어장치 - 제어장치

  • 제어장치는 제어신호를 내보내고 명령어를 해석함 - 제어신호는 컴퓨터 부품을들 관리, 작동시키는 일종의 전기신호
  • 제어장치가 받아들이는 정보는 여러 종류가 있음

제어장치가 받아들이는 정보

  • 클럭 신호
  • 해석해야 할 명령어
  • 플래그 레지스터 속 플래그 값
  • 시스템 버스 중 제어 버스로 전달 된 제어 신호
  • 제어장치가 내보내는 정보도 여러가지가 있음

제어장치가 내보내는 정보

  • CPU 외부에 전달하는 제어 신호
    => 제어 버스에 보내는 신호. 메모리에 전달 / 입출력장치에 전달
  • CPU 내부에 전달하는 제어 신호
    => ALU에 전달 / 레지스터에 전달

4장: 4-2 레지스터

명령어와 데이터는 실행 전후로 반드시 레지스터에 저장됨. 상용화 PC의 레지스터들은 CPU마다 이름, 크기, 종류가 다 다름. 주요 부속품인 8가지 레지스터를 짚고 넘어갈 것.

8가지 대표적 레지스터

  • 프로그램 카운터
  • 명령어 레지스터
  • 메모리 주소 레지스터
  • 메모리 버퍼 레지스터
  • 플래그 레지스터
  • 범용 레지스터
  • 스택 포인터
  • 베이스 레지스터
  • 프로그램 카운터: 명령어 포인터라고도 함. 메모리에서 읽어들일 명령어 주소 저장.
  • 명령어 레지스터: 방금 메모리에서 읽어들인 명령어를 저장.
  • 메모리 주소 레지스터: 메모리의 주소를 저장. CPU가 읽어들일 주소값을 주소 버스로 보낼 때 여기를 거침.
  • 메모리 버퍼 레지스터: 메모리 데이터 레지스터라고도 함. 메모리와 주고받을 값(데이터와 명령어)을 저장하는 레지스터.
  • 범용 레지스터: 다양하고 일반적인 상황에서 자유롭게 사용가능 레지스터. 데이터와 주소를 모두 저장 가능. (메모리 주소 레지스터는 주소만 저장 가능)
  • 플래그 레지스터: ALU 연산결과에 따른 플래그를 저장하는 레지스터.
  • 스택 포인터: 스택의 꼭대기를 가리키는 포인터. 스택의 어디까지 데이터가 채워져 있는지에 대한 표시.
  • 베이스 레지스터: 베이스 레지스터 주소 지정 방식에서 기준 주소의 역할을 하는 레지스터.

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

  • 명령어 사이클: 하나의 명령어를 처리하는 정형화된 흐름
  • 인터럽트: 명령어 사이클이 끊어지는 상황

명령어 사이클

  • 인출 사이클
  • 실행 사이클
  • 간접 사이클
  • 인터럽트는 CPU 작업을 방해하는 신호. 동기 인터럽트와 비동기 인터럽트가 있음.
    • 동기 인터럽트: CPU에 의해 발생하는 인터럽트. 예외라고 부르는 것들이 이것.
    • 비동기 인터럽트: 주로 입출력장치에 의해 발생하는 인터럽트. 알림 역할을 함. 프린터같은 입출력 장치에 작업을 부탁하면 입출력장치가 CPU에 완료 알림(인터럽트)을 보냄.

입출력장치는 CPU보다 속도가 현저히 느리기 때문에 CPU가 결과를 바로 받아볼 수 없음. 그렇다고 CPU가 주기적으로 결과를 확인하는 건 리소스 낭비. 이때 하드웨어 인터럽트를 이용하면 완료 시점에 인터럽트를 보내 그 사이 CPU는 다른 일을 할 수 있고, 완료 시 바로 결과를 받아볼 수 있다.

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

1. 입출력장치는 CPU에 인터럽트 요청 신호를 보냄
2. CPU는 실행 사이클이 끝나고 명령어를 인출하기 전 항상 인터럽트 여부를 확인
3. CPU는 인터럽트 요청을 확인하고 인터럽트 플래그를 통해 현재 인터럽트를 받아들일 수 있는 지 여부를 확인
4. 인터럽트를 받아들일 수 있다면 지금까지의 작업을 백업
5. CPU는 인터럽트 벡터를 참조하여 인터럽트 서비스 루틴을 실행
6. 인터럽트 서비스 루틴이 끝나면 4번에서 백업한 작업 복구하여 다시 수행

와 이게 뭐지...? 전혀 모르겠다! 낯선 키워드 추출

인터럽트 요청 신호
인터럽트 플래그
인터럽트 벡터
인터럽트 서비스 루틴

profile
갑자기 왜 춤춰?

0개의 댓글