[CS] 동시성과 병렬성, 그리고 추상화의 중요성

Binsu·2021년 8월 23일
0

Computer Science

목록 보기
7/10

동시성과 병렬성

  • 동시성(concurrency) : 다수의 동시에 벌어지는 일을 갖는 시스템에 관한 일반적인 개념

  • 병렬성(parallelism) : 동시성을 사용해서 시스템을 보다 빠르게 동작하도록 하는 것으로, 컴퓨터 시스템의 다양한 수준의 추상화에서 활용

쓰레드 수준 동시성

쓰레드를 이용하면 한 개의 프로세스 내에서 실행되는 다수의 제어흐름을 가질 수도 있다.

  • 시간공유(time-sharing) : 한 개의 컴퓨터가 실행하는 프로세스를 빠르게 전환하는 방법으로, 한 명의 사용자가 다수의 태스크에 동시에 연관될 수 있게 해준다.

  • 단일 프로세서 시스템 : 실질적인 계산을 한 개의 프로세서에서 이루어지는 시스템

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

  • 하이퍼쓰레딩 : 하나의 CPU가 여러 개의 제어 흐름을 실행할 수 있게 해주는 기술

멀티프로세싱

멀티프로세싱의 이용은 시스템 성능을 두 가지 방법으로 개선할 수 있다.

  1. 다수의 태스크를 실행할 때, 동시성을 시뮬레이션할 필요를 줄여준다.
  2. 멀티프로세싱으로 한 개의 응용프로그램을 빠르게 실행할 수 있지만, 프로그램이 병렬로 효율적으로 실행할 수 잇는 멀티쓰레드의 형태로 표현되었을 때에만 가능하다.

인스트럭션 수준 병렬성

최근의 프로세서들은 훨씬 낮은 수준에서의 추상화로 여러 개의 인스트럭션을 한 번에 실행할 수 있다.
이러한 특성을 인스트럭션 수준 병렬성이라고 한다.
인스트럭션들은 시작부터 종료까지 훨씬 긴 시간이(아마도 20사이클 이상)이 필요하지만, 프로세서는 여러 가지 교묘한 기법을 이용해서 한 번에 100개의 인스트럭션까지 처리할 수 있다.

  • 슈퍼스케일러(superscalar) : 사이클당 한 개 이상의 인스트럭션을 실행할 수 있는 프로세서

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

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

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

추상화의 일례

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

    추상화로 인해 기계어 코드 프로그램은 마치 한 번에 하나의 인스트럭션을 실행하는 프로세서에서 실행되는 것처럼 동작한다. 실제 하드웨어는 훨씬 더 정교해서 여러 개의 인스트럭션을 병렬로, 그러나 항상 간단한 순차적인 모델에 의거한 방식으로 실행한다.

운영체제 측면에서의 세 가지 추상화

  • 파일(file) : 입출력 장치의 추상화

  • 프로세스(process) : 실행 중인 프로그램의 추상화

  • 가상머신(virtual-machine) : 운영체제, 프로세서, 프로그램 모두를 포함하는 컴퓨터 전체의 추상화

출처 : Computer Systems A Programmer's Perspective(3rd Edition)

0개의 댓글