* Operating systems: Three easy pieces를 정리한 내용입니다.
운영체제
운영체제의 기능을 세가지 관점에서 설명한다.
- Virtualization : 시스템의 CPU, 메모리, 저장장치 등을 가상화하여 동작하는 프로그램이 시스템의 자원들을 혼자 사용하는 것처럼 만들어주는 것
- Concurrency : 여러 개의 프로그램이 동시에 수행되더라도 안전하고 효율적으로 자원을 공유할 수 있도록 만들어주는 것
- Persistence : 데이터를 찾기 쉽게 하기 위해 어디에, 어떤 형태로 저장할 것인지 정함
운영체제는 시스템이 정확하고 효율적으로 동작하도록 해야한다.
Virtualization
- OS는 physical resource (프로세서, 메모리, 디스크 등) 들을 가상화하여 프로그램이 physical resource들을 혼자서 쓰는 것 같은 착각을 줄 수 있다.
System call
- 프로그램이 자원을 사용할 때는 운영체제를 거쳐야하는데, 이때 소통할 수 있는 인터페이스가 system call이다.
- 유저는 시스템 콜을 통해 OS에게 일을 시킬 수 있다. (프로그램 실행, 메모리 접근, 다른 장치 접근 등)
CPU Virtualization
- 프로그램이 수행될 때 다음과 같은 instruction 들이 수행된다.
- Fetch : 프로세서가 메모리로부터 instruction을 fetch해온다.
- Decode : 가져온 instruction을 파악한다.
- Execute : 메모리에 접근하거나, 조건을 체크하거나, 함수로 jump 하는 등의 작업을 수행한다.
- 다음 instruction으로 넘어가 1번부터 다시 수행한다.
시스템은 많은 수의 virtual CPU를 가지고 있으며 이를 통해 많은 프로그램들이 한번에 돌아가는 것 같은 착각을 줄 수 있다.
Memory Virtualization
- 실제 물리적 메모리는 array of bytes이다.
- OS는 physical memory 주소와 각 프로그램이 실행되면서 사용하는 주소를 분리하여, 각 프로그램이 자신의 own private memory를 가지고 있는 것같은 착각을 준다.
따라서 여러 프로그램이 같은 주소의 메모리를 동시에 독립적으로 사용할 수 있다.
각 프로세스는 자신만의 private virtual address space를 사용하며, 운영체제가 이 address space를 physical memory로 맵핑해주는 일을 수행한다.
Concurrency
많은 멀티쓰레드를 사용하는 프로그램들은 concurrency problem을 갖는다.
예를 들어 전역변수를 1씩 증가시키는 프로그램을 멀티쓰레딩을 통해 수행하면, 각 쓰레드가 증가시킨 횟수의 합만큼 전역변수가 증가되어야할 것으로 기대하지만, 실제로는 이보다 적은 값이 나올 수 있다.
이것은 변수를 증가시키는 연산이 사실은 (값을 메모리에서 레지스터로 load -> 증가 -> 메모리에 다시 저장) 이라는 3가지 instruction으로 나눠서 수행되기 때문이다.
멀티쓰레딩 환경에서 이 3개의 instruction은 atomic하게 수행되지 않는다.
즉 instruction을 수행하는 도중 다른 쓰레드가 끼어들 수 있다.
이 때문에 위와 같은 concurrency 문제가 발생한다.
Persistent
DRAM과 같은 장치는 값을 volatile하게 저장한다.
하지만 프로그램은 데이터를 persistent하게 저장할 필요가 있다.
소프트웨어에서는 파일 시스템을 통해 데이터의 영속적인 저장을 수행할 수 있다.
예를 들어 open(), write(), close() 등의 시스템 콜을 이용해 파일시스템을 핸들링할 수 있다.
Design Goals
운영체제를 설계하기 위해서는 추상화를 통해 시스템을 사용하기 편리하게 만들어야하며, OS의 오버헤드를 최소화해야한다. 그리고 application 간 isolation을 통해 한 부분의 오동작이 다른 부분에 해를 끼치지 않도록 해야하며, 크래쉬가 발생하지 않고 계속 실행되는 것과 같은 높은 수준의 신뢰성을 제공해야한다.
'운영체제' 카테고리의 다른 글
06. 운영체제 - Memory Virtualization(1) (0) | 2023.01.24 |
---|---|
05. 운영체제 - CPU Virtualization - Stride scheduling (4) (0) | 2023.01.20 |
04. 운영체제 - CPU Virtualization - MLFQ(3) (0) | 2023.01.20 |
03. 운영체제 - CPU Virtualization (2) (0) | 2023.01.20 |
02. 운영체제 - CPU Virtualization (1) (0) | 2022.10.03 |