[학습목표]
- 운영체제의 정의, 역할, 목표를 이해한다.
- 운영체제의 발전 과정을 통해 운영체제의 필요성을 살펴본다.
- 운영체제를 구성하는 커널과 인터페이스를 살펴본다.
운영체제 (Operating System)
- 일반 컴퓨터, 노트북, 스마트폰의 전원을 켜면 가장 먼저 만나는 소프트웨어
- PC 운영체제 : 윈도우, MAC OS, 유닉스, 리눅스, ...
- 모바일 운영체제 : iOS, 안드로이드, ...
컴퓨터라고 부르는 이유
- 프로그래밍이 가능한 기계이기 때문이다.
- 컴퓨터의 경우, 일반 기계와는 달리 성능을 높이거나 기능을 추가하려면 프로그램만 변경하면 된다.
임베디드 운영체제
- 스마트 시계, 스마트 TV, 스마트 자동차 등에 탑재된 컴퓨터를 특별히 임베디드 시스템이라고 부른다.
- 임베디드 운영체제는 CPU의 성능이 낮고 메모리 크기도 작은 시스템에 내장하도록 만든 운영체제이다.
- CPU성능이 낮고 메모리 크기도 작으며 디스플레이 크기가 작다보니 특정 작업만 수행한다.
- 임베디드 운영체제가 있는 기계는 기능을 계속 향상할 수 있다.
운영체제의 정의
- 컴퓨터가 데이터를 처리하면 의미있는 자료가 되는데, 이를 정보라고 부른다.
- 그래서 데이터를 가공하여 가치있는 정보로 만드는 모든 기술을 IT라 부른다. 그리고 여기에 통신기술이 빠질 수 없기 때문에 '정보통신기술' 이라고도 부른다.
- 컴퓨터는 크게 하드웨어와 소프트웨어로 구성된다. 소프트웨어는 하드웨어를 제어하여 작업을 수행시키는 명령의 모음, 즉 프로그램이다. 소프트웨어는 하드웨어에 명령을 내려 필요한 작업을 수행해서 데이터를 정보로 바꾼다. (소프트웨어: 레시피, 하드웨어: 조리도구)
- 소프트웨어는 정해진 절차에 따라 하드웨어를 사용하여 데이터를 처리하는데, 크게 응용 프로그램과 시스템 소프트웨어로 나눌 수 있다.
- 응용 프로그램 : 문서 작성을 위한 한글이나 MS워드, 동영상을 보여주는 곰플레이어처럼 특정 작업을 위해 사용하는 프로그램
- 시스템 소프트웨어 : 컴퓨터 하드웨어와 응용 프로그램을 관리하기 위한 소프트웨어이다. 예시로 운영체제와 유틸리티가 있다.
- 컴퓨터에는 다양한 프로그램이 설치되어 있다. 이 프로그램들은 키보드, CPU, 메모리 등 컴퓨터 자원이 공유한다. 근데 만약 저마다 프로그램들이 하드웨어를 먼저 차지하겠다고 싸우면, 컴퓨터는 엉망이 될 것이다. → 응용 프로그램의 잘못된 동작으로 컴퓨터가 망가지는 것을 막기 위해 컴퓨터 전체를 관리하고 운영하는 소프트웨어가 OS라 부르는 운영체제이다.
- 운영체제는 컴퓨터 전체를 관리/운영하는 소프트웨어로 모든 소프트웨어 위에 존재하는 최고 소프트웨어이다.
- 컴퓨터를 관리하기 위한 기본 규칙/절차를 규정하여 컴퓨터 내의 모든 하드웨어와 응용 프로그램을 관리한다.
- 사용자가 자원에 직접 접근하는 것을 막음으로써 컴퓨터 자원을 보호한다. 이를 위해 응용 프로그램과 사용자에게서 모든 컴퓨터 자원을 숨긴다. → 악의적인 사용자가 하드 디스크의 아무 곳에나 데이터를 저장해 다른 사람의 데이터를 지우거나 덮어쓰는 일이 발생XXX
- 대신 사용자가 자원을 이용할 수 있는 다양한 인터페이스를 제공한다.
- 운영체제는 하드웨어의 도움 없이는 작동하기 어려우므로 소프트웨어와 하드웨어의 특성을 모두 갖춘 형태로 운영되며 이를 펌웨어라고 한다.
ROM VS RAM (간략하게 ...)
ROM : Read-Only 메모리로 비휘발성 메모리이다. 뺏다 꼈다 하는 것이 아니다. 운영체제가 시작할 때 ROM이 돌아간다. 그리고 전원을 켰을 때 booting 과정이 이루어지고 윈도우 실행 파일을 RAM에 올려준다.
컴퓨터 구조와 운영체제
- 운영체제는 컴퓨터 자원을 관리하는 소프트웨어이므로 컴퓨터 전원을 켜면 가장 먼저 실행된다.
- 운영체제는 커널과 인터페이스로 나뉜다.
- 커널은 운영체제의 핵심기능을 모아놓은 것으로 모든 컴퓨터 자원을 관리한다.
- 사용자나 응용 프로그램은 커널을 통해서만 컴퓨터 자원에 접근이 가능하다.
- 어떤 사용자나 응용 프로그램도 컴퓨터 자원에 직접 접근할 수 없다.
- 인터페이스를 이용해 터널에 명령을 내리면 인터페이스가 결과를 전달한다.
- 컴퓨터 인터페이스 중 일부는 사용자 인터페이스(UI)
- 문자 기반 인터페이스 → 그래픽 사용자 인터페이스(GUI) → 터치스크린 인터페이스, 음성 인터페이스
- 인터페이스인 키보드로 컴퓨터에 명령을 내리면 인터페이스인 모니터를 통해 결과를 알 수 있다.
운영체제의 역할 (매우 중요!)
- 자원관리: 자원을 응용 프로그램에 나누어 주어 사용자가 원활하게 작업할 수 있도록 돕는다. 자원을 요청한 프로그램이 여러 개라면 적당한 순서로 자원을 배분하고 적절한 시점에 자원을 회수하여 다른 응용 프로그램에 나눠준다.
- 자원보호 (자원숨김): 비정상적인 작업으로부터 컴퓨터 자원을 지킨다.
- 하드웨어 인터페이스 제공: 하드웨어 인터페이스의 지원을 받으려면 드라이버를 컴퓨터에 설치해야 한다. 드라이버는 하드웨어 장치와 상호작용하기 위해 만들어진 컴퓨터 프로그램으로 장치 드라이버, 디바이스 드라이버, ... 라고도 부른다. 운영체제는 하드웨어 인터페이스가 자동으로 설치되게 함으로써 하드웨어를 종류에 상관없이 사용할 수 있게 해준다. 사용자가 복잡한 과정 없이 다양한 장치를 사용할 수 있게 하드웨어 인터페이스 제공한다.
- 사용자 인터페이스 제공: 사용자가 운영체제를 편리하게 사용하도록 지원하기 위한 것이다.
운영체제의 목표
- 자원 관리: 효율성 → 운영체제의 크기를 최소화, 운영체제가 사용하는 코드를 최적화
- 자원 보호: 안정성 → 사용자와 응용 프로그램의 안전 문제와 하드웨어적인 보안 문제를 처리할 수 있어야 한다, 시스템에 문제가 발생했을 때 이전으로 복구하는 결함 포용 기능을 수행해야 한다.
- 하드웨어 인터페이스 제공: 확장성 → 운영체제는 하드웨어의 종류에 상관없이 꽂으면 바로 실행할 수 있는 플러그 앤드 플레이 기능을 제공해야 한다. (다양한 시스템 자원을 컴퓨터에 추가 및 제거하기 편리한 것)
- 사용자 인터페이스 제공: 편리성 → 사용자가 편리하게 작업할 수 있는 환경 제공하는 것이다, 응용 프로그램과 사용자에게 다양한 편리성을 제공하면서도 자원의 낭비 요소를 막을 수 있어야 한다.
운영체제의 역사
- 1940's : 진공간(0, 1) 사용
- 1950's : 일괄 작업 시스템, 운영체제의 등장 (지금과 같은 운영체제X)
- 1960's : 모니터&키보드 탄생 → 대화형 시스템 도입
- 1970's : 분산 시스템
- 1990's : 서버 시스템
- 2000's : P2P 시스템, 클라우드 컴퓨팅
초창기 컴퓨터
- 최초의 컴퓨터, 에니악 (미국)
- 실제 진짜 최초 컴퓨터는 콜로서스 (영국) 이다. 앨런 튜링이 비밀리에 군사 암호해독용으로 만들었다.
- 진공관 소자가 켜지면 1, 꺼지면 0으로 판단하여 컴퓨터가 2진법을 사용하는 계기가 되었다.
- 주변장치X, 운영체제X
- 전선을 연결하여 논리회로를 구성하는 하드와 이어링 방식, 하드와이어링 방식
천공카드 시스템
- 천공카드 리더를 입력장치로, 라인 프린터를 출력장치로 사용
- 카드에 구멍을 뚫어 프로그램을 입력하면 실행 결과를 라인 프린터로 출력
- 하드와이어링 시스템은 전선을 일일이 다시 연결해야 다른 작업 가능했지만 천공카드 시스템은 프로그램만 바꾸면 다른 작업도 가능해 지금의 프로그래밍과 유사한 방식으로 다양한 소프트웨어 개발
- 지금의 프로그래밍 환경과 달리 모든 작업을 한꺼번에 처리해야 하고 프로그램 실행 중간에 사용자가 데이터를 입력하거나 수정하는 것이 불가능했다.
일괄 작업 시스템
- 단순 계산 위주의 작업, 한 번에 한 가지 작업만 수행
- 천공카드 시스템은 필요한 프로그램과 데이터를 동시에 입력해야 작업이 가능
- 이것을 일괄 작업 시스템(batch job system) 또는 일괄 처리 시스템(batch processing system) 이라고 부름
- 진공관을 전선으로 연결했던 초창기의 컴퓨터는 기술 발전을 거쳐 IC라는 칩으로 만들어졌다. 이 칩은 진공관과 전선으로 만들어진 논리회로를 아주 작은 크기로 구현한 것이다.
- 일괄 작업 시스템에서는 작기는 하지만 운영체제(CPU)가 사용되어 메인 메모리가 운영체제 영역과 사용자 영역으로 나뉜다.
- 입력장치X, 출력장치X, 대신 천공카드 리더를 입력장치로, 라인 프린터를 출력장치로 사용했다.
- 천공카드: 카드에 구멍을 뚫어 문자를 입력
- 라인 프린터: 문자만 출력하는 프린터, 한 번에 한 줄씩 출력
대화형 시스템
- 키보드와 모니터가 등장하며 작업 중간에 입력, 중간 결과 값 확인 가능
- 중간 입력 값에 따라 작업의 흐름을 바꾸는 것도 가능
- 컴퓨터와 사용자의 대화를 통해 작업이 이루어진다는 의미로 대화형 시스템 (interactive system)
- 일괄 작업 시스템에서는 단순 계산 위주의 작업만 가능했으나 대화형 시스템이 등장하면서 문서 편집기, 게임과 같은 다양한 종류의 응용 프로그램을 만들 수 있게 되었다.
- 일괄 작업 시스템에서는 프로그램과 데이터가 입력되면 이후에는 CPU만 작동한다. CPU의 작업이 완료되면 최종 결과를 출력한다. 따라서 작업시간을 예측할 수 있었다. 하지만 대화형 시스템에서는 프로그램이 진행되는 동안 입력과 출력이 얼마 만에 완료될지 예측하기 어렵다. 사용자가 얼마 만에 반응할지도 알 수 없다. 그래서 작업시간을 예측할 수 없다.
시분할 시스템
- 1960's 후반에 컴퓨터의 크기가 작아지고 계산 능력이 향상되었다. 하지만 금액이 너무 비쌌고, 한 번에 한가지 일만 처리가 가능했다.
- 그 결과 멀티 프로그래밍 기술이 개발되었다.
- 하나의 CPU로 여러 작업을 동시에 실행하는 기술
- 한 번에 하나의 작업만 가능한 일괄 작업 시스템에 비해 효율성이 뛰어나다.
- 시간을 분할하는 방법 때문에 여러 작업이 동시에 실행되는 것처럼 보인다.
- CPU 사용 시간을 아주 잘게 쪼개어 여러 작업에 나누어준다.
- → 이때 잘게 나뉜 시간 한 조각을 타임 슬라이스라고 한다. 오늘날의 컴퓨터에서는 대부분 시분할 시스템이 사용된다.
- 시분할 시스템에서 동시에 실행되는 작업의 개수를 멀티프로그래밍 수준(LEVEL)이라고 한다.
- 시분할 시스템의 단점은 여러 작업을 동시에 처리하기 위한 추가 작업이 필요하다는 것이다.
- 일괄 작업 시스템에서 메모리의 사용자 영역에는 프로그램이 하나뿐이지만, 시분할 시스템에는 여러 개의 프로그램이 공존한다. 따라서 사용자 메모리를 정리하는 추가 작업이 필요하다. 또한 시스템 내에 많은 양의 작업이 공존할 경우, 중요한 작업이 일정 시간 안에 끝나는 것을 보장하지 못한다. (많은 시간, 추가 시간 소요)
- 예시로, 원자력이나 미사일을 제어하는 시스템 (하드 리얼 타임)은 중요한 작업이 일정 시간 안에 끝나지 않으면 심각한 문제가 발생할 수도 있다. 그래서 특정 시스템에서 일정 시간 안에 작업이 처리되도록 보장하는 시스템이 생겼다. 이를 실시간 시스템이라고 부른다.
실시간 시스템
- 경성 실시간 시스템: 지정한 응답시간을 정확히 지키는 시스템
- 연성 실시간 시스템: 지정한 응답시간을 최대한 지키지만, 어느 정도 융통성이 허용된 시스템
- 특정 시스템에서 일정 시간 안에 작업이 처리되도록 보장하는 것
다중 사용자 시스템
- 하나의 컴퓨터에서 여러 명이 작업할 수 있는 시스템
- 유닉스 개발 당시, 유닉스는 멀티 프로그래밍과 다중 사용자를 지원하는 운영체제이다.
분산 시스템
- 개인용 컴퓨터와 인터넷이 보급되면서 값이 싸고 크기가 작은 컴퓨터를 하나로 묶어서 대형 컴퓨터의 능력에 버금가게 만든 것이 분산 시스템(distributed system)
- 네트워크상에 분산되어 있는 여러 컴퓨터로 작업을 처리하고 그 결과를 상호 교환하도록 구성
클라이언트/서버 시스템
- 클라이언트 : 중앙 서버를 기준으로 확산
- 분산시스템에서는 시스템에 참가하는 모든 컴퓨터의 지위가 동일하기 때문에 컴퓨터가 고장나거나 추가되면 작업을 분배하고 결과를 모으기가 쉽지 않다. (분산시스템의 단점 → 해결책으로 클라이언트/서버 시스템)
- 클라이언트/서버 시스템(client/server system) : 작업을 요청하는 클라이언트와 거기에 응답하여 요청 받은 작업을 처리하는 서버의 이중 구조
- 웹 시스템이 보급된 이후 일반인들에게 대중화되면서 클라이언트/서버 구조도 널리 알려졌다.
- 문제점: 모든 요청이 서버로 집중되어 서버 과부하 됨. 이를 피하려면 많은 서버와 큰 용량의 네트워크가 필요하다.
- → 해결책 : 서버와 네트워크 수를 늘리자
P2P 시스템
- 서버는 중재만 하고, 파일을 얻고자 하는 말단 사용자(peer)가 파일을 가진 말단 사용자로부터 직접 다운로드하는 시스템을 peer-to-peer 시스템이라 하며 P2P 시스템이라 한다.
- 클라이언트/서버 구조의 단점인 서버 과부하를 해결하기 위해 만든 시스템
- 서버를 거치지 않고, 사용자와 사용자를 직접 연결
- mp3 공유에서 시작하여 현재는 메신저에서 사용된다. (MP3 공유 -- (P2P 시스템) --> 메신저(카카오톡))
- 메신저에 로그인하면 먼저 서버에 접속하여 사용자 인증과 출석 등의 정보를 받는다. 사용자가 서버에서 인증을 마치면 상대방과 P2P로 직접 연결된다. (예: 모바일 메신저 카카오톡)
- 메신저와 같이 서버가 존재하는 P2P 시스템도 있지만, 서버가 없는 완전한 P2P 시스템도 있다.
서버가 없는 완전한 P2P 시스템 : 블록체인
- 블록체인은 P2P 시스템 전체에 거래 장부를 분산시킨 뒤 전체 시스템의 50% 이상이 동의할 때만 거래 장부 변경 가능하다.
- → 따라서 장부 하나가 조작되거나 유실되더라도 거래에 영향X
- 현재의 컴퓨팅 기술로는 해킹이 불가능한 시스템
- 대체 불가 토큰 또는 NFT(원본 증명 가능)로 불리는 디지털 자산의 유일성을 증명하는 데 블록체인 사용
클라우드 컴퓨팅 → 네트워크를 이용하여 다른 공간에 있는 컴퓨터에 접속할 수 있는 기능
- 네트워크 기술이 지금처럼 발전하기 전에 분산 시스템은 특정 영역에서만 사용되다가 그리드 컴퓨팅으로 발전하였다.
- 그리드 컴퓨팅 : 여러 곳에 떨어진 컴퓨팅 파워나 소프트웨어를 하나로 묶어 하나의 컴퓨터처럼 사용하는 기술
- 그리드 컴퓨팅은 분산 시스템이 발전된 형태이지만, 컴퓨팅 파워를 크게 필요로 하는 곳이 제한적이라 대중화X
- 클라우드 컴퓨팅(cloud computing)은 하드웨어와 소프트웨어를 클라우드라는 중앙 시스템에 숨기고 사용자는 필요한 서비스만 쉽게 이용하는 컴퓨팅 환경
- 클라우드 컴퓨팅의 하드웨어 구현에 그리드 컴퓨팅 기술 사용
- 그리드 컴퓨팅은 슈퍼컴퓨터와 맞먹는 높은 수준의 컴퓨팅 파워를 제공한다. 기술적으로는 서로 다른 기종의 컴퓨터나 운영체제를 묶어서 사용한다.
- 클라우드 컴퓨팅은 서비스 중심의 환경이라는 것이 가장 큰 차이점
- 클라우드 컴퓨팅은 언제 어디서나 컴퓨팅 파워와 소프트웨어에 접근할 수 있는 유연한 컴퓨팅 환경이다.
- 클라우드 환경은 기존 컴퓨터에서 이루어지던 여러 서비스를 확장된 형태로 발전시킨 것이다.
- (이제는 소프트웨어를 CD, USB 통해 다운X)
사물 인터넷 (Internet of Thing; IoT)
- 사물(thing)이 인터넷에 연결된 시스템을 사물 인터넷(Inertnet of Things; IoT)
- 다양한 사물이 센서와 통신 기능을 내장하여 스스로 통신하며 지능적인 서비스를 제공하는 기술
- 예) 자동차에 무선 인터넷이 연결되면서 소프트웨어 업그레이드나 설정 변경 등을 무선으로 배포하는데 이를 OTA(Over-The-Air) 라 부름. 테슬라, 현대자동차 등에 사용
커널과 인터페이스 (운영체제)
- 운영체제는 커널과 인터페이스로 구성되어 있다.
- 커널 : 프로세스 관리, 메모리 관리, 저장장치 관리와 같은 운영체제의 핵심적인 기능을 모아놓은 것이다. (엔진)
- 운영체제의 성능은 커널이 좌우한다.
- 인터페이스 : 사용자와 응용 프로그램에 인접하여 커널에 사용자의 명령을 전달하고 실행 결과를 사용자에게 알려주는 역할이다.
- 그래픽을 사용한 인터페이스를 GUI(graphical User Interface)라 부른다.
- 같은 커널이라도 다른 인터페이스가 장착되면 사용자에게는 다른 운영체제처럼 보인다. (사실 같은 운영체제)
- 유닉스 커널 : 빠르고 안정적으로 작동하는 운영체제인 반면, 사용자 인터페이스 보잘것X
- 주로, 문자로 명령을 내리는 사용자 인터페이스 사용
- 윈도우 계열 커널
시스템 호출
- 커널이 자신을 보호하기 위해 만든 인터페이스
- 커널은 사용자나 응용 프로그램으로부터 컴퓨터 자원을 보호하기 위해 자원에 직접 접근하는 것을 차단
- 따라서 자원을 이용하려면 시스템 호출이라는 인터페이스를 이용하여 접근해야 한다.
- 직접 접근
- 두 응용 프로그램이 자기 마음에 드는 위치에 직접 데이터를 저장하려고 함
- 다른 사람의 데이터를 지울 수도 있고 내 데이터가 다른 사람에 의해 지워질 수도 있음
- 시스템 호출을 통한 접근
- 응용 프로그램이 직접 하드디스크에 데이터를 저장하지 않고 커널이 제공하는 write( ) 함수를 사용하여 데이터를 저장해 달라고 요청
- 응용 프로그램은 데이터가 하드 디스크의 어느 위치에 어떤 방식으로 저장되는지 알 수 없다. 만약 자신이 저장한 데이터를 읽고 싶다면 read( ) 함수로 시스템 호출을 이용하면 된다.
- 커널이 데이터를 가져오거나 저장하는 것을 전적으로 책임지기 때문에 컴퓨터 자원 관리가 수월
시스템 호출 정리
- 시스템 호출은 커널이 제공하는 시스템 관련 서비스를 모아놓은 것이며 함수 형태로 제공된다. (ex. printf( ))
- 시스템 호출은 커널이 제공하는 시스템 자원의 사용과 연관된 함수
- 응용 프로그램이 하드웨어 자원에 접근하거나 운영체제가 제공하는 서비스를 이용하려 할 때는 시스템 호출을 사용해야 함
- 운영체제는 커널이 제공하는 서비스를 시스템 호출로 제한하고 다른 방법으로 커널에 들어오지 못하게 막음으로써 컴퓨터 자원을 보호
- 시스템 호출은 커널이 제공하는 서비스를 이용하기 위한 인터페이스이며, 사용자가 자발적으로 커널 영역에 진입할 수 있는 유일한 수단
- 시스템 호출과 유사한 용어로 응용 프로그램 인터페이스(Application Programming Interface; API), 시스템 개발자용 키트(System Developer’s Kit; SDK)
- API → DATA (공공데이터포털)
응용 프로그램 인터페이스 (API, 중요!!)
- 응용 프로그램이 자신과 연관된 프로그램을 개발할 수 있도록 제공하는 인터페이스이다.
- 예시) 구글 맵 이용하여 배달 서비스를 개발하려는 개발자들을 위해 구글은 다양한 함수를 제공하는데, 이 함수 집합이 응용 프로그램 인터페이스이다.
- 운영체제에서 제공하는 함수를 이용하여 응용 프로그램을 만든다는 것은 운영체제가 제공하는 API, 즉 시스템 호출을 사용한다는 의미이다.
- 시스템 개발자용 키트(SDK)는 프로그램 개발자를 위해 API 및 API 메뉴얼뿐 아니라 프로그램 개발에 필요한 코드 편집기와 에뮬레이터 같은 각종 개발용 응용 프로그램까지 하나로 묶어서 배포하는 개발 툴이다. (ex. Visual Studio Code)
디바이스 드라이버
- 디바이스 드라이버(device driver)는 커널과 하드웨어의 인터페이스를 담당하며 드라이버라고도 불림
- 마우스와 같이 간단한 제품은 드라이버를 커널이 가지고 있으나, 그래픽카드와 같이 복잡한 하드웨어의 경우 제작자가 드라이버를 제공
커널의 역할 (반드시 암기!!)
- 커널의 가장 중요한 작업은 여러 응용 프로그램을 실행하는 것이다.
- 프로세스 관리 : 다양한 종류의 프로세스에 CPU를 배분하고 작업에 필요한 제반 환경을 제공 (주요 역할)
- 메모리 관리 : 프로세스에 작업 공간을 배치하고 실제 메모리보다 큰 가상 공간을 제공
- → 메모리에는 다양한 프로세스가 자리를 잡음, 커널은 여러 개의 프로세스를 메모리에 배치하는 일을 함.
- 파일 시스템 관리 : 데이터를 저장하고 접근할 수 있는 인터페이스를 제공
- 입출력 관리 : 필요한 입력과 출력 서비스 제공
- 프로세스 간 통신 관리 : 공동 작업을 위한 각 프로세스 간 통신 환경을 지원
단일형 구조 커널
- 단일형 구조 커널은 초창기 운영체제의 구조
- 커널의 핵심 기능을 구현하는 모듈들이 구분 없이 하나로 구성
- 예시) 초기의 유닉스 운영체제 → 초기에 운영체제를 만들 때는 기능을 구현하기에 바빠 모듈을 분리X
- 함수 구현X main()에 다 집어넣음
- 장점 : 모듈이 거의 분리되지 않았기 때문에 모듈 간의 통신 비용 감소, 효율적 운영 가능
- 단점 :
- 모든 모듈이 하나로 묶여 있기 때문에 버그나 오류를 처리하기가 어려움
- 운영체제의 여러 기능이 서로 연결되어 있어 상호 의존성이 높기 때문에 기능상의 작은 결함이 시스템 전체로 확산될 수 있음
- 다양한 환경의 시스템에 적용하기 어려움
- 현대의 운영체제는 매우 크고 복잡하기 때문에 완전 단일형 구조의 운영체제를 구현하기가 어려움
계층형 구조 커널 (Layered Architecture)
- 단일형 구조 커널을 보완하여 나왔다.
- 계층형 구조 커널은 비슷한 기능을 가진 모듈을 묶어서 하나의 계층으로 만들고 계층 간의 통신을 통해 운영체제를 구현하는 방식
- 비슷한 기능을 모아 모듈화를 하였기 때문에, 오류가 발생했을 때 해당 계층만 따로 수정하면 되기 때문에, 디버깅하기에도 쉽다.
- 통신 효율 : 단일 > 계층
마이크로 구조 커널 (엔지니어, 개발자 등이 사용, 일반 사용자는 사용X)
- 계층형 구조 커널의 운영체제는 다양한 하드웨어와 사용자의 요구를 수용하기 위해 계층과 기능을 추가한 형태이다. (계층형 단점)
- 그래서 커널의 크기가 계속 커지고, 필요한 하드웨어의 용량도 늘어났으며, 커널 소스가 방대해짐에 따라 오류를 잡기도 어려워졌다.
- → 이러한 문제를 해결하기 위해 계층형 구조의 접근 방식과 반대되는 접근 방식으로 개발된 것이 마이크로 구조 커널이다.
- 마이크로 구조 커널의 운영체제는 프로세스 관리, 메모리 관리, 프로세스 간의 통신 관리 등 가장 기본적인 기능만 제공한다.
- 구조를 살펴보면, 다른 커널에 비해 운영체제의 많은 부분이 사용자 영역에 구현되어 있다.
- 마이크로 구조 커널은 핵심 서비스만 남겨두고 나머지는 사용자 모드에서 처리하는 구조
- 커널은 메모리 관리와 프로세스 간의 동기화 서비스를 제공, 메모리 관리자와 동기화 모듈은 프로세스 간 통신 모듈로 연결되어 있다.
- 그러므로 커널의 각 모듈은 세분화되어 존재하고 모듈 간의 정보 교환은 프로세스 간 통신을 이용하여 이루어진다.
- 마이크로 구조 커널에서 각 모듈은 독립적으로 작동하기 때문에, 하나의 모듈이 실패하더라도 전체 운영체제가 멈추지 않는다. 또한 커널이 이식하기 쉽고 가벼워서 CPU 용량이 작은 시스템에도 적용할 수 있다.
가상머신
- 운영체제와 응용 프로그램 사이에서 작동하는 프로그램
- 가상머신을 설치하면 응용 프로그램이 모두 동일한 환경에서 작동하는 것처럼 보임
- 맨 처음 운영체제 유닉스는 C언어로 만들어짐, 근데 다른 커널을 가진 운영체제와의 호환성이 떨어져서 문제가 발생하였다.
- C언어의 호환성 문제를 해결한 언어가 자바이다. 자바로 프로그래밍하면 대부분의 운영체제가 작동하기 때문에 코드를 수정할 필요가 없다. 자바가 작동하는 원리는 매우 간단하다. 운영체제 위에 가상머신을 만들고 그 위에서 응용 프로그램이 작동하게 하는 것이다.
- 자바는 유닉스와 윈도우에서 작동하는 다양한 가상머신을 만들어 배포하는데 이를 자바 가상머신(Java Virtual Machine; JVM)이라고 함
- 가상머신을 사용하면 호환성이 높아지지만 응용 프로그램이 가상머신을 통해서만 작동하기 때문에 느려진다는 단점도 있다.
유닉스의 개발과 확산
- 유닉스는 켄 톰프슨, 데니스 리치, 피터 뉴만이 만든 운영체제로 단순하다는 의미를 가짐
- 유닉스는 이식하기 쉬웠던 탓에 인기를 얻게 됨
- 개발 후 소스코드가 공개되어 계속 다른 기종의 컴퓨터에 이식되었으며, 여§ 러 기업과 대학에서 이를 이용한 연구가 진행되어 다양한 기능이 추가됨
GNU와 리눅스
- GNU는 소프트웨어를 돈 주고 사지 말고 누구나 자유롭게 실행, 복사, 수정, 배포할 수 있게 하자고 주장했다. 이러한 정신에 입각해서 만든 소프트웨어에 주어진 라이선스를 GPL이라고 부른다.
- 1991년에 리누스 토르발스가 PC에서 동작하는 유닉스 호환 커널을 작성하여 GPL로 배포하고 이어서 소스코드도 공개한 것이 리눅스의 시작이다.
윈도우 출시
- 사용자 인터페이스보다 더 사용자 친화적이고 경험에 중심을 두는 기술을 UX 라고 부른다.
- 마이크로소프트는 애플 Mac OS의 그래픽 사용자 인터페이스에 자극을 받아 윈도우 운영체제를 출시하고 계속 업그레이드하여 현재는 버전 11까지 나와 있다.
[연습문제]
1. 소프트웨어는 응용 프로그램과 시스템 소프트웨어로 나뉜다.
2. 운영체제의 주요 역할
- 인터페이스 제공
- 컴퓨터 자원 관리
- 자원 보호 및 숨김
3. 운영체제의 목표
- 효율성, 안정성, 확장성
4. 운영체제의 구성 요소
- GUI, 커널, 드라이버 (유틸리티XXX)
5. 나머지 셋과 종류가 다른 것은?
- 드라이버 : 하드웨어적인 ~
- GUI : 소프트웨어적인 ~
- 셸 : 소프트웨어적인 ~ (명령을 기다리고 있는 상태, 파이썬 셸)
- 명령 프롬프트 : 소프트웨어적인 ~
6. 운영체제의 핵심 기능을 모아놓은 것 : 커널
7. 초기의 컴퓨터이며 전선을 바꿔 프로그래밍하는 시스템 : 하드와이어링 시스템
8. 한 번에 하나의 프로그램만 실행할 수 있는 시스템 : 하드와이어링 시스템
9. 키보드와 모니터가 발명되면서 실현 가능하게 된 시스템 : 대화형 시스템
10. CPU 시간을 잘게 나누어 여러 프로그램이 동시에 실행되는 것처럼 보이는 시스템 : Time Sharing system
11. 클라이언트/서버 시스템의 서버 과부하 문제를 해결하기 위해 고안된 시스템 : P2P 시스템
12. 언제 어디서나 컴퓨팅 파워나 소프트웨어에 접근할 수 있는 유연한 컴퓨터 환경을 위해 고안된 시스템 : 클라우드 컴퓨팅
13. 사용자가 커널에 진입할 수 있는 유일한 수단 : 시스템 호출
14. 응용 프로그램이 자신과 연관된 프로그램을 만들 수 있도록 제공하는 인터페이스 : API
15. 프로그램 개발자를 위해 API, 코드 편집기, 에뮬레이터 같은 각종 개발용 응용 프로그램까지 하나로 묶어서 배포하는 개발 툴 : SDK
16. 커널과 하드웨어의 인터페이스를 가리키는 것 : 드라이버
17. 핵심 기능을 구현하는 모듈이 구분없이 하나로 구성된 커널 : 단일형 구조 커널
18. 비슷한 기능을 가진 모듈을 묶어서 하나의 계층으로 만들고, 계층 간 통신을 위해 운영체제를 구현하는 방식의 커널 : 계층형 구조 커널
19. 프로세스 관리, 메모리 관리, 프로세스 간 통신 관리 등 가장 기본 기능만 제공하는 커널 : 마이크로 구조 커널
20. 서로 다른 운영체제에서 동일한 작업환경을 만들어 주는 것 : 가상머신