컴퓨터구조

막막지음·2026년 1월 3일

컴퓨터 구조 (Computer Architecture)

1장: 컴퓨터의 역사와 분류

1.1. 컴퓨터의 발전 과정
컴퓨터의 역사는 기계식 계산 장치에서 시작해 현대의 집적 회로(IC) 기반 컴퓨터에 이르기까지 획기적인 발전을 거듭했습니다.

  • 초기 기계식/전자식 컴퓨터

    • 차분기관 (Difference Engine): 19세기 찰스 배비지가 설계한 기계식 계산기.
    • 애니악 (ENIAC): 최초의 대형 범용 전자식 컴퓨터로, 주요 소자로 진공관(Vacuum Tube)을 사용했습니다.
    • 에드삭 (EDSAC): 영국에서 개발되었으며, 프로그램 내장 방식을 구현한 초기 컴퓨터 중 하나입니다.
    • 에드박 (EDVAC): 폰 노이만이 제안한 프로그램 내장 방식(Stored-Program Concept) 설계를 본격적으로 채택한 컴퓨터입니다.
  • 반도체와 집적 회로(IC)의 시대
    진공관을 트랜지스터(Transistor)가 대체하면서 컴퓨터는 더 작고, 빠르고, 신뢰성 높은 장치로 발전했습니다. 이후 수많은 트랜지스터를 하나의 칩에 집적하는 집적회로(Integrated Circuit, IC) 기술이 등장했습니다.

    • SSI (Small-Scale Integration): 소규모 집적회로
    • MSI (Medium-Scale Integration): 중규모 집적회로. 조합회로, 순차회로 구현에 사용.
    • LSI (Large-Scale Integration): 대규모 집적회로. 이 기술 덕분에 단일 칩으로 된 마이크로프로세서가 탄생했습니다.
    • VLSI (Very Large-Scale Integration): 초대규모 집적회로
    • ULSI (Ultra-Large-Scale Integration): 극초대규모 집적회로

1.2. 컴퓨터 시스템의 분류

  • 개인용 컴퓨터 (PC) 및 워크스테이션 (Workstation)
  • 다중 프로세서 시스템: 하나의 시스템에 여러 개의 CPU 코어를 사용하여 병렬 처리 성능을 높인 컴퓨터. GPU 또한 병렬 연산에 널리 사용됩니다.
  • 메인프레임 및 슈퍼컴퓨터:
    • 메인프레임 (Mainframe): 대규모 데이터 처리와 높은 신뢰성이 요구되는 기업 환경에서 사용됩니다.
    • 슈퍼컴퓨터 (Supercomputer): 과학 기술 연산 등 극도의 고성능 계산을 위해 사용되며, 성능 단위로 과거에는 MFLOPS, 현대에는 PFLOPS, EFLOPS를 사용합니다.
      • 구조적 특징: 초기에는 파이프라인 슈퍼컴퓨터 구조였으나, 현재는 수많은 프로세서를 연결한 대규모 병렬 컴퓨터(MPP)클러스터(Cluster) 형태가 주를 이룹니다.

2장: 중앙 처리 장치 (CPU) 구조와 기능

CPU는 명령어 인출, 해석, 실행, 저장을 통해 프로그램을 처리하는 컴퓨터의 핵심 장치입니다.

2.1. CPU의 주요 레지스터

  • PC (Program Counter): 다음에 인출(Fetch)할 명령어의 주소를 저장합니다.
  • IR (Instruction Register): 현재 실행할 명령어를 해석하기 위해 임시로 보관합니다.
  • MAR (Memory Address Register): 접근하려는 기억장치(메모리)의 주소를 저장합니다. 데이터가 시스템 주소 버스로 출력되기 전 주소를 보관합니다.
  • MBR (Memory Buffer Register): 기억장치에서 읽거나 쓸 데이터를 임시로 저장합니다. 메모리 데이터 레지스터(MDR)라고도 합니다.
  • AC (Accumulator): 산술논리연산(ALU)의 결과나 인출된 데이터를 일시적으로 저장하는 누산기입니다.

2.2. 명령어 사이클과 마이크로 연산
CPU는 내부 버스를 통해 레지스터 간 데이터를 이동시키며 정해진 사이클에 따라 명령을 처리합니다.

  • CPU의 주요 기능:

    1. 이동 (Move): 기억장치 또는 I/O 장치 간의 데이터 이동.
    2. 처리 (Process): 데이터에 대한 산술/논리 연산 실행.
    3. 저장 (Store): 연산 결과를 기억장치에 저장.
    4. 제어 (Control): 프로그램의 실행 순서 제어.
  • 인출 사이클 (Fetch Cycle)의 마이크로 연산:

    1. MAR <- PC : PC의 값을 MAR로 보내 다음 명령어 주소를 지정.
    2. MBR <- M(MAR), PC <- PC + 1 : MAR이 가리키는 메모리에서 명령어를 MBR로 가져오고, PC는 다음 주소를 가리키도록 1 증가.
    3. IR <- MBR : MBR에 있는 명령어를 IR로 옮겨 해석 준비.
  • 실행 사이클 (Execute Cycle)의 마이크로 연산 (예시):

    • 데이터 이동 (LOAD AC, addr):
      1. MAR <- IR(addr): 명령어(IR)의 주소 부분을 MAR로 전송.
      2. MBR <- M(MAR): 해당 주소의 데이터를 MBR로 인출.
      3. AC <- MBR: MBR의 데이터를 누산기(AC)에 적재.
    • 데이터 저장 (STORE AC, addr):
      1. MAR <- IR(addr): 저장할 주소를 MAR로 전송.
      2. MBR <- AC: 누산기(AC)의 데이터를 MBR로 전송.
      3. M(MAR) <- MBR: MBR의 데이터를 해당 메모리 주소에 저장.
    • 데이터 계산 (ADD AC, addr):
      1. MAR <- IR(addr): 더할 데이터의 주소를 MAR로 전송.
      2. MBR <- M(MAR): 해당 주소의 데이터를 MBR로 인출.
      3. AC <- AC + MBR: 누산기의 값과 MBR의 값을 ALU를 통해 더하고 결과를 다시 AC에 저장.

2.3. 명령어 파이프라이닝과 슈퍼스칼라

  • 명령어 파이프라인 (Instruction Pipeline): 명령어 처리 과정을 여러 단계(IF, ID, OF, EX 등)로 나누어, 한 명령어의 1단계가 끝나면 바로 다음 명령어의 1단계를 수행하는 식으로 여러 명령어를 동시에 처리하는 기술입니다.

  • 슈퍼스칼라 (Superscalar): 여러 개의 파이프라인을 두어, 서로 독립적인 명령어들을 매 사이클마다 동시에 실행하여 효율을 극대화하는 구조입니다. 이론상 파이프라인 수만큼 성능이 향상됩니다.

  • 멀티코어 (Multi-core): 하나의 칩에 명령어 실행에 필요한 핵심 모듈인 코어(Core)를 여러 개 내장하여 병렬 처리 능력을 높인 프로세서입니다.

2.4. 인터럽트 (Interrupt)
프로그램 실행 중 예외 상황이 발생했을 때 현재 작업을 중단하고 해당 상황을 처리하는 루틴(ISR)을 실행하는 메커니즘입니다.

  • 인터럽트 처리 마이크로 연산:
    1. MBR <- PC: 현재 실행 위치(복귀 주소)를 MBR에 임시 저장.
    2. MAR <- SP, PC <- ISR: 스택 포인터(SP)가 가리키는 스택 주소를 MAR에, 인터럽트 서비스 루틴(ISR)의 시작 주소를 PC에 저장.
    3. M(MAR) <- MBR, SP <- SP - 1: 복귀 주소를 스택에 저장하고, 스택 포인터를 갱신.
  • 다중 인터럽트 (Multiple Interrupt): 인터럽트 처리 중에 우선순위가 더 높은 다른 인터럽트가 발생하는 경우를 처리하기 위한 메커니즘.

3장: 명령어 세트 아키텍처 (ISA)

ISA는 CPU가 이해하는 명령어의 구조를 결정하며, 어셈블리어는 이러한 CPU 구조에 종속적입니다.

3.1. 명령어의 형식과 구성 요소

  • 명령어 구성:
    • 연산 코드 (Opcode): CPU가 실행할 연산(LOAD, ADD 등)을 지정.
    • 오퍼랜드 (Operand): 연산에 필요한 데이터 또는 데이터의 주소.
    • (선택) 다음 명령어 주소 (Next Instruction Address): 다음 실행할 명령어의 주소.
  • 명령어 설계 시 고려사항:
    • 명령어 길이: 고정 길이 또는 가변 길이.
    • 필드(Field) 비트 수: 연산 코드, 오퍼랜드 등에 할당되는 비트 수. 이는 오퍼랜드의 범위(표현 가능한 주소 공간)를 결정합니다.

3.2. 프로그램 제어 명령어
프로그램의 실행 흐름을 제어합니다. (예: JUMP, CALL, RET)

  • 서브루틴 호출 (CALL)과 복귀 (RET):
    • CALL X: 현재 PC(복귀 주소)를 스택에 저장하고, 서브루틴 X의 주소로 점프합니다.
      • 마이크로 연산: MBR <- PC, MAR <- SP, M(MAR) <- MBR, SP <- SP - 1, PC <- X (요약)
    • RET: 스택에서 복귀 주소를 꺼내 PC에 저장하여 원래의 실행 흐름으로 돌아갑니다.
      • 마이크로 연산: SP <- SP + 1, MAR <- SP, PC <- M(MAR) (요약)

3.3. 주소 지정 방식 (Addressing Modes)
제한된 오퍼랜드 비트를 사용해 더 넓은 기억장치 공간에 접근하기 위한 방법들입니다.

  • 즉시 주소 지정 (Immediate): 오퍼랜드 필드에 데이터 값(상수)을 직접 명시.
  • 직접 주소 지정 (Direct): 오퍼랜드 필드(A)에 유효 주소(EA)를 직접 명시. EA = A
  • 간접 주소 지정 (Indirect): 오퍼랜드 필드에 유효 주소를 담고 있는 메모리 주소를 명시. EA = M(A)
  • 묵시적 주소 지정 (Implicit): 오퍼랜드가 누산기(AC)나 스택 포인터(SP) 등 미리 정해진 위치에 있음을 암묵적으로 가정.
  • 레지스터 주소 지정 (Register): 오퍼랜드가 레지스터(R)에 있음을 지정. EA = R
  • 변위 주소 지정 (Displacement): 레지스터 값과 주소 필드 값을 더해 유효 주소를 계산. EA = A + (R)
    • 상대 주소 지정 (Relative): PC를 기준 레지스터로 사용. 보수를 이용한 점프 연산 등에 사용.
    • 인덱스 주소 지정 (Indexed): 인덱스 레지스터(XR)를 사용. 배열 데이터 접근에 유용. EA = A + (XR)
    • 베이스 레지스터 주소 지정 (Base-Register): 베이스 레지스터(BR)를 사용. EA = A + (BR)

3.4. CISC vs. RISC

  • CISC (Complex Instruction Set Computer): 복잡하고 다양한 가변 길이 명령어를 사용. (범용 컴퓨터, 예: Intel x86)
  • RISC (Reduced Instruction Set Computer): 단순하고 규격화된 고정 길이 명령어를 사용. 파이프라이닝에 유리. (특수 목적/모바일, 예: ARM)

4장: 컴퓨터 산술과 논리 연산

4.1. 산술 논리 장치 (ALU) 구조와 기능
ALU는 CPU 내에서 실제 산술 및 논리 연산을 담당하는 회로입니다.

  • 주요 구성: 산술 연산기, 논리 연산기, 보수기, 시프터, 상태 레지스터 등.
  • 상태 레지스터 (플래그): 연산 결과의 상태를 나타냅니다. 4비트 병렬 가산기의 경우, 제어 비트로 아래와 같은 플래그가 사용됩니다.
    • V (Overflow): 부호 있는 수의 연산 결과가 범위를 초과했는지 여부.
    • Z (Zero): 연산 결과가 0인지 여부.
    • S (Sign): 연산 결과가 음수인지 여부 (최상위 비트).
    • C (Carry): 부호 없는 수의 연산에서 자리올림이 발생했는지 여부.

4.2. 주요 연산

  • 논리 연산: AND, OR, NOT, XOR 등 비트 단위 연산.
  • 가산기 (Adder):
    • 반가산기 (Half-Adder): 입력 A, B에 대해 합(S)과 캐리(C)를 출력.
    • 전가산기 (Full-Adder): 입력 A, B와 아랫자리 캐리(Cin)에 대해 합(S)과 윗자리 캐리(Cout)를 출력. 다수의 전가산기를 연결하여 비트 병렬 가산기를 구성.
  • 감산기 (Subtractor): 뺄셈은 피감수(Subtrahend)에 2의 보수를 취한 후 덧셈을 수행하는 방식으로 구현.
  • 시프트 연산 (Shift):
    • 논리 시프트: 0을 빈자리로 채우며 이동.
    • 산술 시프트: 좌측 시프트는 0을, 우측 시프트는 부호 비트를 복사하여 채움. (나눗셈/곱셈)
    • 순환 시프트 (Rotate): 밀려나는 비트가 반대편 끝으로 다시 들어옴. RLC, RRC 등은 캐리 플래그(C)를 포함하여 순환.
  • 곱셈 (Multiplication): 피승수(M)와 승수(Q)를 이용하여 시프트와 덧셈 연산을 반복하여 수행.

5장: 기억 장치 시스템

기억 장치는 속도, 용량, 비용에 따라 계층적으로 구성됩니다.

5.1. 기억 장치의 종류와 특징

  • 접근 유형:
    • 순차 접근 (Sequential Access): 처음부터 순서대로 접근. (자기 테이프)
    • 직접 접근 (Direct Access): 블록 단위로 직접 접근 후 순차 검색. (디스크)
    • 임의 접근 (Random Access): 주소를 통해 임의의 위치에 직접 접근. (RAM)
    • 연관 접근 (Associative Access): 주소가 아닌 내용으로 데이터 검색. (캐시)
  • 전송 단위: 주기억장치는 워드(Word), 보조기억장치는 블록(Block) 단위로 데이터를 전송.
  • 성능 척도:
    • 접근 시간 (Access Time): 읽기/쓰기 요청부터 완료까지 걸리는 시간.
    • 데이터 전송률 (Data Transfer Rate): 초당 전송되는 비트 수.

5.2. 기억 장치 계층 구조
CPU와의 근접성에 따라 레지스터 > 캐시 > 주기억장치(RAM) > 보조기억장치 순으로 구성됩니다. 이는 지역성의 원리(Principle of Locality)에 기반하여, CPU가 자주 사용할 데이터를 더 빠른 장치에 배치함으로써 평균 접근 속도를 향상시키기 위함입니다.

5.3. RAM의 내부 조직

  • RAM은 주소 입력선을 통해 특정 위치의 기억 소자 배열에 접근하며, 데이터 선을 통해 데이터를 읽거나 씁니다.
  • 기억장치 제어기는 CPU로부터 받은 주소를 행(Row) 주소열(Column) 주소로 나누어 처리합니다.
    • RAS (Row Address Strobe): 행 주소를 고정시키는 신호.
    • CAS (Column Address Strobe): 열 주소를 고정시키는 신호.

5.4. 캐시 메모리 (Cache Memory)
CPU와 주기억장치 사이의 속도 차이를 완화하기 위한 고속 버퍼 메모리입니다.

  • 캐시 적중 (Hit): CPU가 찾는 데이터가 캐시에 있는 경우.
  • 캐시 실패 (Miss): 데이터가 캐시에 없어 주기억장치에서 가져와야 하는 경우.
  • 데이터 인출 방식:
    • 요구 인출 (Demand Fetch): 필요할 때만 데이터 인출.
    • 선인출 (Prefetch): 필요할 것으로 예상되는 데이터를 미리 인출.

5.5. 캐시 사상(매핑) 방식
주기억장치의 블록을 캐시의 어느 라인에 적재할지 결정하는 규칙입니다.

  • 1. 직접 사상 (Direct Mapping)

    • 개념: 주기억장치의 각 블록이 캐시의 정해진 특정 라인에만 적재될 수 있는 방식.
    • 매핑 함수: i = j mod m (j: 주기억장치 블록 번호, m: 캐시 라인 수, i: 캐시 라인 번호)
    • 기억장치 주소 형식: [ 태그(t) | 라인(l) | 단어(w) ]
      • 태그(t): 캐시 라인에 적재된 블록이 주기억장치의 어느 블록인지 식별.
      • 라인(l): 블록이 적재될 캐시 라인 번호.
      • 단어(w): 블록 내에서의 특정 단어 위치.
    • 장단점: 구현이 간단하나, 다른 태그를 가진 블록들이 동일한 캐시 라인을 두고 경쟁하는 충돌(Conflict)이 발생할 수 있습니다.
  • 2. 완전 연관 사상 (Fully-Associative Mapping)

    • 개념: 주기억장치의 블록이 캐시의 어느 라인이든 비어있는 곳에 적재될 수 있는 방식.
    • 기억장치 주소 형식: [ 태그(t) | 단어(w) ]
      • 태그(t): 주기억장치 블록 번호 전체가 태그로 사용됨.
    • 장단점: 캐시 공간 활용률이 높고 충돌이 없으나, 원하는 데이터를 찾기 위해 모든 라인의 태그를 동시에 비교해야 하므로 검색 회로(연관 기억장치)가 복잡하고 비용이 높습니다.
    • 교체 알고리즘: 캐시가 가득 찼을 때 특정 라인을 비워야 하며, 이때 LRU(Least Recently Used), LFU(Least Frequently Used), FIFO(First-In, First-Out) 등의 알고리즘이 사용됩니다.
  • 3. 세트 연관 사상 (Set-Associative Mapping)

    • 개념: 직접 사상과 완전 연관 사상을 절충한 방식. 캐시를 여러 개의 세트(Set)로 나누고, 각 블록은 정해진 세트 내에서는 어느 라인이든 자유롭게 적재될 수 있습니다.
    • 매핑 함수: k = j mod v (j: 주기억장치 블록 번호, v: 캐시 세트 수, k: 캐시 세트 번호)
    • 기억장치 주소 형식: [ 태그(t) | 세트(s) | 단어(w) ]
      • 태그(t): 블록 식별 정보.
      • 세트(s): 블록이 적재될 캐시 세트 번호.
      • 단어(w): 블록 내 단어 위치.
    • 특징: 세트 내에 라인이 1개면 직접 사상과 같고, 전체 캐시가 1개의 세트로 구성되면 완전 연관 사상과 같습니다. 직접 사상보다 충돌률이 낮고, 완전 연관 사상보다 회로가 간단합니다. 세트 내에서 교체 알고리즘이 필요합니다.
profile
방가방가예요

0개의 댓글