운영체제 수업은 2년 전, 3학년이 되었을 때 처음 들었다.
그땐 운영체제 라는 개념 자체를 이해하지 못했고, 딱히 이해하려는 노력도 하지 않았다. Linux나 Window 등이 OS구나 하고만 알고 있었다. 결국 운영체제 학점이 C가 나왔다. 이후 3학년이 지나고, 중간에 1년간 휴학을 하고, 4학년이 된 지금 운영체제를 재수강하고 있다. 별로인 학점을 재수강할 정도로 학점을 관리하거나 연연하는 건 아닌데, 그간 운영체제에 대한 제대로 된 이해가 없어서 느끼는 불편함(..?) 찜찜함과 의문이 있었다. 그리고 운영체제 수업 첫 날 교수님이 추천해주신 책 'Unix의 탄생'을 읽어보고, 이에 대해 나의 블로그 첫 글을 작성한다.
Unix의 탄생은 어떤 과정을 거쳐 Unix라는 운영체제가 만들어졌는지, 하나하나 알 수 있게 해준 책이다. 책의 서문에도 유닉스의 역사서이자 회고록인 책이라고 적혀있다. 책의 내용이 생각보다 꽤나 많은 내용이 담겨있어서 모두 정리하여 적어보진 않겠지만, 내가 인상 깊게 읽었던 부분만 정리해보려한다. (읽으면서 책의 지은이인 브라이언 캐니핸의 글솜씨에 놀랐다. '역시 잘하는 개발자는 글도 잘 쓰는구나.'를 느꼈고, 이게 내 개발 블로그 시작의 이유이기도 하다.)
데니스 리치, 켄 톰프슨
운영체제 첫 시간에 교수님은 학생들이 존경하는 인물로 스티브 잡스, 빌게이츠 등을 꼽지만, 데니스 리치나 켄 톰프슨을 말하는 학생도 있었으면 좋겠다라고 말씀하셨다.
'데니스 리치, 켄 톰프슨? 그게 누구지...'
데니스 리치와 켄 톰프슨은 유닉스의 아버지이다.
데니스 리치, 켄 톰프슨은 벨 연구소에 소속되어 있었다. 그들은 자체 제작 운영체제 경험이 있었고, 멀틱스라는 프로젝트에 운영체제 개발로 참여하게 된다. 하지만 멀틱스는 너무 복잡한 계획 탓에 완성되지 못하고, 벨 연구소는 멀틱스 프로젝트에서 빠지게 된다. 이 경험은 유닉스라는 운영체제를 현실적으로 구현하는데 도움이 되었고, 후에 유닉스와 C언어가 개발되었다. 멀틱스 운영체제를 구현하기 위해 만든 언어를 바탕으로 데니스 리치가 개발한 새로운 언어가 바로 C언어이다. 당시 다른 고수준 언어보다 크기를 훨씬 줄인 언어였다. 어셈블리어로 개발된 유닉스도 C언어로 모두 바꾸어 작성되어, 유지 보수에 편리해졌다.
Unix 제 6판 (1975년 5월)
- file system
현대의 아주 깔끔해진 파일시스템 구조가 익숙한 나에겐 이전의 파일 시스템이 어땠는지 상상이 되질 않는ㄷr....
파일시스템은 디스크 같은 보조기억장치에 있는 정보를 관리하는 운영체제 구성 요소이다. 기존엔 소스 코드와 데이터를 구별하였다. 컴파일러는 소스코드를 읽고, 컴파일된 프로그램이 데이터를 읽고 쓸 수 있었다. 유닉스는 이를 구별하지 않았다. 유닉스에서 파일은 일련의 바이트로, 어떤 프로그램이든 어떤 파일을 처리할 수 있다.
파일은 디렉터리로 구조화된다. 디렉토리는 계층적 구조를 갖고있다.
이외에도 C언어의 탄생부터 struct 구조의 존재 이유, 시스템콜들의 탄생까지 알 수 있었다. (많은 내용들에 어떤 내용을 정리해봐야할지 갈피가 잡히지 않아, 추후에 내용 정리를 추가할 것 같다. )
벨 연구소에서 동료들과 밑바닥부터 운영체제를 구상하고 설계 및 제작하는 모습에 엄청난 존경심이 생기게 되는 책이었다. 운영체제가 어떻게 생겼는지, 유닉스의 프로토타입으로 여겨지는 멀틱스와 유닉스의 구조, 시스템콜들의 시작까지 알아볼 수 있었다. 현재까지 쓰이는 시스템콜들이라 놀랍다. 나도 현재의 구현에 급급하지말고, 좀더 시스템적으로(?) 생각할 수 있어야지....또한, 벨 연구소의 좋은 환경과 뛰어난 동료들과 함께 할 수 있었다는 것에 아주 부럽고, 나 또한 저런 환경에서 일할 수 있는 뛰어난 공학도가 되고싶어졌다.