병행성에 관한 대화#
교수: 자, 이렇게해서 세 개의 운영체제 기둥 중에 두 번째인 병행성에 도착했네.
학생: 기둥이 네 개 있는 줄 알았는데요…?
교수: 아니야, 예전에는 그랬겠지.
학생 : 음…. 그래요. 경이로운 교수님, 그럼 병행성이 무엇인가요?
교수: 자, 복숭아가 있다고 해 보자 —
학생: (말을 끊으며) 또 복숭아인가요! 복숭아를 너무 좋아하시는 것 아닌가요?
교수: T.S. Eliot을 읽어 본적 있니? J Alfred Prufrock의 연가 중에 “감히 복숭아를 따 먹어볼까?”과 같은 것 말이야?
학생: 오 그럼요! 고등학교 영문학 시간에요. 최고에요! 이렇게 시작하는 부분이 가장 좋았는데요, —
교수: (말을 끊으며) 그것과 전혀 상관없이 난 그저 복숭아를 좋아해. 어쨌든 상 위에 복숭아가 많이 있고 여러 사람이 복숭아를 먹고 싶어 한다고 해보자꾸나. 먹으려는 사람이 먼저 복숭아를 눈으로 확인한 후에 복숭아를 집어 먹도록 하면 어떤 문제가 있을까?
학생: 흠… 그러면 다른 사람이 보고 있는 복숭아를 나도 같이 보고 있는 경우가 있겠네요. 내가 집으려고 할 때 상대가 나보다 먼저 집게 되면, 복숭아는 없는 거죠.
교수: 바로 그거야! 그러면 어떻게 해야 할까?
학생: 그러면, 다른 더 좋은 방법을 만들어 보죠. 줄을 세운 후에 자기 차례가 되면 복숭아를 집어 먹도록 하는 거에요.
교수: 괜찮군! 하지만, 자네 방법에 문제는 뭔지 알고 있나?
학생: 치, 제가 다 해야 하는 건가요?
교수: 당연하지.
학생: 좋아요, 생각해 보지요. 여러 사람이 동시에 복숭아를 집을 수 있도록 했을 때는 빨랐어요. 반면에, 제 방법은 한 번에 한 명씩 복숭아를 집기 때문에 정확하겠지만 꽤 느리겠지요. 가장 좋은 방법이라면 빠르기도 하고 정확해야겠네요.
교수: 감동적이군 그래. 사실, 자네가 방금 말한 것이 병행성에 대해서 알아야 하는 모든 것이 담겨 있다네. 아주 잘했네.
학생: 제가요? 단순히 복숭아에 대해서 이야기 하고 있는 줄로 알았는데요. 이쯤되면 교수님께서 컴퓨터에 대한 주제로 연결을 해 주셔야 할 때인 것 같은데요.
교수: 그렇군. 사과하네! 우리는 근본을 잊어서는 안되네. 멀티 쓰레드 프로그램이라고 불리는 프로그램들이 있다네. 각 쓰레드는 독립된 객체로서 프로그램 내에서 프로그램을 대신하여 일을 하지. 이 쓰레드들은 메모리에 접근하는데, 쓰레드 입장에서 보면 메모리는 아까 이야기 했던 복숭아와 같은거야. 쓰레드들이 메모리를 접근하는 것을 조정하지 않으면 프로그램이 예상처럼 동작하지 않을 수도 있게 되는 거라네. 이해하겠나?
학생: 어느 정도는요. 하지만 왜 이런 내용을 운영체제 수업에서 다뤄야 하지요? 응용 프로그램 짤때 다뤄야 하는 내용 아닌가요?
교수: 좋은 질문이야! 운영체제에서 다뤄야 할 몇 가지 이유가 있지.
운영체제는 우리가 곧 다루게 될 락(lock)과 컨디션 변수(conditional variables)와 같은 기본 동작으로 멀티쓰레드 프로그램을 지원해야 한다네.
운영체제는 그 자체로 최초의 동시 프로그램이기 때문이야—운영체제가 관리하고 있는 메모리 영역을 조심스럽게 접근해야지 안그러면 여러 이상하고 끔찍한 일들이 일어나게 된다네. 정말, 소름끼치는 상황이 생길 수도 있어.
학생: 그렇군요. 흥미로워 보이는군요. 더 자세한 내용이 있을 것이라 보이는데요.
교수: 물론이지.