운영체제 개요
프로그램 실행될 때 일어나는 일
- 명령어를 fetch, decode, execute
운영체제: 시스템을 사용하기 편리하면서 정확하고 올바르게 동작시킬 책임이 있는 소프트웨어
- 프로그램 실행 (동시 여러개)
- 프로그램 간의 메모리 공유
- 장치와 상호작용
- 등등
Virtuallization
- 운영체제는 가상머신: 물리적인 자원을 이용 -> 일반적, 강력, 편리한 가상 형태의 자원 생성
- 운영체제는 자원 관리자: 많은 프로그램들이 CPU를 공유하여, 동시에 실행될 수 있게 함
- Resource: CPU, Memory, Disk
API
- OS와 사용자가 상호작용할 수 있는 주된 방법
CPU 가상화
- CPU 가상화: 하나 또는 소수의 CPU 집합을 무한개의 CPU가 존재하는 것 처럼 변환하여 동시에 많은 수의 프로그램을 실행시키는 것
- Policy: 누가 실행되어야 하는지?
메모리 가상화
물리 메모리 모델: 바이트 배열
- 메모리 읽기: 데이터에 주소를 명시해야함
- 메모리 쓰기: 주소와 데이터를 명시
OS 메모리 가상화 => 각 프로세스는 자신만의 가상 주소 공간을 가짐
- OS는 이 가상 주소 공간을 컴퓨터의 물리 메모리로 매핑
- 하나의 프로그램의 메모리 연산은 다른 프로그램의 주소 공간에 영향 x
병행성(Concurrency)
여러 프로세스를 실행시켜 한 번에 많은 일을 시킬 때 일어나는 문제들
멀티 쓰레드 프로그램도 동일한 문제를 가짐
- 원자적(atomically) 으로 실행되지 않기 때문에 발생하는 문제
영속성(Persistence)
- RAM: 휘발성
HW.. 입출력 I/O 장치 형태로 제공
- SSD HDD
파일시스템: 디스크를 (영속적으로) 관리하는 OS 소프트웨어
- 파일을 시스템의 디스크에 안전하고 효율적인 방식으로 저장할 책임
CPU, 메모리 와 달리 가상 디스크는 없음
- 파일 정보를 공유하기 원한다고 가정
- 파일이 여러 다른 프로세스 사이에서 공유
OS system call : open(), write(), close()
- => file system 으로 전달
쓰기 중에 시스템의 갑작스러운 고장에 대비하는 기법
- 저널링(Journalling)
- 쓰기-시-복사(Copy on Write)
효율적인 디스크 작업 자료구조: 단순 리스트 ~ 복잡한 B 트리
filesystem
- 새 데이터가 디스크 어디에 저장될지 결정
- 다양한 자료구조를 통하여 데이터 상태 추적
- 저장장치로부터, 기존 자료구조 읽거나 갱신
- 성능 향상을 위해 대부분의 파일 시스템은 쓰기 요청을 지연시켜 취합된 요청들을 한 번에 처리
- 디스크, RAID, 파일시스템
설계 목표
- OS: 물리자원을 가상화, 병행성과 관련된 복잡한 문제 처리, 파일을 영속적으로 저장하여 안전하게
- OS 구현하기위한 목표 => 설계와 구현에 집중
- 기본적인 목표
- 필요한 개념(abstraction)들을 정의
- 추상화 => 큰 프로그램을 작은 부분들로 나누어 구현
- 중요한 목표
- 성능: 오버헤드 최소화(절충)
- 오버헤드
- 공간: 메모리, 디스크
- 시간: 더 많은 명령어
- 또 다른 목표
- app 간의 보호, OS와 app 간의 보호
- 보호: 고립(Isolation) 원칙의 핵심
- 운영체제의 종속성 (프로그램은 OS위에서 실행됨)
- 신뢰성 제공의 필요성
- 다른 중요한 목표
- 에너지 효율성
- 악의적인 응용 프로그램에 대한 보안
- 이동성(mobility)
OS 역사
- 초창기 운영체제: 단순 라이브러리
핵심 질문들
자원을 어떻게 가상화시키는가?
- 가상화시키는 이유? : 시스템을 사용하기 편리하게 해줌
- 방법? 어떻게 구현? 기법과 정책? 어떻게 효율적으로 구현? 어떤 하드웨어 자원 필요?
올바르게 동작하는 병행 프로그램은 어떻게 작성해야하는가?
- OS로부터 어떤 기본 기법들을 제공 받?
- 하드웨어는 어떤 기능을 제공해야하는가?
- 기본 기법과 hw 기능을 어떻게 이용?
데이터를 영속적으로 저장하는 방법은 무엇인가
- 어떤 기법?
- 성능을 위해 어떤 기법과 정책?
- HW, SW 가 실패해도 올바르게 동작하려면 어떻게?