"쉽게 배우는 운영체제"라는 책을 읽고 간단하게 정리한 게시물입니다.
운영체제의 필요성
-
컴퓨터는 운영체제가 없어도 작동하는가?
작동함(e.g. ANIAC).
운영체제가 없어도 컴퓨터라고 부르는 이유는 프로그래밍이 가능했기 때문.
하지만 새로운 기능을 구현하려면 매번 회로를 변경해야하고, 복잡한 기능 구현하기 어려웠음
-
운영체제가 있는 기계와 없는 기계의 차이
- 운영체제가 없는 기계 : 전선으로 고정되어 정해진 계산만 가능
- 운영체제가 있는 기계 : 새로운 기능의 추가나 성능의 변경이 가능해, 성능 및 효율성의 향상을 꾀할 수 있다.
ex) 유선 전화기와 스마트폰의 차이 느낌
-
운영체제는 성능을 향상하는 데에만 필요한가?
자원 관리 역할도 함 : 여러 프로그램을 동시에 실행할 수 있음
-
운영체제는 자원을 어떻게 관리하는가?
- 컴퓨터에 부착된 모든 장치, 하드디스크, 마우스, 사운트카드, 그래픽카드 등을 컴퓨터 자원이라고 함
- 운영체제는 사용자가 직접 자원에 접근하는 것을 막음으로써 자원을 보호하고 관리
- 예를 들어, 사용자가 하드디스크에 데이터를 저장하려는 경우, 사용자는 하드디스크에 특정 위치에 데이터를 저장할 수 없음.
- 만약, 사용자가 직접 위치를 지정해 저장할 수 있다면, 데이터를 지우거나 덮어쓰는 일이 발생할 수도 있음.
--> 이런 상황을 방지하기 위해, 운영체제는 응용 프로그램과 사용자에게 모든 자원을 숨김
-
사용자는 숨어 있는 자원을 어떻게 이용할 수 있는가?
- 운영체제는 자원을 이용할 수 있는 여러 가지 방법을 제공.
- 사용자가 저장하려는 데이터를 운영체제에 주면, 운영체제가 하드디스크의 적당한 곳에 데이터를 저장하고 번호표를 줌. 번호표를 통해 데이터를 다시 찾을 수 있음
==> 이렇게 사용자가 컴퓨터를 사용할 수 있도록 해주고 그 결과를 알려주는 것을 인터페이스(interface)라고 함.
** 펌웨어(firmware) : 운영체제의 목적은 하드웨어를 조정하고 관리하는 것이므로, 하드웨어의 도움 없이 작동하기가 어렵다. 그래서 운영체제를 소프트웨어와 하드웨어의 결합 형태인 펌웨어라고 부르기도 한다.
운영체제의 정의
운영체제란 "사용자에게 편리한 인터페이스 환경을 제공하고 컴퓨터 시스템의 자원을 효율적으로 관리하는 소프트웨어"이다.
하드웨어와 사용자 사이에 소프트웨어가 있고, 소프트웨어 중에선 운영체제가 다른 응용 프로그램보다 아래에, 기반이 되는 느낌!
운영체제의 역할
-
자원 관리
: 컴퓨터로 동시에 여러가지 프로그램을 실행할 때, 키보드, 네트워크카드 등의 컴퓨터 자원을 적절히 나누어주어 사용자가 원활하게 작업할 수 있게 도움
-
자원 보호
: 컴퓨터 내의 많은 자원을 관리 뿐만 아니라 악의적인 사용자나 미숙한 사용자로부터 자원을 보호
-
하드웨어 인터페이스 제공
: 키보드, 마우스, CPU, 메모리 등과 같이 다양한 하드웨어를 사용할 때, 복잡한 과정 없이 사용할 수 있도록 하드웨어 인터페이스를 제공
-
사용자 인터페이스 제공
: 사용자가 운영체제를 편리하게 사용하도록 지원. 지금은 운영체제가 GUI를 제공하므로 대부분의 작업을 마우스로 수행.
운영체제의 목표
-
효율성(자원관리)
: 자원을 효율적으로 관리하는 것. 이를 위해, 일반적으로 운영체제의 크기를 최소화하고 운영체제가 사용하는 코드를 최적화해야한다.
-
안정성(자원보호)
: 운영체제는 하드웨어 전체를 관리하는 소프트웨어이므로, 운영체제가 불안정하면 모든 작업이 불안할 수 밖에 없다. 또한, 안정성은 운영체제의 역할 중 "자원 보호"와 연관된다. 운영체제가 안정적이려면 사용자와 응용 프로그램의 안전 문제와 하드웨어적인 보안 문제를 처리할 수 있어야하고, 시스템에 문제가 발생했을 때 이전으로 복구하는 fault tolerant기능을 수행해야 한다.
-
확장성(하드웨어 인터페이스 제공)
: 운영체제는 다양한 시스템 자원을 추가하거나 제거하기 편리해야한다. 즉, 확장성이 좋아야 한다.
-
편리성(사용자 인터페이스 제공)
: 사용자가 편리하게 작업할 수 있는 환경을 제공하는 것 또한 운영체제의 목표이다.
운영체제의 역사
- 대화형 시스템(1960년대 초반)
- 기존의 일괄 작업 시스템은 프로그램과 데이터를 같이 입력하여 작업의 최종결과만 얻을 수 있었으나, 작업 중간에 새로운 값을 입력하거나 데이터를 변경하는 것이 불가능했다.
- 키보드와 모니터가 개발됨으로써 작업 중간에 사용자가 입력을 하거나 사용자에게 중간 결과값을 보여줄 수 있게 되면서, 프로그램이 제대로 진행되고 있는지 확인할 수 있고, 진행되는 중간에 사용자로부터 입력을 받을 수 있어 입력값에 따라 작업의 흐름을 바꾸는 것도 가능해짐
- 이러한 시스템은 사용자의 대화를 통해 작업이 이루어지므로 대화형 시스템(interactive system)이라고 일컫음.
- 하지만, 대화형 시스템의 경우 입출력이 있어 작업 시간을 예측하기 어려웠다.
- 시분할 시스템(1960년대 후반)
-
시분할 시스템의 개념
-
다중 프로그래밍 기술이 개발됨 ; 다중프로그래밍은 하나의 CPU로 여러 작업을 동시에 실행하는 기술로, 한 번에 하나의 작업만 가능한 일괄 작업 시스템에 비해 효율성이 뛰어남
-
다중 프로그래밍 시스템에선 CPU 사용 시간을 아주 잘게 쪼개 여러 작업에 나눠줌.
==> 이러한 시간 분배가 매우 빠른 속도로 반복되면 A,B,C작업이 동시에 실행되는 것처럼 보인다.
-
이렇게 여러 작업을 조금씩 처리하여 작업이 동시에 이뤄지는 것처럼 보이게 하는 것을 시부할 시스템(time sharing system or multitasking)이라고 함.
- 이 때, 잘게 나뉜 시간 한 조각을 타임 슬라이스 또는 타임 퀀텀이라고 함.
-
시분할 시스템의 단점은 여러 작업을 동시에 처리하기 위한 추가 작업이 필요하다는 것 + 많은 양의 작업이 공존할 경우, 중요한 작업이 일정 시간 안에 끝나는 것을 보장하지 못함.
-
다중 사용자 시스템
- 시분할 시스템에서 동시에 실행되는 작업의 개수를 멀티프로그래밍 수준 또는 멀티 프로그래밍 정도라고 한다.
- 시분할 시스템에서 여러 작업을 동시에 실행할 수 있으므로, 여러 사람이 동시에 작업하는 것, 다중 사용자 시스템을 가능하게 했다.
- 분산 시스템(1970년대 후반)
- 개인용 컴퓨터와 인터넷 덕분에 새로운 컴퓨팅 환경이 조성됨
- 당시에 복잡한 계산이나 많은 양의 데이터를 처리하기 위해 메인프레임이라는 고가의 대형 컴퓨터를 사용
- 하지만 개인용 컴퓨터와 인터넷의 보급으로 크기가 작은 컴퓨터들을 하나로 묶어 대형 컴퓨터에 버금가는 시스템을 구축 ==> 분산 시스템(distributed system)
- 분산 시스템은 네트워크상에 분산되어 있는 여러 컴퓨터로 작업을 처리하고, 그 결과를 상호 교환하도록 구성한 시스템
- 클라이언트/서버 시스템(1990~현재)
- 분산시스템은 시스템에 참가하는 모든 컾뮤터가 동일한 지위이기 때문에, 컴퓨터가 고장나거나 추가되면 작업을 분배하고 결과를 모으기 어려움
- 클라이언트/서버시스템은, 모든 컴퓨터의 지위가 동일한 분산 시스템과 달리 작업을 요청하는 클라이언트와 거기에 응답하여 요청받은 작업을 처리하는 서버, 이중 구조로 나뉨
- 웹 시스템이 전형적인 클라이언트/서버 구조를 이룸
- 클라이언트/서버 구조의 문제는 서버 과부하 - 모든 요청이 서버로 집중되기 때문
- P2P 시스템(2000년대 초반~현재)
- P2P 시스템의 개념
- 서버의 부하를 줄일 수 있는 새로운 시스템
- peer는 말단 노드, 사용자의 컴퓨터를 가리키며, P2P는 서버를 거치지 않고 사용자와 사용자를 직접 연결한다는 뜻
- P2P 시스템에서는 서버가 파일 검색만 맡고 사용자 간에 파일 전송이 이루어지기 때문에 서버의 부하가 적음
- P2P 시스템의 예 : 메신저
- P2P기술은 불법 소프트웨어 기술 규제 때문에 발전하지 못하다가, 메신저 프로그램에 도입되어 큰 발전 이룩
- 메신저에 로그인을 하면 먼저 서버에 접속해 사용자 인증(certification)과 출석(presence) 등의 정보 받음
- 출석만 완료되면 서버를 거치지 않고 사용자 간의 직접 채팅 or 데이터 전송 가능
- P2P 시스템의 예 : 파일 공유
- 서버가 있는 P2P시스템
- 같은 파일을 가진 사람으로부터 데이터를 나누어 받음. 10명한테 파일 하나를 받는 느낌
==> 속도가 10배 빠를 뿐만 아니라, 데이터를 받는 도중 1~2명이 프로그램을 중단해도 다른 사람에게 나머지를 받을 수 있음.
- 서버가 없는 P2P시스템
- 비트코인의 블록체인 : 서버가 없는 완전한 P2P 방식으로 거래 장부의 문제를 해결
==> 거래 장부가 중앙에 집중되지 않고, P2P시스템 전체에 거래 장부를 분산시킴으로써 하나의 장부가 조작되거나 유실되더라도 거래에 영향을 미치지 않음.
- 기타 컴퓨팅 환경(2000년대 초반~현재)
- 그리드 컴퓨팅
- 필요한 기간만 컴퓨터를 사용하고 비용을 지불하는 방식
- 분산 시스템의 한 분야로, 서로 다른 기종의 컴퓨터들을 묶어 대용량의 컴퓨터 풀을 구성하고, 이를 원격지와 연결하여 대용량 연산을 수행하는 컴퓨팅 환경
ex) 웹하드에서 파일 다운시 서버에서 부는게 아니라 전에 그 파이릉ㄹ 내려받은 컴퓨터로부터 몰래 데이터를 빼와서 전달함(grid delivery)
cf) 그리드 컴퓨팅이 하드웨어적인 컴퓨팅 환경의 통합이라면 SaaS(Software as a Service)는 사용자가 필요할 때 소프트웨어 기능을 이용하고 그만큼만 비용을 지불하는 개념
- 클라우드 컴퓨팅
- 그리드 컴퓨팅 + SaaS
- 클라우드에 백업하는거
- 사물 인터넷
- 사물에 센서와 통신 기능을 내장하여 인터넷에 연결하는 기술
ex) 지하철, 버스의 도착 예정 시간을 알려주고 전자 제품을 스마트폰으로 제어
운영체제의 구조
1. 커널과 인터페이스
- 커널은 프로세스 관리, 메모리 관레, 저장장치 관리와 같은 운영체제 핵심적인 기능을 모아놓은 것
- 인터페이스는 커널에 사용자의 명령을 전달하고 실행 결과를 사용자에게 알려주는 역할
- 운영체제는 커널과 인터페이스를 분리하여, 같은 커널을 사용하더라도 다른 인터페이스를 가진 혀애로 제작 가능
2. 시스템 호출과 디바이스 드라이버
2.1 시스템 호출
-
응용 프로그램과 커널의 인터페이스
-
시스템 호출은 커널이 자신을 보호하기 위해 만든 인터페이스
-
커널은 사용자나 응용 프로그램으로부터 컴퓨터 자원을 보호하기 위해 자원에 직접 접근하는 것을 차단
==> 자원을 이용하려면 시스템 호출이라는 인터페이스를 이용해 접근해야 함
-
직접 접근 vs 시스템 호출을 통한 접근
- 직접 접근 : 사용자가 모든 것을 알고, 처리해야 함. 사용자의 부주의로 망칠 수 이씅ㅁ
- 시스템 호출을 통한 접근 : 누군가에게 요청해 작업의 결과만 받는 방식. 결과만 받으면 됨. 사용자의 오작동이나 악의에 따라 망가지는 일이 없음
==> 운영체제는 사용자나 응용 프로그램이 하드웨어에 직접 접근하지 못하도록 막음으로써 컴ㅍ터 자원을 보호. 대신 자우너을 사용할 수 있도록 인터페이스를 제공하는데, 이게 바로 시스템 호출!
-
결론
- 시스템 호출은 커널이 제공하는 시스템 자원의 사용과 연관된 함수
- 응용 프로그램이 하드웨어 자원에 접근하거나 운용체제가 제공하는 서비스를 이용하려 할 때는 시스템 호출을 사용해야 함
-
운영체제는 커널이 제공하는 서비스를 시스템 호출로 제한하고 다른 방법으로 커널에 들어오지 못하게 막음으로써 컴퓨터 자원을 보호
-
시스템 호출을 커널이 제공하는 서비스를 이용하기 위한 인터페이스, 사용자가 자발적으로 커널 영역에 진입할 수 있는 유일한 수단
2.2 드라이버
- 커널과 하드웨어의 인터페이스를 담당
- 커널은 입출력의 기분적인 부분만 제작하고, 하드웨어의 특성을 반영한 소프트웨어를 하드웨어 제작자에게 받아 커널이 실행될 때 함께 실행되도록 함.
==> 이 때 하드웨어의 특성을 반영한 소프트웨어를 디바이스 드라이러라고 함
- 시스템 호출을 거치지 않고 커널에 진입할 수 없지만, 드라이버는 커널이 제공하는 것도 있고, 하드웨어 제작자가 제공하는 것도 있으므로 드라이버를 거치지 않고 커널에 진입할 수 있다.
3. 커널의 구성
- 커널이 주로 하는 일은 프로세스 관리, 메모리 관리, 시스템 관리, 입출력 관리, 프로세스 간 통신 관리 등이 있다.
핵심 기능 | 설명 |
---|
프로세스 관리 | 프로세스에 CPU를 배분하고 작업에 필요한 제반 환경을 제공 |
메모리 관리 | 프로세스에 작업 공간을 배치하고 실제 메모리보다 큰 가상 공간을 제공 |
파일 시스템 관리 | 데이터를 저장하고 접근할 수 있는 인터페이스를 제공 |
입출력 관리 | 필요한 입력과 출력 서비스를 제공 |
프로세스 간 통신 관리 | 공동 작업을 위한 각 프로세스 간 통신 환경을 지원 |
- 커널은 이러한 기능을 어떻게 구현하는가에 따라 단일형 구조 커널, 계층형 구조 커널, 마이크로 구조 커널로 구분
3.1 단일형 구조 커널
-
단일형 구조(monolithic architecture)커널은 초창기의 운영체제 구조로, 커널의 핵심 기능을 구현하는 모듈들이 구분 없이 하나로 구성됨
-
단일형 구조에 속하는 대표적인 운영체제는 MS-DOS, VMS, 초기의 유닉스 운여체제
-
함수를 거의 사용하지 않고 main()에 모든 기능을 구현한 형태
-
장점
- 모듈이 거의 분리되지 않았기 때문에 모듈 간의 통신 비용이 줄어들어 효율적 운영이 가능
(프로그램에서 main()에 모든 기능을 넣음녀 함수를 호출하는 오버헤드가 없어서 프로그램이 빨라지는 것과 같은 이치)
-
단점
- 모든 모듈이 하나로 묶여 있기 때문에 버그나 오류를 처리하기가 어려움
- 운영체제의 여러 기능이 서로 연결되어 있어 상호 의존성이 높기 때문에 기능상의 작은 결함이 시스템 전체로 확산될 수 O
- 다양한 환경의 시스템에 적용하기 어려움. 이식성이 낮음(이식하려면 수정이 필요한데, 단일형 구조에서는 수정이 어렵기 때문).
- 현대 운영체제를 단일형으로 구현하기엔 너무 크고 복잡
3.2 계층형 구조 커널
- 계층형 구조(layered architecture)커널은 단일형 구조 커널이 발전한 형태로, 비스한 기능을 가지 ㄴ모듈을 묶어서 하나의 계층으로 만들고, 계층 간의 통신을 통해 운영체제를 구현하는 방식
- 장점
- 비슷한 기능을 모아 모듈화했기 때문에 단일형 구조보다 버그나 오류를 쉽게 처리할 수 있음
- 해당 계층만 따로 수정하면 되기 때문에 디버깅이 쉽다
- 마이크로소프트의 윈도우르 ㄹ비롯해 오늘날의 운영체제는 대부분 이 구조로 이뤄져 있음
3.3 마이크로 커널 구조
-
계층형 구조의 접근 방식과 반대로 개발된 커널이 마이크로 구조(micro architecture) 커널
-
마이크로 구조 커널의 운영체제는 프로세스 관리, 메모리 고나리, 프로세스 간 통신 관리 등 가장 기본적인 기능만 제공
-
다른 커널에 비해 운영체제의 많은 부분이 사용자 영역에 구현되어 있음
-
커널은 메모리 관리와 프로세스 간의 동기화 서비스를 제공하고, 메모리 관리자와 동기화 모듈은 프로세스 간 통신 모듈로 연결되어 있음
==> 각 모듈은 세분화되어 존재하고, 모듈 간의 정보 교환은 프로세스 간 통신을 이용하러 이뤄짐
- chappi - OS는 할껀데 핵심만 합니다 1편에서 발췌
-
장점
- 각 모듈은 독립적으로 작동하기 때문에 하나의 모듈이 실패하더라도 전체 운영체제가 멈추지 않음
- 많은 컴퓨터에 이식하기 쉽고 커널이 가벼워 CPU 용량이 작은 시스템에도 적용 가능
-
이 구조를 사용하는 대표적인 운영체제인 마하는 애플의 PC 운영체제인 OS X와 모바일 운영체제인 IOS의 커널로 사용되어 유명해짐
4 가상머신
- 가상머신은 운영체제와 응용프로그램 사이에서 작동하는 프로그램으로, 가상 머신을 설치하면 응용 프로그램이 모두 동일한 환경에서 작동하는 것처럼 보임
- 개발자가 하나의 코드만 만들면 여러 운영체제에서 똑같이 실행할 수 있음
- 가상머신을 사용하면 호환성이 높아지지만 응용 프로그램이 가상 머신을 통해서만 작동하기 때문에 느려진다는 단점도 O