0. 시작하기 전에
- 지금까지 컴퓨터 구조에 대해 배우면서 컴퓨터가 어떻게 동작하는지에 대해서 알아보았다.
- 컴퓨터의 동작이나 연산 과정에 대해서 배울 때, 언제나 순차적으로 그 과정을 설명했다.
- 하지만, 실제로 컴퓨터는 순차적으로 움직이지 않는다. 오히려 동시다발적으로 동작한다.
- 이것이 가능한 이유는 컴퓨터가 병렬처리를 사용하기 때문이다.
- 이번 포스팅에서는 병렬처리란 무엇인지, 병렬처리는 어떻게 구현되는지에 대해서 알아보자.
1. 병렬처리란?
- 이전 포스팅에서 파이프라인과 병렬처리에 대해 배운 적이 있다.
- 병렬처리란, 한개 또는 한개 이상의 CPU를 이용하여 여러 작업을 동시다발적으로 처리하는 시스템을 말한다.
- 이러한 병렬처리시스템은 다양한 방식으로 구현되는데, 이를 이해하기 위해 기본적으로 프로세스와 스레드를 알아야 한다.
a) 프로세스
- 프로세스는 CPU가 처리하는 작업의 단위를 의미한다.
- 어떤 프로그램 1개를 실행한다면 프로세스 1개가 실행되고 있음을 의미한다.
b) 스레드
- 프로세스를 구성하는 세부 작업의 단위를 의미한다.
- 햄버거를 만드는 작업이 프로세스라면 패티 굽기, 빵 굽기, 야채 손질하기 등의 과정이 각각의 스레드가 된다.
2. 병렬처리시스템 구현방법 - 프로세서(CPU)
a) Concurrency (동시성)
- Concurrency는 프로세서(CPU) 하나를 이용하여 여러가지 작업을 조금씩 번갈아가면서 수행하는 방식이다.
- A작업에서 B작업으로 변경하는 것을 Context Switching이라고 하는데,
- 이를 이용하여 여러가지 작업을 조금씩 번갈아가면서 수행한다.
- 이 과정이 사람이 인지하지 못할만큼 빠르게 이루어지기 때문에, 동시다발적으로 여러가지 작업이 처리되는 것처럼 보인다.
b) Parallelism (병렬성)
- Parallelism은 여러개의 코어를 가진 CPU를 이용하는 방식이다.
- CPU 내부의 각 코어마다 다른 작업이 할당되어 병렬적으로 처리되는 방식이다.
3. 병렬처리시스템 구현방법 - 프로세스와 스레드
- 프로세서(CPU)를 이용하여 병렬처리시스템을 완벽히 구현할 수 있으면 좋겠지만, 그럴 수 없다.
- 하나의 프로세스를 완료하기 위해서는 내부적으로 여러가지 작업을 처리해야하기 때문이다.
- 여기서 말하는 프로세스 내부의 여러가지 작업을 스레드라고 부른다.
- 이게 도대체 무슨 말일까? 예시를 통해 이해해보자.
ex) 브라우저
- 예를 들어, 크롬 브라우저를 사용하고 있다고 가정해보자.
- 브라우저를 통해 사용자는 음악을 들으면서 웹 서핑을 하고 동시에 무언가 다운로드 받을 수도 있다.
- 운영체제의 입장에서는 "브라우저를 실행시킨다" 는 하나의 프로세스를 처리하는 작업이다.
- 하지만, 해당 프로세스의 내부에는 음악 스트리밍, 웹 서핑, 다운로딩이라는 3가지 작업(스레드)이 존재하는 것이다.
- 이와 같이 프로세스 단위로 봤을 때에는 하나의 작업이지만, 스레드 단위로 보면 여러개의 작업을 처리해야 한다.
- 그렇다면 하나의 프로세스 내부에 존재하는 여러개의 스레드를 어떻게 처리할까?
a) 스레드 처리방법
- 동일한 프로세스 내부에 존재하는 여러개의 스레드는 프로세스 내부의 데이터(메모리)를 공유한다.
- 즉, 한 프로세스에 존재하는 스레드는 동일한 데이터에 접근이 가능하다는 것이다.
- 데이터를 공유한다는 특성으로 인해 스레드를 처리하는 과정에서 문제가 생긴다.
- 서로 다른 스레드가 동일한 데이터를 동시에 사용하므로 인해서 연산 결과에 오류가 생길 수 있다는 것이다.
- 이를 해결하기 위해서는 동기적, 비동기적 처리방식을 잘 섞어서 사용해야 된다.
a - 1) 동기적 처리방법
- 동기적 처리는 순서대로 처리한다는 것을 의미한다.
- 동일한 프로세스 내부의 서로 다른 두개의 쓰레드가 어떤 데이터를 동시 접근을 막는 프로그래밍 기법이다.
- 프로세스 내부의 어떤 공유 데이터에 접근하여 연산을 처리하는 함수가 있다면,
- 해당 메소드를 먼저 접근한 스레드의 연산 과정이 완료될 때 까지 다른 스레드는 해당 함수를 사용하지 못하고 기다려야 한다.
- 이처럼 동기적, 비동기적 처리방식을 적용한다면 스레드를 더욱 효율적으로 처리할 수 있다.
3. 병렬처리시스템 구현방식의 종류
a) 멀티 태스킹
- 하나의 프로세서(CPU)를 이용하여 여러 프로세스를 번갈아가며 조금씩 실행시키는 방식
- 운영체제의 스케줄링 방식(Context Switching을 이용하여 프로세스를 교체한다.
- Concurrency 방식을 사용한 병렬처리시스템 이다.
b) 멀티 프로세싱
- 한개 이상의 프로세서(CPU)가 협력하여 여러가지 프로그램을 동시 다발적으로 처리하는 것을 의미한다.
- 흔히 듀얼코어, 쿼드코어 라는 표현으로 명시되며, 멀티 코어 시스템이라고 부르기도 한다.
c) 멀티 스레딩
- 하나의 프로세스 내부에 다수의 스레드를 생성하여 작업을 처리하는 방식
- 동일한 프로세스 내부의 스레드 간의 데이터 공유가 가능하다.
- 데이터 공유로 인한 장단점이 있다.
'컴퓨터공학기초 개념 > 컴퓨터구조' 카테고리의 다른 글
26. 입출력 구조 - 입출력 제어 (0) | 2021.08.26 |
---|---|
25. 입출력 구조 - 시스템 BUS (2) | 2021.08.26 |
24. 컴퓨터 구조 - 캐시메모리의 동작원리 (0) | 2021.08.25 |
23. 컴퓨터 구조 - 메모리 시스템의 이해 (0) | 2021.08.25 |
22. 컴퓨터구조 - 파이프라인과 병렬처리 (0) | 2021.08.19 |
댓글