운영체제의 역할
운영체제(Operating System, OS)
-
자원 관리를 하는 소프트웨어 (resource manager)
-
자원 (resource)
- 하드웨어: 프로세서, 메모리, 입출력장치, 통신장치
- 소프트웨어
-
효율적이고 공평한 자원 사용을 위해 상충되는 자원 요구 조정
-
사용자/응용프로그램과 하드웨어 간 인터페이스
운영체제의 발전 과정
1940년대
1950년대
- 한 번에 한 개의 job 실행
- job간의 전환을 용이하게 하는 기술 도입
- 일괄처리 시스템(batch processing system)
- 프로그램과 데이터를 tape으로 연속으로 공급
1960년대
-
일괄처리 시스템 사용
-
다중 프로그래밍(mutiprogramming) 지원
-한번에 여러 작업(프로그램) 처리
-다른 작업들이 주변장치를 사용하는 동안, 한개의 job만 프로세서 이용
-
시분할 시스템
-많은 동시 대화형 사용자 지원
-소요 시간이 수 초 ~ 수십 초 단위로 축소
- job 제출에서 결과 반환까지 걸리는 시간
-
실시간 시스템
- 지정된 시간 내에 결과를 제공해야 하는 시스템
-
가상 메모리
- 실제 존재하는 메모리 공간보다 더 많은 메모리가 있는 것처럼 메모리를 사용하는 방법
-
IBM System/360 메인프레임 컴퓨터 출시: 1964
- 많은 산업계 표준 도출
- 8-bit byte addressing
- 32-bit word
- IBM Floating Point Architecture
-
운영체제
- OS/360(초기 모델: 단일 일괄처리 OS, 다중 프로그래밍 지원)
- CP-67 (나중 모델: 시분할 OS, 가상메모리 지원)
-
여러 시분할 운영체제 개발
-
CTSS(Compatible Time-Sharing System)
- MIT에서 개발한 초기 시분할 시스템
-
Multics
- MIT에서 CTSS 후속으로 개발
- 계층적 파일시스템, 다양한 command line shell 명령어 지원
- 가상 메모리 지원
-
Unix
- Bell Labs에서 Ken Thompson, Dennis Ritchie 개발, 1969
-개발언어로 C 개발
-
1970년대
-
다중 모드 시분할 시스템
-일괄처리, 시분할, 실시간 응용 프로그램 실행 지원
-
개인용 컴퓨터 개발 환경 조성
- 마이크로프로세서 개발 초기 단계
-
TCP/IP
- 미 국방성 개발
- 군사 및 대학 연결망으로 광범위하게 사용
- 표준 통신 프로토콜의 하나로 발전
- 보안 문제 노출
- 취약한 통신선을 통해 데이터 전달
-
1980년대
- PC 및 워크스테이션의 시대
- 필요에 따라 컴퓨팅 지원
- GUI 지원에 따라 컴퓨터 활용 용이
- 네트워크를 통한 정보 전달 일반화
-
Client-Server 컴퓨팅 모델 확산
- 클라이언트: 서비스 요청
- 서버: 요청 서비스 처리
-
소프트웨어 공학 분야 발전
- 1968년 소프트웨어 공학 용어 처음 사용
- 소프트웨어의 개발,운용,유지보수 등의 생명 주기 전반을 체계적이고 규범적이며 정량적으로 다루는 학문
- 미국 정부가 국방성 소프트웨어 프로젝트의 관리를 위해 적극지원
- 코드 재사용
- 프로그래밍 언어에서 추상화 수준 향상
- 독립적으로 수행되는 다중 쓰레드
-
1990년대
- 하드웨어 성능의 기하급수적 향상
- 처리 성능 및 저장장치 가격 하락
- PC에서 대규모 복잡한 프로그램 실행
- 큰 규모의 데이터베이스 및 처리 작업 가능 저렴한 컴퓨터
- 메인프레임 컴퓨터 필요성 축소
-
Moore의 법칙
- Intel 공동 창업자 Gordon E. Moore (1965)
- 반도체 집적회로의 성능이 18개월마다 2배로 증가
-
황의 법칙
- 삼성전자 기술총괄 사장 황창규 주장(2002)
- 메모리 반도체 집적도 1년에 2배 증가
- 2008년 128GB NAND 플래시 메모리 발표 실패
- 운영체제의 사용 편의성 증가
- GUI 기본 제공
- Plug-and-Play 기능 제공
- 장치 부착에 따른 불편 해소
- WWW (World Wide Web) 확산
- 1989년 CERN의 Tim Berners-Lee 초기 개발
- hyperlink로 연결된 문서로 정보를 공유
- HTML (Hypertext Markup Language)
- HTTP (Hypertext Transfer Protocol)
- WWW를 통한 문서 전달을 위한 통신 프로토콜
-
운영체제에서 네트워킹 지원 일반화
-
Microsoft 시장 주도
- Windows 운영체제
- 초기 Apple 매킨토시 운영체제의 많은 개념 도입
- 여러 개의 응용프로그램 실행을 사용자가 쉽게 관리
-
객체 기술 유행
- 많은 애플리케이션이 객체지향언어로 개발
- C++, Java, C#
-
객체지향 운영체제
- 객체로 운영체제 구성요소 표현
- 상속, 인터페이스 개념 사용
- 모듈화된 운영체제 개발
- 유지보수 및 확장 용이
-
Open-source 소프트웨어 확산
- 프로그램이 소스코드와 함께 배포
- 개인이 검증하고 수정하여 배포 가능
- Linux, Apache, Web server, tomcat, ant 등
- Open Source Initiative (OSI)
- 오픈 소스 프로그램의 확산을 위한 기관
- Eric Steven Raymond 설립 (1998)
-
Free 소프트웨어 (freeware)
- 무료로 배포한 소프트웨어, 수정없이 재배포는 가능
- Richard Stallman의 Free Software Foundation 설립(1986)
- GNU 프로젝트
- Richard Stallman 주도
- 누구나 자유롭게 실행, 복사, 수정, 배포할 수 있고, 누구도 그런 권리를 제한하면 안된다는 사용 허가권 아래 소프트웨어 배포 - GPL, LGPL, GFDL 라이선스
- LINUX, gcc, gdb, emacs, Open Office
- 2000년대 이후
- 미들웨어
- 양 쪽을 연결하여 데이터를 주고 받을 수 있도록 중간에서 매개 역할을 하는 소프트웨어
- Web service에서 특히 중요
- RPC, TP monitor 등
- 클라우드 컴퓨팅
- Server, Storage, Application 등의 IT 자원을 구매하여 소유하지 않고 인터넷을 기반으로 필요한 만큼 사용료 기반으로 이용하는 방법
- 인터넷 기술을 기반으로 외부 사용자 (기업, 개인)에게 IT로 구현된 as a service로 제공되는 computing 환경
- 빅데이터 처리를 위한 분산 파일 시스템
- Apache Hadoop
- 빅데이터 처리를 위한 분산 처리
- Apache MapReduce
운영체제 설치 환경
- 고성능(high-end) 환경의 운영체제
- 특별한 설계 요구 및 하드웨어 지원 필요
- 대용량 메모리
- 특수목적 하드웨어
- 많은 수의 프로세스(process)
- 수퍼컴퓨터 운영체제
- LINUX 기반 (53%, 2021)
-
임베디드 시스템 (embedded system, 내장형 시스템)
- 제한된 특정 기능을 수행하는 작은 규모의 시스템
- 제한된 컴퓨팅 자원 보유
- Embedded Linux
- Android
- Tizen
- iOS
- Windows Mobile
- RTOS
-
가상기계 (virtual machine, VM)
- 컴퓨터의 소프트웨어적 추상화(abstraction) 제공
- 임의의 운영체제 상에서, 특정 하드웨어가 있는 것처럼 환경을 제공하여, 운영체제 설치 지원
- VMWare, Virtual Box, Parallels (macOS)
- 임의의 운영체제 상에서, 특정 소프트웨어 실행 환경 제공
- JVM(Java Virtual Machine), .NET framework
-
가상기계 (virtual machine, VM)
- 단일 컴퓨터에서 여러 개 운영체제의 동시 실행 환경 제공
- 에뮬레이션(emulation)
- 실제 없는 하드웨어의 기능을 있는 것처럼 하는 것
- 이식성(portability) 개선
- Java Virtual Machine
- JRE (Java Runtime Environment)
- bytecode : 구조 중립의 중간코드
- Microsoft .NET Framework
• CLR (Common Language Environment)
– .NET 가상기계
• MS-IL (Microsoft Intermediate Language)
– 중간코드 기술 언어
- Windows Subsystems for Linux (WSL)
- MS에서 개발한 윈도우 상에서 Linux 호환 커널을 제공하는 부분
- Ubuntu Linux의 명령어 대부분을 지원
- Windows 10/11에서 지원
- WSL1 => WSL2
운영체제의 핵심 요소
커널
- 운영체제의 핵심 구성요소를 포함하는 부분
- 프로세서 스케줄러
- 메모리 관리기
- 입출력 관리기
- 프로세스간 통신 관리기
- 파일 시스템 관리기
시스템 콜
- 응용 프로그램에서 커널에서 제공하는 서비스를 사용할 수 있도록, 커널에서 제공하는 인터페이스 (API)
단일 구조
- 커널에 모든 구성요소 포함
- 일반적으로 매우 효율적
- 코드가 함께 되어 있어 미묘한 오류의 원인 식별 어려움
계층적 구조
- 유사한 기능을 하는 것을 층으로 그룹화
- 각 층은 인접 층과만 통신
- 프로그램의 요청이 인접하지 않은 층으로 전달될 때는 여러 층 경유
- 단일 구조에 비해 처리 시간 관점의 비효율성
마이크로커널 구조
- 커널에 반드시 필요한 최소한의 기능만 구현
- 그 외의 커널 기능은 사용자 공간에서 구현
- Mach OS
- Mac OS X, GNU Hurd의 커널 기반
- VxWorks, Windows NT