필요에 의한 발전 - 초기 컴퓨터
왜 항상 어떤 것을 배울 때는 그것의 역사부터 배우는 걸까요? 그리고 우리는 왜 재미없다고 느낄까요? 어쩌면 지금 우리에게 필요하지 않은 상황이기 때문일지도 몰라요.
왜 리눅스라는 컴퓨터 운영체제에는 여러명이서 한 컴퓨터를 사용하는 다중 사용자 시스템이 있을까요?
수를 어떻게 세고 저장하지? : 주판
우리집 옆에 살고있는 친구가 저한테 물어봅니다.
“너희 집에 사과 몇 개 있어? 혹시 많으면 하나만 줄 수 있어?”
집으로 들어가 사과의 수를 손으로 세어보기로 합니다.
1.. 2.. 3.. 4.. 우리집에는 사과가 4개 있나봅니다. 친구에게 하나 정도는 줄 수 있으니 들고 나가서 하나 줍시다.
30년 뒤, 저는 사과 너무 좋은 나머지 계속 사과를 심어 사과나무가 가득한 정원을 갖게 되었습니다. 여기서 저 멀리까지, 지금까지 심은 사과나무를 세어보려면 아마 수 백 걸음은 걸어야 할 것 같습니다.
제 친구는 그간 이곳 저곳을 돌아다니며 뭔가를 판매하는 상인이 되었나봅니다. 친구가 제게 물어봅니다.
“와.. 너 사과가 미친듯이 많네!”
“이렇게 많으면 못먹고 남는 것들도 있을 거 같은데.. 나한테 남는걸 주면 내가 팔아줄게!”
잠깐 고민하는 제게 친구가 말을 덧붙입니다.
“… 물론 다 달라는건 아냐. 너한테 얼마나 필요한지 세어보고 남는 것들만 줘”
…
잠시 생각해봤는데 좋은 생각인거 같습니다. 이제 얼마나 가지고있는지 세어봐야겠어요.
그런데 어떡하죠? 저는 지금까지 얼마나 심었는지 세어보지도 않고 그냥 사과가 좋아서 씨앗을 뿌리기만 해왔어요.
…
…
하루 종일 걸어다니며 사과를 세고 얼마나 필요할지 나눈 뒤 잠시 앉아 생각합니다.
“하.. 이 짓을 친구가 사과를 팔고 올 때마다 해야한다고?”
엑셀로 정리하면 좋겠지만 지금은 기원전 2000년에서 2500년 사이 입니다. 그런건 지금 존재하지 않아요.
종이? 기껏 비슷한건 해봐야 파피루스라는 건데 그건 저기 높으신 파라오 님 께서나 쓰시는거지 사과나 심는 저는 제 손가락이 전부에요.
뭔가 기록할 수 있는게 있으면 좋겠어요. 비나 바람에 날아가지 않고 엄청 큰 수라도 기록할 수 있는 그런게 필요해요.
한 줄에 돌 10개 씩 여러 줄을 만들고 아래부터 1, 10, 100… 자리 순으로 표현하기로 합니다.
이렇게 하면 사과가 몇 개가 있었는지 돌로 표현해 놓고 사과를 수확하고 팔 때 마다 전부 다 세지 않고 돌만 옮겨가면서 전체를 파악할 수 있겠어요! 이제 남는 시간이 생겼으니 다른 과일 농사에도 관심을 갖을 수 있겠어요.
4,000년의 발전: 시간 절약
“An 18th Century Persian astrolabe” by Andrew Dunn is licensed under CC BY-SA 2.0
사람들은 이후로 다양한 장치들을 만들어 왔습니다. 일출, 밀물-썰물, 천체, 시간 등을 계산하는 장치들이었습니다. 그 중, 별을 붙잡는다는 뜻을 가진 성반(Astrolabe)은 바다 위에서도 배가 현재 위도를 계산할 수 있게 해주는 장치였습니다.
왜 이런 장치를 만들었을까요?
계산하기 복잡한 것들을 빠르게, 쉽게, 자주, 정확하게 하길 원해서, 필요해서 만들어 왔습니다. 그러면 사람들이 어려운 문제도 쉽게 접근할 수 있고, 절약된 시간에 다른 일들을 할 수 있게 되는 건 덤으로 따라오는 보상이었습니다.
초기 컴퓨터 개념을 생각해낸 영국 수학자 Charles Babbage가 이런 말을 했다고 합니다.
At each increase of knowledge, as well as on the contrivance of every new tool, human labour becomes abridged.
각 분야의 지식이 늘고, 새로운 장치가 고안될수록 인류의 노동력은 단축된다.
계산기의 발전: 컴퓨터라는 직업
1631년, 시인 Richard Brathwait의 책, ‘The Yong Mans Gleanings’에 처음 “컴퓨터”, “Compute + ‘-er’”, 계산하는-사람 으로 쓰였습니다.
1642년, 유명한 수학자 파스칼이 만든 파스칼 계산기는 덧셈, 뺄셈을 편하게 하기 위해 만들어진 장치로 자리올림(carry) 알고리즘을 사용해 덧셈과 뺄셈을 할 수 있었습니다. 곱셈과 나눗셈은 많은 덧셈과 뺄셈으로 바꾸어 수행할 수 있었습니다.
하지만 곱셈, 나눗셈을 하기 위한 많은 덧셈, 뺄셈 방식은 얼마 지나지 않고 불편해졌을 것입니다. 더 편하게 곱셈과 나숫셈을 하기 위해 1694년 수학자 라이프니츠는 파스칼 계산기를 확장시켜 최초로 사칙연산이 가능한 라이프니츠 계산기를 만들었습니다.
속도와 정확성의 문제: 군대와 전쟁
불편한 점은 또 나왔습니다. 사칙연산을 다 할 수 있지만 계산하는데 몇시간, 며칠이 걸리고 너무 비싸서 누가 쉽게 사용하기 어려웠습니다. 이를 위해 미리 계산해놓은 값을 정리한 테이블을 만들어서 빠르고 정확하게 값을 낼 수 있게 되었습니다.
“Part of a 20th-century precomputed mathematical table of common logarithms.” by agr is licensed under CC BY-SA 3.0
군대에서도 이 방식이 활용해 Range Table을 만들었습니다. 바람 방향, 온도, 기압 등 변수를 고려해 포탄의 포격 위치를 계산해서 기록해두고 사용했습니다.
그런데 탄의 모양이 바뀌면 어떻게 될까요? 새로운 탄에 맞는 새로운 테이블이 필요하니 시간이 오래걸리고 급하게 계산하다보니 값에 오류가 나오기 시작했습니다.
영국 수학자 Charles Babbage는 차분기관(Difference Engine)라는 다항식을 계산할 수 있는 기계를 만들기 시작했습니다. 완성된 차분기관은 새로운 테이블의 계산과 완성에 많은 도움이 되었습니다.
기계 하나를 만들어내는데 많은 돈과 시간이 들어갈텐데 그 기계가 하나의 계산 밖에 할 수 없다면 너무 아깝습니다. 차분기관을 만들던 중 Charles Babbage는 하나의 계산만 하는게 아닌 여러 종류의 계산을 하기 위한 기계, 해석기관(Analytical Engine)을 고안했습니다.
개인적이고 정치적인 이유로 완성하지 못했지만 이 기계는 데이터를 넣을 수 있고, 순차적으로 작동하며, 정보를 저장할 메모리를 가지고있고, 계산 값을 출력할 수도 있었습니다. Charles Babbage가 고안한 해석기관은 컴퓨터의 개념을 담은 기계였기 때문에 ‘컴퓨터의 아버지’라 불립니다.
필요를 인지하다: 인구조사 문제
19세기 후반까지 계산을 하는 기계는 과학과 공학의 특정 작업에만 사용되었습니다.
미국은 10년마다 인구조사를 해왔는데 1880년은 이민으로 인구가 상당히 많아져서 조사를 마치는데 8년이 걸렸습니다. 이후 1890년에 시행할 인구조사가 얼마나 걸릴지 계산해보니 13년 걸린다고 예상되었고 미국 정부는 이 문제를 해결해야 했습니다.
발명가이자 통계학자인 Herman Hollerith는 Tabulating Machine을 개발했습니다. 이 기계는 천공 카드(Punched Card)를 넣으면 뚫린 구멍에 금속 핀이 내려와 해당 항목의 회로를 완성시키고 그 합계에 ‘+1’을 한 뒤 유리병으로 카드를 넣는 방식으로 작동했습니다.
이 기계를 사용했던 1890년 인구조사는 예상했던 시간의 절반인 6년 정도 걸리게 되고 정부는 수백만 달러를 절약할 수 있었다고 합니다.
이 일을 계기로 사업가들은 컴퓨팅 분야에서 노동과 데이터 집약적인 업무를 개선하고 이익을 높일 잠재력을 확인했습니다. 1924년 다른 기계 제작자들과 합병하여 IBM(International Business Machines Corporation)이 등장하고 상업과 정부는 크게 변화했으며 1900년대 중반까지 전 세계적인 인구와 무역량이 증가합니다.
계속된 필요와 발전
세계 인구와 무역량의 증가와 마찬가지로 정보량도 증가했습니다. 이제는 데이터 처리에 있어 빠른 속도와 유연성 있는 도구가 필요해지기 시작했습니다.
이제는 사용자가 필요한 계산식, 즉 프로그램을 직접 만들 수 있는 방법이 필요했습니다. 기계에 연결된 선을 직접 수정하는 방식에서 전선이 연결된 보드를 교체하는 방식 그리고 천공 카드, 다음은 버튼과 스위치가 달린 패널.. 계속해서 발전했습니다.
프로그램을 만드는 방법, 프로그래밍이 발전하고 이후에는 어셈블리, C 같이 프로그래밍을 할 수 있는 방식인 프로그래밍 언어가 발전하기 시작합니다.
다중 사용자 시스템
처음에 ‘왜 리눅스에 다중 사용자 시스템이 있을까’로 시작했습니다. 역사를 쭉 훓어보면 어떤 점이 필요해서, 불편해서 이를 해결하기위해 발명품, 기술이 등장합니다. 마찬가지로 리눅스에 다중 사용자 시스템이 있는 이유는 단일 사용자 시스템은 뭔가 불편했기 때문입니다. 그런데 어떤 점에서 불편했을까요?
리눅스의 역사를 보면 리눅스는 유닉스의 독점화에 반발하는 GNU 프로젝트와 유닉스 인터페이스와 비슷한 운영체제를 구현하려던 리누스 토발즈의 작품입니다. 유닉스를 거슬러 올라가면 멀틱스, 그리고 CTSS로 둘 다 시분할 시스템의 구현을 위한 운영체제의 시도였습니다.
그럼 도대체 시분할이 뭐길래 그렇게 구현하려고 한걸까요? 시분할은 여러 프로그램을 시간 단위로 나눠 CPU에 번갈아가며 수행시키는 방식입니다. 시분할이 등장하기 전에는 한번에 하나의 프로그램이 실행되었습니다. 1967년 짧은 무성 영화를 보면 프로그램을 실행하는데 5시간이나 걸렸다고해요.
예를 들어, 나는 30분이면 실행이 끝나는 프로그램을 만들었는데 앞에 누가 5시간짜리 프로그램을 실행해서 나는 5시간 30분을 기다려야하는 상황입니다. 그런데 만약 시분할 방식이 적용된다면? 30분보다는 더 걸리겠지만 적어도 5시간 30분 보다 훨씬 일찍 끝날거에요.
이후에 컴퓨터의 속도가 매우 빨라져서 프로그램을 실행하는 속도보다 컴퓨터까지 프로그램을 제출하러 가는 시간이 더 걸리는 상황이 생기기 시작합니다. 왜 컴퓨터에 제출해야 했냐면, 이 때는 컴퓨터를 한 달에 1,000달러 이상을 내고 대여하거나 20,000달러 이상의 가격인 고가의 장비였기 때문이에요. 그런 장비를 내 책상에서 입력하는대로 결과를 얻을 수 있다면 어떨까요? 또, 하나의 컴퓨터를 다른 사용자와 같이 사용할 수 있다면 어떨까요?
이런 필요에 의해 다중 사용자를 지원하는 시분할 시스템이 개발되었습니다. MIT의 컴퓨터 과학 교수 Fernando J. Corbato의 1963년 영상에서 당시 배치 방식의 문제와 이를 해결하기 위해 만든 CTSS를 시연하는 모습을 볼 수 있습니다. 당시에는 10명 안되는 인원이 동시에 컴퓨터를 이용할 수 있었다고 해요.
영상의 19분 10초부터 전신타자기(Teleprinter)에 입력하고 실행하는 모습이 나오는데 출력 중간에 잠깐 멈칫하는 모습을 볼 수 있어요. 유저 사이에 프로세스를 교환하는 스위칭(Context switch) 이 일어나서 잠시 멈췄다고 이야기합니다.
멀틱스의 터미널 글, 네트워킹 글을 통해, CTSS는 60년대 중반 터미널을 모뎀을 사용해서 PBX를 통해 원격으로 연결되었다고 하는데 어떻게 구현해서 동작한지는 네트워크 공부해야 잘 알 수 있을 거 같아요.
결론
처음 리눅스에 계정 개념이 있고 그 구분이 엄격한다는 말을 들었을 때 왜 그런지 찾아보려 했어요. 리눅스의 탄생 배경에서 유닉스를 찾고 이건 또 왜 나왔는지 찾다보니 멀틱스, CTSS, 배치 프로세싱, 그러다보니 컴퓨터의 역사까지 거슬러 올라가버렸습니다. 그리고 그 과정을 다시 되돌아올 때 당시 사람들의 상황과 필요에 공감되면서 전에 알고있던 몇몇 개념이 연결되는 신기한 경험을 했습니다.
물론 앞으로 새로운 언어, 개념을 공부해야 할 상황이 많을겁니다. 하지만 결국 사람이 만든 거고 사람이 만들었다는 건 어떤 부분에서 필요한 점이 있었기 때문에 그걸 해결하려는 것일 겁니다. 컴퓨터 분야 만 그런게 아닙니다. 건축, 자동차, 법까지 모든 건 자연에서 나온 게 아닌 이상 사람이 필요해서 발전해온 것일 겁니다.
앞으로 배울게 참 많겠구나 싶습니다.