동시성(concurrency) : 다수의 동시에 벌어지는 일을 갖는 시스템에 관한 일반적인 개념
병렬성(parallelism) : 동시성을 사용해서 시스템을 보다 빠르게 동작하도록 하는 것으로, 컴퓨터 시스템의 다양한 수준의 추상화에서 활용
쓰레드를 이용하면 한 개의 프로세스 내에서 실행되는 다수의 제어흐름을 가질 수도 있다.
시간공유(time-sharing) : 한 개의 컴퓨터가 실행하는 프로세스를 빠르게 전환하는 방법으로, 한 명의 사용자가 다수의 태스크에 동시에 연관될 수 있게 해준다.
단일 프로세서 시스템 : 실질적인 계산을 한 개의 프로세서에서 이루어지는 시스템
멀티프로세서 시스템 : 여러 개의 프로세서를 가지고 하나의 운영체제 커널의 제어 하에 동작하는 시스템으로, 멀티코어 프로세서와 하이퍼쓰레딩(Hyperthreading) 기법이 해당된다.
하이퍼쓰레딩 : 하나의 CPU가 여러 개의 제어 흐름을 실행할 수 있게 해주는 기술
멀티프로세싱의 이용은 시스템 성능을 두 가지 방법으로 개선할 수 있다.
- 다수의 태스크를 실행할 때, 동시성을 시뮬레이션할 필요를 줄여준다.
- 멀티프로세싱으로 한 개의 응용프로그램을 빠르게 실행할 수 있지만, 프로그램이 병렬로 효율적으로 실행할 수 잇는 멀티쓰레드의 형태로 표현되었을 때에만 가능하다.
최근의 프로세서들은 훨씬 낮은 수준에서의 추상화로 여러 개의 인스트럭션을 한 번에 실행할 수 있다.
이러한 특성을 인스트럭션 수준 병렬성이라고 한다.
인스트럭션들은 시작부터 종료까지 훨씬 긴 시간이(아마도 20사이클 이상)이 필요하지만, 프로세서는 여러 가지 교묘한 기법을 이용해서 한 번에 100개의 인스트럭션까지 처리할 수 있다.
많은 최신 프로세서들은 최하위 수준에서 싱글 인스트럭션, 다중 데이터, 즉 SIMD 병렬성이라는 모드로 한 개의 인스트럭션이 병렬로 다수의 연산을 수행할 수 있는 특수 하드웨어를 가지고 있다.
파일(file) : 입출력 장치의 추상화
프로세스(process) : 실행 중인 프로그램의 추상화
가상머신(virtual-machine) : 운영체제, 프로세서, 프로그램 모두를 포함하는 컴퓨터 전체의 추상화
출처 : Computer Systems A Programmer's Perspective(3rd Edition)