CSAPP

[CSAPP 정리] (1. A Tour of Computer Systems) Section 1.9 마지막

minkg3532 2026. 4. 20. 18:01

해당 단윈을 마무리 하면서, 컴퓨터 시스템 전반에 걸쳐 적용되는 핵심적인 주제들을 다뤄봤습니다. 시스템은 단순히 하드웨어의 집합이 아니라, 애플리케이션 프로그램을 실행하기 위해 하드웨어와 시스템 소프트웨어가 긴밀하게 협력하는 집합체라는 것을 알 수 있었습니다.

이 장을 마무리하면서 컴퓨터 시스템의 모든 측면에 걸쳐 공통적으로 중요한 몇 가지 개념을 강조하고자 합니다.

 

1. 암달의 법칙 (Amdahl's Law)

초기 컴퓨팅의 선구자인 진 암달(Gene Amdahl)이 제안한 원리로, 시스템의 특정 부분의 성능을 향상시켰을 때 전체 시스템 성능에 미치는 영향은 그 부분이 전체에서 차지하는 비중()과 속도 향상 비율()에 따라 결정된다는 법칙입니다. 이 법칙이 주는 가장 중요한 통찰은 전체 시스템의 속도를 크게 향상시키려면, 시스템 내에서 매우 큰 비중을 차지하는 부분의 성능을 개선해야만 한다는 것입니다. 특정 부품을 무한히 빠르게 만들더라도 그 부품의 사용 비중이 낮다면 전체 성능 향상은 미미합니다.
그래서 시스템 전반적인 속도를 크게 향상시키려면, 전체 시스템의 큰 비중을 두고 있는 부분의 속도를 향상 시켜야 합니다.

2. 동시성과 병렬성 (Concurrency and Parallelism)

컴퓨터 시스템의 성능을 향상시키는 두 가지 핵심 요소입니다.

 

동시성(Concurrency)은 여러 프로그램 작업이 겹치는 시간에 동시에 실행되는 일반적인 개념이며, 스레드를 사용하면 하나의 프로세스 안에서도 여러 개의 실행 흐름(control flows)을 가질 수 있습니다.

동시성은 여러 사용자가 동시에 시스템과 상호작용할 수 있게 해주거나, 단일 사용자가 여러 프로세스를 실행시켜 동시에 사용하는 것과 같이 여러 작업을 실행시킬 수 있게 해줍니다.

최근까지 대부분의 실제 연산은 하나의 프로세서가 여러 작업을 전환하며 수행하는 단일 프로세서(uniprocessor) 시스템에 의해 이뤄졌습니다.

단일 운영체제 커널의 제어 아래에 여러 개의 프로세서로 구성된 시스템을 구축하면, 이를 멀티프로세서(multiprocessor) 시스템이라고 합니다. 이러한 시스템은 최근 멀티코어 프로세서하이퍼스레딩(hyperthreading)의 등장으로 일반화되었습니다.

멀티코어 프로세서(Multi-core processors)는 하나의 집적 회로 칩(chip) 안에 여러 개의 CPU(코어라고 불림)가 통합된 형태입니다. 전형적인 멀티코어 프로세서의 구조를 보면, 하나의 칩 안에 4개의 CPU 코어가 있으며, 각 코어는 자신만의 L1과 L2 캐시를 가지고 있습니다. 이때 L1 캐시는 최근에 가져온 명령어를 저장하는 부분과 데이터를 저장하는 부분의 두 조각으로 나뉩니다. 코어들은 더 높은 레벨의 캐시(L3 등)와 메인 메모리로 가는 인터페이스를 공유합니다. 업계 전문가들은 앞으로 하나의 칩에 수십 개, 수백 개의 코어를 넣을 수 있게 될 것이라고 예측합니다.

 

 이어서, 멀티프로세싱의 사용은 두 가지 방식으로 시스템 성능을 향상시킬 수 있습니다.

  1. 동시성 시뮬레이션의 필요성 감소: 여러 작업을 수행할 때 동시성을 흉내 낼 필요를 줄여줍니다.  많은 활동을 동시에 수행하는 상황에서 CPU 코어가 여러 개이므로, 각 코어가 서로 다른 작업을 물리적으로 동시에 처리합니다.
  2. 단일 애플리케이션의 실행 속도 향상: 단일 애플리케이션 프로그램을 더 빠르게 실행할 수 있습니다. 단, 이는 해당 프로그램이 병렬로 효율적으로 실행될 수 있는 다중 스레드(multiple threads) 형태로 작성되었을 때만 가능합니다.
병렬성(Parallelism)은 동시성을 활용해 시스템을 물리적으로 더 빠르게 동작시키는 기법입니다.
병렬성은 시스템의 세 가지 추상화 수준에서 활용됩니다.
  • 스레드 수준의 동시성 (Thread-Level Concurrency)
    • 멀티코어(Multi-core) 프로세서와 하이퍼스레딩(Hyperthreading) 기술을 통해 단일 프로세스 내에서도 여러 제어 흐름(스레드)을 동시에 실행하는 방식입니다.
    • 하이퍼스레딩(Hyperthreading)은 '동시 다중 스레딩 SMT (simultaneous multi-threading)'이라고도 불리며, 단일 CPU가 여러 개의 실행 흐름을 실행할 수 있게 해주는 기술입니다. 즉, 하나의 물리적 코어를 운영체제가 두 개의 논리적 코어로 인식하게 만드는 방법이라 볼 수 있습니다. 예를 들어, 어떤 스레드가 메모리에서 데이터를 가져오길 기다리는 동안(Memory Latency), CPU내부 연산 장치는 아무 일도 안 하고 놀게 됩니다. 하이퍼스레딩은 이 '노는 시간'(스톨: Stall, 유휴 시간: idle Cycle)에 다른 스레드의 작업을 끼워 넣어서 전체 효율을 높이는 기술입니다. CPU 코어 내부에는 연산 장치(ALU), 부동 소수점 장치(FPU), 레지스터 등 다양한 부품이 있습니다. 그런데 프로그램이 실행될 때 이 모든 부품이 100% 항상 사용되는 것은 아닙니다.
  • 명령어 수준의 병렬성 (Instruction-Level Parallelism)
    •  프로세서가 파이프라이닝(Pipelining)이나 슈퍼스칼라(Superscalar) 구조를 채택하여, 클럭 사이클당 한 개 이상의 명령어를 동시에 실행하는 기법입니다
  • 데이터 수준의 병렬성 (Data-Level Parallelism)
    • SIMD(Single-Instruction, Multiple-Data) 하드웨어를 통해 하나의 명령어로 여러 데이터의 연산을 병렬로 수행하는 방식입니다 (예: 여러 부동 소수점 숫자를 한 번에 더하기)
    • 이러한 SIMD 명령어들은 주로 이미지, 소리, 비디오 데이터를 처리하는 애플리케이션의 속도를 높이기 위해 제공됩니다.

 

3. 컴퓨터 시스템에서 추상화의 중요성 (The Importance of Abstractions)

추상화는 복잡한 시스템의 구현 세부 사항을 숨기고 내부 동작 방식을 깊이 파고들 필요 없이 코드를 사용할 수 있게 해주는 간결한 함수 모델 집합(단순한 애플리케이션 프로그래밍 인터페이스(API))을 제공하는 컴퓨터 과학의 핵심 개념입니다. 컴퓨터 시스템은 다양한 수준에서 추상화를 제공합니다.
 

명령어 집합 아키텍처 (ISA): ISA는 하드웨어가 내부적으로 얼마나 복잡하게 병렬 처리를 하든 상관없이, 소프트웨어에게는 항상 '명령어가 순서대로 하나씩 실행된다'는 단순한 규칙을 보장해 주는 표준 계약서와 같습니다.

파일 (File): 디스크나 네트워크 같은 다양한 I/O 장치에 대한 추상화입니다

가상 메모리 (Virtual Memory): 프로그램의 메인 메모리와 디스크 I/O 장치에 대한 추상화입니다

프로세스 (Process): 실행 중인 프로그램, 메모리, 프로세서에 대한 포괄적인 추상화입니다. 즉 시스템 자원의 포괄적 의미의 추상화입니다.

가상 머신 (Virtual Machine): 운영체제, 프로세서, 프로그램을 모두 포함한 전체 컴퓨터 시스템에 대한 추상화입니다

이 세 가지 개념은 프로그래머가 내부 동작 방식을 이해하여 더 빠르고 신뢰성 있으며  안전한 프로그램을 작성할 수 있게 하는 중요한 토대가 됩니다.