티스토리 뷰

메모리 가상화

지금까지 CPU 가상화에 대해 공부했다. 이번엔 더 중요한 메모리 가상화를 공부해보자.

일단 프로세스가 생성하는 모든 주소는 가상주소이다. 운영체제는 하드웨어의 도움을 받아 프로세스가 많은 메모리를 할당 받은 것처럼 보이게 한다. 그리고 가상 주소를 실제 물리 주소로 변환하고 원하는 정보의 위치를 찾을 수 있다.

운영체제가 가상 주소를 사용하는 이유는 사용하기 쉽게 시스템을 제공하기 위해서 이다. 작은 메모리에 여러 프로세스를 담기보다 가상의 연속된 주소 공간을 이용해 걱정 없이 프로세스의 정보를 담고, 찾을 수 있게 하기 위해서이다.

 

 

앞에서 배운 것 처럼 컴퓨터는 멀티 프로그래밍 능력이 필요해졌고, 작업시간 단축을 위해 프로세스를 실행상태, 준비 상태로 나누어 CPU를 효율적으로 사용하게 했다. 하지만 긴 작업시간 때문에 시분할 방식을 사용했다. 시분할 방식은 메모리에 저장된 프로세스 정보들을 가져와 실행 시킨 후, 다시 메모리에 저장한 후 다른 프로세스 정보를 가져와 실행시키는 방법이다. 이 방식은 메모리가 클수록 느리다는 단점이 존재했다. 레지스터 정보를 저장하고 복원하는 것은 빠르지만, 메모리의 내용 전체를 디스크에 저장하는 것이 느렸다. 이번엔 프로세스 전환 시 프로세스를 메모리에 그대로 유지하면서, 운영체제가 시분할 시스템을 효율적으로 구현할 수 있게 하는 것이다.

 

아래 그림엔 3개(A,B,C)의 프로세스가 있다. CPU가 1개 있고, A프로세스를 실행할 준비가 되었다. 다른 프로세스들은 준비 큐에서 실행을 기다린다.

시분할 시스템이 흔해 지면서 여러 프로그램이 동시에 메모리에 존재하려면 보호가 중요한 문제가 된다. 한 프로세스가 다른 프로세스의 메모리를 읽거나 영역을 침범해서는 안된다.

 

이런 문제가 발생하지 않기 위해 사용하기 쉬운 주소 공간 개념을 사용한다. 주소 공간에는 모든 메모리 상태를 가지고 있다. 프로그램의 명령어를 가진 코드, 함수 호출의 현재 위치, 지역 변수, 함수 인자와 반환값 등을 가진 스택, 동적으로 할당되는 메모리를 위한 힙 등의 상태이다.

 

 아래 그림은 16kb의 공간을 보여준다. 프로그램 코드는 주소 공간의 위쪽에 위치하고 1kb를 차지한다. 코드는 정적이기 때문에 프로그램이 실행되면서 추가 메모리를 필요로 하지 않는다. 스택과 힙은 확장을 해야하기 때문에 아래 그림과 같은 위치에 있다. 두 영역의 확장 방향은 반대 방향이다. 힙은 1kb부터 시작해 아래 방향으로 확장한다. 스택은 16kb부터 시작해 위쪽 방향으로 확장한다. 

 

메모리를 어떻게 가상화 하는가?

운영체제는 어떻게 물리 메모리를 공유하는 다수의 프로세스에게 프로세스 전용의 커다란 주소 공간이라는 개념을 제공할 수 있을까?

 

실행중인 프로그램은 자신이 특정 주소의 메모리에 탑재되고 매우 큰 주소 공간을 가지고 있다고 생각한다.

그림 13-2에서 실행중인 프로세스 A는 주소0부터 load명령어를 실행한다고 생각한다. 하지만 운영체제는 하드웨어의 지원을 통해 물리 주소 320kb(A가 탑제된 메모리)를 읽도록 한다.

 

고립

두 객체가 서로 적절하게 고립된 경우, 한 개체가 실패하더라도 상대 객체에게 아무런 영향을 주지 않는다.

 

가상 메모리 시스템의 주요 목표 중 하나는 투명성이다. 운영체제는 실행 중인 프로그램이 가상 메모리의 존재를 인지하지 못하도록 가상 메모리 시스템을 구현해야 한다.

다른 목표는 효율성이다. 운영체제는 가상화가 시간과 공간 측면에서 효율적이도록 해야 한다. 프로그램이 너무 느리게 실행되어선 안되고, 가상화를 위해 너무 많은 메모리를 사용해서도 안된다. 가상화를 구현할 때 운영체제는 TLB 등의 하드웨어 기능을 포함하여 하드웨어의 지원을 받아야 한다.

마지막 목표는 보호이다. 운영체제는 프로세스를 다른 프로세스로부터 보호해야 하고, 운영체제 자신도 프로세스로부터 보호해야 한다. 프로세스가 탑재, 저장, 명령어 반입 등을 실행할 때 다른 프로세스로부터 운영체제의 메모리 내용에 접근하거나 영향을 주면 안된다. 보호 성질을 이용해 프로세스들을 고립 시킬 수 있다.  

'컴퓨터 공학 > 운영체제' 카테고리의 다른 글

메모리 관리 API  (0) 2021.04.01
주소공간 개념  (0) 2021.04.01
단일 큐 스케줄링 구현  (0) 2021.02.16
[운영체제]멀티프로세서 스케줄링-2  (0) 2021.02.11
[운영체제]멀티프로세서 스케줄링  (0) 2021.02.09
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함