이 글은 "쉽게 배우는 운영체제 (조성호 지음)"을 읽고 주관적으로 작성된 글입니다.
※ 요약
- 운영체제의 정의
- 사용자에게 편리한 인터페이스 환경 제공
- 컴퓨터 자원을 효율적으로 관리하는 소프트웨어
- 운영체제의 역할/목표
- 자원관리 -> 효율성
- 자원 보호 -> 안전성
- 하드웨어 인터페이스 제공 -> 확장성
- 사용자 인터페이스 제공 -> 편리성
- 운영체제 구성
- 커널
- 핵심 기능 - 인터페이스
- 사용자의 명령을 커널에게
- 커널의 결과를 사용자에게
- 커널
- 커널의 종류
- 단일형(Monolithic)
- 모듈이 구분 없이 구성 - 계층형(Layered)
- 비슷한 가진 모듈로 계층을 이루고, 그 계층의 통신으로 구성 - 마이크로(Micro)
- 기본적인 기능만 제공하고, 사용자 영역에서 모듈 구현
- 단일형(Monolithic)
1. 운영체제 소개
1) 일상생활 속의 운영체제
- 디바이스의 운영체제 유무 차이
- 디바이스에는 운영체제가 있을수도, 없을수도 있음
- 임베디드 시스템도 운영체제가 있을 수 있음
- 운영체제가 있는 디바이스의 차이는 기능 추가(Programmable)
2) 운영체제의 필요성
- 컴퓨터 환경에서 사용 규칙이 필요해짐
- 메모리, CPU 등 성능 향상에 따라 여러 작업을 동시에 함으로써 사용 규칙이 요구됨
- 복잡한 작업 환경에서 규칙이 없는 기계는 고장날 수 있음
3) 운영체제의 정의
- 사용자에게 편리하고 안전한 인터페이스 환경 제공
- 컴퓨터 시스템 자원을 효율적으로 관리
4) 운영체제의 역할
- 자원관리
- 자원을 응용프로그램에게 나누어줌
- 적당한 순서로 자원을 배분/회수
- 자원보호
- 악의적 또는 미숙함에 의해 다른 프로그램 영역을 침범하거나 망가뜨리지 않도록 보호
- 하드웨어 인터페이스 제공
- CPU, 메모리, 마우스, 키보드 등 다양한 하드웨어를 복잡한 과정 없이 사용할 수 있도록 인터페이스 제공
- 사용자 인터페이스 제공
- GUI, 터치스크린 등 운영체제를 편리하게 사용할 수 있도록 기능 제공
5) 운영체제의 목표
- 자원관리 -> 효율성
- 적은 자원으로 많은 작업량을 처리하는 것
- 자원보호 -> 안전성
- 사용자 / 응용프로그램의 안전 문제 처리
- 하드웨어 보안문제 처리
- 시스템 문제시 복구하는 결함 포용(fault tolerant) 기능
- 하드웨어 인터페이스 제공 -> 확장성
- 시스템 자원의 추가/제거가 편리하도록 지원
- 플러그 앤 플레이 (plug & play)
- 사용자 인터페이스 제공 -> 편리성
- 사용자가 편리하게 작업할 수 있는 환경을 제공
- 편리성을 위해 효율성이 떨어질 수 있음
2. 운영체제의 역사
1) 개요
- 운영체제의 역사를 보는 것은 운영체제를 이해하는 좋은 방법
- 현재 운영체제의 기능이 어떻게 만들어졌는지?
- P2P, 클라우트 컴퓨팅 환경이 왜 등장하게 되었는지?
2) 시스템 변화 (축약)
1 | 1940년대 | 진공관(0과1) 사용 | 프로그램 실행마다 전선을 다시 연결 | |
2 | 1950년대 | 카드 리더, 라인 프린터 | 일괄 작업 시스템 운영체제 등장 |
-> 프로그램을 바꿀시 카드만 교체 but 실행 중간에 데이터 입출력 불가능 |
3 | 1960년대 초반 | 키보드, 모니터 | 대화형 시스템 | -> 키보드/모니터를 통해 실행중 입출력 but 작업 시간 예측이 어려움 |
4 | 1960년대 후반 | C 언어 | 다중 프로그래밍 기술 개발 시분할 시스템 |
|
5 | 1970년대 | PC | 개인용 컴퓨터 등장 분산 시스템 |
|
6 | 1990년대 | 웹 | 클라이언트/서버 시스템 | |
7 | 2000년대 | 스마트폰 | P2P 시스템 그리드 컴퓨팅 클라우드 컴퓨팅 사물 인터넷 |
- 초창기 컴퓨터 (1940년대)
- 논리회로를 이용한 하드 와이어링
- 전선을 이용한 계산 - 다른 계산(프로그램)을 할 경우 다시 전선을 연결해야함
- 논리회로를 이용한 하드 와이어링
- 일괄 작업 시스템 (1950년대)
- Integrated Circuit (IC) 칩 개발
- 진공관과 전선을 작게 구현 - CPU와 메인메모리가 존재
- 천공카드 리더와 라인 프린터
- 구멍을 뚫어 프로그래밍한 천공카드를 카드리더로 읽음
- 프린터가 결과를 출력
- 프로그램 변경시 다른 카드를 사용 - 그러나 모든 작업은 일괄적으로 처리됨
- 프로그램과 데이터를 동시에 입력해야함
- 프로그램 실행 중간에 데이터 입력/수정이 불가능
- Integrated Circuit (IC) 칩 개발
- 대화형 시스템 (1960년대 초반)
- 키보드/모니터 등장
- 작업 중간에 사용자와 상호작용
- 사용자 입력
- 중간 결과값 출력 - 그러나 작업 시간을 예측하기 어려움
- 응용 프로그램의 입출력 시간
- 사용자가 언제 반응할지
- 시분할 시스템 (1960년대 후반)
- 다중 프로그래밍 기술 개발
- 한 번에 하나의 작업 수행이 낭비라 판단
- 하나의 CPU로 여러 작업을 시분할에 기반한 동시 실행 - 다중 사용자 시스템
- 다중 프로그래밍으로 여러 사람이 동시에 하나의 컴퓨터에서 작업 가능 - 그러나 다중 프로그래밍은 복잡하고 deadline이 보장되지 않음
- 실시간 운영체제(Real-time OS)는 deadline을 보장
- 다중 프로그래밍 기술 개발
- 분산 시스템 (1970년대 후반)
- 개인용 컴퓨터와 인터넷의 보급
- 값싸고 작은 컴퓨터를 묶어 대형 컴퓨터에 버금가는 시스템을 구성
- 네트워크로 여러 컴퓨터가 작업을 처리하고 그 결과를 상호 교환 - 분리된 시스템 자체의 연결을 의미하는 듯
- [???] 이 당시에도 scale up보다 scale out에 대한 관심으로 분산 시스템에 개발되었는지?
- 개인용 컴퓨터와 인터넷의 보급
- 클라이언트/서버 시스템 (1990년대 ~ 현재)
- 분산 시스템에서 모든 컴퓨터의 지위가 동일할 경우 문제 발생
- 컴퓨터 고장 or 추가 작업 분배 - 작업을 요청하는 클라이언트 / 요청을 받아 응답하는 서버로 나눔
- 그러나 서버에만 요청이 집중되어 서버 과부하를 일으킴
- 분산 시스템에서 모든 컴퓨터의 지위가 동일할 경우 문제 발생
- P2P 시스템 (2000년대 초반 ~ 현재)
- 서버 과부하를 줄이기 위해 서버의 역할을 줄인 시스템
- 각 사용자(Peer)는 각각 클라이언트/서버 역할을 모두 함
- Broker 서버는 Peer끼리 연결해주고, 실제 통신은 Peer끼리함
(ex. 파일 검색은 서버가 해주고, 실제 파일 전송은 Peer끼리함)
- 기타 컴퓨팅 환경 (2000년대 초반 ~ 현재)
- 그리드 컴퓨팅
- 필요한 컴퓨팅 자원을 구매하여 사용하는 환경
- 분산 시스템의 한 분야로, 대용량 컴퓨터 pool에서 원격 연결을 통해 대용량 연산 수행
- 그리드 딜리버리 : 웹 하드에서 영상을 받으려하면 이전에 내려받은 컴퓨터로부터 몰래 데이터를 빼서 전달 - SaaS(Software as a Service)
- 그리드 컴퓨팅는 하드웨어적 컴퓨터 통합환경
- 사용자가 필요한 소프트웨어 기능을 이용하고 그만큼 비용을 지불 - 클라우드 컴퓨팅
- 언제 어디서나 응용 프로그램과 데이터를 자유롭게 사용할 수 있는 환경
- 그리드 컴퓨팅과 SaaS를 합쳐놓은 형태 - 사물 인터넷
- 그리드 컴퓨팅
3. 운영체제의 구조
- 컴퓨터 시스템의 구조
1) 커널과 인터페이스
- 운영체제의 구조
- 크게 커널과 인터페이스로 나뉨
- 인터페이스 : 사용자 / 응용 프로그램에 인접
- 커널 : 핵심 기능
- 커널과 인터페이스 정의
- 커널
- 운영체제의 핵심적인 기능을 모아놓은 것
- 프로세스 관리, 메모리 관리, 저장장치 관리 - 인터페이스
- 커널에 사용자 명령을 전달하고 실행 결과를 사용자에게 알려주는 역할
- 자동차의 핸들/브레이크와 계기판
- 커널
- 커널과 인터페이스는 분리 가능
- 유닉스 커널을 사용하는 사용자 인터페이스 shell (csh, tsh, bash 등)
- 유닉스 커널을 사용하는 사용자 인터페이스 Mac OS X
2) 시스템 호출과 디바이스 드라이버
- 시스템 호출
- 자원을 보호하기 위해 만든 인터페이스
- 사용자는 시스템 호출을 통해 자원에 접근할 수 있음
- 다른 방법으로 커널에 들어오지 못하게 하여 자원을 보호
- 사용자가 자발적으로 커널 영역에 진입할 수 있는 유일한 수단
- API와 SDK
- Application Programming Interface
- 응용 프로그램이 자신과 연관된 프로그램을 만들 수 있도록 제공
- 운영체제의 API를 시스템 호출로 정의 가능 (API가 더 큰 개념) - System Developer's Kit
- 프로그램 개발자를 위해 API / API 사용 메뉴얼 / 각종 개발용 응용프로그램을 하나로 묶어 배포하는 개발 툴
- Android Studio
- Application Programming Interface
- 드라이버
- 커널과 하드웨어의 인터페이스
- 디바이스 드라이버
- 커널은 입출력의 기본적인 부분만 제작하여, 하드웨어 제작자에게 전달
- 하드웨어 제작자가 하드웨어의 특성을 반영하여 만든 소프트웨어 - 커널에 포함된 디바이스 드라이버
- 마우스/키보드 같은 복잡하지 않은 디바이스 드라이버는 커널에 포함되어 꽂기만 해도 동작 - 커널에 포함되지 않은 디바이스 드라이버
- 그래픽카드/프린터 같이 크고 복잡한 디바이스 드라이버는 사용자가 직접 설치
3) 커널의 구성
- 커널의 역할
- 프로세스 관리
- CPU 스케줄링
- IPC - 메모리 관리
- 프로세스 적재
- 가상 메모리 - 파일 시스템 관리
- 데이터 쓰기/읽기 인터페이스 제공 - 입출력 관리
- I/O 서비스 제공
- 프로세스 관리
- 커널의 종류
- 단일형 커널(Monolithic)
- 모듈들이 구분 없이 하나로 구성
- MS-DOS, VMS, 초기 Unix 등
- 오버헤드가 적어 성능이 비교적 좋은듯
- 복잡하여 디버깅이 어려움 - 계층형 커널(Layered)
- 비슷한 기능을 가진 모듈들을 묶어서 하나의 계층을 이루고, 계층 간의 통신을 하는 형태
- 오늘 날의 대부분 운영체제(윈도우 등)
- Monolithic에 비해 디버깅이 쉬워짐 - 마이크로 커널(Micro)
- 커널의 크기가 계속 커짐 / 필요한 하드웨어 용량이 증가 / 커널의 방대함으로 오류를 잡기 어려움
- 가장 기본적인 기능만 제공
- 나머지 기능은 사용자 영역(user mode)에서 직접 모듈 개발
- 이식성이 좋고 커널이 가벼워짐
- 단일형 커널(Monolithic)
4) 가상머신
- JVM
- C언어는 low-level 언어로 시스템 프로그래밍에 적합함
- 그러나 서로 다른 커널(ex. 윈도우와 유닉스)에서의 호환성이 떨어짐
- Java의 경우, 운영체제 위에 가성머신을 만들고, 그 위에서 응용 프로그램이 동작하게 만듦
- 따라서, 응용프로그램은 동일한 환경에서 동작하는 것처럼 보임
- OS
- VMware / VirtualBox와 같이 OS위에 다른 OS를 올리는 가상머신도 있음
4. [심화] 운영체제의 종류와 역사
- 정리 생략
'책읽기' 카테고리의 다른 글
[쉽게 배우는 운영체제](요약)[Part-1][Ch-2] 컴퓨터의 구조와 성능 향상 (0) | 2021.07.17 |
---|---|
[스프링 인 액션][Part-1 스프링 기초][Ch-1] 스프링 시작하기 (0) | 2021.07.17 |
[파이썬 알고리즘 인터뷰][문자열] 그룹 애너그램 (중요) (0) | 2021.07.16 |
[파이썬 알고리즘 인터뷰][문자열] 가장 흔한 단어 (중요) (0) | 2021.07.16 |
[파이썬 알고리즘 인터뷰][문자열] 로그 파일 재정렬 (중요) (0) | 2021.07.16 |