floatFirstTOC: right
🖥️ 시작하며🔍 왜 운영체제를 배우는가?📌 어플리케이션 관점📌 시스템 관점📌 구현 관점🔍 컴퓨터의 역사📌 1세대 (1945 ~ 55)📌 2세대 (1955 ~ 65)📌 3세대 (1965 ~ 80)1️⃣ 멀티프로그래밍 시스템2️⃣ 시분할 기법📌 4세대 (1980 ~ )🔍 Multics1️⃣ 계층적 파일 시스템2️⃣ 가상 메모리 관리3️⃣ 명령 셸을 OS 커널과 분리4️⃣ 다이나믹 링크5️⃣ 고급 언어로 구현 (PL/1)6️⃣ 공유 메모리 관리7️⃣ 논리 디스크 볼륨을 물리 볼륨에 매핑8️⃣ 보안 시스템 개발9️⃣ MRDS (Multics Relation Data Store)🔟 스프레드시트 개발🔍 Unix🔍 Multics VS Unix 정리
🖥️ 시작하며
이번 포스팅에서는 운영체제에 대한 역사, 왜 운영체제를 배우는지에 소개하려고 합니다.
🔍 왜 운영체제를 배우는가?
📌 어플리케이션 관점
프로그램을 돌릴 수 있는 편한 환경을 제공받음
- 프로세서 → 프로세스, 스레드
- 메모리 → 주소 공간
- 저장 장치 → 볼륨, 디렉토리, 파일
- 입출력 장치 → 파일
- 네트워크 → 파일
📌 시스템 관점
여러 프로그램이 돌아갈 수 있도록 관리할 수 있음
📌 구현 관점
높은 동시성, 이벤트-요청 소프트웨어 구현. 상태변화 대응에 용이
🔍 컴퓨터의 역사
📌 1세대 (1945 ~ 55)
운영체제 없음
📌 2세대 (1955 ~ 65)
트랜지스터의 등장, 배치 시스템 활용
- 한 번에 하나의 작업만 가능
- 카드 리더기, 테이프 드라이브, 라인 프린터 등
- I/O를 하는 동안 CPU는 놀게 된다는 단점이 존재합니다.
📌 3세대 (1965 ~ 80)
집적 회로의 등장, 멀티프로그래밍 시스템의 등장
1️⃣ 멀티프로그래밍 시스템
- 작업 스케줄링 : 어떤 작업을 먼저 실행할지?
- 메모리 관리 : 메모리를 할당, 관리를 어떻게 할지?
- CPU 스케줄링 : CPU 자원을 누구에게 할당할지?
- 보호 : 각 프로그램이 메모리에 접근하는 것을 어떻게 보호할지?
- 스풀링:
입출력 작업을 관리해 시스템의 성능을 향상시킵니다. 특정 I/O가 사용 중일 때 다른 작업이 대기하지 않고 계속 진행할 수 있도록 합니다.
2️⃣ 시분할 기법
프로그램이 동시에 실행하는 것처럼 보이도록 함 → 멀티태스킹 & 멀티스레딩
- 스와핑 (Swapping)
- 기능: 실행 중인 프로세스를 메모리에서 디스크로 이동하거나, 디스크에서 메모리로 다시 가져오는 작업입니다. 이를 통해 메모리를 효율적으로 사용할 수 있습니다.
- 장점: 메모리가 부족한 경우에도 여러 프로세스를 실행할 수 있도록 합니다.
- 가상 메모리 (Virtual Memory)
- 기능: 실제 물리적 메모리보다 더 큰 메모리 공간을 사용할 수 있게 하는 기술입니다. 프로세스는 가상 주소 공간을 사용하며, 운영 체제는 이를 실제 물리적 메모리와 매핑합니다.
- 장점: 메모리 관리의 효율성을 높이고, 프로그램이 더 큰 메모리 공간을 사용할 수 있도록 합니다.
- 파일 시스템 (File System)
- 기능: 데이터를 저장하고 관리하기 위한 구조와 알고리즘을 제공합니다. 파일 시스템은 파일과 디렉토리를 조직화하고 접근할 수 있도록 합니다.
- 장점: 데이터를 쉽게 저장하고 검색할 수 있으며, 보안과 데이터 무결성을 유지합니다.
- 고도화된 CPU 스케줄링 (Sophisticated CPU Scheduling)
- 기능: 여러 프로세스가 CPU를 공평하고 효율적으로 사용할 수 있도록 관리합니다. 다양한 스케줄링 알고리즘이 사용됩니다.
- 예시: 라운드 로빈(Round-Robin), 우선순위 스케줄링, 멀티레벨 큐 스케줄링.
- 동기화 (Synchronization)
- 기능: 여러 프로세스나 스레드가 자원을 안전하게 공유할 수 있도록 관리합니다. 동기화는 상호 배제(Mutual Exclusion)를 보장합니다.
- 기법: 세마포어(Semaphores), 뮤텍스(Mutex), 모니터(Monitor).
- 프로세스 간 통신 (Interprocess Communication, IPC)
- 기능: 프로세스 간에 데이터를 교환할 수 있는 메커니즘을 제공합니다. IPC는 협력적 작업을 가능하게 합니다.
- 기법: 파이프(Pipes), 메시지 큐(Message Queues), 공유 메모리(Shared Memory), 소켓(Sockets).
- 인터랙티브 셸 (Interactive Shell)
- 기능: 사용자가 명령을 입력하고 실행 결과를 즉시 볼 수 있는 환경을 제공합니다. 셸은 명령어 해석기 역할을 합니다.
- 장점: 사용자가 시스템과 상호작용할 수 있는 직관적이고 즉각적인 인터페이스를 제공합니다.
- 보호 (Protection)
- 기능: 시스템 자원과 데이터를 보호하여 사용자 간의 간섭을 방지합니다. 각 사용자는 자신의 데이터와 자원에만 접근할 수 있습니다.
- 기법: 접근 제어 목록(ACL), 사용자 인증, 권한 관리.
📌 4세대 (1980 ~ )
마이크로프로세서의 등장
마이크로프로세서로 더 작고 빨라지고, 스트로지는 더 빠르고 커지고, 개인용 컴퓨터를 가지게 되고, CPU의 부담을 줄이기 위해 특정 작업을 전담하는 I/O 장치를 사용하게 됩니다.
🙋 무어의 법칙 반도체에 집적하는 트랜지스터 수가 2년마다 2배씩 증가한다는 이론
🔍 Multics
Multiplexed Information and Computing Service, 유닉스의 기초가 된 운영체제
현재 사용하는 운영체제 대부분의 개념이 이 때 창안되었습니다.
1️⃣ 계층적 파일 시스템
- 파일 / 디렉토리 / 경로 이름 / 작업 디렉토리: 파일과 디렉토리를 계층적으로 구성하여 사용자가 파일을 체계적으로 관리할 수 있게 했습니다.
- 접근 제어 목록(ACLs): 파일과 디렉토리에 대해 사용자별 접근 권한을 세밀하게 설정할 수 있는 기능을 제공하여 보안을 강화했습니다.
- 항목의 긴 이름: 파일과 디렉토리 이름에 긴 이름을 사용할 수 있게 하여 더 직관적이고 읽기 쉬운 이름을 사용할 수 있었습니다.
- 항목의 여러 이름: 하나의 파일이나 디렉토리에 여러 개의 이름을 부여할 수 있는 기능을 제공하여 유연성을 높였습니다.
- 심볼릭 링크: 파일 시스템 내의 다른 파일이나 디렉토리에 대한 참조를 생성하여 더 편리하게 파일을 관리할 수 있었습니다.
- 저장소 할당량: 사용자별로 저장 공간을 할당하고 제한할 수 있는 기능을 제공하여 시스템 자원을 효율적으로 관리할 수 있었습니다.
- 이동식 장치: 이동식 저장 장치를 지원하여 데이터의 이동성과 백업을 용이하게 했습니다.
- 백업 절차: 정기적인 백업 절차를 통해 데이터의 안전성을 보장했습니다.
2️⃣ 가상 메모리 관리
- 세그멘테이션 및 페이징: 가상 메모리를 세그멘트와 페이지로 나누어 관리함으로써 메모리 사용의 효율성을 높였습니다. 세그멘테이션은 프로그램을 논리적으로 나누는 방식이고, 페이징은 메모리를 고정된 크기의 블록으로 나누어 사용하는 방식입니다.
3️⃣ 명령 셸을 OS 커널과 분리
- 명령 셸을 운영체제 커널과 분리함으로써 시스템의 유연성과 확장성을 높였습니다. 사용자와 OS를 분리한 것과 같은 맥락입니다.
4️⃣ 다이나믹 링크
- 동적 링크를 통해 프로그램이 실행 중에도 라이브러리 코드를 메모리에 로드할 수 있게 하여 메모리 사용 효율성을 극대화하고 업데이트 시의 유연성을 제공합니다.
5️⃣ 고급 언어로 구현 (PL/1)
- 고급 언어로 구현함으로써 코드의 가독성과 유지 보수성을 향상시켰습니다.
6️⃣ 공유 메모리 관리
7️⃣ 논리 디스크 볼륨을 물리 볼륨에 매핑
8️⃣ 보안 시스템 개발
- NCSC로부터 B2 등급을 받고, 후속 운영체제인 Honeywell이 최초로 A1 등급을 받았습니다.
9️⃣ MRDS (Multics Relation Data Store)
- 관계형 데이터베이스와 유사한 개념으로, 현대의 SQL과 비슷합니다.
🔟 스프레드시트 개발
🔍 Unix
켄 톰슨과 C언어 창시자인 데니스 리치가 개발
- C언어로 만들어 이식성을 높였습니다.
- 대부분은 Multics에서 차용했습니다.
- 계층적 파일 시스템
- 프로세스 컨트롤
- fork, exec, wait, exit 등
- Shells
- 명령어를 해석해서 커널로 전달, CLI
- Signals
- 커널이 어플리케이션에게 시그널 전달
🔍 Multics VS Unix 정리
특징 | 멀틱스 (Multics) | 유닉스 (Unix) |
접근 방식 | Top-down 접근 | Bottom-up 접근 |
디자인 및 시스템 프로그래밍 | 150명 | 2명 |
개선 작업 | 추가 50명 | - |
복잡성 및 비용 | 매우 복잡하고 고비용 하드웨어 | 단순성과 사용 용이성, 저비용 하드웨어 |
대학 채택 | - | 대학에서 광범위하게 채택 |
혁신적 아이디어 | 많은 혁신적 아이디어들이 큰 영향 | - |
현대 운영체제의 뿌리 | - | 현대 운영체제의 뿌리 |
댓글