이 글은 조성호 저자의 '쉽게 배우는 운영체제'를 기반으로 작성한 글입니다.
inflean의 공룡책 강의를 토대로 작성함.
운영체제 소개
운영체제의 정의
운영체제란?
- 컴퓨터 전체를 관리 / 운영하는 소프트웨어로 모든 소프트웨어 위에 존재하는 최고 소프트웨어
- 컴퓨터를 관리하기 위한 기본 규칙 / 절차 규정하여 컴퓨터 내의 모든 하드웨어와 응용 프로그램 관리
- 사용자가 자원에 직접 접근하는 것을 막음으로써 컴퓨터 자원 보호. 이를 위해 응용 프로그램과 사용자에게서 모든 컴퓨터 자원을 숨김
- 대신 사용자가 자원을 이용할 수 있는 다양한 인터페이스 (interface) 제공
- 운영체제는 하드웨어의 도움 없이는 작동하기 어려우므로 소프트웨어와 하드웨어의 특성을 모두 갖춘 형태로 운영되며 이를 펌웨어(firmware)라 함
컴퓨터 구조와 운영체제
운영체제의 정의
- 운영체제는
커널 (kernel)
과 인터페이스(interface)
로 나뉨
- 커널은 운영체제의 핵심 기능을 모아 놓은 것으로 모든 컴퓨터 자원을 관리
- 사용자나 응용 프로그램은 커널을 통해서만 컴퓨터 자원에 접근 가능
- 어떤 사용자나 응용 프로그램도 컴퓨터 자원에 직접 접근할 수 없음

운영체제의 역할
운영체제의 역할
- 자원 관리
- 컴퓨터 시스템 자원을 응용 프로그램에 나눠주어 사용자가 원활히 작업하게 함
- 자원 요청한 프로그램이 여러 개면 적당한 순서로 자원 배분하고 적절한 시점에 자원 회수하여 다른 응용 프로그램에 나눠줌
- 자원 보호
- H/W 인터페이스 제공
- 사용자가 복잡한 과정 없이 다양한 장치를 사용할 수 있게 하드웨어 인터페이스 제공
- CPU, 메모리, 키보드, 마우스 같은 다양한 하드웨어를 일관된 방법으로 사용하도록 지원
- User Interface 제공
- 사용자가 운영체제를 편리하게 사용하도록 지원
예) : 윈도우의 그래픽 사용자 인터페이스 ( GUI )
운영체제의 목표
운영체제의 목표

- 효율성
- 자원을 효율적으로 관리하는 것
- 같은 자원으로 더 많은 작업량 처리하거나, 같은 작업량 처리하는 데 더 적은 자원 사용하는 것
- 안정성
- 작업을 안정적으로 처리하는 것
- 사용자와 응용 프로그램의 안전 문제와 하드웨어적인 보안 문제 처리
- 시스템에 문제 발생 시 이전으로 복구하는 결함 포용 기능 수행
- 확장성
- 다양한 시스템 자원을 컴퓨터에 추가 / 제거하기 편리한 것
- 편리성
- 사용자가 편리하게 작업할 수 있는 환경을 제공하는 것
운영체제의 발전
대화형 시스템
- 키보드와 모니터가 등장하며 작업 중간에 입력, 중간 결과 값 확인 가능.
- 중간 입력 값에 따라 작업의 흐름을 바꾸는 것도 가능
- 컴퓨터와 사용자의 대화를 통해 작업이 이루어진다는 의미로 대화형 시스템 (interactive system)
시분할 시스템
멀티 프로그래밍
- 하나의 CPU로 여러 작업을 동시에 실행하는 기술
- 한 번에 하나의 작업만 가능한 일괄 작업 시스템에 비해 효율성이 뛰어남
- 시간을 분할하는 방법 때문에 여러 작업이 동시에 실행되는 것 처럼 보임.
- CPU 사용 시간을 아주 잘게 쪼개어 여러작업에 나누어줌
- 멀티프로그래밍 시스템의 시간 분배

시분할 시스템
- 시분할 시스템 (time sharing system)은 CPU 사용 시간을 잘게 쪼개어 여러 작업에 나눠줘서 모든 작업을 동시에 처리하는 것 처럼 보임
- 잘게 나누어진 시간 한 조각을 타임 슬라이스 (time slice) 또는 타임 퀀텀 (time quantum)
- 오늘날의 컴퓨터는 대부분 시분할 시스템 사용
- 단점 : 여러 작업을 동시에 처리하기 위한 추가 작업이 필요
- 많은 양의 작업이 공존할 경우, 중요한 작업이 일정 시간에 끝나는 것을 보장하지 못함
- 특정 시스템에서 일정 시간 안에 작업이 처리되도록 보장하는 것이 실시간 시스템 (real-time system)
- 실시간 시스템의 종류
분산 시스템
분산 시스템
- 개인용 컴퓨터와 인터넷이 보급되면서 값이 싸고 크기가 작은 컴퓨터를 하나로 묶어서 대형 컴퓨터의 능력에 버금가게 만든 것이 분산 시스템 (distributed system)
- 네트워크상에 분산되어 있는 여러 컴퓨터로 작업을 처리하고 그 결과를 상호교환 하도록 구성

클라이언트 / 서버 시스템
클라이언트 / 서버 시스템
- 클라이언트 / 서버 시스템 (client / server system) 작업을 요청하는 클라이언트와 요청받은 작업을 처리하는 서버의 이중 구조
- 웹 시스템이 보급된 이후 일반이들에게 알려짐
- 문제점 : 모든 요청이 서버로 집중되어 서버 과부하 됨. 이를 피하려면 많은 서버와 큰 용량의 네트워크가 필요

P2P 시스템
P2P 시스템
- 클라이언트 / 서버 구조의 단점인 서버 과부하를 해결하기 위해 만든 시스템
- 서버를 거치지 않고 사용자와 사용자를 직접 연결
- 냅스터 (mp3 공유 시스템) 에서 시작하여 현재는 메신저나 토렌트 시스템에서 사용

P2P 시스템의 예 : 메신저
- 메신저는 사용자가 서버에서 인증을 마치면 상대방과 P2P로 직접 연결됨
서버가 없는 완전한 P2P 시스템 : 블록체인
- 블록체인 (block chain)은 P2P 시스템 전체에 거래 장부를 분산시킨 뒤 전체 시스템의 50% 이상이 동의할 때만 거래 장부 변경 가능.
- 현재의 컴퓨팅 기술로는 해킹이 불가능한 시스템
- 대체 불가 토큰 또느 NFT (Non-Fungible-Token)로 불리는 디지털 자산의 유일성을 증명하는 데 블록체인 사용
클라우딩 컴퓨팅
클라우딩 컴퓨팅
- 클라우드 컴퓨팅 (cloud computing)은 하드웨어와 소프트웨어를 클라우드라는 중앙 시스템에 숨기고 사용자는 필요한 서비스만 쉽게 이용하는 컴퓨터 환경
- 클라우드 컴퓨팅의 하드웨어 구현에 그리드 컴퓨팅 기술 사용
- 그리드 컴퓨팅은 슈퍼컴퓨터와 맞먹는 높은 수준의 컴퓨팅 파워를 제공하는 것, 클라우드 컴퓨팅은 서비스 중심의 환경이라는 것이 가장 큰 차이점

사물 인터넷
사물 인터넷 (Internet of Thing; IoT)
- 사물(thing)이 인터넷에 연결된 시스템을 사물 인터넷(Internet of Things; IoT)
- 다양한 사물이 센서와 통신 기능을 내장하여 스스로 통신하며 지능적인 서비스를 제공하는 기술
- 예) 자동차에 무선 인터넷이 연결되면서 소프트웨어 업그레이드나 설정 변경 등을 무선으로 배포하는데 이를 OTA(Over-The-Air)라 부름. 테슬라, 현대자동차 등에 사용
운영체제의 구성
커널과 인터페이스
커널
- 프로세스 관리, 메모리 관리, 저장장치 관리와 같은 운영체제의 핵심적인 기능을 모아놓은 것
인터페이스
- 커널에 사용자의 명령을 전달하고 실행 결과를 사용자에게 알려주는 역할
- 그래픽을 사용한 인터페이스를 GUI(Graphical User Interface)라 부름

시스템 호출과 디바이스 드라이버
시스템 호출
- 커널이 자신을 보호하기 위해 만든 인터페이스
- 커널은 사용자나 응용 프로그램으로부터 컴퓨터 자원을 보호하기 위해 자원에 직접 접근하는 것을 차단
직접 접근
- 두 응용 프로그램이 자기 마음에 드는 위치에 데이터를 저장하려고 함
- 다른 사람의 데이터를 지울 수도 있고 내 데이터가 다른 사람에 의해 지워질 수도 있음
시스템 호출을 통한 접근
- 응용 프로그램이 직접 하드디스크에 데이터를 저장하지 않고 커널이 제공하는 write() 함수를 사용하여 데이터를 저장해달라고 요청
- 커널이 데이터를 가져오거나 저장하는 것을 전적으로 책임지기 때문에 컴퓨터 자원 관리가 수월

시스템 호출 정리
- 시스템 호출은 커널이 제공하는 시스템 자원의 사용과 연관된 함수
- 응용 프로그램이 하드웨어 자원에 접근하거나 운영체제가 제공하는 서비스를
이용하려 할 때는 시스템 호출을 사용해야 함
- 운영체제는 커널이 제공하는 서비스를 시스템 호출로 제한하고 다른 방법으로 커널에 들어오지 못하게 막음으로서 컴퓨터 자원을 보호
- 시스템 호출은 커널이 제공하는 서비스를 이용하기 위한 인터페이스이며, 사용자가 자발적으로 커널 영역에 진입할 수 있는 유일한 수단임
- 시스템 호출과 유사한 용어로 응용 프로그램 인터페이스 (Application Programming Interface; API), 시스템 개발자용 키드 (System Developer's Kit; SDK)
디바이스 드라이버
- 디바이스 드라이버 (device driver)는 커널과 하드웨어의 인터페이스를 담당하며 드라이버라고도 불림
- 마우스와 같이 간단한 제품은 드라이버를 커널이 가지고 있으나, 그래픽카드와 같이 복잡한 하드웨어의 경우 제작자가 드라이버를 제공함

커널의 역할과 종류
커널
핵심 기능 | 설명 |
---|
프로세스 관리 | 프로세스에 CPU를 배분하고 작업에 필요한 환경을 제공한다. |
메모리 관리 | 프로세스에 작업 공간을 배치하고 실제 메모리보다 큰 가상공간을 제공한다. |
파일 시스템 관리 | 데이터를 저장하고 접근할 수 있는 인터페이스를 제공한다. |
입출력 관리 | 필요한 입력과 출력 서비스를 제공한다. |
프로세스 간 통신 관리 | 공동 작업을 위한 각 프로세스 간 통신 환경을 지원한다. |
단일형 구조 커널
- 단일형 구조 (monolithic architecture) 커널은 초창기 운영체제의 구조
- 커널의 핵심 기능을 구현하는 모듈들이 구분 없이 하나로 구성

- 장점
- 모듈 간의 통신 비용이 줄어들어 효율적인 운영이 가능
- 단점
- 모든 모듈이 하나로 묶여 있기 때문에 버그나 오류를 처리하기가 어려움
- 운영체제의 여러 기능이 서로 연결되어 있어 상호 의존성이 높기 때문에 기능상의 작은 결함이 시스템 전체로 확산될 수 있음
- 다양한 환경의 시스템에 적용하기 어려움
- 현대의 운영체제는 매우 크고 복잡하기 때문에 와넞ㄴ 단일형 구조의 운영체제를 구현하기가 어려움
계층형 구조 커널
- 계층형 구조 (layered architecture) 커널은 비슷한 기능을 가진 모듈을 묶어서 하나의 계층으로 만들고 계층 간의 통신을 통해 운영체제를 구현하는 방식

마이크로 구조 커널
- 마이크로 구조 (micro architecture) 커널은 프로세스 관리, 메모리 관리, 프로세스 간 통신 관리 등 가장 기본적인 기능만 제공
- 커널의 각 모듈은 세분화되어 존재하고 모듈 간의 정보 교환은 프로세스 간 통신을 이용하여 이루어짐

가상머신
가상머신
- 운영체제와 응용 프로그램 사이에서 작동하는 프로그램
- 가상머신 설치하면 응용 프로그램이 모두 동일 환경에서 작동하는 것처럼 보임
- 자바는 유닉스와 윈도우에서 작동하는 다양한 가상머신을 만들어 배포하는데 이를 자바 가상머신 (Java Virtual Machine; JVM)이라고 함.

운영체제의 더 깊은 역사
유닉스와 리눅스
유닉스의 개발과 확산
- 유닉스는 켄 톰프슨, 데이느 리치, 피터 뉴만이 만든 운영체제로 단순하다는 의미를 가짐
- 유닉스는 이식하기 쉬웠던 탓에 인기를 얻게 됨
- 개발 후 소스코드가 공개되어 계속 다른 기종의 컴퓨터에 이식되었으며, 여러 기업과 대학에서 이를 이용한 연구가 진행되어 다양한 기능이 추가 됨.
다양한 유닉스 버전의 개발

GNU와 리눅스
- 1991년에 리누스 토르발스가 PC에서 동작하는 유닉스 호환 커널을 작성하여 GPL로 배포하고 이어서 소스코드도 공개한 것이 리눅스의 시작