1.9 중요한 주제들

시스템은 단순한 하드웨어 그 이상이다.
하드웨어와 소프트웨어가 서로 얽혀, "프로그램을 실행시킨다"는 궁극적인 목표를 달성한다.

아래에서는 몇가지 중요한 컨셉을 소개한다. 중요성은 책의 다른 부분에서 더 소개한다.

1.9.1 Amdahl's Law

시스템의 특정 부분의 발달이 전체 시스템에 끼치는 영향은
해당 시스템을 차지하는 비율과 성능 향샹 폭이다.

: 기존에 특정 애플리케이션을 구동하는데 필요한 시간
: 필요한 시간에서 해당 부분의 발달이 차지하는 비율
: 해당 부분의 성능 향상 폭(비율)
즉, 해당 부분은 기존에 만큼의 시간이 필요했으며, 성능 향상으로 이제는 의 시간이 필요하다.

따라서 성능 향상 이후 걸리는 시간은
따라서, 성능 향상폭
이다. 즉, 성능 향상과 차지하는 비율에 비례한다.

성능 향상폭은 로 표현되며,
실질적인 성능 향상이 존재할 경우, 을 넘는다.
간단하게, 로 적으며, 이는 "2.2배의 향상폭"을 의미한다.

재미있는 특이 케이스로는 가 있다.
이 때, 가 무시되므로,
가 된다.

1.9.2 동시성과 병렬성(Concurrency and Parallelism)

: 여러 행위를 동시에 진행하는 시스템의 일반적인 개념
: 를 사용하여 시스템을 빠르게 하는 것
은 컴퓨터 시스템의 여러 추상화 단계에서 악용될 수 있다.
(여러 오작동을 일으킬 소지가 있다는 의미같다)

아래에서는 3가지 단계로 살펴보며, 시스템 계층 상 높은 것에서 낮은 것순으로 살펴본다.


스레드를 통해, 하나의 단일 프로세스에서 여러 개의 를 가질 수 있다.
이러한 기능은 단일 컴퓨터가 빠르게 여러개의 컨택스트를 오가며 실행하는 것으로 되면서 가능해졌다.
이는 여러 유저가 하나의 웹 서버에 접근하고, 여러 작업을 동시에 하는 등 큰 역할을 한다.

최근까지는 실제로는 단일 프로세서로 구성되어 라고 칭했다.
여러개의 프로세서를 단일 OS 커널로 다루게 되면서, 현대에는 이 되었다.

멀티 코어 시스템이 발달하면서, 같은 용어도 생겼다.

멀티 코어 프로세서는 여러개의 CPU(cores 라고 지칭되는) 이 하나의 단일 칩에 포함된다.
각 코어별로 각자만의 별도의 cache 가 존재하기도 하며, 코어간에 공유하는 cache도 존재한다.

이라고도 불린다.
이는 단일 CPU가 여러 개의 를 조절하는 기술을 의미한다.

멀티프로세싱은 2가지 측면에서 성능 향상을 이뤄냈다.

  • 동시성을 할 필요를 감소시켰다.
  • 단일 프로그램 또한 빠르게 실행 가능하다.
    단, 이는 해당 프로그램이 멀티프로세싱이 원할하게 이루어질 수 있도록 표현되어야 한다.


현대 프로세서는 여러개의 을 실행 할 수 있고, 이를 이라고 부른다.
최근의 프로세서는 한 클럭에 2~4개의 을 실행시킬 수 있다.

프로세서는 이라는 기술을 통해, 훨씬 많은 명령어를 한 클럭에서 실행시킬 수 있다.
하나의 명령어() 을 서로 다른 단계() 으로 나누어,
잘 정렬한 후, 병렬적으로 실행한다.

하나의 사이클() 에 하나 이상의 명령어() 을 수행하는 프로세서를 라고 한다.


현대 프로세서는 특별한 하드웨어가 존재한다.
이 하드웨어는 단일 명령어() 가 여러개의 연산() 을 병렬적으로 처리하게 해준다.
예를 들어, 8 쌍의 float 더하기 연산을 병렬적으로 한번에 처리한다.

이미지, 소리, 영상 등의 처리에서 최적화에 사용된다.

일부 컴파일러는 자동적으로 해당 최적화를 시도하지만,
더 좋은 방법은 특별한 타입으로 작성하는 것이다. (단, 해당 컴파일러가 지원할 때)

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

추상화는 컴퓨터 과학 전반에서 중요한 역할을 한다.

API(Application Program Interface) 는 좋은 예시 중 하나이다.
API 는 프로그래머가 내부 구현을 모르는 채로, 해당 코드를 사용할 수 있도록 해준다.

각 언어는 다양한 형태와 레벨의 추상화를 지원한다.
자바의 경우 class 가 있으며, C언어에서는 함수 프로토타입이 있다.

PARA/Project/CS_APP_organize/chapter1/1.7-OS_manage_Hardware
에서 이미 다양하면서 중요한 추상화의 예시를 살펴보았다.
ISA() 는 실제 프로세서(하드웨어)의 동작을 코드(소프트웨어)로 추상화한 좋은 예시이다.

ISA 를 이용한 코드는 실제 프로세서와 무관하게 실행가능하며,
구현된 프로세서에 따라 다른 비용과 성능을 낼 수 있다.

OS에서 3가지의 추상화를 살펴보았다.

  • : I/O 장치의 추상화
  • : 프로그램 메모리의 추상화
  • : 실행중인 프로그램의 추상화

그리고, 여기에 한가지를 추가해서
이 있다.

는 하나의 컴퓨터 시스템을 추상화한다.
즉, OS, 프로세서, 프로그램 모두를 아우른다.

VM은 여러 OS(window, mac OS, Linux) 에서 똑같이 돌아갈 수 있도록 설계된다.