컴퓨터 구조 + 운영체제 #04

박영무·2024년 11월 1일
post-thumbnail

참고 서적: 혼자 공부하는 컴퓨터 구조 + 운영체제 (강민철, 한빛미디어)


I. ALU와 Control Unit

  • CPU는 ALU, Control Unit, Register로 구성된다.
  • ALU는 산술/논리 연산 장치, Control Unit은 제어 신호를 발생시키고 명령어를 해석하는 장치이다.

1. ALU

  • 산술/논리 연산을 수행하기 위해서는 연산자와 피연산자가 필요하다.
  • 받아들이는 정보
    i) 연산자
	- Control Unit에서 제어 신호의 형태로 ALU에 전달된다.

  ii) 피연산자

	- Register에서 ALU에게 전달된다.
  • 내보내는 정보
    i) 결과값
	- ALU에서 Register에 전달된다.
	- Register로 전달되는 이유: CPU에서 Memory보다는 Register에 접근하는 것이 더 빠르기 때문

  ii) Flag

	- Flag: ALU에서 Flag Register에 전달된다.

2. Control Unit

  • 산술/논리 연산을 수행하기 위해서는 연산자와 피연산자가 필요하다.
  • 받아들이는 정보
    i) Clock Signal (클럭 신호)
	- 컴퓨터의 모든 부품을 일사불란하게 움직일 수 있게 하는 사간 단위이다.

  ii) 해석할 명령어

	- Instruction Register에서 Control Unit에게 전달된다.
  • CPU 내부에 내보내는 정보
    i) Register에 보내는 제어 신호
	- Register 동작에 관련된 제어 신호이다.

  ii) ALU에 보내는 제어 신호

	- 수행할 연산을 지시하는 제어 신호이다.
  • CPU 외부에 내보내는 정보
    i) Memory에 보내는 제어 신호
	- Memory를 읽고, Memory에 쓰도록 하는 제어 신호이다.

  ii) I/O Device에 보내는 제어 신호

	- I/O Device에 읽기, 쓰기 테스트 제어 신호를 보낸다.

II. Register

1. Register

  • Register는 CPU 내부에 있는 임시 저장 장치이다.
  • 프로그램 속 명령어와 데이터는 실행 전후로 Register에 저장된다.

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

  • Memory에서 읽어들일 다음 명령어의 주소를 가져온다.

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

  • 이미 Memory에서 읽어 들인 해석될 명령어를 저장한다.

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

  • CPU가 읽어 들이고자 하는 Memory의 주소를 주소 버스로 보낼 때 거치는 Register이다.
  • 즉, CPU가 읽어 들이고자 하는 Memory의 주소가 저장되는 Register이다.

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

  • CPU가 명령어와 데이터를 데이터 버스를 통해 주고받을 때 거치는 Register이다.
  • 즉, CPU가 Memory와 주고 받을 데이터와 명령어가 저장되는 Register이다.

5) FR (Flag Register, 플래그 레지스터)

  • 연산 결과 또는 CPU 상태에 대한 부가적인 정보를 저장한다.

6) GPR (General Purpose Register, 범용 레지스터)

  • 다양하고 일반적인 상황에서 자유롭게 사용된다.

7) SP (Stack Pointer, 스택 포인터)

  • Stack의 꼭대기를 가리키는 Register이다.
  • 주소 지정에 사용된다.

8) BR (Base Register, 베이스 레지스터)

  • 프로그램 시작의 기준 주소를 저장하는 Register이다.
  • 주소 지정에 사용된다.

2. 주소 지정 방식

1) 스택 주소 지정 방식

  • Stack과 SP를 이용한 방식

2) 변위 주소 지정 방식

  • 변위와 특정 Register의 값을 더하여 유효 주소를 얻는 방식이다.
	- 변위: Operand의 필드 값을 변위로 이용하며, 이 경우 Operand의 필드에는 주소 값이 들어있다.
	- 특정 Register: PC 또는 BR
  • 형태: Operation Code | Register | Operand
  • 동작 방식: Register와 주소 값인 Operand를 더한 곳에 있는 데이터로 Operation Code를 수행
  • 구분
    i) 상대 주소 지정 방식 (PC 사용)
	- 변위와 PC의 값 (다음 읽어올 명령어가 저장된 Memory의 주소)을 더하여 주소를 지정한다.

  ii) BR 주소 지정 방식 (BR 사용)

	- BR에 담긴 프로그램 시작의 기준 주소 값과 변위 값을 더하여 주소를 지정한다.

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

1. 명령어 사이클 (인출, 실행)

  • 프로그램 속 명령어들의 실행은 일정한 주기로 반복된다.
  • 기본적으로 인출 사이클 - 실행 사이클 - 인출 사이클 - 실행 사이클 - 인출 사이클 - ... 순으로 반복된다.

1) 인출 사이클

  • Memory에 저장된 명령어를 실행하기 위해 가장 먼저 Memory에서 CPU로 명령어를 가지고 와야 한다.

2) 실행 사이클

  • Memory에서 인출된 명령어를 실행한다.

2. 명령어 사이클 (인출, 간접, 실행)

  • 간접 주소 지정 방식처럼 명령어가 Memory에서 CPU로 인출돼도 바로 실행되지 못 하는 경우도 있다.
  • 간접 주소 지정 방식: 명령어의 Operand 필드에 유효 주소의 주소를 명시하는 방식
  • 이 경우, 인출 사이클 - 간접 사이클 - 실행 사이클 - 인출 사이클 - 간접 사이클 - 실행 사이클 - 인출 사이클 - ... 순으로 반복된다.

1) 간접 사이클

  • 명령어의 Operand 필드 값인 유효 주소의 주소 값을 통해 Memory에 접근하고, 해당 주소에 담긴 유효 주소의 위치로 이동하여 연산에 사용할 데이터 값을 가져온다.

3. 인터럽트

  • 위의 명령어 사이클이 끊어지도록 하는 방해하는 신호이다.

1) 동기 인터럽트 (Exception)

  • CPU가 예기치 못한 상황을 접했을 때 발생하는 예외이다.
  • Fault, Trap, Abort, SW Interrupt가 있다.

2) 비동기 인터럽트 (HW Interrupt)

  • 주로 입출력 장치에 의해 발생하는 HW Interrupt이다.
  • 비동기 인터럽트가 필요한 이유
	- 입출력 작업 도중에도 효율적으로 명령어를 처리하기 위해 사용된다.
	- 일반적인 입출력 장치는 CPU에 비해 느리다.
	- 비동기 인터럽트가 없다면 CPU는 입출력 장치의 동작 완료 여부를 주기적으로 확인해야 한다.
	- 비동기 인터럽트가 있다면 입출력 장치가 동작하는 동안 CPU는 다른 작업을 처리할 수 있다.
  • 인터럽트 서비스 루틴 (ISR, Interrupt Service Routine)
	- 명령어 사이클을 반복하며 프로그램이 실행될 때 인터럽트가 발생한 경우 해당 프로그램의 실행을 중단한다.
	- 인터럽트 벡터에 담긴 ISR 주소로 이동하여 Memory에 저장된 ISR를 수행한다.
	- 중단되었던 프로그램 실행 위치로 되돌아와 다시 명령어 사이클을 반복한다.
	- 프로그램의 실행을 재개하기 위해 ISR로 넘어가기 전에 Register에 저장된 명령어의 정보를
	  Memory의 Stack 영역에 백업해둔다.
  • 인터럽트 벡터
	- 각각의 인터럽트를 구분하기 위한 정보이다.
	- 인터럽트 주체 별 ISR의 시작 주소가 담겨 있다.
	🞷 인터럽트 벡터 테이블: 인터럽트 벡터를 Memory에 테이블의 형태로 저장한 것
profile
시행착오는 성장의 밑거름입니다.

0개의 댓글