OSTEP에서는 운영체제를 가상화, 병행성, 영속성의 3가지 측면으로 나누어 설명한다
운영체제
- 프로그램을 쉽게 실행(동시에 여러 개 프로그램 실행 가능)
- 프로그램 간의 메모리 공유, 장치와 상호작용을 가능하게 함
- 시스템을 사용하기 편리하면서 정확하고 올바르게 동작시킬 책임이 있음
폰 노이만 구조
- 프로그램 실행 시 프로세서가 명령어를 메모리에서 인출, 디코드, 실행 순서로 진행하는 구조
- 명령어가 끝나면 프로세서는 다음 명령어로 이동한다(프로그램이 완전히 종료될 때까지)
가상화
-
프로세서, 메모리, 디스크와 같은 물리적 자원을 이용하여 일반적이고 강력하고 사용이 편리한 가상 형태의 자원을 생성해서 이용한다
-
운영체제는 가상 형태의 자원을 쉽게 사용할 수 있도록 API를 제공하여 시스템 콜을 활용할 수 있게 하며, 시스템 콜을 제공하기 때문에 운영체제가 표준 라이브러리를 제공한다고 하기도 한다
-
운영체제는 가상화를 이용하여 자원을 프로그램들이 공유할 수 있도록 하여 자원 관리자로 불리기도 함
가상화 1 - CPU 가상화
- 단일 프로세서 환경에서 A.cpp, B.cpp C.cpp 등 여러 프로그램을 동시에 백그라운드에서 실행했을 때 A.cpp, B.cpp C.cpp가 순차적으로 실행될 것 같지만 이 프로그램들은 모두 동시에 실행된다
- 동시에 실행되는 이유는 운영체제가 CPU를 가상화하여 매우 많은 수의 vCPU를 만들어 냈기 때문이다
- 이렇게 물리적인 CPU를 무한개의 CPU가 존재하는 것처럼 변환하여 동시에 많은 수의 프로그램을 실행시키는 것이 CPU 가상화이다
가상화 2 - 메모리 가상화
- 각 프로그램들의 메모리 할당 주소를 C 프로그램을 통해 살펴보면 각 프로그램은 물리 메모리를 다른 프로그램과 공유하는 것이 아니라 각자 자신의 메모리를 가지고 있는 것처럼 보임
- 이러한 현상은 OS가 메모리 가상화를 하기 때문에 발생함
- 각 프로세스는 자신만의 가상 주소 공간을 갖고 운영체제는 이를 물리 메모리로 매핑해주는 역할을 하여 하나의 프로그램이 수행하는 각종 메모리 연산이 다른 프로그램에 영향을 주지 않도록 함
병행성
- 여러 스레드가 문맥 교환 등을 통해 동시에 실행되는 것 처럼 보이는 것을 병행성이라고 한다.
- 병행성을 갖는 시스템에서는 명령어가 원자적으로 실행되지 않기 때문에 문제가 발생할 수 있는데 이 문제를 병행성 문제라고 한다.
영속성
- DRAM과 같은 장치는 데이터를 휘발성 방식으로 저장하여 전원 공급이 끊어지거나 시스템이 고장나면 메모리의 모든 데이터가 사라진다
- 그러므로 데이터를 영속적으로 저장할 수 있는 하드웨어와 소프트웨어가 필요하다.
- 운영체제는 파일 시스템으로 영속성과 관련된 요청을 관리한다.
- 파일 시스템에서는 효율적인 디스크 작업을 위해 여러 자료구조와 저널링, Copy-On-Write 기법 등을 사용한다.