Krafton Jungle/4. CSAPP

[Computer System] ① 컴퓨터 시스템으로의 여행 (3)

munsik22 2025. 3. 31. 21:48

1.8 시스템은 다른 시스템과 네트워크를 사용하여 통신한다

네트워크란 시스템 간에 연결된 망이다. 하지만 시스템 입장에서 보면 네트워크는 또다른 입출력 장치 중에 하나다. 시스템은 네트워크를 통해 데이터를 받거나 외부 시스템에 기록하기 때문이다. 시스템의 메인메모리는 시스템 내부의 디스크 뿐만 아니라 외부 시스템의 디스크로부터 데이터를 복사하여 가져오는 것이다.

  • "hello" 스트링을 telnet 클라이언트에 입력하고 엔터키를 누른 후, 클라이언트 프로그램은 이 스트링을 telnet 서버로 보낸다.
  • telnet 서버가 네트워크에서 스트링을 입력받은 후에 원격 쉘 프로그램에 전달한다.
  • telnet 서버는 네트워크를 거쳐 출력 스트링을 telnet 클라이언트로 전달하고, 클라이언트 프로그램은 출력 스트링을 자신의 로컬 터미널에 표시한다.
  • 클라이언트와 서버 간의 데이터 교환은 모든 네트워크 응용의 전형적인 사례이다.

1.9 중요한 주제들

1.9.1 Amdahl의 법칙

Amdahl의 법칙의 핵심은 전체 시스템을 상당히 빠르게 하기 위해서는 전체 시스템의 매우 큰 부분의 성능을 개선해야 한다는 것이다.

  • k는 성능 개선 배수
  • α는 전체 시간 중 차지하는 비율
  • 초기에는 전체 시간의 60%(α=0.6)만 소모한 이 시스템의 일부분이 3배(k=3) 속도가 빨라진다고 하면, 속도향상은 1/[0.4 + 0.6/3] = 1.67을 얻는다.
  • 비록 시스템의 주요 부분에 대해 실질적인 개선을 했지만, 총 속도향상은 매우 적다.

1.9.2 동시성과 병렬성

동시성은 여러 작업을 처리 시 주체가 작업들을 바꿔가면서 동시에 처리하는 방법,
병렬성은 여러 작업 처리 시 처리하는 주체를 늘리는 방법을 말한다.

  • 동시성(concurrency) : 다수의 동시에 벌어지는 일을 가지는 시스템에 관한 일반적인 개념을 말할 때 사용
  • 병렬성(parallelism) : 동시성을 사용해서 시스템을 보다 빠르게 동작하도록 하는 것을 말할 때 사용

쓰레드 수준 동시성

프로그램이 여러 작업을 동시에 처리하는 것처럼 보이게 하여, 한 번에 여러 작업을 진행할 수 있도록 하는 방법

  • 단일 프로세서 시스템 : 한 개의 프로세서에 의해 다수의 태스크들이 전환되며 실행되는 시스템
  • 멀티 프로세서 시스템 : 여러 개의 프로세서들이 하나의 OS 커널의 제어 하에 동작하는 시스템
  • 멀티쓰레딩 = 하이퍼쓰레딩 : 하나의 CPU가 여러 개의 제어 흐름을 실행할 수 있게 해주는 기술
    • PC나 레지스터 파일 같은 여러 개의 동일한 CPU 하드웨어를 가지고 있는 반면, 부동소수 연산기와 같은 다른 부분들은 한 개의 하드웨어만 가지고 있는 구조와 관련됨
    • 기존의 프로세스가 쓰레드 간의 전환을 하는데 약 2만 CLK 사이클이 요구되는 반면, 하이퍼쓰레드 프로세서는 매 사이클마다 실행할 쓰레드를 결정한다.
  • 멀티프로세싱의 이용은 시스템 성능을 개선할 수 있다.
    1. 다수의 태스크를 실행할 때, 동시성을 시뮬레이션할 필요를 줄여준다.
    2. 멀티프로세싱으로 한 개의 응용프로그램을 빠르게 실행할 수 있지만, 프로그램이 병렬로 효율적으로 실행할 수 있는 멀티쓰레드의 형태로 표현되었을 때에만 가능하다.
구분 멀티쓰레딩 하이퍼쓰레딩
정의 여러 쓰레드를 동시에 실행하는 기술 하나의 물리적 코어에서 두 개의 논리적 코어 생성
레벨 소프트웨어 하드웨어
성능 향상 CPU 코어 수에 따라 향상 자원 활용 최적화로 성능 향상
독립성 각 쓰레드는 독립적으로 실행 논리적 코어 간 자원 공유
사용 예 멀티태스킹 애플리케이션 인텔 CPU에서의 멀티코어 성능

인스트럭션 수준 병렬성

훨씬 낮은 수준에서의 추상화로 여러 개의 인스트럭션을 한 번에 실행할 수 있는 특성

  • 하나의 프로세서 내에서 여러 인스트럭션들을 동시에 실행하여, 명령어 처리 속도를 높이는 기술
  • 파이프라이닝 : 하나의 인스트럭션을 실행하기 위해 요구되는 일들을 여러 단계로 나누고 프로세서 HW가 일련의 단계로 구성되어 이들 단계를 하나씩 각각 수행함
  • 슈퍼스케일러(super-scalar) : 사이클 당 한 개 이상의 인스트럭션을 실행할 수 있는 프로세서

싱글 인스트럭션, 다중 데이터 병렬성(SIMD)

많은 최신 프로세서들은 SIMD 병렬성이라는 모드로 한 개의 인스트럭션이 병렬로 다수의 연산을 수행할 수 있는 특수한 HW를 가지고 있다.

  • 하나의 명령어로 여러 데이터에 동일한 연산을 병렬적으로 수행하여, 데이터 처리 효율성을 극대화하는 방법

1.9.3 컴퓨터 시스템에서 추상화의 중요성

추상화의 사용은 전산학에서 가장 중요한 개념으로, 프로그래머가 그 내부동작을 고려하지 않으면서 코드를 사용할 수 있도록 해준다.

  • 인스트럭션 집합 구조는 실제 프로세서 HW의 추상화를 제공한다.
    • 이러한 추상화로 인해 기계어 코드 프로그램은 마치 한 번에 하나의 인스트럭션을 실행하는 프로세서에서 실행되는 것처럼 동작한다.
    • 실제 HW는 훨씬 더 정교해서 여러 개의 인스트럭션을 병렬로, 그러나 항상 간단한 순차적인 모델에 의거한 방식으로 실행한다.
    • 동일한 실행모델을 유지하기 때문에 다른 프로세서에서 구현될 때도 다양한 범위의 비용과 성능을 나타내지만 동일한 기계어 코드를 실행할 수 있게 된다.
  • OS 측면에서의 추상화
    • 파일 → 입출력 장치의 추상화 : 파일 시스템은 데이터를 저장하는 물리적인 위치(HDD 등)를 사용자로부터 숨기고, 대신 파일 이름이나 경로로 데이터에 접근할 수 있게 하는 것
    • 가상 메모리 → 메인 메모리와 디스크의 추상화 : 컴퓨터는 메인 메모리에 자주 사용하는 데이터를 보관하고, 덜 자주 사용하는 데이터는 디스크에 보관하며 필요할 때, 데이터를 메인 메모리와 디스크 사이에서 옮기는 것
    • 프로세스 → 프로세서, 메인메모리, 입출력 장치의 추상화 : OS는 컴퓨터의 프로세서, 메모리, 입출력 장치와 같은 자원을 관리하며, 이러한 자원을 필요로 하는 다양한 프로세스에 효율적으로 배분하여 컴퓨터가 효과적으로 작동하도록 함
    • 가상머신 : 운영체제, 프로세서, 프로그램 모두를 포함하는 컴퓨터 전체의 추상화를 의미함
OS의 추상화는 전공 시험에도 나오는 개념이므로 잘 숙지해 놓자.