CS : 병렬성과 비동기성

2022. 2. 21. 21:21CS

반응형

병렬성과 비동기성 : 컴퓨터는 어떻게 한 번에 많은 일을 하는가 

원래는 작업을 수행할 수 있는 컴퓨터(또는 CPU)가 하나뿐이어서 그냥 여러 작업을 동시에 수행할 수 있는 척만 했다. 하지만 이제는 멀티코어 프로세서가 대세이고, 컴퓨터는 실제로 한 번에 둘 이상의 일을 하고 있다. 

오랜 시간 동안 더 높은 성능을 얻기 위해 단일 코어 프로세서를 서로 연결하곤 했다. 단지 요즘은 여러 프로세서를 연결하기가 훨씬 더 쉽고 멀티프로세서를(멀티코어 포함) 더 일반적으로 사용한다는 것뿐이다.

 

때로 처리 순서가 중요한 경우가 있다. 예를 들어 배우자와 함께 공동 계좌를 쓰고 있고, 잔고가 100만원이라고 하자. 배우자가 ATM에 가서 75만원을 인출하고 있는데, 같은 시점에 내가 은행 창구에서 50만원을 찾으려고 한다. 

이런 경우를 경합 조건(race condition) 이라고 부른다. 은행 소프트웨어는 공동 계좌를 잠가서(lock) 둘 중 한 사람에게만 돈을 지급해야 초과 인출(overdraw)을 막을 수 있다. 이말은 일부 연산에 대해서는 근본적으로 멀티태스킹을 막아야 한다는 뜻이다. 하지만 멀티태스킹의 이점을 잃지 않고 경합 조건을 해결하고 락을 사용하기는 어렵다.  

 

1. 경합 조건이란 무엇인가

경합 조건은 2개(또는 그 이상)의 프로그램이 같은 자원에 동시에 접근하고, 자원 사용 순서에 따라 결과가 달라지는 경우를 뜻한다. 두 프로그램이 은행 계좌에 돈을 입금하는 경우를 보여주는 그림 12-1을 살펴보자.

 

 

이 예제에서 공유 자원(shared resource)은 계좌 잔고다. 그림을 보면 결과가 두 프로그램이 이 공유자원에 접근하는 타이밍에 따라 달라진다는 사실을 알 수 있다.

이런 현상을 바라보는 또 다른 방법을 밑에있는 머그잔이 잘 보여준다.

 

 

이 머그잔에서는 경합 조건이 발생하면서 "누구세요?"라는 질문이 나오기도 전에 바로 "race condition"이라고 이름을 답해버린 상황이다.

 

2. 공유 자원

어떤 자원이 공유될 수 있을까? 거의 대부분이 공유될 수 있다. 메모리는 항상 공유 문제와 연관이 되는데, 심지어는 공유 대상이 메모리가 아닌 경우에도 메모리가 관련도니 경우가 많다. 공유 자원이 사용 중인지를 표현할 방법이 필요하기 때문이다. 이런 메모리는 우리가 메모리라고 생각하는 전형적인 메모리가 아닐 수도 있다. 

예를 들어, 어떤 입출력(I/O) 장치 하드웨어에 들어 있는 어떤 비트일 수 있다.

프린터를 생각해보면 물론 여러 문서가 서로 뒤섞인다면 공유 프린터가 제대로 작동하지 않을 것이다. 운영체제는 USB에 연결된 장치와 사용자 프로그램이 제대로 통신하는 것을 보장하는 반면, 어떤 장치에 대한 제어는 그냥 사용자 프로그램에게 넘겨버리는 경우도 자주 있다.

FPGA가 새로운 공유 대상 자원으로 떠오르고 있다. FPGA를 프로그래밍해서 소프트웨어의 특정 부분을 빨리 실행하는 하드웨어 기능을 제공하고 싶을 수 잇다. 이런 경우 소프트웨어가 사용할 FPGA 프로그램을 다른 사람이 변경하는 것을 원하지는 않을 것이다. 다른 컴퓨터상에서 실행되는 프로그램이 서로 통신하는 경우에도 공유 자원을 가질 수 있다는 점은 약간 덜 분명해 보이겠지만, 이런 경우도 공유 자원이 있을 수 있다. 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

반응형

'CS' 카테고리의 다른 글

CS : 디지털 컴퓨터의 사례  (0) 2022.03.02
CS : 정수를 비트로 표현하는 방법  (0) 2022.03.02
CS : 데이터 구조와 처리  (0) 2022.02.15
CS : 네트워킹  (0) 2022.02.08
CS : 컴퓨터 아키텍쳐와 운영체제  (0) 2022.02.04