01. Operating System Intro

Jacob Kim·2024년 1월 27일
0

Operating System

목록 보기
1/4
post-thumbnail

Ch 01. 운영체제의 소개

01. 운영체제의 개념

컴퓨터 시스템은 사용자, 소프트웨어, 하드웨어로 구성된다. 운영체제는 사용자가 하드웨어에 접근할 수 있는 유일한 수단이고, 사용자가 응용 프로그램을 실행할 수 있는 기반환경을 제공하여 컴퓨터를 편리하게 사용할 수 있도록 도와주고, 하드웨어를 효율적으로 사용할 수 있도록 다양한 기능을 제공하는 소프트웨어이다.

(1) 운영체제의 구성요소

사용자
어떤 일(작업)을 수행하려고 컴퓨터를 사용하는 사람이나 장치 또는 다른 컴퓨터를 의미한다.
소프트웨어
컴퓨터가 기능을 수행하는 데 필요한 모든 프로그램을 의미한다. 시스템 소프트웨어, 유틸리티, 응용 프로그램 등으로 구성된다.
시스템 소프트웨어
컴퓨터 자원을 관리하고 응용 프로그램의 실행을 지원하여 컴퓨터를 제어하는 프로그램이다.
운영체제를 비롯해 장치 드라이버 등으로 구성된다.
유틸리티
응용 프로그램보다 작지만 컴퓨터의 여러 처리 과정을 보조하여 시스템을 유지하고 성능을 개선하는 프로그램으로 운영체제를 돕는 역할을 하며 필요에 따라 사용자나 운영체제가 메모리 상주 프로그램으로 설치하기도 한다.
응용 프로그램
특정 작업을 수행하려는 목적, 즉 어떤 문제를 해결하려고 사용자나 전문가가 만든 프로그램이다. 웹 브라우저, 워드 프로세서, 게임, 이미지 편집 프로그램 등이 이에 해당한다.

하드웨어
기본 연산 자원을 제공하는 프로세서(CPU : 중앙처리장치), 메모리, 주변장치 등으로 구성된다.

(2) 운영체제의 역할
컴퓨터 시스템은 여러 사용자가 사용할 수 있으며 다양한 응용 프로그램이 있을 수 있다. 운영체제는 다양한 응용 프로그램이 하드웨어, 즉 컴퓨터 자원을 효율적으로 사용할 수 있도록 관리하고 조정하는 역할을 한다. 즉 사용자와 하드웨어 사이의 중간 매개체를 응용 프로그래므이 실행을 제어하고, 자원을 할당 및 관리하며, 입/출력 제어 및 데이터 관리와 같은 서비스를 제공하는 소프트웨어로 정의한다.
하드웨어 및 사용자, 응용 프로그램, 시스템 프로그램 사이에서 인터페이스를 제공한다.
프로세서, 메모리, 입/출력 장치, 통신장치 등 컴퓨터 자원을 효과적으로 활용하려고 조정/관리 한다.
메일 전송, 파일 시스템 검사, 서버 작업 등 높은 수준의 서비스를 처리하는 응용 프로그램을 제어한다.
다양한 사용자에게서 컴퓨터 시스템을 보호하려고 입/출력을 제어하며 데이터를 관리한다.

인터페이스는 자동화의 핸들 및 계기판과 같다. 자동차는 엔진과 바퀴로 움직이지만 운전자가 핸들로 조정하고 계기판을 통해 현재 주행 사오항을 인지한다. 마찬가지로 컴퓨터는 CPU와 메모리로 명령을 처리하지만 사용자가 키보드나 마우스로 자료를 입력하고 출력 결과를 얻는다. 즉 운영체제 인터페이스를 통해서만 컴퓨터 자원을 사용할 수 있다.

조정자
컴퓨터 시스템은 하드웨어와 소프트웨어, 이 둘 사이를 오가는 데이터로 운영된다. 운영체제는 이 운영 요소를 적절하게 사용할 수 있도록 제어하면서 사용자와 응용 프로그램 간에 통신할 수 있게 한다. 직접 다른 프로그램이 수행하는 특정 작업을 하는 것이 아니라 이 작업을 할 수 있는 환경만 제공하는 조정자인 셈이다. 예를 들면 워드프로세서 역할을 직접 하는 것이 아니라 워드프로세서가 제 기능을 할 수 있도록 도와준다.
자원 할당자 또는 관리자
운영체제는 각 응용 프로그램에 필요한 자원을 할당하는 자원 할당자다. 컴퓨터 자원을 올바른 순서로 할당해야 원하는 업무를 제대로 수행할 수 있는데, 여러 응용 프로그램이 동일한 컴퓨터 자원을 요구하면 충돌이 발생할 수 있다. 이때 운영체제는 컴퓨터 시스템을 공정하고 효율적으로 운영하기 위해 자원을 할당하는 방법을 결정하는 관리자 역할을 한다.
응용 프로그램과 입/출력 장치 제어자
운영체제는 다양한 입/출력 장치와 응용 프로그램을 제어하는 역할을 한다. 컴퓨터 시스템을 부적절하게 사용하거나 오류가 발생하는 것을 방지하려고 하드웨어 사용을 조정하고 응용 프로그램의 실행을 제어한다. 특히 입/출력 장치를 동작시키고 통제하는 핵심 역할을 한다.

02. 운영체제의 발전 목적

운영체제의 목적을 알면 운영체제의 설계 목표와 기능, 운영체제를 배우는 이유를 이해할 수 있다. 운영체제는 크게 다음 세 가지 목적으로 발전해왔다. 이 중 편리성과 효율성 목적은 서로 상반될 수 있는데, 과거에는 편리성보다는 효율성을 중요시하며, 대부분의 운영체제 이론은 컴퓨터 자원의 최적 이용에 더 관심을 기울였다.

(1) 편리성 : 사용자에게 편리한 환경을 제공
사용자가 편리하게 작업할 수 있는 환경을 제공하는 것이 운영체제의 목표이다. 이는 운영체제의 역할 중 '사용자 인터페이스 제공'과 연관된다. 운영체제는 사용자가 프로그램을 효율적으로 실행할 수 있는 환경을 제공해야 한다. 사용자가 프로그램을 편리하게 개발할 수 있는 환경뿐만 아니라 응용 프로그램에 대한 사용자 인터페이스, 즉 사용자와 컴퓨터 시스템이 정보 및 명령을 상호 교환할 수 있는 인터페이스를 제공해야 한다.

(2) 효율성 : 시스템 성능 향상
효율성은 사용자가 많은 대형 컴퓨터 시스템에서 특히 중요하다. 대형 컴퓨터 시스템은 대부분 고가이기 때문에 효율적으로 사용해야 하는데, 운영체제는 각 프로그램을 유기적으로 결합하여 시스템 전체 성능을 향상시켜 왔다. 일반적으로 시스템의 성능은 같은 기준에 따라 평가한다.
처리량
시스템의 생산성을 나타내는 대표적인 지표로, 단위시간당 처리하는 작업량이다.
지연/응답 시간
사용자가 시스템에 작업을 의뢰한 후 반응을 얻기까지 걸린 시간, 즉 작업을 완료하기 까지 걸린 시간이다. 시분할 시스템과 온라인 시스템에서는 응답 시간이라고 한다. 일괄 처리 시스템에서 턴어라운드 타임(turnaround time)이라고 한다.
신뢰도
하드웨어, 소프트웨어가 실패 없이 주어진 기능을 수행할 수 있는 능력이다. 운영체제는 하드웨어가 전체를 관리하는 소프트웨어로, 사용자와 응용 프로그램은 운영체제 위에서 작업을 한다고 볼 수 있다. 따라서 운영체제가 불안정하면 모든 작업에 신뢰가 떨어질 수 밖에 없다. 운영제제의 신뢰가 떨어지면 그 피해는 사용자에게 돌아가기 때문에 운영체제는 신뢰도가 담보되어야 한다.
사용 가능도
가동률이라고 한다. 사용자가 일정 기간 동안 컴퓨터를 실제로 사용한 시간(비율)이다. 고장으로 보수한 기간은 제외한다. 고장과 오류가 방해해도 그 영향을 최소화하여 시스템 전체를 중단하지 않고 운영할 수 있어야 한다.

제어 서비스 향상
운영체제는 시스템을 확장하고 효율적으로 운영할 수 있도록 새로운 기능의 효과적인 개발을 허용하는 방법으로 발전해야 한다. 즉 서비스를 방해하지 않고 새로운 기능을 도입하고 테스트할 수 있도록 발전해야 한다는 것이다. 그리고 입/출력 장치의 동작을 관리 및 제어하거나 시스템 오류 예방 등으로 컴퓨터 자원을 여러 사용자에게 효율적으로 할당하고 관리할 수 있도록 제어 서비스를 발전해 나가야 한다.

03. 운영체제의 기능

운영체제는 다양한 역할을 수행하고 그에 따라 제공하는 기능도 다양하다. 주요 기능을 크게 자원 관리와 시스템 관리로 분류한다.

(1) 자원 관리
컴퓨터 시스템의 메모리, 프로세스, 장치, 파일 등 구성요소를 자원이라고 하는데 운영체제는 이 자원을 관리한다.
메모리 관리
운영체제의 메모리 관리 기능은 메인 메모리와 보조기억장치로 구분하여 관리된다.
메인 메모리 관리
메인 메모리는 일반적으로 프로세서가 직접 주소로 지정할 수 있는 유일한 메모리이다. 명령어가 메인 메모리에 있어야 프로세서가 명령어를 수행할 수 있으므로, 프로그램을 절대 주소로 맵핑하여 메인 메모리에 저장해야 한다. 그러므로 각 프로세스를 실행할 수 있도록 메인 메모리 공간을 충분히 확보하고, 더불어 각 프로세스를 효율적으로 실행할 수 있도록 메모리를 적절하게 사용해야 한다. 이를 위한 다양한 메모리 관리 방법이 개발되었다. 운영체제는 다음 세부 기능을 수행하여 메인 메모리를 관리한다.
메모리의 어느 부분을 사용하고 누가 사용하는지 점검한다.
메모리에 저장할 프로세스를 결정한다.
메모리를 할당하고 회수하는 방법을 결정한다.
보조기억장치 관리
프로그램을 실행하려면 먼저 필요한 데이터와 함께 메인 메모리에 있어야 한다. 그런데 메인 메모리는 공간이 제한되어 잇어 모든 데이터와 프로그래을 계속 저장할 수 없으므로 보조기억장치를 이용한다. 대부분의 응용 프로그램은 메인 메모리에 적재할 때까지는 보조기억장치에 저장하므로 보조기억장치에서 저장하는 방법은 매우 중요하다. 운영체제는 다음 세부기능을 수행하여 보조기억장치를 관리한다.
빈 여유 공간을 관리한다.
새로운 파일을 작성할 때 저장 장소를 할당한다.
메모리 접근 요청을 스케줄링한다.
파일을 생성하고 삭제한다.

프로세스 관리
프로세스는 실행 중인 프로그램으로 보통 일괄 처리 작업 하나가 프로세스가 되며, 시분할 사용자 프로그램도 하나의 프로세스가 된다. 또 스케줄링과 같은 시스템 작업도 프로세스가 된다. 하나의 프로세스는 프로세서, 메모리, 파일, 입/출력 장치와 같은 자원이 있어야 업무를 수행할 수 있는데 자원은 프로세스를 생성할 때 제공하거나 실행 중에 할당할 수 있다. 시스템은 이 프로세스의 집합으로 크게 시스템 코드를 수행하는 운영체제 프로세스와 사용자 코드를 수행하는 사용자 프로세스로 구분한다. 모든 프로세스는 프로세서를 분할 사용하여 병행 수행할 수 있다. 운영체제는 다음 세부 기능을 수행하여 프로세스를 관리한다.
운영체제는 다음 세부 기능을 수행하여 프로세스를 관리한다.
프로세스와 스레드를 스케줄링한다.
사용자 프로세스와 시스템 프로세스를 생성하고 제거한다.
프로세스를 중지하고 재수행한다.
프로세스 동기화 방법을 제공한다.
프로세스 통신 방법을 제공한다.
교착상태(deadlock)을 방지하는 방법을 제공한다.

주변(입/출력) 장치 관리
운영체제는 특수 프로그램인 장치 드라이버를 사용하여 입/출력 장치와 상호작용한다. 장치 드라이버는 특정 하드웨어 장치와 통신할 수 있는 인터페이스를 제공하므로 특정 하드웨어에 종속도니 프로그램이다. 운영체제는 다음 세부 기능을 수행하여 주변 장치를 관리한다.
임시 저장(buffer-caching) 시스템 기능을 제공한다
일반 장치용 드라이버 인터페이스를 제공한다.
특정 장치 드라이버를 제공한다.

파일(데이터) 관리
파일 관리는 입/출력 파일의 위치, 저장과 검색 관리를 의미한다. 컴퓨터 시스템은 물리적으로 다양한 형태로 파일을 저장할 수 잇는데, 운영체제는 데이터를 효율적으로 사용할 수 있도록 단일화된 저장 형태를 제공한다. 운영체제는 파일을 쉽게 사용하려고 보통 디렉터리로 구성하며, 다수의 사용자가 여기에 접근하려고 할 때는 이 접근을 제어한다. 운영체제는 다음 세부 기능을 수행하여 파일을 관리한다.
파일을 생성하고 삭제한다.
디렉터리를 생성하고 삭제한다.
보조기억장치에 있는 파일을 맵핑한다.
안전한(비휘발성) 저장장치에 파일을 저장한다.

(2) 시스템 관리
운영체제는 추가로 시스템 보호, 네트워킹, 명령 해석기 등 기능을 제공한다.
시스템 보호(사용자 권한 부여)
보호는 컴퓨터 자원에서 프로그램, 프로세스, 사용자의 접근을 제어하는 방법이다. 운영체제는 파일 사용 권한 부여, 데이터 압호화 등 서비스를 제공하여 데이터와 시스템을 보호한다. 컴퓨터 시스템에서는 여러 프로세스를 동시에 실행할 수 있으므로, 서로 보호해야 한다. 그리고 네트워크로 파일 공유 사이트에 접속할 때는 다른 사용자의 프로그램에서 보호해야 한다.

네트워크(통신)
프로세스는 다양한 방법으로 구성된 네트워크를 이용하여 완전 접속과 부분 접속 방법으로 연결한다. 연결된 프로세서가 통신을 할 때는 경로 설정, 접속 정책, 충돌, 보안 등 문제를 고려해야 하는 데, 이를 운영체제가 관리한다.

명령 해석기
명령 해석기는 운영체제에서 중요한 시스템 프로그램이다. 또 사용자나 프로그램에서 대화형으로 입력한 명령어를 이해하고 실행하는 사용자와 운영체제의 인터페이스이다. 사용자가 입력한 명령은 제어문으로 운영체제에 전달하는데, 이 전달을 명령 해석기가 담당한다. 이렇게 명령 해석기는 인터페이스 역할을 할 뿐 운영체제는 아니다. 그리고 명령 해석기는 보통 커널롸 분리하는 것이 좋다. 명령 해석기를 커널에서 분리하면 명령 해석기의 인터페이스를 변경할 수 있지만 분리하지 않으면 사용자가 커널의 코드를 변경할 수 없어 인터페이스를 변경할 수 없다. 명령 해석기가 커널의 일부이면 비정상 프로세스가 커널의 특정 부분에 접근할 수 있으므로 커널에서 분리하는 것이 좋다.

Ch 02. 운영체제의 종류

컴퓨터 시스템의 발전 과정과 용도, 응답 시간이나 데이터 입력 방법에 따라 운영체제를 구분할 수 있다.

일괄 처리 시스템

일괄 처리 시스템(batch processing system)은 작업을 올리는 시간과 해제하는 시간 낭비를 줄이는 데 관심을 두었다. 그래서 데이터가 발생할 때마다 즉시 처리하지 않고 일정 기간 또는 일정량이 될 때까지 모아 두었다가 한꺼번에 처리하여 작업 준비 시간을 줄였다. 이를 위해 일괄 처리, 버퍼링, 스풀링 등 방법을 도입했다/

1) 일괄 처리
일괄(batch) 처리는 직렬 처리 기술과 동일하다. 사용자가 펀치 카드와 같은 오프라인(Off-line)장치에 작업을 저장하여 처리 시스템인 오퍼레이터에 제출한다. 그러면 오퍼레이터에서 비슷한 작업들을 그룹으로 묶어 함께 일괄 처리한다. 즉, 작업 준비 시간을 줄이려고 데이터가 발생할 때마다 즉시 처리하지 않고 데이터를 일정 시간 또는 일정량이 될 때까지 모아 두었다가 한꺼번에 처리하는 것이다.
장점
많은 사용자와 프로그램이 컴퓨터 자원을 공유할 수 있다.
컴퓨터 자원을 덜 사용 중일때는 작업 처리 시간을 교대할 수 있다.
시시각각 수동으록 개입하고, 감독하여 컴퓨터 자원의 유휴를 피할 수 있다.

단점
준비 작업들의 유형이 동일해야 한고, 작업에 모든 유형의 입력을 할 수 없다.
입.출력 장치가 프로세서보다 속도가 느려 프로세서가 종종 유휴 상태가 된다.
작업에 우선순위를 주기도 어렵다.
이런 문제점을 보완하기 위해 모니터링, 버퍼링, 스풀링 등 여러 방법이 등장했다.

(2) 버퍼링
버퍼링(Buffering)은 프로세서와 입/출력 장치의 속도 차이로 생긴 유휴기간이 없도록 입/출력 장치별로 입/출력 버퍼를 두어, 프로세서에서 연산을 할 때 동시에 다른 작업을 입/출력하는 아주 간단한 방법이다.

버퍼
프로세서가 어떤 작업을 처리하는 동안 다음으로 처리할(또는 출력함) 작업을 미리 읽어 저장해 두는 메모리이다.

프로세서가 연산을 시작하기 직전 입력장치가 다음 입력을 즉시 받아들이도록 명령했다고 하자. 그러면 프로세서와 입력장치가 동시에 가동된다, 프로세서가 다음 데이터를 준비하고 있을 때 입력장치가 입력을 하면, 프로세서는 데이터를 바로 처리할 수 있고, 입력 장치는 다음 데이터를 읽어 들일 수 있어 시스템 성능이 향상된다. 출력에서도 이와 비슷한 버퍼링을 수행할 수 있다. 출력 장치가 데이터를 받아들일 동안 프로세서가 데이터를 생성하여 버퍼에 넣는다.

(3) 스풀링
스풀링(Spooling)은 속도가 빠른 디스크를 버퍼처럼 사용하여 입/출력 장치에서 미리 읽는 것이다. 버퍼링이 컴퓨터 하드웨어의 일부인 버퍼를 사용한다면, 스풀링은 별개의 오프라인 장치를 사용한다. 버퍼링이 하나의 입/출력 작업과 그 작업의 계산만 함께 할 수 있는 반면에, 스풀링은 여러 작업의 입/출력과 계산을 함께할 수 있다.
스풀링은 성능에 직접적으로 도움을 준다. 프로세서에 일정한 디스크 공간과 테이블만 있으면 하나의 계산 작업과 다른 입 출력 작업을 중복해서 처리할 수 있다. 이처럼 스풀링은 프로세서와 입/출력 장치가 고효율로 작업할 수 있도록 한다. 특히 프로세서 중심 작업과 입/출력 중심 작업이 혼합된 경우에 더 좋다.

다중 프로그래밍 시스템

일괄 처리 시스템의 가장 큰 문제는 프로세스가 다른 작업을 하고 있을 때는 입/출력 작업이 불가능하여 프로세서와 메인 메모리의 활용도가 떨어진다는 것이다. 이것은 다중 프로그래밍을 도입하여 해결됐다.
다중 프로그래밍은 프로세서가 유휴 상태일 때 실행 중인 둘 이상의 작업이 프로세서를 전환(인터리빙)하여 사용할 수 있도록 동작한다. 즉, 여러 프로그램을 메모리에 적재한 후 하나의 프로그램이 프로세스를 사용하다가 입/출력 동작들을 하여 프로세서를 사용하지 않는 유휴시간(idle time) 동안 다른 프로그램이 프로세서를 사용하도록 하는 시스템이다.
작업 2가 프로세서를 사용하다가 입/출력 동작 중이면 그동안 작업1이 프로세서를 사용한다. 작업 3은 프로세서 실행 시간을 얻을 때까지 대기하도록 하여 프로세스가 쉬지 않게 함으로써 프로세서 사용을 극대화한다.
다중 프로그래밍의 장점은 프로세서 사용률(효율적인 운영)이 증가하여 마치 많은 사용자의 프로그램이 거의 동시에 프로세서를 할당받는 듯한 느낌을 준다는 것이다. 단점은 여러 작업을 작업 상태로 두려면 이를 메모리에 보관하고, 일정 형태의 메모리를 관리해야 하므로 다중 프로그래밍 운영체제는 아주 복잡하다는 점이다. 여러 작업이 수행할 준비를 갖추고 있으면, 이 중 하나를 선택하는 결정 방법이 필요하고 이것이 바로 인터럽트를 이용하여 수행하는 프로세서 스케줄링의 다중 프로그래밍으로, 현재 운영체제의 중심 주체이다.

시분할 시스템

시분할 시스탬(TSS : Time Sharing System)은 다중 프로그램을 논리적으로 확장한 개념으로, 프로세서가 다중 작업을 교대로 수행한다. 다수의 사용자가 동시에 컴퓨터의 자원을 공유할 수 있는 기술이다. 즉 다양한 터미널에 위치한 많은 사용자가 특정 컴퓨터 시스템을 동시에 사용할 수 있게 한다.
프로세서에 적재된 여러 프로그램을 교대로 실행하지만, 각 프로그램에 일정한 프로세서 사용 시간(time slice) 또는 규정 시간량(quantum)을 할당하여 사용자가 주어진 시간 동안 컴퓨터와 대화하는 형식으로 실행한다. 여러 사용자에게 짧은 간격으로 프로세서를 번갈아가며 할당해서 마치 자기 혼자 프로세서를 독점하고 있는 양 착각하게 하여 여러 사용자가 단일 컴퓨터 시스템을 동시에 사용할 수 있게 한다.
다중 프로그래밍 시스템과 시분할 시스템을 비교해보면, 둘 다 메모리에 여러 프로그램을 적재하므로 메모리를 관리해야 하고, 어떤 프로그램을 먼저 실행할지 결정하는 스케줄링이라는 개념이 필요하다. 그러나 다중 프로그래밍 시스템이 프로세서 사용을 최대화하는 것이 목표라면, 시분할 시스템은 응답시간을 최소화하는 것이 목표이다.
시분할 시스템은 여러 작업(프로세스)을 메모리에 저장하므로 짧은 시간에 작업을 교체할 수 있도록 메모리를 적절하게 관리해야 하고, 한 작업이 다른 작업의 데이터를 변경할 수 있으므로 작업 보호가 필요하다. 특히 다수의 사용자가 접근하는 파일은 접근 권한을 두어 특정 권한이 있는 사용자만 접근할 수 있도록 파일 시스템을 보호해야 한다. 또 공유자원에는 엑세스 순서를 조정할 수 있는 기능도 제공해야 한다.

다중 처리 시스템

다중 처리(multiprocessing) 시스템은 단일 컴퓨터 시스템 내에서 둘 이상의 프로세서를 사용하여 동시에 둘 이상의 프로세스(프로그램)을 지원한다. 하나의 프로세서가 2개 이상의 프로그램을 전환하는 다중 프로그래밍과 혼동해서는 안된다. 다중 처리 시스템은 여러 프로세서와 시스템 버스, 클록, 메모리와 주변장치 등을 공유한다. 일단 프로세서가 둘 이상이므로 빠르고, 프로세서 하나가 고장이 나도 다른 프로세서를 사용하여 작업을 계속할 수 있어 신뢰성이 높다.
다중 처리 시스템은 프로세서가 여러 대이므로 프로세서 간의 연결, 상호작용, 역할 분담 등을 고려해야 한다. 다중 처리 시스템을 구성하는 방법에는 비대칭(주종)적 구성과 대칭적 구성이 있다.

실시간 처리 시스템

실시간 처리(real time processing) 시스템은 컴퓨터에 어떤 자료를 입력시켰을 때, 빠른 시간 내에 응답을 주어 사용자가 실제로 원하는 시간 내에 문제를 해결할 수 있도록 해주는 처리 방식을 말한다. 실시간 처리 시스템은 더 높은 적시 응답을 요구하는 장소에서 사용하거나 데이터 흐름 또는 프로세서 연산에 엄격한 시간 요구가 있을 때 사용할 수 잇다. 또 전용 응용 프로그램의 제어장치로도 사용한다. 실시간 처리 시스템은 고정시간 제약을 잘 정의하지 않으면 시스템이 실패한다. 실시간 처리 시스템은 다음 두 가지 유형으로 분류된다.

(1) 경성 실시간 처리 시스템

경성 실시간 처리 시스템(hard real time processing system)은 작업의 실행 시작이나 완료에 대한 시간 제약 조건을 지키지 못할 때 시스템에 치명적인 영향을 주는 시스템이다. 예를 들어 무기 제어, 발전소 제어, 철도 자동 제어, 미사일 자동 조준 등이 해당한다. 보장되는 컴퓨팅, 시간의 정확성과 컴퓨터 예측성을 갖게 해야 한다.

(2) 연성 실시간 처리 시스템

연성 실시간 처리 시스템(soft real time processing system)은 작업 실행에서 시간 제약 조건은 있으나 이를 지키지 못해도 전체 시스템에 치명적인 영향을 미치는 않는 시스템이다. 예를 들어, 동영상은 초당 일정 프레임(Frame) 이상의 영상을 재생해야 한다는 제약이 있으나, 일부 프레임을 건너뛰어도 동영상을 재생하는 시스템에는 큰 영향을 미치지 않는다.

분산 처리 시스템

분산 처리 시스템(Distributed Processing System)은 시스템마다 독립적인 운영체제와 메모리로 운영하며, 필요할 때 통신하는 시스템이다. 최근 컴퓨터 시스템은 여러 물리적 프로세서에 연산을 분산하는 경향이 있는데, 이는 자원 공유, 연산 속도 향상, 신뢰성과 통신 때문이다. 분산 처리 시스템은 사용자에게는 중앙 집중식 시스템처럼 보이는데, 다수의 독립된 프로세서에서 실행한다. 그리고 데이터를 여러 위치에서 처리/저장하며, 여러 사용자가 공유할 수있다. 하나의 프로그램을 여러 프로세서에서 동시에 실행할 수도 있다.

Ch 03. 운영체체의 역사

운영체제의 역사를 훑어보는 것은 운영체제를 이해하는 데 좋은 방법이고, 나이가 오늘날의 IT 환경을 이해하는 밑거름이 된다. 현재 쓰이는 운영체제의 기능이 어떻게 만들어지게 되었는지, 그리고 P2P, 클라우드 컴퓨팅과 같은 컴퓨팅 환경이 왜 등장하게 되었는지를 운영체제의 발전 과정을 통해 알아본다.

개요

운영체제의 역사를 시대 순이나 중요한 사건 순으로 정리할 수도 있지만 주변 장치의 개발과 연관지어 설명할 수 있다. 주변 장치의 개발은 운영체제의 발전사를 이해하는 데 중요한 단서가 된다.
0기(1940년대)
운영체제 : 없다
주요 기술 및 특징
기계어 직접 사용
진공과(0과 1) 사용
작업별 순차 처리
1기(1950년대)
운영체제 : 일괄 처리
주요 기술 및 특징
작업별로 처리
버퍼링, 스풀링 방법 등장
운영체제의 등장(IBM 701 개발)
카드리더, 라인 프린터
2기(1960년대 초반)
운영체제 : 대화형
주요 기술 및 특징
작업 시간 예측 어려움
문서 편집기, 게임 응용 프로그램
키보드, 모니터
3기(1960년대 후반)
운영체제 :
시분할
다중 프로그래밍
다중 처리
다중 사용자
주요 기술 및 특징
다중 프로그래밍 기술 개발
운영체제를 고급 언어를 작성(C언어)
데이터 통신 지원용 운영체제 사용
4기(1970년대 후반)
운영체제 :
분산
다중모드
주요 기술 및 특징
개인용 컴퓨터의 등장(PC)
일괄 처리, 시분할, 실시간, 다중 프로그래밍들을 제공
LAN, TCP/IP
5기(1990년대)
운영체제 : 클라이언트/서버
주요 기술 및 특징
웹 시스템
서버의 과부하
6기(2000년대)
운영체제 :
P2P 시스템
그리드 컴퓨팅
모바일 시스템
클라우드 컴퓨팅
사물 인터넷
주요 기술 및 특징
메신저 및 파일 공유
네트워크 기반의 분산 및 병렬운영체제의 보편화
다양한 기능, 확장성, 호환성 극대화
다양한 통신망의 확대와 개발형 시스템 발달
컴퓨팅 자원, 스토리지, 소프트웨어 등을 사용자에게 서비스 형태로 제공

초창기 컴퓨터(1940년대)

최초의 컴퓨터인 에니악은 펜실베니아의 대학의 존 모클리(John Mauchly)와 존 에커트(John Eckert)가 만들었다. 전선에 잭일 꼽아 회로를 연결하여 구성한 애니악은 30톤 규모의 거대한 계산기로 미사일 탄도를 계산하기 위해 제작하였다. 에니악은 사람이 주판으로 7시간 동안 계산했던 것을 단 3초 만에 끝냈다. 진공관이라는 소자를 사용하여 진공관이 켜지면 1, 꺼지면 0이라고 판단했고, 이는 컴퓨터가 2진법을 사용하는 계기가 되었다.
초기의 컴퓨터에는 키보드, 마우스, 모니터와 같은 주변장치가 없고, 18,000개의 진공관을 전선으로 연결하는 것이 오늘날의 프로그램을 대신했는데, 이렇게 전선으로 논리회로를 구성하는 것을 '하드 와이어링(hard wiring)' 방식이라고 한다. 하드 와이어링은 전선으로 논리회로를 구성하여 원하는 결과만 얻어내는 방식으로 다른 계산이나 수식을 사용하려면 전선을 다시 연결해야 한다. 물론 초창기의 컴퓨터에는 운영체제가 없었다.

일괄 작업 시스템(1950년대)

진공관을 전선으로 연결했던 초창기의 컴퓨터는 기술발전을 거쳐 IC(Integrated Circuit)라는 칩으로 만들어지게 되었다. 이 침은 진공관과 전선으로 만들어진 논리회로를 아주 작은 크기로 구현하는 것을 이를 이용함으로써 현대적인 모습의 컴퓨터가 탄생했다. 이때의 컴퓨터에는 미약하지만 중앙처리장치인 CPU(Central Processing Unit)와 메인 메모리가 있었으나 키보드와 같은 입력 장치, 모니터와 같은 출력장치가 없었다. 대신 천공카드 리더(punch card reader)를 입력장치로, 라인 프린터(line printer)를 출력장치로 사용했다.
천공카드 리더는 OMR(Optical Mask Reader)의 원조 격이라 할 수 있다. OMR은 OMR 카드에 특수한 펜으로 표시하면 기계가 이 마크를 읽어서 데이터를 수집하는 장치앋. 라인 프린터는 문자만 출력하는 프린터로 한 번에 한 줄씩 출력하기 때문에 라인 프린터라는 이름이 붙였다.
천공카드 리더와 라인 프린터로 컴퓨터를 사용하는 것은 매우 불편하지만 천공카드 시스템은 현대적인 프로그래밍을 가능하게 해주었다. 프로그램만 바꾸면 다른 작업이 가능했다. 천공카드 리더로 하나의 작업을 읽어 들여 실행하고 결과를 출력한 후 다음 작업을 읽어 들여 실행했다. 이러한 시스템에서는 작업에 필요한 프로그램과 데이터를 동시에 입력해야 작업이 가능하다. 지금의 프로그래밍 환경과 달리 모든 작업을 한꺼번에 처리해야 하고 프로그램 실행 중간에 사용자가 데이터를 입력하거나 수정하는 것이 불가능한데, 이러한 시스템을 일괄 작업 시스템(batch job system), 또는 일괄 처리 시스템(batch processing system)이라고 부른다.

대화형 시스템(1960년대 초반)

1960년대 초반에 키보드와 모니터가 등장했다. 키보드는 타자기의 쿼티(QWERTY) 자판에 다양한 키를 추가하여 만들었고, 모니터는 브라운관 기반의 단색(초록색 또는 오렌지색) 모니터였다. 기존의 일괄 작업 시스템은 매우 비효율적이어서 프로그램과 데이터를 같이 입력하여 작업의 최종 결과만 얻을 수 있었다. 작업 중간에 새로운 값을 입력하거나 데이터를 변경하는 것이 불가능했고, 프로그램에 오류가 있거나 잘못된 데이터를 사용하여 결과가 틀렸더라도 그 사실을 최종 프린터 결과물로만 확인할 수 있었다.
키보드와 모니터가 개발됨으로써 작업 중간에 사용자가 입력을 하거나 사용자에게 중간 결과 값을 보여줄 수 있게 되었다. 또한 중간 결과 값을 출력하여 프로그램에 이상이 있는지 혹은 프로그램이 정상적으로 진행되고 있는지도 확인할 수 있게 되었다. 프로그램이 진행되는 도중에 사용자로부터 입력을 받을 수 있어 작업이 이루어지므로 대화형 시스템(interactive System)이라고 일컫는다.
일괄 작업 시스템은 단순 계산 위주의 작업만 가능했으나 대화형 시스템의 등장으로 문서 편집기, 게임과 같은 다양한 종류의 응용 프로그램을 만들 수 있게 되었다. 그러나 일괄 작업 시스템은 입/출력이 거의 없어 작업 시간을 예측할 수 있지만 대화형 시스템의 거의 작업 시간을 예측하기 어렵다. 응용 프로그램의 입력과 출력이 얼마 만에 완료될지 예측하기 어렵고 사용자가 얼마 만에 반응할 지도 알 수 없었기 때문이다.

CPU 집중 작업과 입/출력 집중 작업
CPU 집중 작업
일괄 작업 시스템에서는 프로그램이 실행되는 도안에 입/출력이 불가능하기 때문에 대부분의 작업이 CPU만 사용하는 계산 작업이었다. 이를 CPU 집중 작업, CPU 편향 작업 또는 컴퓨터 집중 작업이라고 부른다
입/출력 집중 작업
대화형 시스템에서는 프로그램이 실행하는 동안에 입/출력이 가능하기 때문에 입/출력 집중 작업이 생겨났다. 압/출력 집중 작업 또는 입/출력 편향 작업은 대부분의 작업 시간이 주변장치의 입력과 출력에 사용된다.

시분할 시스템(1960년대 후반)

시분할 시스템의 등장

1960년대 후반에 컴퓨터의 크기가 작아지고 계산 능력이 향상되었지만 허가받은 몇몇 사용자만 사용할 수 있었고 고가였다. 값비싼 기계로 한 번에 하나의 작업만 수행하는 것은 낭비라 효율적으로 사용하기 위한 연구가 진행된 결과 다중 프로그래밍(Multiprogramming) 기술이 개발되었다. 다중 프로그래밍은 하나의 CPU로 여러 작업을 동시에 실행하는 기술로, 한 번에 하나의 작업만 가능한 일괄 작업 시스템에 비해 효율성이 뛰어났다.
다중 프로그래밍 시스템에는 CPU 사용 시간을 아주 잘게 쪼개어 여러 작업에 나누어 준다. 이처럼 여러 작업을 조금씩 처리하여 작업이 동시에 이루어지는 것처럼 보이게 하는 것을 시분할 시스템이라고 한다. 다중 작업(multitasking) 시스템이라고도 불리는 시분할 시스템에서는 CPU 사용 시간을 잘게 쪼개어 작업들 나누어줌으로써 모든 작업이 동시에 처리되는 것처럼 보인다. 이때 잘게 나뉜 시간 한 조각을 타임 슬라이스(time slice) 또는 타임 퀀텀(time quantum)이라고 한다. 오늘날의 컴퓨터에는 대부분 시분할 시스템이 사용된다.

다중 사용자 시스템

시분할 시스템에서 동시에 실행되는 작업의 개수를 멀티프로그래밍 수준(level of multiprogramming) 또는 멀티프로그래밍 정도(degree of multiprogramming)라고 한다. 일괄 작업 시스템은 멀티프로그래밍 수준이 1이 되고, 동시에 실행되는 작업이 3개인 경우에는 멀티프로그래밍 수준이 3이라고 한다.
이 시기에 AT & T 벨연구소에서 C언어로 유닉스를 개발했다. 다양한 업체 및 프로그래머와 공동 작업 끝에 탄생한 작고 안정적인 운영체제이다. uni-는 '하나'라는 뜻의 접두어로, 유닉스는 그 이름이 나타내듯이 단순함을 지향하여 현대 운영체제의 기본 개념을 수립했다.

분산 시스템(1970년대 후반)

1977년 스티브 잡스(Steve jobs)가 최초의 개인용 컴퓨터인 애플2를 발표했다. 그 이전에는 컴퓨터가 고가였지만 개인용 컴퓨터의 출현으로 개인이 소유하기 쉬워졌다. 이 시기에는 소프트웨어도 급속도로 발전했다. 특히 운영체제 시작이 급속도로 커졌으며, 개인용 컴퓨터의 운영체제로 애플의 매킨토시와 마이크로소프트의 MS-DOS가 많이 사용되었다. 1970년 후반은 인터넷이 등장한 시기이기도 하다. 1960년에 미국의 ARPA(Advanced Research Project Agency)는 서로 호환되지 않은 LAN(Local Area Network)들을 하나로 묶기 위한 연구를 했는데, 그 결과로 ARPAnet이 만들어졌다. 이후 알파넷은 차츰 대중에게 개발되었고, 컴퓨터 간의 네트워킹을 위한 TCP/IP(Transmission Control Protocol/Internet Protocol)를 사용하여 통신하는 것이다.

클라이언트/서버 시스템(1990년대 ~ 현재)

분산 시스템은 시스템에 참가하는 모든 컴퓨터가 동일한 지위이기 때문에 컴퓨터가 고장나거나 추가되면 작업을 분배하고 결과를 모으기가 쉽지 않다. 클라이언트/서버 시스템(Client/Server System)은 이러한 문제점을 해결하는 기술로, 모든 컴퓨터의 지위가 동일한 분산 시스템과 달리 작업을 요청하는 클라이언트와 거기에 응답하여 요청받은 작업을 처리하는 서버의 이중 구조로 나뉜다.
클라이언트/서버 구조가 일반인들에게 알려진 것은 웹 시스템(Web System)이 보급된 이후이다. 웹 시스템의 등장으로 그림이나 링크를 통한 다양한 응용 서비스가 가능해지자 인터넷을 사용하는 일반인이 급속도로 늘어나게 되었는데, 웹 시스템은 전형적인 클라이언트/서버 구조를 이루고 있다.
클라이언트/서버 구조의 문제점은 서버 과부하를 꼽을 수 있다. 모든 요청이 서버로 집중되기 때문에 수십만의 클라이언트를 처리하기 위해서는 많은 서버와 큰 용량의 네트워크가 필요하다

P2P 시스템(2000년대 초반 ~ 현재)

P2P 시스템의 등장

1990년대 말에 전 세계의 MP3 음악 파일을 공유하려는 시도가 있었는데 문제는 클라이언트/서버 시스템의 과부하였다. 웹 페이지는 한 페이지가 kByte이지만 MP3 파일은 수Mbyte이기 때문에 기존의 클라리언트/서버 구조로 MP3 파일 공유 시스템을 구현하면 서버 과부하로 서비스를 할 수 없었다.
이로 인해 서버의 부하를 줄일 수 있는 새로운 시스템으로 P2P 시스템(Peer - to - Peer system)이 만들어졌다. Peer는 말단 노드, 즉 사용자의 컴퓨터를 가리키며, P2P는 서버를 거치지 않고 사용자와 사용자를 직접 연결한다는 의미이다. P2P 시스템에서는 서버가 파일 검색만 맡고 사용자 간에 파일 전송이 이루어지기 때문에 서버의 부하가 적다는 것이 장점이다.

P2P 시스템의 예

메신저
P2P 시스템을 이용하여 만든 최초의 MP3 파일 공유 프로그램은 1999년 서비스를 시작한 미국의 냅스터(Napster)이다 P2P 기술은 불법 소프트웨어 기술 규제 때문에 발전하지 못하다가 메신저 프로그램에 도입되면서 크게 발전하게 되었다. 수만명이 동시에 채팅을 하고 파일을 주고 받는 메신저 시스템은 클라이언트/서버 구조로 만들 수 없으며 P2P 기술을 이용하면 서버의 부하없이 구현할 수 있다.
파일 공유
대용량의 파일 공유도 P2P 시스템의 발전에 한몫을 했다. 비록 합법, 불법적인 문제가 남아있지만, P2P 시스템은 MP3 파일 공유 시스템의 단점을 보완하며 발전하고 있다.

기타 컴퓨팅 환경(2000년대 초반 ~ 현재)

2000년대 초반에는 P2P 컴퓨팅 환경과 더불어 그리드 컴퓨팅, 클라우드 컴퓨팅, 사물 인터넷 등의 새로운 컴퓨팅 환경이 탄생했다.

그리드 컴퓨팅

고성능 컴퓨팅을 다량 구매하여 몇 년에 걸쳐 사용하고 나면 컴퓨터의 성능이 급속도로 발전하기 때문에 몇 년 후에는 컴퓨터가 쓸모 없어진다. 이러한 경우 필요한 기간만 컴퓨터를 사용하고 비용을 지불할 수 있다면 좋을 것이다. 이처럼 필요한 컴퓨팅 자원을 구매하여 사용하는 컴퓨팅 환경을 그리드 컴퓨팅(Grid Computing)이라고 부른다.
그리드 컴퓨팅은 분산 시스템의 한 분야로, 서로 다른 기종의 컴퓨터들을 묶어 대용량의 컴퓨터 풀(Computer pool)을 구성하고 이를 원격지와 연결하여 대용량의 연산을 수행하는 컴퓨팅 환경이다. 일반인을 위한 시스템이라기 보다는 연구용이나 상업용으로 이용되는 시스템으로, 일반인은 웹 서비스에서 그리드 시스템을 경험할 수 있다. 서버에 엄청난 양의 데이터를 보관하고 잇는 웹 하드는 사용자에게 데이터를 전송할 때 과부하가 걸리기도 하여 이를 해결하기 위해 대용량 데이터 P2P 시스템 기술을 사용한다.
그리드 컴퓨팅이 하드웨어적인 컴퓨팅 환경의 통합이라면 SaaS(Software as a Service)는 사용자가 필요할 때 소프트웨어 기능을 이용하고 그만큼 비용을 지불하는 개념이다. 일반적으로는 소프트웨어를 사용자의 컴퓨터에 설치한 후 사용하지만, SaaS의 경우 필요한 기능을 모아 서버에서 실행하고 사용자는 인터넷을 통해 필요한 서비스만 제공받으며 월별로 혹은 서비스를 이용한 만큼 비용을 지불한다. SaaS의 큰 장점은 프로그램을 설치하거나 업데이트를 할 필요 없이 인터넷에 접속하면 누구나 이용할 수 있다는 것이다.

클라우드 컴퓨팅

클라우드 컴퓨팅(Cloud Computing)은 언제 어디서나 응용 프로그램 데이터를 자유롭게 사용할 수 잇는 컴퓨팅 환경으로 그리드 컴퓨팅과 SaaS를 합쳐놓은 형태이다. 하드웨어를 포함한 시스템이 구름에 가려진 것처럼 사용자에게 보이지 않는 컴퓨팅 환경이라는 의미에서 클라우드라는 명칭이 붙게 되었다.
2006년 구글의 크리스토프 비시글리아(Chritophe Bisciglia)가 처음 제안한 것으로 알려진 클라우드 컴퓨팅은 PC, 휴대전화, 스마트 기기 등을 통해 인터넷에 접속하고, 다양한 작업을 수행하며, 기기 간의 데이터 이동이 자유로운 컴퓨팅 환경이다. 집이나 회사의 컴퓨터에 소프트웨어를 깔고 이동식 저장장치로 데이터를 옯기던 것에 비해 매우 편리한 방식이다.

사물 인터넷
사물 인터넷(IoT : Internet of Things)은 사물에 센서와 통신 기능을 내장하여 인터넷에 연결하는 기술이다. 인터넷으로 연결된 사물들이 데이터를 주고받아 스스로 분석하고 학습한 정보를 사용자에게 제공하거나 새로운 서비스를 창출하는 사물 인터넷은 인공지능, 로봇 공학, 무인 운송 수단, 3D 인쇄, 나노 기술과 더불어 4차 산업 혁명을 이끄는 기술이다.
지하철과 버스의 예정 시간을 알려주고 각종 전자 제품을 스마트폰으로 제어하는 등 사물 인터넷 기술도 점차 대중화되고 있다. 재난 방지 시스템, 안드로이드 운영체제를 이용한 커넥트 카, 에너지를 제어하는 스마트 그리드, 공공 기술을 관리하는 스마트 시티 등 다양한 분야에 사물 인터넷이 사용되고 있다.

profile
AI, Information and Communication, Electronics, Computer Science, Bio, Algorithms

0개의 댓글