01. 운영체제 소개
운영체제가 해 주는 서비스
1. 컴퓨터 사용자를 위한 서비스
① User Interface: ex) CLI, GUI
② Program 수행: 프로그램을 주메모리에 탑재 및 수행
③ File 조작 및 관리: 파일 읽기/쓰기, 디렉토리 읽기/ 쓰기, 파일 생성, 제거, 변경, 보호 등 파일과 관련된 모든 동작
④ 통신: 프로세스간 통신(IPC), 네트워크를 통한 컴퓨터 간의 통신
⑤ 오류 탐지 및 처리
2. 자원 공유를 통해 시스템의 효율적인 동작을 위한 기능
① 자원 할당(resource allocation): CPU, main memory, I/O device
② 보호 및 보안(protection & security)
: 보호(protection) - 시스템이 보유하고 있는 모든 내부 자원에 대한 접근을 관리, 제어
: 보안(security)
- 외부로부터의 침투에 대한 방어
- 불법적 접근 시도로 부터 외부 입출력 장치 방어까지 포괄적인 개념
- ex) 사용자 인증(authentication)
3. 시스템 호출(System calls)
① System call : 운영체제 서비스를 사용하기 위한 프로그램 인터페이스 ex) C - library, Java - API
② 보통 C, C++로 작성되어 있음
③ 최근에는 직접적인 시스템 호출보다는 고급의 API (Application Program Interface)를 사용하여 access된다
ex) Win32 API, LINUX API, JAVA API for JVM
API - System Call - OS 사이의 관계
Standard C Library
운영체제 설계 및 구현 개념
1. 사용자들이 원하는 컴퓨터 시스템
① 사용하기 쉬움(easy to use)
② 신뢰성이 높음(reliable, safe)
③ 빠름(fast)
2. 시스템 설계 목표
① 설계 및 구현하기 쉬움(easy to design and implement)
② 유지 보수성이 좋음(maintenance)
③ 융통성이 좋음
④ 오류가 발생하지 않음
⑤ 효율적으로 동작함
3. 운영체제가 갖춰야 할 특징
① 모듈 단위로 구성(modular): 오류 발생시 모듈에서만 발생하도록 함
② 추상화(abstraction): 사용자는 자세한 구현 방법 등의 사항을 몰라도 사용할 수 있음
③ Complete: 필요한 기능은 모두 제공해야 함
④ Extensible: 새로운 장치 및 서비스의 점진적 추가와 자원의 동적 배치(Configuration)가 가능해야 함
4. 기본 설계 원리
① Policy와 Mechanism을 분리
: Policy - “무엇”을 할 것인가
: Mechanism - “어떻게” 할 것인가
5. 기존의 운영체제 구성 모델
① Layered(계층 구조)
② Kernel-based(커널 기반 주고): ex) 일반 운영체제
③ Served-based(client/sever): ex) web, cloud 시스템(아마존, 구글, 네이버)
④ Virtual machines(가상머신): Java
The UNIX OS consists of two separable parts
Microkernel System Structure
1. 가능한 많은 부분을 kernel로부터 user공간, 즉 응용소프트웨어화 하여 kernel의 크기를 최소화시키는 kernel-based 설계 개념
2. 장점
① Easier to extend a microkernel (확장하기에 좋음)
② Easier to port the operating system to new architectures(다른 시스템에 이식하기 좋음)
③ More reliable(오류 발생 확률 적어짐)
④ More secure(보안성이 좋아짐)
3. 단점
① Performance overhead(성능쪽 오버헤드가 일어날 수 있음, 커널 운영체제의 공통된 단점)
4. ex) Mach OS, Windows-NT
Java Virtual Machine (JVM)
1. Java 언어로 짜여진 프로그램만 수행할 수 있는 Virtual Machine으로 Windows, Mac OS, Linux 등 여러가지 다른 운영체제 상에서 생성될 수 있음
2. Java Program은 bytecode output을 생성하는 compiler에 의해 구현되고 이 bytecode는 JVM 상에서만 수행 가능함
- bytecode: JVM이 이해할 수 있는 Stack-based 기계어
- Java Processor: byte를 해석하여 직접 수행할 수 있는 컴퓨터. mobile phone, MP3P 등을 Java Processor로 구현 가능