김모씨와 차모씨 부부는 은행에 100만원을 가지고 있다. 어느 날 둘은 동시에 10만원씩 필요해졌다. 남편 김씨는 직장이 있는 신촌에서 오후 6시 정각에, 그리고 아내 차모씨는 집이 있는 마포에서 오후 6시 정각에 현금인출기에서 각각 10만원을 인출했다. 신촌의 인출기가 은행의 중앙컴퓨터에 잔액을 조회하여 100만원임을 알아낸다.
다음으로 마포의 인출기가 잔액이 100만원임을 알아낸다. 신촌의 인출기가 10만원을 제한 90만원을 중앙컴퓨터의 잔액란에 써넣는다. 마포의 인출기도 100만원에서 10만원을 제한 90만원을 중앙컴퓨터의 잔액란에 써넣는다. 다음날 은행에 남아있는 돈을 확인한 부부는 깜짝 놀란다. 20만원을 인출했지만, 잔액은 80만원이 아닌 90만원인 것이다.
실제로 초기의 은행 전산망 설계 당시 제기되었던 문제이다. 낮은 확률이기는 했지만 가능한 일이었다. 기술자들은 그래서 상호 배타적인 자물쇠(mutex)라는 개념을 고안해냈다. 중앙컴퓨터를 금고라 치고, 현금 인출기를 직원이라 하자. 신촌의 직원이 자물쇠를 집어들고 금고로 들어가서 문을 잠근다.
이후 도착한 마포의 직원은 문이 잠겨있음을 발견하고, 신촌의 직원이 문을 열어줄 때까지 기다린다. 신촌의 직원이 업무를 마친 후에 자물쇠를 풀고 문을 열고 나오면, 마포의 직원이 들어가서 문을 잠근다. 하나의 열쇠를 번갈아 쓰는 것이다.
한대의 컴퓨터로 여러 개의 프로그램을 돌리는 원리는 바로 이것이다. 동시에 여러 업무를 수행할 수 있는 현대적인 컴퓨터는 혼란 가능성이 있는 이러한 중대부분(critical section)을 원활하게 통제함으로써 다중 업무수행(multitasking)을 가능케 하는 것이다.
2명의 경우가 아니라 여러 명이 서로 문안으로 들어가겠다고 다투는 경우에는 신호기(semaphore)가 필요하다. 각각의 직원은 관리자에게서 번호표를 받은 후, 신호기에 나타나는 번호에 따라 차례로 들어가서 업무를 보면 된다. 컴퓨터 프로그램의 세계에서도 질서는 매우 중요한 것이다.
요즈음 판교 아파트 청약의 경우를 보면, 부동산이야 말로 우리 사회의 중대부분인가보다. 하지만 돌아가는 모습을 살펴보자면 자물쇠도 신호기도 효과가 없는 것 같다.
관련된 모든 사람이 동시에 금고에 들어가 마음대로 장부에 기입하고 지우고를 반복하는 형국이다. 인간의 생각과 의지라는 것이 워낙 미묘하고 복잡해서 그런 단순한 방법으로는 통제가 되지 않는 것일까. 또는 아예 자물쇠나 신호기에 대응하는 통제장치가 아예 존재하지 않는 것일까.
연세대 토목공학과 교수
기사 URL이 복사되었습니다.
댓글0