1. 컴퓨터의 기본 구성 요소 (Basic Elements)

컴퓨터 시스템은 크게 네 가지 핵심 구성 요소로 이루어진다.

구성 요소설명
Processor (CPU)명령어를 해석하고 실행하는 중앙처리장치
Main Memory휘발성(volatile) 메모리. Real memory 또는 Primary memory라고도 부른다
System BusProcessor, Memory, I/O 모듈 간 통신을 담당하는 통로
I/O Modules보조기억장치, 통신 장비, 터미널 등 외부 장치와의 인터페이스

2. Processor Register

Processor 내부에는 다양한 용도의 Register가 존재한다.

2.1 데이터 입출력용 Register

Register역할
MAR (Memory Address Register)다음 Read(LOAD) 또는 Write(STORE)의 대상 주소를 지정
MBR (Memory Buffer Register)메모리에 쓸 데이터를 담거나, 메모리에서 읽은 데이터를 저장
I/O Address RegisterI/O 장치의 주소 지정
I/O Buffer RegisterI/O 데이터를 임시 저장

2.2 Control and Status Register

Register역할
PC (Program Counter)다음에 Fetch할 명령어의 주소를 보관
IR (Instruction Register)가장 최근에 Fetch한 명령어를 보관
PSW (Program Status Word)Condition code, Interrupt enable/disable, Supervisor/User mode 등의 상태 비트를 보관

PSW의 Condition Code는 연산 결과에 따라 하드웨어가 자동으로 설정하는 비트들이다:

  • Positive result, Negative result, Zero, Overflow 등
  • 주로 조건부 분기(if, while, for의 jump)에 활용

2.3 User-Visible Register

프로그래머가 Machine language를 통해 직접 참조할 수 있는 레지스터로, Main memory 접근을 최소화하여 성능을 최적화하는 데 사용한다.

3. 명령어 실행 (Instruction Execution)

3.1 기본 실행 사이클

명령어 실행은 두 단계로 이루어진다:

  1. Fetch: Processor가 Memory에서 명령어를 읽어온다
  2. Execute: Processor가 해당 명령어를 실행한다
  • PC가 다음에 Fetch할 명령어의 주소를 보관하고 있다
  • Fetch 후 PC는 자동으로 증가(increment)한다
  • Fetch된 명령어는 IR에 저장된다

3.2 명령어 분류 (Instruction Categories)

분류설명
Processor-MemoryProcessor > Memory 간 데이터 전송
Processor-I/OProcessor > 외부 장치 간 데이터 전송
Data Processing산술(Arithmetic) 또는 논리(Logic) 연산 수행
Control실행 순서를 변경 (분기, 점프 등)

3.3 가상 머신 예제 (Hypothetical Machine)

4. Interrupt

4.1 개념

Interrupt란 Processor의 정상적인 실행 순서를 중단시키는 메커니즘이다.

대부분의 I/O 장치는 Processor보다 훨씬 느리기 때문에, Processor가 I/O 완료를 기다리며 멈춰 있으면 비효율적이다. Interrupt는 이 문제를 해결한다.

4.2 Interrupt Handler

  • 특정 I/O 장치를 서비스하기 위한 프로그램
  • 일반적으로 OS의 일부로 존재
  • Interrupt 발생 시, Processor는 현재 작업을 중단하고 해당 Interrupt handler를 실행

4.3 Interrupt 처리 과정

  1. 현재 명령어 실행 완료
  2. Interrupt 발생 여부 확인
  3. Interrupt가 있으면:
    • 현재 프로그램의 상태(Context)를 저장
    • PC에 Interrupt handler의 시작 주소 설정
    • Interrupt handler 실행
  4. 처리 완료 후 원래 프로그램으로 복귀

Interrupt 발생 시 Memory와 Register의 변화를 단계별로 보면:


4.4 프로그램 흐름 비교

Interrupt 없는 경우:

  • Processor가 I/O 완료를 기다리는 동안 아무것도 하지 못한다 (busy waiting)

Short I/O Wait (Interrupt 사용):

  • I/O 작업 시간이 짧아서 사용자 프로그램의 명령어 사이에 I/O가 완료되는 경우

Long I/O Wait (Interrupt 사용):

  • I/O 작업 시간이 길어서 여러 명령어가 실행된 후에야 I/O가 완료되는 경우

5. Multiprogramming

Interrupt를 사용하더라도 Processor를 항상 효율적으로 활용하지는 못한다. 이를 해결하기 위한 방법이 Multiprogramming이다.

  • Processor가 실행할 프로그램을 여러 개 보유
  • 프로그램의 실행 순서는 우선순위(priority)I/O 대기 여부에 따라 결정
  • Interrupt handler 완료 후, 반드시 중단되었던 프로그램으로 돌아가지 않을 수 있다 - 다른 프로그램으로 전환(Context switching)할 수 있다

6. Memory Hierarchy

메모리는 계층 구조로 설계되며, 각 계층은 서로 다른 특성을 가진다.

계층 상위로 갈수록 (Register Cache Main Memory 방향)

  • 접근 속도(Access time) 빠름
  • 용량(Capacity) 적음
  • 비트당 비용(Cost per bit) 높음

계층 하위로 갈수록 (Disk Tape 방향)

  • 비트당 비용 낮음
  • 용량 많음
  • 접근 속도 느림
  • Processor가 접근하는 빈도 낮음

핵심 원리는 Locality of Reference(참조의 지역성)이다 - 프로그램은 최근에 접근한 데이터 근처를 다시 접근하는 경향이 있다.

위 그래프에서 보듯이, CPU 속도는 급격히 증가하는 반면 DRAM과 HDD의 속도 향상은 상대적으로 느리다. 이 속도 격차(speed gap)가 Memory hierarchy와 Cache의 필요성을 만든다.

7. Cache Memory

7.1 기본 개념

Processor의 명령어 실행 속도는 Memory의 Cycle time에 의해 제한된다. Cache는 Processor와 Main memory 사이에 위치한 작고 빠른 메모리로, Locality of reference를 활용하여 이 병목을 해결한다.

  • Main memory의 일부를 복사해서 보관
  • Processor는 먼저 Cache를 확인 (Cache hit)
  • Cache에 없으면 (Cache miss) 해당 Block을 Main memory에서 Cache로 가져온 뒤 Processor에 전달

7.2 Cache 설계 요소

설계 요소설명
Cache Size작은 Cache로도 성능에 큰 영향을 줄 수 있다
Block SizeCache > Main memory 간 데이터 교환 단위. 너무 크면 새 데이터를 가져올 확률보다 기존 데이터를 쫓아내는 손실이 커진다
Mapping FunctionBlock이 Cache의 어떤 위치에 들어갈지 결정하는 방식
Replacement AlgorithmCache가 꽉 찼을 때 어떤 Block을 교체할지 결정. 대표적으로 LRU (Least Recently Used)
Write Policy메모리 쓰기 시점을 결정

7.3 Write Policy

  • Write-through: Block이 업데이트될 때마다 Main memory에도 즉시 반영
  • Write-back: Block이 교체될 때만 Main memory에 반영
    • 장점: 메모리 쓰기 횟수를 최소화
    • 단점: Main memory가 최신 상태가 아닐 수 있음 - Cache coherence problem (Multicore/Multiprocessor 시스템에서 문제)

7.4 Non-Temporal (NT) LOAD/STORE 명령어 (Optional)

Cache를 거치지 않고 직접 메모리에 접근하는 특수 명령어이다.

사용 이유:

  • 배열 순회(Array traversal), DB 테이블 스캔, 멀티미디어 파일 접근처럼 순차적으로 접근하는 데이터의 경우
  • LRU 기반 교체 방식에서는 곧 다시 접근할 데이터를 쫓아내게 되어 오히려 성능 저하 발생
  • 대량의 순차 데이터가 Cache 전체를 밀어내는 현상: Sequential flooding
  • 이런 데이터는 Cache에 저장하지 않는 것이 유리 - Cache bypassing

8. Disk Cache

Main memory의 일부를 버퍼로 활용하여 Disk 데이터를 임시 저장하는 방식이다.

  • Disk에서 느리게 읽는 대신 소프트웨어 Cache에서 빠르게 데이터를 가져온다
  • Disk 쓰기를 모아서 한꺼번에 처리(clustering)한다
  • 이미 쓴 데이터가 다시 참조될 수 있다

9. 컴퓨터 시스템 구성 (Computer System Organization)

  • 하나 이상의 CPU와 Device controller가 공유 버스(Common bus)를 통해 공유 메모리(Shared memory)에 연결
  • CPU와 I/O 장치는 동시에(concurrently) 실행되며, 메모리 사이클을 경쟁적으로 사용

동작 방식

  • 각 Device controller는 특정 장치 유형을 담당
  • 각 Device controller에는 Local buffer가 있음
  • CPU는 Main memory > Local buffer 간 데이터를 이동
  • I/O는 장치 Controller의 Local buffer로 수행
  • I/O 완료 시 Device controller가 CPU에 Interrupt를 발생시킴

10. I/O 방식 비교

10.1 Programmed I/O

  • I/O 모듈이 직접 작업을 수행 (Processor가 아님)
  • I/O 모듈이 Status register에 결과 비트를 설정
  • Interrupt가 발생하지 않음
  • Processor가 I/O 완료될 때까지 Status를 계속 확인 - Busy waiting (매우 비효율적)

10.2 Interrupt-Driven I/O

  • I/O 모듈이 준비되면 Processor에 Interrupt 발생
  • Processor는 실행 중이던 프로그램의 Context를 저장하고 Interrupt handler 실행
  • Busy waiting 없음 - 효율적
  • 단점: 모든 데이터가 Processor를 거치므로 여전히 Processor 시간을 많이 소비

10.3 DMA (Direct Memory Access)

  • I/O 장치가 직접 Memory와 데이터를 교환 (Processor를 거치지 않음)
  • Processor가 I/O 모듈에 메모리 접근 권한을 부여
  • Block 단위로 데이터를 직접 Memory에 읽기/쓰기
  • 전송 완료 시 Interrupt를 보냄
  • Processor는 그동안 다른 작업을 계속 수행 가능
  • 세 가지 방식 중 가장 효율적

I/O 방식 요약 비교

방식Interrupt 사용CPU 관여도효율성
Programmed I/OX매우 높음 (Busy waiting)낮음
Interrupt-Driven I/OO높음 (데이터가 CPU 경유)중간
DMAO (완료 시만)낮음 (권한 부여만)높음

11. Multicore / Multiprocessor

  • 하나의 칩에 여러 CPU Core를 탑재하는 설계
  • 각 Core가 독립적으로 명령어를 실행
  • 병렬 처리를 통해 성능 향상

12. Computer Startup (부팅 과정)

  1. Bootstrap program이 Power-up 또는 Reboot 시 로드됨
  2. Bootstrap program은 ROM 또는 EPROM에 저장되어 있으며, 일반적으로 Firmware라고 부른다
  3. 시스템의 모든 구성 요소를 초기화(Initialize)
  4. OS Kernel을 메모리에 로드하고 실행을 시작