가상화
📌 운영체제 및 가상화
운영체제는 프로그램을 실행, 프로그램 간의 메모리 공유, 장치와 상호작용, 다양한 일을 할 수 있게 하는 소프트웨어다. 운영체제는 가상화 기법을 사용한다. 프로세서, 메모리, 또는 디스크와 같은 물리적(physical)인 자원을 이용하여 사용이 편리한 가상(virtual) 형태의 자원을 생성한다. 그래서 운영체제를 가상 머신(virtual machine)이라고 부른다. 가상화를 시키는 이유는 시스템을 사용하기 편리하게 만들기 위함이다.
가상화는 많은 프로그램들이 CPU를 공유하여, 동시에 실행될 수 있게한다. 프로그램들이 디스크 등의 장치를 공유할 수 있도록 한다. 그래서 운영체제는 자원 관리자(resource manager)라고 부른다. CPU, 메모리 및 디스크는 시스템의 자원이다. 운영체제는 자원을 관리하는 역할을 담당한다.
📌 CPU 가상화
CPU 가상화(virtualizing the CPU)는 하나의 CPU 또는 소규모 CPU 집합이 동시에 많은 프로그램을 실행시킴으로써, 무한 개의 CPU가 존재하는 것처럼 만드는 것이다.
📌 메모리 가상화
각 프로세스는 자신만의 가상 주소 공간(virtual address space)을 갖는다. 운영체제는 이 가상 주소 공간을 컴퓨터의 물리 메모리로 매핑(mapping)한다. 물리 메모리는 공유 자원이고, 운영체제가 관리한다.
메모리를 읽기 위해서는 데이터에 주소를 명시해야한다. 메모리에 쓰기 위해서는 주소와 데이터를 명시해야 한다. 메모리는 프로그램이 실행되는 동안 항상 접근된다. 실행 중인 프로그램은 자신의 자료 구조를 메모리에 유지하고 load와 store 또는 기타 메모리 접근을 위한 명령어를 통해 자료 구조에 접근한다. 참고로 명령어 역시 메모리에 존재한다. 명령어를 반입할 때 마다 메모리가 접근된다.
병행성
📌 병행성
병행성은 프로그램이 한 번에(동시에) 많은 일을 하려고 할 대 발생하는 문제다. 병행성 문제는 운영체제 자체에서 일어나지만 운영체제만의 문제는 아니다. 멀티 쓰레드 프로그램에서도 병행성 문제가 발생한다.
영속성
📌 영속성
DRAM과 같은 장치는 데이터를 휘발성 방식으로 저장하기 때문에 데이터 손실이 쉽게 일어난다. 그래서 데이터를 영속화 시킬 수 있는 저장 장치가 필요하다. 하드웨어는 IO 장치 형태로 제공한다. CPU나 메모리 가상화는 달리 운영체제는 프로그램 별로 가상 디스크를 따로 생성하지 않는다.
파일 시스템이란, 디스크를 관리하는 운영체제 소프트웨어다. 파일 시스템은 데이터를 디스크에 안전하고 효율적인 방식으로 저장한다.
데이터가 디스크에 쓰기 위한 운영체제의 작업
새 데이터가 디스크의 어디에 저장될지 결정하고, 파일 시스템이 관리하는 다양한 자료 구조를 통해 데이터의 상태를 추적한다. 이런 작업을 하기 위해서는 기존 자료 구조를 읽거나 갱신해야한다.
대부분 파일 시스템은 성능향상을 위해 응용프로그램들의 쓰기 요청들을 모아서 한번에 처리한다. 즉, 응용프로그램이 요청한 쓰기 작업은 실제로 지연 처리된다는 것이다. 지연 처리 때문에 발생하는 문제도 있다. 쓰기 요청이 처리되기 전에 정전등의 문제로 인해 데이터 손실이 일어날 수 있다. 이러한 고장에 대비하기 위해서 파일 시스템들은 저널링(journaling)이나 쓰기-시-복사(Copy-On-Write) 등 기법을 사용한다. 이 기법들은 쓰기 명령들간에 기록 순서를 보장하고 고장이 나더라도 복구할 수 있다.