os 공부를 하면서 처음에 추상화와 가상화가 같은 개념인줄 알았다.
하지만 비슷하면서도 이 둘은 다르다는 점이 중요하다.
추상화는 하드웨어를 숨긴다는 표현을 한다. 컴퓨터의 하드웨어는 대표적인 3대 요소가 있다.
이 3가지 요소를 추상화한 것이 소프트웨어(OS)이다. OS는 자원을 관리하는 소프트웨어이다. 컴퓨터 시스템 하드웨어를 소프트웨어로 추상화한다고 말한다.
단일 cpu가 여러 소프트웨어를 동시에 실행하는 것처럼 보이게 해준다. 물리적 자원(cpu, 메모리, 디스크)을 가상형식으로 구현한다. 1개를 여러 개처럼 보이게 하는 환상(illusion)을 준다.
각 프로세스가 병렬적으로 동시에 실행되는 것처럼 보이게 한다. 이를 통해 더 많은 프로세스를 실행시켜서 cpu를 쉬지않게끔 하는 것이 중요하다. 즉, cpu의 효율성을 최대화하는 것이다.
실제로는 순차적으로 프로세스가 실행된다. 이와 관련된 것이 스케줄링이다.
OS에서 cpu 및 메모리와 달리 개인 가상화 디스크는 만들지 않는다.
단일 cpu를 보기에는 수많은 cpu가 있다는 환상을 줘서 여러 개의 프로그램이 동시에 실행되는 것처럼 보이게한다. 사용자가 os에 할 일을 알려주고 가상머신의 기능을 사용할 수 있도록 OS는 일부 인터페이스를 제공한다.
임의의 시점을 보면, 사실 프로세스는 하나만 수행되고 있지만 마치 여러개의 프로세스가 동시에 수행되는 것처럼 보이는 환상을 준다.
운영체제를 가상머신으로 정의
-API provider(시스템 콜 인터페이스 제공)
-자원 관리자
-전환 (switch())
OS를 자원관리자라고 부르는 이유
-가상화를 통해 많은 프로그램이 실행됨(cpu 공유)
-많은 프로그램이 자신의 명령과 데이터에 동시에 엑세스(메모리 공유)
-많은 프로그램이 장치에 엑세스(디스크 공유)
메모리를 읽을 때는, 저장된 데이터에 엑세스할 수 있는 주소를 지정해야한다. 또한 메모리에 쓰려면 주어진 주소에 데이터를 지정해야한다.
프로그램은 메모리 안에 데이터 structure을 저장하고, 다양한 명령(load,store 등)을 fetch하여 엑세스한다.
메모리의 가상화도 cpu의 가상화 개념과 비슷하다. 가상화의 핵심은 항상 이것이다.
1개인 것을 여러 개처럼 보이게 하는 것
즉 메모리는 실제로 하나이지만, 마치 여러 개인 것처럼 가상화를 해서 프로세스에게 나눠준다. 마치 실행중인 각 프로그램에 고유한 각자 메모리가 있는 것처럼 보이게 한다.
프로세스 관점에서 사용하는 주소는 가상 주소 공간이라고 불린다.
이 가상 주소는 사용자에게 서로 다른 프로세스여도 동일한 주소로 보인다. 하지만 실제 물리적 주소는 다른다. OS는 이 주소 공간을 실제 메모리에 매핑한다. 서로 다른 프로세스 간의 주소 공간에는 영향을 끼치지 않는다.
여러 프로그램이 동시에 공유된 자원을 사용하게 되면서 발생하는 여러 문제 들이 존재함. 현대의 멀티 스레드에도 이 문제가 존재함
휘발성인 DRAM에 데이터 저장은 쉽게 데이터를 잃을 수 있다. 따라서 운영체제(소프트웨어)에서는 파일 시스템에서 디스크 관리를 통해 저장한다. 디스크에 파일을 쓰기 위해서는 os의 기본 시스템 콜을 이용한다.
open() -> write() -> close()
OS는 사용자가 정보를 저장하기 위해 사용할 수 있는 표준입출력 라이브러리 및 인터페이스를 제공한다.