[CS] 컴퓨터 시스템으로의 여행 ch. 5

참새·2024년 5월 4일
0

컴퓨터 시스템

목록 보기
5/5

👨🏻‍💻  개요

이번 시간은 컴퓨터 시스템으로의 여행 다섯 번째 시간으로 암달의 법칙 및 동시성과 병렬성에 대해 알아보고 컴퓨터 시스템으로의 여행을 마무리하는 시간을 갖고자 한다.


📌  암달의 법칙

계산학 분야에서 초창기 개척자인 진 암달(Gene Amdahl)이 한 시스템의 일부 성능 개선의 효율성에 대해 간단하지만 직관적인 관찰중 발견한 법칙으로 핵심은 다음과 같다.

우리가 어떤 시스템의 한 부분의 성능을 개선할 때, 전체 시스템 성능에 대한 효과는 그 부분이 얼마나 중요한지와 이 부분이 얼마나 빨라졌는가에 관계된다.

어떤 응용을 실행하는데 걸리는 시간이 ToldT_{old}라고 하자. 이 시스템의 어떤 부분이 이 시간의 비율 만큼만을 소모하고, 이것의 성능을 kk배 개선하려 한다면, 이 컴포넌트는 본래 Told⍺T_{old} 시간을 요구하였지만, 이제는 (Told)/k(⍺T_{old})/k 시간을 요구한다.

Tnew=(1)Told+ToldT_{new} = (1 - ⍺)T_{old} + ⍺T_{old}
=Told[(1)+/k]= T_{old}[(1 - ⍺) + ⍺/k]

이것으로 개선된 속도 S=Told/TnewS = T_{old}/T_{new}를 다음과 같이 구한다.

S=1(1)+/kS = \frac 1 {(1 - ⍺) + ⍺/k}

초기에는 전체 시간의 60%만 소모한 이 시스템의 일부분이 3배 속다가 빨라진다고 생각해 본다면, 속도향상은 1/[0.4 + 0.6 / 3] = 1.67을 얻는다.

따라서, 시스템의 주요 부분에 대해 실질적인 개선을 하였지만, 총 속도향상은 매우 적었으며 전체 시스템을 상당히 빠르게 하기 위해서는 전체 시스템의 매우 큰 부분의 성능을 개선해야 한다.


📌  동시성과 병렬성

동시성(Concurrency)

  • 여러 작업이 동시에 진행되는 것처럼 보이는 것을 의미한다.
  • 실제로 동시에 실행되는 것이 아닐 수 있지만, 작업들이 서로 번갈아가면서 실행되는 것처럼 보여 동시성이라고 한다.
  • 주로 프로세스나 스레드 간의 작업 조율이나 비동기적 프로그래밍에서 사용된다.

병렬성(Parallelism)

  • 실제로 여러 작업이 동시에 실행되는 것을 의미한다.
  • 하나 이상의 작업이 동시에 여러 처리 장치에서 실행되어 처리 속도가 향상되는 것을 말하며, 주로 멀티코어 프로세서 시스템에서 활용되고 작업을 더 빠르게 처리하기 위해 사용된다.
  • 컴퓨터 시스템의 다양한 수준의 추상화에서 활용할 수 있다.

위와같이 동시성과 병렬성의 사전적 의미를 알아봤으며, 시스템 계층 구조의 높은 계층에서 낮은 계층으로 이동하면서 동시성과 병렬성에 대한 세 개의 수준을 알아보고자 한다.

쓰레드 수준 동시성

프로세스 추상화 개념을 이용하면 다수의 프로그램이 동시에 실횡되는 시스템을 생각해 볼 수 있으며, 이것은 결국 동시성으로 이어지게 되며, 쓰레드를 이용하면 한 개의 프로세스 내에서 실행되는 다수의 제어흐름을 가질 수 있다.

시간공유(time-sharing) 기법의 출현으로 한 개의 컴퓨터가 실행하는 프로세스를 빠르게 전환하는 방법을 사용하여, 다수의 사용자들이 시스템과 동시에 교신할 수 있게 하거나, 한 명의 사용자가 다수의 태스크에 동시에 연관될 수 있게 해 준다.

실질적인 계산을 한 개의 프로세서에서 이루어지는 시스템 구성을 단일 프로세서 시스템 이라고 하며, 어떤 시스템이여러 개의 프로세서를 가지고 하나의 운영체제 커널의 제어 하에 동작하는 경우를 멀티프로세서 시스템 이라고 한다.

멀티 프로세서 시스템은 여러 개의 프로세서를 가지고 하나의 운영체제 커널의 제어 하에 동작하는 시스템으로, 멀티코어 프로세서하이퍼쓰레딩(Hyperthreading) 기법이 해당된다.

멀티코어 프로세서

하나의 프로세서 칩 안에 여러 개의 CPU(코어)가 포함된 프로세서이다.

위 그림은 인텔 i7 프로세서 코어의 구성으로, 이 프로세서 칩은 네 개의 CPU 코어를 가지고 있으며, 각각 별도의 L1, L2 캐시를 가지고 코어는 메인 메모리 인터페이스뿐만 아니라 상위 수준 캐시를 공유한다.

하이퍼쓰레딩

멀티쓰레딩이라고도 하며 하나의 CPU가 여러 개의 제어 흐름을 실행할 수 있게 해주는 기술이다.
기존의 프로세서가 쓰레드들 간의 전환을 하는 데 약 2만 클럭 사이클이 요구되는 반면, 하이퍼쓰레드 프로세서에서는 매 사이클마다 실행할 쓰레드를 결정한다.

멀티 프로세싱은 시스템 성능을 두 가지 방법으로 개선가능하다.

  1. 다수의 태스크를 실행할 때, 동시성을 시뮬레이션할 필요를 줄여준다.

  2. 멀티프로세싱으로 한 개의 응용프로그램을 빠르게 실행할 수 있지만, 프로그램이 병렬로 효율적으로 실행할 수 있는 멀티쓰레드의 형태로 표현되었을 때에만 가능하다.

인스트럭션 수준 병렬성

최근의 프로세서들은 훨씬 낮은 수준에서의 추상화로 여러 개의 인스트럭션을 한 번에 실행할 수 있는데, 이러한 특성을 인스트럭션 수준 병렬성이라고 한다.

인스트럭션들은 시작부터 종료까지 훨씬 긴 시간(20사이클 이상)이 필요하지만, 프로세서는 여러 가지 교묘한 기법을 이용해서 한 번에 100개의 인스트럭션까지 처리할 수 있다.

사이클당 한 개 이상의 인스트럭션을 실행할 수 있는 프로세서를 슈퍼스케일러(super-scalar) 라고 하는데, 대부분의 최근 프로세서들은 슈퍼스케일러 동작을 지원한다.

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

많은 최신 프로세서들은 최하위 수준에서 싱글 인스트럭션, 다중 데이터 방식 즉, SIMD 병렬성이라는 모드로 한 개의 인스트럭션이 병렬로 다수의 연산을 수행할 수 있는 특수 하드웨어를 가지고 있다.

SIMD 인스트럭션들은 대개 영상, 소리, 동영상 데이터 처리를 위한 응용프로그램의 속도를 개선하기 위해 제공된다.

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

추상화의 사용은 전산학에서 가장 중요한 개념이이다.

함수들을 간단한 응용프로그램 인터페이스 API로 정형화하는 것으로, 프로그래머가 그 내부의 동작을 고려하지 않으면서 코드를 사용할 수 있도록 해준다. 자바의 경우는 클래스 선언, C에서는 함수 프로토타입이 있다.

프로세서 측면에서 인스트럭션 집합 구조는 실제 프로세서 하드웨어의 추상화를 제공하는데, 이러한 추상화로 인하여 기계어 코드 프로그램은 마치 한 번에 하나의 인스트럭션을 실행하는 프로세서에서 실행되는 것처럼 동작한다.

운영체제 측면에서는 입출력 장치의 추상화인 파일, 프로그램 메모리의 추상화인 가상 메모리, 실행 중인 프로그램의 추상화인 프로세스 이들 추상화에 추가로 한 가지를 더하면, 운영체제, CPU, 프로그램 모두를 포함하는 컴퓨터 전체의 추상화를 제공하는 가상머신 이 있다.


📌  요약

  • 컴퓨터 시스템은 응용 프로그램을 실행하기 위해 함께 동작하는 하드웨어시스템 소프트웨어 로 구성된다.

  • 컴퓨터 내의 정보는 상황에 따라 다르게 해석되는 비트들의 그룹으로 표시.

  • 프로그램은 아스키 문자로 시작해서 컴파일러와 링커에 의해 바이너리 실행파일들로 번역 되어 다른 프로그램들에 의해 다른 형태로 번역 된다.

  • CPU는 메인 메모리에 저장된 바이너리 인스트럭션을 읽고 해석 한다.
    컴퓨터가 대부분의 시간을 각 컴포넌트들 간에서 데이터를 복사하는데 쓰고 있으므로 메모리 계층구조를 이용하여 CPU 레지스터가 최상단, 아래로 캐시메모리, 메인 메모리, 디스크가 차례로 위치한다.
    상위레벨의 저장장치들은 하위레벨의 장치들을 위한 캐시 역할을 수행 한다.

  • 운영체제 커널은 응용프로그램과 하드웨어 사이에서 중간자 역할 을 수행하며 세 가지 근본적인 추상화 를 제공.

    • 파일 : 입출력 장치의 추상화
    • 가상 메모리 : 메인 메모리 + 디스크의 추상화
    • 프로세스 : CPU + 메인 메모리 + 입출력 장치의 추상화
  • 네트워크는 컴퓨터 시스템이 서로 통신할 수 있는 방법을 제공하며, 특정 시스템 관점에서 볼 때, 네트워크는 단지 또 하나의 입출력 장치이다.


🤔  마치며

이번 시간을 통해 전체 시스템을 상당히 빠르게 하기 위해서는 전체 시스템의 매우 큰 부분의 성능을 개선해야 한다는 것을 알 수 있었다.

또한, 네트워크는 일반적인 입출력 장치로 볼 수 있으며, 이를 통해 다른 시스템과의 데이터 교환이 가능하다는 것을 알 수 있었다.

자주 복습하여 잊지 안도록 노력하고, 컴퓨터 시스템으로의 여행은 마지막 이지만 자세하게 다루지 못했던 세부적인 사항을 좀 더 공부해 보려고 한다.


📑  참고

Bryant O'Hallaron 컴퓨터 시스템(제 3판)

profile
응애 나 아기 개발자

0개의 댓글

관련 채용 정보