3학년 전공 수업으로 OS에 대한 내용을 처음 들었던 2년 전과 비교한 요즘, 학습 퀄리티 자체가 다름을 스스로 확연히 느낀다. 수업 내용이 쭉 흡수된다! 고등학생이 되었더니 중학수학이 잘 풀리던 시절과 비슷한 기분이랄까?
하지만 철저히 복습하지 않는 이상 이 내용들도 또다시 휘발될 테니,
{강의 진행 + 나의 개인적인 궁금증에서 기원한 추가 학습} 내용을 통합 정리해보고자 한다.
누군가에게 도움이 되기를!
OS는 Operating System의 약자이고, '운영체제'라 번역된다.
OS는 하드웨어를 응용 프로그램이 사용하기 좋은 형태로 바꿔주는 소프트웨어다.
아래 이미지는 컴퓨터 시스템의 계층 구조를 나타낸다.

각 층은 바로 아래층하고만 대화한다.
사용자는 응용 프로그램을 통해 컴퓨터를 쓰고, 응용 프로그램은 OS에 일을 시키고, OS가 하드웨어를 직접 조작한다.
기계 수준에서 보면, 프로그램이 실행된다는 건 CPU가 메모리에서 명령어를 가져와(fetch) 해석하고(decode) 실행하는(execute) 과정을 반복하는 것뿐이다. 여기까지는 OS가 없어도 된다.
문제는 프로그램을 여러 개 돌리고, 그것들이 메모리를 나눠 쓰고, 장치와 데이터를 주고받게 하려는 순간 생긴다. 이걸 대신 처리하는 게 OS다. 강의에서는 OS의 책임을 이렇게 정리한다.
⇒ 한마디로, 시스템이 올바르고 효율적으로 동작하도록 책임지는 것이 OS다.
위 책임을 두 키워드로 압축하면 다음과 같다.
앞으로 이 시리즈는 OS가 자원을 다루는 세 축 — 가상화(virtualization) · 동시성(concurrency) · 영속성(persistence) — 을 하나씩 파고들 예정이다. 오늘은 이름만 걸어두고 넘어간다.
지금 우리는 터미널을 열고 ls를 친다. 서버에 ssh로 접속한다. grep으로 로그를 뒤진다.
이 익숙한 명령어들은 사실 50여 년 전에 만들어진 설계 철학을 우리가 지금까지 그대로 쓰고 있는 것이다. 이 뿌리가 어디서 왔는지 짧게 짚어보자.
1940~50년대 초, 컴퓨터에는 운영체제가 없었다. 사람이 배선판을 꽂거나 스위치를 올려 기계를 직접 조작했고 한 작업이 끝나면 다음 작업을 손으로 세팅했다.
이 비효율을 없애려는 자동화의 필요에서 최초의 OS가 나왔다. 흔히 최초의 운영체제로 꼽히는 것은 1956년의 GM-NAA I/O다. 천공카드로 들어온 작업들을 사람 개입 없이 자동으로 이어 처리하는 배치 시스템이었다. ('최초' 여부엔 이견도 있지만 초기 OS로 널리 언급된다.) 흔히 "최초의 OS는 Unix"라고 오해하지만, Unix는 이보다 십수 년 뒤에 등장한다.
이후 OS는 배치 처리에서 출발해 한 컴퓨터에 여러 작업을 올려두고 번갈아 실행하는 멀티프로그래밍, 나아가 여러 사용자가 동시에 접속해 쓰는 타임셰어링으로 발전했다. 1960년대의 야심작 Multics가 대표적인 타임셰어링 프로젝트였는데, 이게 다음 이야기의 출발점이 된다.
OS의 첫 번째 사명: 인간을 반복 조작에서 해방시키는 것.
1969년, 벨 연구소의 켄 톰프슨과 데니스 리치는 야심이 지나쳐 너무 복잡해진 타임셰어링 OS(Multics)에 질려 있었다. 벨 연구소가 그 프로젝트에서 손을 떼자, 톰프슨은 훨씬 단순하고 우아한 OS를 직접 만들었다. 그게 Unix다.
Unix가 게임 체인저였던 이유는 두 가지다.
|)로 조합해 큰 일을 해낸다.개발자라면 이 철학이 낯설지 않을 것이다.
cat log.txt | grep ERROR | wc -l — 이 한 줄이 바로 Unix 철학 그 자체다. 우리는 매일 이걸 쓴다.
의외로 Unix는 처음부터 비쌌던 게 아니다. 초기(1970년대)엔 AT&T가 독점 규제 탓에 컴퓨터 사업을 할 수 없어 대학에 소스코드까지 거의 무료로 배포했다. 그래서 오히려 대학가를 중심으로 빠르게 퍼졌다.
문제는 1980년대다. AT&T가 분할된 뒤 Unix를 본격적으로 상업화하면서 라이선스 비용이 비싸지고 소스코드도 닫혔다. 학생과 개인 개발자에겐 점점 그림의 떡이 되어갔다.
1991년, 핀란드 대학생 리누스 토르발스가 "내 PC에서 공짜로 Unix처럼 쓰고 싶다"는 이유로 Unix를 본떠서 커널을 처음부터 새로 짰다. Unix의 코드를 베끼지 않고 "Unix처럼 동작하도록" 만든 것이 Linux다. 여기에 GNU 프로젝트의 무료 도구들이 결합되며 완전한 무료 OS가 완성됐다.
OS의 두 번째 사명: 누구나 자유롭게 가질 수 있게 하는 것.
이 "자유"가 판을 뒤집었다. 무료·오픈소스라는 특성 덕에 Linux는 서버 시장을 장악했다. 오늘날 우리가 배포하는 대부분의 백엔드 서버, 클라우드 인스턴스, 도커 컨테이너가 리눅스 위에서 돈다. 안드로이드조차 리눅스 커널 기반이다.
정리하면 흐름은 이렇다.
자동화(GM-NAA I/O) → 이식성·철학(Unix) → 자유·오픈소스(Linux) → 서버·클라우드 지배
우리가 매일 치는 ls, grep, ssh는 50여 년 전 Unix가 정한 규칙이고, 우리가 배포하는 서버는 그 Unix를 자유롭게 재현한 Linux다.
리눅스를 다룬다는 건, 사실 반세기 동안 다듬어진 설계 철학 위에서 일한다는 뜻이다. 다음에 터미널을 열 때, 그 $ 뒤에 담긴 역사를 한 번쯤 떠올려봐도 좋겠다.
세상의 OS는 크게 두 갈래다. Unix에서 갈라져 나온 것들과, 그 바깥에서 독자적으로 자란 Windows.
Unix (1969)
├─ 코드를 물려받은 쪽 ────── BSD ── macOS / iOS
└─ 똑같이 동작하도록 새로 짠 쪽 ── Linux ── Android, 대부분의 서버
Windows ── MS-DOS → Windows 9x → Windows NT (현재) : Unix와 무관한 독자 노선
갈림길이 두 종류라는 게 핵심이다.
그런데도 macOS 터미널에서 쓰던 명령어가 리눅스 서버에서 그대로 먹힌다. 혈통이 아니라 POSIX라는 공통 규격을 둘 다 따르기 때문이다. "OS라면 이런 시스템 콜과 명령어를 이렇게 제공하라"고 못 박아둔 표준이다.
Windows만 이 족보 바깥의 독자 줄기다. 초기 Windows는 명령줄 OS인 MS-DOS(1981) 위에 얹힌 GUI였지만 지금의 Windows(10·11)는 1993년에 도스를 버리고 새로 설계한 NT 커널 기반이다. 도스에는 없던 메모리 보호·선점형 멀티태스킹을 갖춘 게 이 NT 계열이다.
| 계열 | 코드 혈통 | 예 |
|---|---|---|
| BSD | AT&T Unix 계승 → 정식 Unix | macOS, iOS, FreeBSD |
| Linux | 계승 없이 재구현 (Unix-like) | Ubuntu, RHEL, Android |
| Windows | 독자 커널 (NT) | Windows 10 / 11 |
어떤 순서로 작성해야 할지 고민중이다. i will be back!