학교 공부/운영체제

[23-01/운영체제] 운영체제의 시작과 발전

KimNang 2023. 4. 17. 01:25

1. 운영체제 개념

 운영체제 정의

- 컴퓨터 사용자와 하드웨어 사이에서 중계 역할을 하면서, 프로그램 실행을 관리하고 제어하는 시스템 소프트웨어

    - 운영체제는 컴퓨터가 아님

    - 운영체제는 실체가 있는 소프트웨어 ( 인터페이스 )

- 컴퓨터가 켜질 때 처음으로 적재되어 나머지 모든 프로그램의 실행을 제어하고 사용자의 요청을 처리해주는 소프트웨어

memo : 부트로더가 부팅영역 관리. ROM이 부트로더 로딩

- 컴퓨터의 자원을 독점적으로 관리하는 특별한 소프트웨어

 

운영체제의 정의에서 핵심 단어

1. 운영체제는 컴퓨터의 모든 자원(Resource) 관리

- 자원

    - 하드웨어 자원 : CPU, 캐시, 메모리, 키보드, 마우스, 디스플레이, 하드디스크, 프린터

    - 소프트웨어 자원 : 응용프로그램

    - 데이터 자원 : 파일, 데이터베이스 등

 

2. 운영체제는 자원에 대한 독점(Exclusive) 권한 소유

- 자원에 대한 모든 관리 권한 운영체제에게 있음

    - 자원 할당, 자원 공유, 자원 액세스, 자원 입출력 등

    - ex) 파일 생성 : 디스크의 빈 공간 관리, 파일 저장 위치 관리, 파일 입출력 등

 

3. 운영체제는 관리자(Supervisor)

- 실행중인 프로그램 관리, 메모리 관리

- 파일과 디스크 장치 관리, 입출력 장치 관리, 사용자 계정 관리 등

 

4. 운영체제는 소프트웨어(Software)

- 커널이라고 불리는 핵심 코드

- UI를 비롯한 도구 프로그램들(tool / utility)

    - ex) 탐색기, 작업 관리자, 제어판 등

- 장치를 제어하는 디바이스 드라이버들로 구성

 

운영체제의 목적과 기능

운영체제의 목적

- 사용자의 컴퓨터 사용 편리성

- 컴퓨터의 자원 관리 효율성

 

운영체제의 기능

- CPU / 프로세스 관리

- 메모리 관리

- 파일 시스템 관리

memo : 파일 시스템 정보 관리, 파일과 디렉터리 생성 및 관리, 저장장치 관리

- 장치 관리

- 네트워크 관리

- 보안 관리

- 기타 관리

    - 사용자 관리 : 사용자 계정 관리

    - 통계 : CPU, 메모리, 네트워크의 사용 시간, 사용자의 접속 시간 등

    - 오류 발견 및 대응

    - 부팅

 

운영체제와 응용소프트웨어의 차이

■ 응용소프트웨어

- 사용자의 목적 달성

- 하드웨어 사용시 운영체제에게 요청

- C / C++ / Java / C# / Python 등으로 개발

 

■ 운영체제 ( Unix, Linux, Windows, Mac Os 등 )

- 하드웨어, 파일 등 자원 관리 목적

- 응용 프로그램들에게 공통 서비스 제공

- 메모리, 프로세서, 파일, 장치 등 관리

- 하드웨어에 대한 독점 사용

- C / C++ , 어셈블리어로 개발

 

  운영체제 응용소프트웨어
목적 컴퓨터 하드웨어나 응용소프트웨어 등 자원 관리 사용자들의 특정 작업을 보다 편리하게 처리할 목적으로 만들어진 소프트웨어
(ex : 게임, 웹서핑, 문서작성, 채팅 등)
기능 프로세스, 메모리, 파일 시스템, 입출력 장치 등 자원 관리와 사용자 관리 소프트웨어를 만든 특정 목적만 수행
개발 언어 C / C++, 어셈블리어 C / C++뿐 아니라 Java, Python, C# 등 다양한 언어
실행 부팅 시 메모리에 적재되어 상주하여 컴퓨터를 끌 때까지 실행 사용자가 명령을 통해 실행시키거나 종료시킴
자원에 대한 접근 권한 컴퓨터의 모든 자원에 대해 배타적 독점 사용 권한 컴퓨터 자원을 사용하고자 할 때 반드시 운영체제에게 요청

 

2. 운영체제의 태동

고정 프로그램 컴퓨터 - 1940년대

■ 고정 프로그램 방식

- 1940년대, 전자식 디지털 컴퓨터가 만들어지기 시작하는 시대

- 운영체제에 대한 개념이 없음

- 소프트웨어와 하드웨어의 분리 개념 없음

    - 모든 것이 하드웨어로 제작됨

- 프로그래밍

    - 종이에, 프로그램을 구현하는 스위치와 전선 연결도 작성

    - 배선판에 전선 연결, 프로그램을 기계에 고착화

    - 하나의 명령을 구성하기 위해 여러 가닥의 전선 연결

    - 프로그램 전체 구축에 수천 개의 전선 연결, 며칠 소요

    - 새로운 프로그램을 작성할 때(구축할 때) 큰 고통

- 사례

    - 1941년 독일에서 만든 Z3 computer

    - 1944년 영국에서 독일군의 암호를 해독하기 위해 만든 Colossus

    - 1943년 ~ 1945년 미국에서 만든 최초의 전자식 컴퓨터 ENIAC

 

내장 프로그래밍 방식 등장 - 1945년 ~

■ 내장 프로그래밍 방식

- 1945년 폰노이만에 의해 제안

- 1951년 EDVAC 컴퓨터를 만들 때 적용

- 오늘날 컴퓨터의 구조가 됨

 

내장 프로그램 컴퓨터의 의미

- CPU와 메모리 분리

- 소프트웨어와 하드웨어 분리

- 실행할 프로그램을 메모리에 담고, CPU가 프로그램을 실행하는 방식 ( CPU가 직접 개입 X )

    - 고정 프로그래밍 방식에 비해 획기적인 변화

    - 하드웨어의 변화 없이, 실행시키려는 프로그램만 메모리에 적재

- 프로그램은 입력 장치를 통해 메모리에 적재

    - 펀치 카드에 구멍을 뚫어 프로그램 작성

    - 카드 리더기로 프로그램을 메모리에 읽어 들임

 

내장 프로그램 컴퓨터 구조

 

프로그램 로더의 발견 - 운영체제 개념 시작 ( 1950년대)

- 프로그램 로딩 시대

    - 운영체제 개념의 시작

- IBM 701 메인 프레임

    - 1954년 IBM에서 만든 첫 번째 내장 프로그래밍 컴퓨터

    - IBM의 첫 번째 범용 컴퓨터

    - 판매하지 않고 대여함.

    - 기계만 대여하고 어떤 소프트웨어도 제공하지 않았음 ( 빌린 고객(기업)이 모든 것을 해야 했음 )

 

원시 운영체제 GM OS 탄생 - 1955년

■ GM OS

- 1955년, IBM701의 고객 GM(General Motors)에 의해 개발

    - 펀치 카드에 담긴 프로그램을 메모리에 적재하는 로더 프로그램 개발

- 핵심 개념

    - 로더 프로그램을 사용자 프로그램에서 분리

    - 사용자가 자신의 프로그램을 적재하는 셀프-로더 프로그램 작성의 번거로움 해소

    - 그 당시, 로더 프로그램을 모니터라고 불렀음

    - 후세대, GM OS라고 불렀음

 

■ GM OS는 원시적인 최초의 운영체제

- 사용자 프로그램에서 로더 프로그램 분리함

- 로더 프로그램을 시스템에 한 개만 둠

- 사용자 프로그램을 실행할 때 작동함

- 사용자 프로그램을 읽어 실행

 

최초의 운영체제 GM-NAA I/O 탄생 - 1956년 ~ 1957년

- 1955년 GM은 IBM 701의 처리 속도를 높인 IBM 704 주문

■ IBM 704 컴퓨터 활용에 3가지 문제점 발견과 해결 시도

1. 개발자들은 여전히 대기 번호를 뽑고 자신의 차례를 기다림

2. 많은 시간 비싼 컴퓨터를 놀리고 있다는 점

    - 개발자가 프로그램을 실행시키기 위한 시스템 셋업하는 동안, 컴퓨터는 놀게 됨

3. 입출력 루틴을 개발자 스스로 작성

    - 카드 입력 장치나 테이프 장치를 제어하는 프로그램 코드

 

■ 최초의 운영체제 GM-NAA I/O 개발

- 1956년 GM과 NAA의 공동 개발

- 운영체제로서 모습 갖춤

1. 배치 방식으로 작동

2. GM-NAA I/O 프로그램을 메모리에 상주 ( 오늘날 운영체제 방식 )

3. 입출력 장치들을 제어하는 루틴들을 라이브러리 형식으로 갖추고 프로그램 사이에 공유

 

 

 GM-NAA-IO의 구조와 기능

GM-NAA I/O의 구조

1. 어셈블러 코드

- 사용자가 작성한 어셈블리어 프로그램을 기계어 코드로 번역

2. 로더 프로그램

- 사용자 프로그램을 하나씩 메모리에 적재

3. 운영체제 메인 코드와 공통 입출력 코드

- 운영체제 메인 코드 : 운영체제 시작 코드

- 공통 입출력 코드 - 장치 입출력을 다루는 프로그램 코드

 

IBM 704에서 GM-NAA-IO 운영체제의 작동

 

운영체제 태동의 역정

 

3. 운영체제의 발전

운영체제 태동 시절

- 1세대 컴퓨터 시절 : 운영체제 암흑 시대

- 운영체제의 개념 없음

    - 개발자가 펀치 카드에 프로그램 작성, 입력, 실행

    - 컴퓨터는 한 번에 한 개의 작업만 실행

    - 컴퓨터는 셋업하는 동안 많은 시간이 유휴(노는) 상태

 

배치 운영체제

출현 배경

- 컴퓨터의 노는 시간(유휴 시간)을 줄여 컴퓨터의 활용률 향상

 

배치 운영체제 컴퓨터 시스템

- 개발자와 관리자의 구분

- 개발자는 펀치 카드를 입력 데크에 두고 결과 기다림

- 배치 운영체제는 자동으로 테이프 장치에 대기중인 프로그램을 한 번에 하나씩 적재하고, 실행

 

다중프로그래밍 운영체제

출현 배경

- 1960년대 중반 : CPU 등 하드웨어 속도 개선, 컴퓨터 가격 증가

■ 프로그램의 실행 형태로 인한 CPU의 유휴시간 발생

    - 프로그램 실행 형태 : CPU 작업 - I/O 작업 - CPU작업 - I/O 작업의 반복

    - 배치 작업은 1번에 1개의 프로그램만 실행함 -> I/O 작업 이루어지는 동안 CPU는 놀면서 대기, CPU의 많은 시간 낭비

    - CPU의 유휴시간을 줄일 필요가 있음 -> CPU 활용률 증가 -> 처리율 증가 ( 더 많은 사용자 프로그램 실행 )

 

다중프로그래밍 기법 출현

- 미리 여러 프로그램을 메모리에 적재 ( 메모리가 수용할 만큼 다수의 프로그램 적재 )

- 프로그램 실행 도중 I/O가 발생하면, CPU에게 메모리에 적재된 다른 프로그램 실행시킴

 

정의

- 다중프로그래밍은 여러 프로그램을 메모리에 올려놓고, CPU가 한 프로그램을 실행하다 I/O가 발생하면, 입출력이 완료될 때까지 CPU가 메모리에 적재된 다른 프로그램을 실행하는 식으로 CPU의 노는 시간을 줄이는 기법

 

다중프로그래밍 도입으로 인한 이슈

1. 큰 메모리 이슈

    - 여러 프로그램을 동시에 메모리에 올려놓기 위해서는 메모리의 크기 늘릴 필요

2. 프로그램의 메모리 할당 및 관리 이슈

3. 메모리 보호 이슈

    - 프로그램이 다른 프로그램의 영역을 침범하지 못하게 막는 방법 필요

4. CPU 스케줄링과 컨텍스트 스위칭

    - 실행시킬 프로그램 선택하는 스케줄링 필요

    - 프로그램의 실행 상태를 저장할 컨텍스트 정의 ( 현재의 작업환경 )

    - 컨텍스트 스위칭 필요

5. 인터럽트 개념 도입

    - 운영체제가 I/O 장치로부터 입출력 완료를 전달받는 방법 필요

6. 동기화

    - 여러 프로그램이 동일한 자원을 동시에 액세스할 때 발생하는 문제 해결

7. 교착 상태 해결

    - 프로세스들이 상대가 가진 자원을 서로 요청하면서 무한대기하는 교착상태 해결

 

 

시분할 다중프로그래밍 운영체제

출현 배경

- 다중프로그래밍 운영체제와 동시에 연구 시작함

- 배치 처리와 다중프로그래밍의 2가지 문제점을 인식

    - 비 대화식 처리방식

    - 느린 응답시간, 오랜 대기 시간 ( 프로그램을 제출하고 하루 후에 결과 보기, 사용자의 즉각적인 대응 없음 )

 

시분할 운영체제의 시작

- 1959년 MIT 대학, John McCarty 교수

- 빠른 프로그래밍 디버깅 필요 ( McCarty 교수의 당면한 문제였음)

- 사용자에게 빠른 응답을 제공하는 대화식 시스템 제안

    - 터미널이란? 키보드 + 모니터 + 전화선 + 모뎀으로 구성된 장치

    - 사용자는 자신의 터미널을 이용해 메인 컴퓨터에 원격 접속

    - 운영체제는 시간을 나누어 돌아가면서 각 터미널의 명령 처리

- CTSS 시분할 시스템 개발 ( 1962년 MIT )

 

개인용 운영체제

출현 배경

- 메인 프레임에서, 성능이 향상된 미니 컴퓨터 시대로 바뀜

    - 미니 컴퓨터 역시 한 방을 가득 채울 수준의 크기

- 미니 컴퓨터에서의 시분할 시스템 사용의 불편함

    - 응답 속도 저하 : 많은 사용자로 인해 응답 속도 저하

    - 공간 제약 : 터미널이 있는 전산실에서만 컴퓨터 사용 가능

- 개인용 컴퓨터 필요성 ( 원격 접속 없이 가정에서 혼자 사용 )

 

개인용 운영체제 등장

- 1980년 개인용 운영체제 MS-DOS 등장

 

임베디드 운영체제

임베디드 (embedded, 내장형) 컴퓨터

- 여러 기계 등에 내장되어 이들 장치들의 목적을 지원하는 소형 컴퓨터

- 자동차, 비행기 제어 시스템, 공장, ATM기, 네비게이션, 엘리베이터, 가전제품, 산업 현장의 기계들, 상용 제품 등

 

임베디드 운영체제

- 임베디드 컴퓨터에서 장치들을 제어하고 작동시키는 기능을 수행하며, 장치를 제어하는 프로그램이 원할이 실행되도록 하는 목적

- 사례 : WinCE, 여러 종류의 임베디드 리눅스

 

모바일 운영체제

모바일 컴퓨터

- 하드웨어의 급속한 발전으로 휴대 가능한 크기로 들고 다닐 수 있는 모바일 장치 혹은 모바일 컴퓨터 출현

- 스마트폰, 태블릿, 스마트 시계와 같은 입는 컴퓨터 등 어디에서나 휴대가능한 컴퓨터

- 터치스크린, 블루투스 장치, 전화기, 무선네트워크 장치, GPS, 사진 및 동영상 촬영이 가능한 카메라, 음성인식, 녹음기, 근거리 통신 장치, 적외선 장치, 지문 인식기, 배터리 등의 장치 내장

 

모바일 운영체제

- 모바일 컴퓨터 내 장치들을 구동시키고, 이들을 활용하는 다양한 응용프로그램을 실행할 수 있도록 특별히 설계된 운영체제

 

운영체제의 종류

데스크톱 운영체제

- PC나 노트북 등 책상에 놓고 사용하는 데스크톱 컴퓨터를 위한 운영체제

    - 개인의 문서 편집, 웹 서핑, 게임, 프로그램 개발, 음악 감상 등 범용 사용

    - 비전문가라도 사용하기 쉽고 다양한 종류의 응용프로그램을 쉽게 활용하도록 하는데 목적

- Windows, Mac OS, Linux가 전체 시장 지배

 

서버 컴퓨터 운영체제

- 네트워크에 연결하고 24시간 실행되는 컴퓨터, 보안 중요

    - Unix 계열의 linux, FreeBSD, Windows Server, Mac OS Server

 

모바일 운영체제

- 모바일 전화기, 스마트폰, 태블릿 컴퓨터 등 다양한 이동용 혹은 휴대용 장치에서 실행되도록 만들어진 운영체제, 절전과 보안 중요함

    - Android, iOS, BlackBerry, Bada, Symbian, Windows Mobile

 

임베디드 운영체제

- 임베디드 컴퓨터에서 장치들을 제어하고 작동시키는 기능

    - WinCE, 여러 종류의 임베디드 리눅스

 

실시간 운영체제

- 실시간 애플리케이션 (혹은 태스크)을 각각 정해진 데드라인 시간 내에 처리되도록 보장하는 것을 목표

    - PSOS, VsWorks, VRTX, RT-Linux, Lynx