1. Unix
1.1 유닉스 탄생 배경 ( + C언어의 탄생 ! )
https://joone.net/2017/02/18/%ec%9c%a0%eb%8b%89%ec%8a%a4%ec%99%80-c%ec%96%b8%ec%96%b4/
8. 유닉스와 C언어
1960년대 MIT에서 ITS(Incompatible Timesharing System)가 한창 개발되고 있는 동안, 미 동부의 다른 곳에서도 해커의 기운이 물씬 풍기는 곳이 있었는데, 바로 벨 연구소(AT&T Bell Laboratories)였다. 여기서 앞으
joone.net
미국 AT&T 벨 연구소의 개발자들은 모든 컴퓨터에서 돌아가는 하나의 운영체제를 만들겠다는 Multics 프로젝트를 꿈꾸고 있었다.
하지만 바램과 달리, 너무 많은 기능으로 코드가 복잡했고, 계속되는 일정 지연에 Multics를 포기하게 된다.
이 상황을 아쉬워한 개발자 켄 톰프슨은 Multics의 아이디어를 기반으로, 가볍도 단순한 운영체제를 만들기 위해 동료 데니스 리치와 작은 실험을 시작하게 된다.
그렇게 만들어진게 바로 유닉스!
초기 유닉스는 프로그램 개발을 어셈블리어로만 할 수 있었는데, 어셈블리어는 하드웨어 종속적이라, 다른 컴퓨터로 옮기기가 매우 어려웠다.
켄 톰프슨이 어셈블리어의 불편함을 느껴, 고급언어를 만들기로 결심하는데, 그렇게 만들어진게 B언어!
허나, 그렇게 만들어진 B언어도 인터프리터 기반이라 속도가 느리고, 자료형이 부족해 시스템 개발에 한계가 있었다.
그래서 그의 동료, 데니스 리치가 컴파일러 기반의 C언어를 탄생시킨다!
1.2 유닉스의 특징
초기의 유닉스는 하드웨어 자원이 부족했던 시절에 만들어졌기 때문에, 작고 효율적인 설계를 특징으로 한다.
이후에도 유닉스 계열 운영체제들은 다음과 같은 특징들을 계승해왔다.
- 멀티태스킹 Multitasking
여러 작업(프로세스)을 동시에 처리할 수 있다.
- 멀티유저 Multiuser
하나의 컴퓨터를 여러 사용자가 동시에 사용할 수 있다.
서버 환경에서 매우 중요한 개념이다.
- 계층적 파일 시스템
디렉토리 구조가 트리 형태로 구성되어있다.
루트(/)를 기준으로 정리된 구조는 현대 운영체제 파일 시스템의 기초가 되었다.
- 장치 독립성
장치도 파일처럼 취급한다.
하드디스크, 프린터, 터미널 등 모든 장치를 파일처럼 다룰 수 있어, 일관된 처리가 가능하다.
- 셸과 도구 기반 철학
셸(Shell) 이라는 인터페이스를 통해 명령어로 시스템을 제어한다.
하나의 도구는 하나의 일만 잘하라는 철학을 기반으로 한다.
파이프를 사용해 여러 명령어를 조합할 수 있다.
이러한 철학은 이후 Linux, macOS, 도커(Docker), 쿠버네티스(Kubernetes) 같은 현대 기술에도 영향을 미치게된다.
2. Linux
2.1 리눅스 탄생 배경
26. 리눅스 이야기: 리누스 토발즈의 어린시절
오늘날 수 많은 컴퓨터와 여러 장치를 움직이는 리눅스는 1991년 핀란드에 사는 리누스 토발즈라는 대학생이 공개한 운영체제 커널 코드로 시작한다. 리누스의 어린 시절 리누스는 외할아버지
joone.net
리누스 토르발즈는 개인용 컴퓨터에서 돌아가는 유닉스 같은 운영체제가 필요했다.
당시 Minix라는 교육용 유닉스를 사용했지만, 운영체제 교육이 주 목적인 미닉스는 다소 불완전했다. 미닉스는 오픈소스가 아니었다.
자유롭게 수정하거나 배포할 수 없었던 점에 불만을 가진 리누스는 완전히 자유로운 커널을 직접 만들기로 결심했다.
이후 리누스는 직접 만든 운영체제 커널을 일부 사용자들에게 공개하게 되었다.
유닉스는 유료였기 때문에 많은 사람들이 유닉스같은 무료 운영체제를 만들고자 GNU 프로젝트에 참여했다.
이렇게 GNU 프로젝트가 만들어놓은 툴과 리눅스 커널이 합쳐지면서 완전한 운영체제로 성장했다.
2.2 리눅스의 특징
리눅스는 유닉스의 철학을 계승하면서도, 오픈소스 커뮤니티 중심으로 발전해왔다는 점에서 고유한 특징을 가진다.
- 오픈소스
누구나 소스를 열람, 수정, 배포 가능하다.
이 덕분에 전 세계 개발자들이 함께 개발에 참여할 수 있다.
- 유닉스 철학 계승
작은 도구들을 조합해 더 큰 기능을 만들어라 : 작은 명령어들을 연결해 복잡한 작업 처리가 가능하다.
텍스트 기반 인터페이스 : 입출력을 텍스트로 처리했다.
bash 셸을 통해 강력한 명령어 조합이 가능하다.
- 다양한 배포판
우분투(Ubuntu), 페도라(Fedora), 데비안(Debian), 아치(Arch), 칼리(Kali) 등등.. 수많은 변종이 존재한다.
용도에 따라 서버용, 데스크탑용, 임베디드용 등이 존재한다.
- 뛰어난 안정성과 보안성
서버 운영체제로 가장 많이 사용된다. (웹 서버, 클라우드, 슈퍼 컴퓨터 등)
커널 수준에서 사용자 권한을 엄격히 관리한다.
- 하드웨어 독립성
다양한 아키텍처에서 구동할 수 있다.
2.3 유닉스와 리눅스의 차이점
리눅스는 유닉스의 철학을 계승하면서도, 여러 측면에서 유닉스와는 차별화된 길을 걷는다.
| 항목 | Unix | Linux |
| 개발 목적 | 대형 시스템 범용 OS | 개인용 컴퓨터에서 사용하기 위한 무료 OS |
| 라이선스 | 대부분 상업적, 유료 | 오픈소스, 무료 |
| POSIX 호환성 | 원조이자 기준 | 대부분이 호환된다. (POSIX 준수) |
유닉스는 닫힌 생태계, 리눅스는 열린 생태계!
2.3.1 POSIX?
POSIX는 Portable Operating System Interface의 약자로, 운영체제 간의 호환성을 보장하기 위해 만들어진 표준 인터페이스이다.
리눅스든, 유닉스든, POSIX 규칙을 지키면
소프트웨어가 큰 수정없이 여러 운영체제에서 돌아갈 수 있다!
👉 즉, 운영체제 세계의 공통 API 규칙집!
POSIX 규정
- ls, cd, echo, find등 쉘 명령어의 기본 동작 방식
- fork(), exec(), read()등 프로그래밍 인터페이스
- 파일 권한 및 디렉토리 접근 방식 등
- 표준 라이브러리 함수
'CS' 카테고리의 다른 글
| [CS] 타입스크립트의 컴파일 과정 (0) | 2025.09.21 |
|---|---|
| [CS] 컴파일러와 인터프리터, JIT (0) | 2025.09.21 |
| [CS] Git이란, (+ Gist) (0) | 2025.07.15 |
| [CS] 스택(Stack), 큐(Queue), 덱(Deque) (0) | 2025.07.08 |