[23-01/운영체제] 운영체제의 시작과 발전
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