컴퓨터 시스템 구조: CPU·메모리·운영체제가 맞물리는 방식

컴퓨터 시스템 구조에서 CPU, 메모리 계층, 입출력, 시스템 버스와 운영체제가 협력해 계산 환경을 구성하는 원리를 정리한다.

2026-08-14 · 최초 발행 2026-01-02

하드웨어와 소프트웨어가 만나는 계산 환경

컴퓨터는 CPU, 메모리, 입출력 장치만 모아 둔 집합이 아니다. 각 장치는 시스템 버스로 연결되고, 운영체제는 자원을 관리하면서 응용 프로그램에 추상화된 인터페이스를 제공한다. 현대 시스템은 Von Neumann 아키텍처를 바탕으로 하면서 캐시 메모리, 파이프라이닝, 멀티코어 같은 기법을 결합해 성능을 높인다.

하드웨어 계층은 연산, 저장, 장치 제어, 통신 경로로 나뉜다. CPU에는 명령어를 해석하고 실행을 제어하는 제어장치, 산술·논리 연산을 담당하는 ALU, 고속 임시 저장 공간인 레지스터가 있다. CPU와 주기억장치 사이에는 캐시 메모리가 놓이며, 메모리 시스템은 RAM, HDD·SSD 같은 보조기억장치, CPU 내부 레지스터까지 포함한다.

입출력 시스템은 키보드·마우스·스캐너 같은 입력장치와 모니터·프린터·스피커 같은 출력장치, 그리고 장치 제어와 데이터 전송을 맡는 입출력 컨트롤러로 구성된다. DMA는 CPU가 직접 개입하지 않고 메모리에 접근할 수 있게 한다. 데이터 버스는 데이터 전송 경로가 되고, 주소 버스는 메모리 주소를 지정하며, 제어 버스는 제어 신호를 전달한다.

시스템 버스하드웨어 계층CPU(제어장치+ALU+레지스터)캐시 메모리(L1/L2/L3)주기억장치(RAM)입출력장치보조기억장치(HDD/SSD)데이터 버스주소 버스제어 버스

소프트웨어 계층에는 운영체제, 장치 드라이버, 컴파일러, 시스템 유틸리티가 속한다. 사용자 애플리케이션, 데이터베이스 관리 시스템, 웹 브라우저·오피스 프로그램, 게임·멀티미디어 소프트웨어는 이 기반 위에서 실행된다. 시스템 콜은 프로그램이 OS 서비스를 요청하는 통로이며, API는 프로그램 사이의 인터페이스가 된다. GUI와 CLI는 사용자와 시스템을 연결한다.

CPU는 명령어를 해석하고 연산 경로를 제어한다

제어장치는 메모리에서 명령어를 가져오는 Fetch, 명령어를 분석하는 Decode, 실행을 관리하는 Execute Control 과정에 관여한다. 프로그램 카운터(PC)는 다음 명령어의 주소를 관리한다. 이 과정에서 제어장치는 ALU, 메모리 읽기·쓰기, 입출력, 버스에 필요한 제어 신호를 만든다.

ALU는 덧셈·뺄셈·곱셈·나눗셈, 증가·감소, 부호 처리를 수행한다. AND, OR, NOT, XOR와 비트 시프트·회전도 ALU의 논리 연산 범위에 속한다. 크기 비교와 같음·다름 판별은 조건 플래그 설정으로 이어진다.

레지스터는 데이터와 연산 결과를 임시로 저장하고 주소 계산에 쓰인다. 특수 레지스터는 명령어 처리 상태를 유지한다. PC는 다음 명령어 주소를, IR은 현재 명령어를, MAR은 메모리 주소를, MBR은 메모리 데이터를 담는다. 상태 레지스터는 플래그를 보관한다.

CPU 내부레지스터 세트PC제어장치ALU레지스터IRMARMBR범용레지스터

메모리 계층은 속도와 용량의 간극을 다룬다

레지스터는 최고속·최소 용량·최고가이고, 캐시는 고속·소용량·고가다. 주기억장치는 중속·중용량·중가이며, 보조기억장치는 저속·대용량·저가에 해당한다. 이 차이를 계층으로 구성하면 자주 사용하는 데이터를 고속 메모리에 배치하고, 메모리 지역성(Locality)을 활용해 전체 성능과 비용 효율성을 함께 다룰 수 있다.

캐시도 계층을 이룬다. L1 캐시는 CPU 코어 내부에 위치하며 32-64KB, 1-2 사이클의 특성을 가진다. L2 캐시는 CPU 칩 내부에서 256KB-1MB, 3-10 사이클로 동작한다. 멀티코어가 공유하는 L3 캐시는 4-32MB, 10-20 사이클이다.

데이터를 캐시에 배치하는 방식은 직접 매핑, 연관 매핑, 집합 연관 매핑으로 나뉜다. 직접 매핑은 고정 위치에 배치하고, 연관 매핑은 임의 위치를 사용하며, 집합 연관 매핑은 그 사이의 절충안이다. 교체 정책으로는 가장 오래 사용하지 않은 항목을 대상으로 하는 LRU, 선입선출 방식의 FIFO, 무작위로 고르는 Random이 있다.

가상 메모리는 논리 주소와 물리 주소를 분리해 프로세스별 독립 주소 공간을 제공하고, 메모리 보호와 공유를 지원한다. 페이징(Paging)이나 세그멘테이션(Segmentation)을 사용하며, 페이지 테이블은 가상 주소를 물리 주소로 변환한다. 이때 MMU(Memory Management Unit)가 활용되고, TLB(Translation Lookaside Buffer)는 빠른 주소 변환을 맡는다. 페이지 교체에는 LRU, FIFO, NUR(Not Used Recently)이 쓰이며 페이지 폴트 최소화와 스래싱(Thrashing) 방지가 과제가 된다.

입출력 요청을 처리하는 경로

프로그램 제어 입출력(Programmed I/O)에서는 CPU가 입출력을 직접 제어하고, 폴링(Polling)으로 상태를 확인한다. 구현은 단순하지만 CPU 효율성은 낮다.

인터럽트 기반 입출력은 완료 시점에 CPU로 인터럽트를 발생시킨다. CPU는 다른 작업을 수행할 수 있고, 처리는 인터럽트 핸들러가 맡는다. DMA(Direct Memory Access)는 CPU 개입 없이 메모리와 장치 사이에서 직접 전송하며, DMA 컨트롤러가 전송을 관리한다. CPU 부담을 최소화할 수 있어 대용량 데이터 전송에 적합하다.

"입출력 장치""메모리""DMA 컨트롤러""CPU""입출력 장치""메모리""DMA 컨트롤러""CPU""CPU는 다른 작업 수행""DMA 전송 요청(주소, 크기)""데이터 읽기 요청""데이터 전송""메모리에 직접 쓰기""전송 완료 인터럽트""인터럽트 처리"

입출력 컨트롤러는 장치별 전용 제어, 데이터 버퍼링, 에러 검출 및 수정, 프로토콜 변환을 담당한다. 장치 드라이버는 OS와 하드웨어 사이의 인터페이스로서 장치별 특성을 처리하고 표준 API와 플러그 앤 플레이를 지원한다.

버스와 운영체제가 자원 사용을 조정한다

데이터 버스는 양방향 전송을 담당하며 비트 폭은 32비트, 64비트가 될 수 있고 전송 속도에 영향을 준다. 주소 버스는 CPU에서 메모리·장치로 향하는 단방향 경로다. 주소 공간 크기를 결정하며, 32비트는 4GB, 64비트는 16EB의 예로 설명할 수 있다. 제어 버스는 읽기·쓰기 신호, 인터럽트 요청, 버스 중재 신호, 클럭 신호를 전달한다.

여러 장치가 버스를 사용하려면 중재가 필요하다. 집중식 중재에서는 버스 컨트롤러가 이를 관리하고, 분산식 중재에서는 장치가 협상한다. 우선순위 기반 할당도 가능하다. 버스 프로토콜은 클럭에 맞추는 동기식 방식과 핸드셰이크를 사용하는 비동기식 방식으로 나뉘며, 데이터 전송 타이밍을 제어한다.

운영체제는 프로세스 생성·종료·스케줄링, 컨텍스트 스위칭, 프로세스 간 통신(IPC), 동기화와 교착 상태 처리를 관리한다. 메모리 할당과 회수, 가상 메모리, 페이지 교체, 메모리 보호도 운영체제의 역할이다. 파일 시스템에서는 파일 생성·삭제·읽기·쓰기, 디렉터리 구조, 디스크 공간 할당, 파일 접근 권한을 다룬다. 장치 드라이버 인터페이스, 버퍼링과 스풀링, 입출력 스케줄링, 인터럽트 처리 역시 운영체제가 조정한다.

이 관리 계층은 하드웨어 복잡성을 숨기고 표준 인터페이스를 제공해 이식성을 높인다. 시스템 콜은 사용자 프로그램이 OS 서비스를 요청하며 커널 모드와 사용자 모드를 전환하는 경로이고, 보안 및 보호 메커니즘과도 맞물린다.

처리량을 높이는 실행 기법

명령어 파이프라인은 Fetch, Decode, Execute, Memory, Write-back 단계를 중첩해 처리량(Throughput)을 높인다. 다만 자원 경쟁에서 생기는 구조적 해저드, 데이터 의존성에 따른 데이터 해저드, 분기 명령어의 제어 해저드를 관리해야 한다. 포워딩과 지연 슬롯 등이 완화 수단이 된다.

멀티코어 프로세서는 여러 코어를 동시에 실행하고 공유 캐시와 메모리를 사용하므로 병렬 프로그래밍이 필요하다. 슈퍼스칼라 구조는 사이클당 다수 명령어를 실행하며 명령어 수준 병렬성(ILP)과 비순차 실행(Out-of-Order Execution)을 활용한다. SIMD(Single Instruction Multiple Data)는 단일 명령어로 다중 데이터를 처리하며 벡터 연산과 멀티미디어 처리에 쓰이고, SSE와 AVX 등이 확장 명령어 세트에 속한다.

분기 예측은 정적 방식과 동적 방식으로 나뉜다. 정적 분기 예측은 컴파일 시점의 예측과 분기 방향 힌트를 사용한다. 동적 분기 예측은 실행 시점에 분기 이력 테이블(Branch History Table)을 활용하며, 투기적 실행(Speculative Execution)과 연결된다.

성능 향상 기술파이프라이닝병렬 처리분기 예측명령어 파이프라인처리량 증가멀티코어슈퍼스칼라SIMD동적 예측투기적 실행시스템 성능향상

컴퓨터 시스템 구조를 이해한다는 것은 개별 부품의 기능을 외우는 일보다, 계층과 경계가 어떻게 협력하는지 파악하는 일에 가깝다. CPU·메모리·입출력 장치는 버스로 연결되고, 운영체제는 그 자원을 관리해 응용 프로그램이 사용할 계산 환경을 만든다. 캐시와 가상 메모리, DMA와 인터럽트, 파이프라이닝·멀티코어·분기 예측은 각각 이 구조의 성능과 효율을 높이는 역할을 맡는다.

컴퓨터시스템구조CPU메모리 계층운영체제시스템 버스