본문 바로가기
컴퓨터공학기초 개념/컴퓨터구조

27. 컴퓨터 구조 - 병렬처리시스템

by devraphy 2021. 9. 1.

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) 멀티 스레딩 

- 하나의 프로세스 내부에 다수의 스레드를 생성하여 작업을 처리하는 방식

- 동일한 프로세스 내부의 스레드 간의 데이터 공유가 가능하다. 

- 데이터 공유로 인한 장단점이 있다.  

댓글