운영체제란?
운영체제의 정의
1. 컴퓨터 사용자와 컴퓨터 하드웨어 사이에서 중계 역할을 하면서, 프로그램 실행을 관리하고 제어하는 시스템 소프트웨어
> 운영체제는 컴퓨터가 아니다.
> 운영체제는 실체가 있는 소프트웨어다. (추상적이지 않다.)
2. 컴퓨터가 켜질 때 처음으로 메모리에 적재된다.
3. 나머지 모든 프로그램의 실행을 제어하고 사용자의 요청을 처리해준다.
4. 컴퓨터의 자원을 독점적으로 관리한다.
운영체제의 역할
1. 운영체제는 컴퓨터의 모든 자원(resource) 관리
- 하드웨어 자원: CPU, 캐시, 메모리, 키보드, 마우스, 디스플레이,하드디스크,프린터
- 소프트웨어 자원: 응용프로그램 - 데이터 자원: 파일, 데이터베이스 등
2. 운영체제는 자원에 대한 독점(exclusive) 권한 소유
- 자원에 대한 모든 관리 권한은 운영체제에게 있음
- 자원 할당, 자원 공유, 자원 액세스, 자원 입출력 등 예) 파일 생성: 디스크의 빈 공간 관리, 파일 저장 위치 관리, 파일 입출력 등
3. 운영체제는 관리자(supervisor)
- 실행중인 프로그램 관리, 메모리 관리
- 파일과 디스크 장치 관리, 입출력 장치 관리, 사용자 계정 등 관리 등
4. 운영체제는 소프트웨어(software)
- 커널(kernel)이라고 불리는 핵심 코드와, UI를 비롯한 도구 프로그램들(tool/utility)
예: 탐색기(explorer), 작업 관리자(task manager), 제어판(control panel) 등
- 장치를 제어하는 디바이스 드라이버들로 구성
운영체제의 목적과 기능
운영체제의 목적
- 사용자의 컴퓨터 사용 편리성
- 컴퓨터의 자원 관리 효율성 운영체제의 기능
운영체제의 기능 (모든 기능들은 사용 편리성과 효율성을 위한 것)
- CPU/프로세스 관리(process management)
- 메모리 관리(memory management)
- 파일 시스템 관리(file system management)
- 장치 관리(device management)
- 네트워크 관리
- 보안 관리
- 기타 관리
> 사용자 관리 - 사용자 계정 관리
> 통계 - CPU, 메모리, 네트워크의 사용 시간, 사용자의 접속 시간 등
> 오류 발견 및 대응
> 부팅(booting)
고정프로그램컴퓨터 (1940s)
고정 프로그램 방식(fixed program computer)
- 1940년대, 전자식 디지털 컴퓨터가 만들어지기 시작하는 시대
- 운영체제에 대한 개념 없음
- 소프트웨어와 하드웨어의 분리 개념 없음
> 모든 것이 하드웨어로 제작
- 프로그래밍
> 종이에, 프로그램을 구현하는 스위치와 전선 연결도 작성
> 배선판(plugboard)에 전선 연결, 프로그램을 기계에 고착화
> 하나의 명령을 구성하기 위해 여러 가닥의 전선 연결
> 프로그램 전체 구축에 수천 개의 전선 연결, 며칠 소요
> 새로운 프로그램을 작성할 때(구축할 때) 큰 고통
- 사례
> 1941년 독일에서 만든 Z3 computer
> 1944년 영국에서 독일군의 암호를 해독하기 위해 만든 Colossus
> 1943~1945년 미국에서 만든 최초의 전자식 컴퓨터 ENIAC(Electronic Numerical Integrator And Computer)
내장프로그래밍 (1945s)
내장 프로그래밍 방식(stored program)
- 1945년 폰노이만에 의해 제안
- 1951년 EDVAC 컴퓨터를 만들 때 적용
- 오늘날 컴퓨터의 구조가 됨
내장 프로그램 컴퓨터의 의미
- CPU와 메모리 분리
- 소프트웨어와 하드웨어 분리
- 실행할 프로그램을 메모리에 담고, CPU가 프로그램을 실행하는 방식
> 고정 프로그래밍 방식에 비해 획기적인 변화
> 하드웨어의 변화 없이, 실행시키려는 프로그램만 메모리에 적재
- 프로그램은 입력 장치를 통해 메모리에 적재
> 펀치 카드에 구멍을 뚫어 프로그램 작성 (구멍의 위치로 프로그래밍)
> 카드 리더기로 프로그램을 메모리에 읽어 들임
IBM701 컴퓨터 (1950s)
프로그램 로딩 시대
- 운영체제 개념의 시작
IBM 701 메인 프레임
- 1954년 IBM에서 만든 첫 번째 내장 프로그래밍 컴퓨터
- IBM의 첫 번째 범용 컴퓨터
> 판매하지 않고 대여만
> 기계만 대여하고 어떤 소프트웨어도 제공하지 않았음
> IBM 701을 빌린 고객(기업)이 모든 것을 해야 했음
로더 프로그램, 운영체제의 시작
IBM 701 개발자의 일반적인 개발 형태
- 첫번째 카드
> 다음 카드에 작성된 프로그램을 메모리에 적재하는 코드만 작성
>한 장의 카드에는 24개의 명령만 작성 가능
>24개보다 긴 프로그램 작성에 2장 이상의 카드 필요
- 두번째 카드부터 목적하는 프로그램 작성
로더 프로그램 필요
- 개발자가 프로그램을 메모리에 적재하는 앞 카드 코드 작성에 소요하는 시간 낭비 를 줄일 필요가 있었음
> 이 코드를 로더(loader)라고 부름
> 로더는 모든 사용자(개발자)에게 공통으로 필요
로더가 운영체제로 발전
- 오늘날 운영체제의 가장 기본적인 기능
- 사용자의 명령을 받아 저장 장치에 담긴 프로그램을 메모리에 적재하는 기능
원시 운영체제 GM OS (1955s)
GM OS
- 1955년, IBM701의 고객 GM(General Motors)에 의해 개발
> 펀치 카드에 담긴 프로그램을 메모리에 적재하는 로더 프로그램 개발
- 핵심 개념
> 로더 프로그램을 사용자 프로그램에서 분리
> 사용자가 자신의 프로그램을 적재하는 셀프-로더 프로그램 작성의 번거로움 해소
> 로더 프로그램은 시스템 내 테이프에 저장, 필요할 때마다 실행
> 그 당시, 로더 프로그램을 모니터(Monitor)라고 불렀음 > 후세대, General Motors Operating System(GM OS)라고 불렀음
GM OS는 원시적인 최초의 운영체제
- 사용자 프로그램에서 로더 프로그램 분리하고,
- 로더 프로그램을 시스템에 한 개만 두고,
- 사용자 프로그램을 실행할 때 작동하여,
- 사용자 프로그램을 읽어 실행
최초 운영체제 GM-NAA I/O (1956s)
- 1955년 GM은 IBM 701의 처리 속도를 높인 IBM 704 주문
IBM 704 컴퓨터의 3가지 문제점
1. 개발자들은 여전히 대기 번호를 뽑고 자신의 차례를 기다려야 함
2. 오랜 시간 비싼 컴퓨터를 놀려두고 있어야 함
- 개발자가 프로그램을 실행시키기 위한 시스템 셋업하는 동안, 컴퓨터는 놀게 됨
3. 입출력 루틴을 개발자 스스로 작성
- 카드 입력 장치나 테이프 장치를 제어하는 프로그램 코드 작성
최초의 운영체제 GM-NAA I/O 개발
- 1956년 GM과 NAA(North American Aviation)의 공동 개발
> 고가의 IBM 704 컴퓨터를 보다 효율적으로 사용하기 위하여 개발
> IBM 701의 모니터 프로그램(GM OS)을 확장하여 구현
- 운영체제로서의 모습을 갖추기 시작함
> 배치 방식(batch operating system)으로 작동
개발자들이 작성한 작업들을 순서대로 메모리에 적재, 한 번에 하나의 작업 실행
> GM-NAA I/O 프로그램을 메모리에 상주(오늘날 운영체제 방식)
> 입출력 장치들을 제어하는 루틴들을 라이브러리 형태로 갖추고 프로그램들이 공유
카드 입력 장치의 입출력, 테이프 입출력, 프린터 출력 등
개발자는 입출력 코드를 작성할 필요 없음
GM-NAA-IO의 구조
- 어셈블러 코드
> 사용자가 작성한 어셈블리어 프로그램을 기계어 코드로 번역
- 로더 프로그램
> 사용자 프로그램을 하나씩 메모리에 적재
- 운영체제 메인 코드와 공통 입출력 코드
> 운영체제 메인 코드: 운영체제 시작 코드
> 공통 입출력 코드: 장치 입출력을 다루는 프로그램 코드
라이브러리화 되어 사용자 프로그램(목적 프로그램)이 실행 시 호출하여 활용
운영체제가 없던 초기 컴퓨터 세대
- 개발자가 펀치 카드에 프로그램 작성, 입력, 실행
- 컴퓨터는 한 번에 한 개의 작업만 실행
- 컴퓨터는 셋업하는 동안 많은 시간이 유휴(노는,idle) 상태
배치 운영체제
출현 배경
- 컴퓨터의 노는 시간(idle 시간, 유휴시간)을 줄여 컴퓨터의 활용률 향상
배치 운영체제 컴퓨터 시스템
- 개발자와 관리자의 구분
- 개발자는 펀치 카드를 입력 데크에 두고 결과 기다림
- 배치 운영체제는 테이프 장치에 대기중인 프로그램을 하나씩 적재 및 실행
다중프로그래밍 운영체제
출현 배경
- 1960년대 중반
> CPU 등 하드웨어 속도 개선, 컴퓨터 가격 증가
- 프로그램의 실행 형태로 인한 CPU의 유휴시간(idle 시간) 발생
> 프로그램 실행 형태: CPU 작업 - I/O 작업 – CPU 작업 – I/O 작업의 반복
> 배치 작업은 1번에 1개의 프로그램만 실행
> I/O 작업이 이루어지는 동안 CPU는 놀면서 대기, CPU의 많은 시간 낭비 발생
(I/O란 Input 과 Output의 약자로 입력과 출력, 간단히 줄여서 입출력이라고 한다. 입출력은 컴퓨터 내부 또는 외부의 장치와 프로그램간의 데이터를 주고 받는 행위를 뜻한다.)
- CPU의 유휴시간을 줄일 필요
> CPU 활용률 증가 -> 처리율 증가(더 많은 사용자 프로그램 실행)
다중프로그래밍(Multiprogramming) 기법 출현
- 미리 여러 프로그램을 메모리에 적재
> 메모리가 수용할 만큼 다수의 프로그램 적재
- 정의 > 여러 프로그램을 메모리에 올려놓고, CPU가 한 프로그램을 실행하다 I/O가 발생
> 입출력이 완료될 때까지 CPU가 메모리에 적재된 다른 프로그램을 실행
> CPU의 노는 시간을 줄이는 기법
다중프로그래밍 운영체제에 대한 이슈
큰 메모리 이슈
- 여러 프로그램을 동시에 메모리에 올려놓기 위해서는 메모리의 크기 늘릴 필요
프로그램의 메모리 할당 및 관리 이슈
- 몇 개의 프로그램 적재? 메모리 어디에 적재? 프로그램 당 할당하는 메모리 크기?
메모리 보호 이슈
- 프로그램이 다른 프로그램의 영역을 침범하지 못하게 막는 방법 필요
CPU 스케줄링과 컨텍스트 스위칭
- 실행시킬 프로그램을 선택하는 스케줄링 필요
- 프로그램의 실행 상태를 저장할 컨텍스트 정의 및 컨텍스트 스위칭 필요
인터럽트 개념 도입
- 운영체제가 I/O 장치로부터 입출력 완료를 전달받는 방법 필요
동기화
- 여러 프로그램이 동일한 자원을 동시에 액세스할 때 발생하는 문제 해결
교착 상태 해결
- 프로세스들이 상대가 가진 자원을 서로 요청하면서 무한대기하는 교착상태 해결
시분할 다중프로그래밍 운영체제
출현 배경
- 다중프로그래밍 운영체제와 거의 동시에 연구 시작
- 배치 처리 및 다중프로그래밍의 2가지 문제점
> 비 대화식 처리방식(non-interactive processing)
> 느린 응답시간, 오랜 대기 시간
프로그램을 제출하고 하루 후에 결과 보기, 사용자의 즉각적인 대응 없음
시분할 다중프로그래밍 (Time Sharing Multiprogramming) 운영체제의 시작
- 1959년 MIT 대학, John McCarty 교수에 의해 제안
> 빠른 프로그래밍 디버깅 필요에 의해 고안
- 사용자에게 빠른 응답을 제공하는 대화식 시스템 제안
> 터미널: 키보드+모니터+전화선+모뎀으로 구성된 장치
> 사용자는 자신의 터미널을 이용하여 메인 컴퓨터에 원격 접속
> 운영체제는 시간을 나누어 돌아가면서 각 터미널의 명령 처리
- CTSS(Compatible Time Sharing System) 시분할 시스템 개발 (1962년 MIT)
운영체제의 종류
- UNIX
-Linux
- MS-DOS
- MS Windows
- MacOS
- 모바일 운영체제
- chromeOS
UNIX
- 멀티태스킹(Multi-tasking) 기반의 시분할(Time Sharing) OS
- 1964년, MIT, Bell Lab, GE 합작 GE-645용 OS, Multics 가 기원
- 1971년, Bell Lab 에서 Ken Thompson 및 Dennis Ritchie 가 개발
- UNIX 커널을 재컴파일하고 유틸리티를 제작하기 위한 C언어 파생
- TCP/IP, socket 등의 네트워크 프로토콜, 인터페이스 포함
UNIX-like OS
- POSIX (Portable Operating System Interface & UNIX)
- IEEE 에서 제정한 유닉스 응용 인터페이스 표준 규격
- POSIX 를 따르는 OS: Unix-like OS
- Linux, FreeBSD 등
Linux
- Linux Kernel + GNU (GNU/Linux)
- Multi-users, Multi-tasking, Multi-threads 기반의 Time sharing OS
- 1991년, 핀란드 헬싱키 대학의 Linus Benedict Torvalds 가 개발
- 교육용 UNIX-like OS 인 Minix 에서 파생, GPL License 채택
- 클라우드 90%, 스마트폰 82%, 임베디드 62%, 슈퍼컴퓨터 99% 점유
Linux 배포판
- Debian .deb 패키지, apt 패키지 관리자
Ubuntu
- RHEL (Redhat Enterprise Linux) .rpm 패키지, yum 패키지 관리자
CentOS, Redora
- SUSE Zypp 패키지 관리자
openSUSE
- Zentoo Linux
MS-DOS
- Microsoft Disk Operating System
- 1981년, MS 에서 IBM PC 용 OS 개발 외주로 출시
- Seattle Computer Products 사의 Tim Paterson가 개발한 86-DOS (Q-DOS)의 변형판
- Single-user, Single-tasking, Batch processing
> Command Line Interface (CLI)
> 1982 MS-DOS 1.0 부터 1994 MS-DOS 6.22 까지 출시
> cmd.exe 가 MS-DOS 의 CLI 참조
MS Windows
- Microsoft Windows
- MS-DOS + GUI (Graphic User Interfaces) + Multi-tasking
- 1985 년 Windows 1.0 이 도스의 확장 프로그램으로 배포
- 1990 년 Windows 3.0 출시
- 1995 년 DOS 와 분리된 독립 OS 인 Windows 95 출시
- Windows NT 등을 거쳐 현재 Windows 11 까지 출시
- Windows 10/11 에는 POSIX 호환 PowerShell 이 제공
macOS
- NeXTSTEP 의 후속 OS 인 Darwin 기반 Mac 전용 운영체제
- NeXTSTEP: 1985년 CMU 에서 개발한 Mach Kernel + UNIX BSD API - 이전 이름, OS 10
- 이전 (1984-2001년) 에는 Mac 운영체제로 System 1
- OS 9 사용
- 2016 년 파일시스템으로 APFS 개발 (APple File System)
모바일 운영체제
- Android, iOS, Windows Mobile/Phone, TIZEN
- Android
Google 개발, Linux 기반 Open source mobile OS
Android 1.0 (2008) - C..P 시작 네이밍
- Android 15 (2023) Samsung, LG, Xiaomi, Motorola 등에서 채택
Kernel + SDK 전부 공개
- iOS
Apple 개발, macOS 기반 (Darwin/UNIX 계열), 폐쇄성
iPhone, iPod Touch, iPad 에서 사용
Android 에 비해 상대적으로 강력한 보안성, 일관성, 연동성
'운영체제' 카테고리의 다른 글
4. 스레드와 멀티스레딩 (2) | 2023.04.10 |
---|---|
3. 프로세스와 프로세스 관리 (2) (0) | 2023.04.07 |
3. 프로세스와 프로세스 관리(1) (1) | 2023.04.04 |
2. 컴퓨터 시스템과 운영체제 (0) | 2023.04.01 |