일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 백준 2812번
- 백준 18352번
- 다익스트라 알고리즘(Dijkstra Algorithm)
- 백준 1948번
- 백준 2504번
- 이분 탐색(Binary Search)
- 위상 정렬(Topological Sort)
- DFS & BFS
- DFS
- 큐(Queue)
- 백준 10000번
- 백준 21606번
- 그래프(Graph)
- 스택(Stack)
- 백준 17608번
- 백준 9012번
- 이분 그래프(Bipartite Graph)
- 알고리즘 개념
- 백준 1707번
- 트리(Tree)
- BFS(Breadth First Search)
- 위상 정렬(Topology Sort)
- BFS
- DFS(Depth First Search)
- 백준 2493번
- 분할 정복(Divide and Conquer)
- 백준 2261번
- 플로이드 워셜 알고리즘(Floyd-Warshall Algorithm)
- 동적 프로그래밍(Dynamic Programming)
- 그리디 알고리즘(Greedy Algorithm)
- Today
- Total
Always Be Wise
가상화 - 메모리 가상화 : 주소 변환의 원리 본문
현대 운영체제의 중요한 목표는 효율성과 제어이다.
효율성을 높이려면 하드웨어 지원을 활용할 수밖에 없다.
처음에는 몇 개의 레지스터만 사용하는 정도부터 TLB, 페이지 테이블 등으로 점차 복잡한 하드웨어를 사용하게 될 것이다.
제어는 응용 프로그램이 자기 자신의 메모리 이외에는 다른 메모리에 접근하지 못한다는 것을 운영체제가 보장하는 것을 의미한다.
프로그램을 다른 프로그램으로부터 보호하고, 운영체제를 프로그램으로부터 보호하기 위하여 하드웨어의 도움이 필요하다.
마지막으로 유연성 측면에서 VM 시스템에서 필요한 사항이 있다.
프로그래머가 원하는 대로 주소 공간을 사용하고 프로그래밍하기 쉬운 시스템을 만들기 원한다.
우리가 다룰 기법은 하드웨어 기반 주소 변환이다.
주소 변환을 통해 하드웨어는 명령어 반입, 탑재, 저장 등의 가상 주소를 정보가실제 존재하는 물리 주소로 변환한다.
프로그램의 모든 메모리 참조를 실제 메모리 위치로 재지정하기 위하여 하드웨어가 주소를 변환한다.
물론, 하드웨어만으로 메모리 가상화를 구현할 수는 없다. 하드웨어를 셋업 하기 위해 운영체제가 관여해야 한다.
운영체제는 메모리의 빈 공간과 사용 중인 공간을 항상 알고 있어야 하고, 메모리 사용을 제어하고 관리한다.
이 모든 작업의 목표는 프로그램이 자신의 전용 메모리를 소유하고, 그 안에 자신의 코드와 데이터가 있다는 환상을 만드는 것이다.
가정
당분간 사용자 주소 공간은 물리 메모리에 연속적으로 배치되어야 한다고 가정한다.
또한, 주소 공간의 크기는 물리 메모리 크기보다 작으며, 각 주소 공간의 크기는 모두 같다고 가정한다.
사례
어떤 프로그램의 주소 공간이 0부터 시작하여 최대 16KB까지라고 하자. 프로그램의 모든 메모리 참조는 이 범위 내에 있어야 한다.
그런데 프로세스 주소 공간이 실제로는 다른 물리 주소에 배치되어 있다고 한다면,
주소 0번지부터 시작하는 가상 주소 공간의 환상을 어떻게 제공할 수 있을까?
아래 오른쪽 그림은 왼쪽 그림의 주소 공간이 메모리에 배치되었을 때 가능한 물리 메모리 배치의 예이다.
물리 메모리의 첫 번째 슬롯은 운영체제 자신이 사용하고 있으며, 프로세스는 물리 주소 32KB에서 시작하는 슬롯에 배치되어있다.
동적(하드웨어 기반) 재배치
동적 재배치는 베이스와 바운드, 두 가지 레지스터를 이용하여 주소 공간을 배치하고,
동시에 프로세스가 오직 자신의 주소 공간에만 접근한다는 것을 보장하는 기법이다.
프로그램 시작 시, 운영체제가 프로그램이 탑재될 물리 메모리 위치를 결정하고, 베이스 레지스터를 그 주소로 지정한다.
위의 예에서 운영체제는 프로세스를 물리 주소 32KB에 저장하기로 결정하고, 베이스 레지스터를 이 값으로 설정하는 것이다.
이제 프로세스에 의해 생성되는 모든 주소가 아래와 같은 방법으로 프로세서에 의해 변환된다.
프로세스가 생성하는 메모리 참조는 가상 주소이다. 하드웨어는 베이스 레지스터의 내용을 이 주소에 더하여 물리 주소를 생성한다.
이러한 주소의 재배치는 실행 시에 일어나고, 실행을 시작한 이후에도 주소 공간을 이동할 수 있기 때문에 동적 재배치라고 불린다.
바운드 레지스터는 보호를 지원하기 위해 존재한다.
프로세서는 메모리 참조가 유효한지를 확인하기 위해 가상 주소가 바운드 안에 있는지 확인한다.
위의 예에서, 바운드 레지스터는 16KB이다.
프로세스가 16KB보다 큰 가상 주소 또는 음수인 가상 주소를 참조하면 CPU는 예외를 발생시킨다.
베이스와 바운드 레지스터는 CPU 칩 상에 존재하는 하드웨어 구조이다.
주소 변환에 도움을 주는 프로세서의 일부를 메모리 관리 장치(Memory Management Unit, MMU)라고 한다.
하드웨어 지원
필요한 하드웨어 지원을 요약하면 아래와 같다.
우선, 사용자 모드 프로세스가 특권 연산을 실행하는 것을 방지하기 위해 두 가지 CPU 모드가 필요하다.
프로세서 상태 워드 레지스터의 한 비트가 CPU의 현재 실행 모드를 나타낸다.
주소 변환과 범위 검사를 지원하기 위하여 CPU 당 한 쌍의 베이스, 바운드 레지스터가 필요하다.
또한, 하드웨어는 베이스, 바운드 레지스터 값을 변경하는 특권 명령어를 제공해야 한다.
마지막으로 CPU는 사용자 프로그램이 바운드를 벗어난 주소로 불법적인 메모리 접근을 시도할 경우, 예외를 발생시킬 수 있어야 한다.
이 경우 CPU는 사용자 프로그램의 실행을 중지하고, 운영체제의 예외 핸들러가 실행되도록 조치해야 한다.
마찬가지로 사용자 프로그램이 특권이 필요한 베이스와 바운드 레지스터 값의 변경을 시도하면 CPU는 예외를 발생시켜야 한다.
운영체제 이슈
베이스와 바운드 방식의 가상 메모리 구현을 위해서 운영체제가 반드시 개입해야 하는 중요한 몇 가지가 존재한다.
첫째, 프로세스가 생성될 때, 운영체제는 주소 공간이 저장될 메모리 공간을 찾아 조치를 취해야 한다.
가정에 따라 운영체제는 물리 메모리를 슬롯의 배열로 보고 각 슬롯의 사용여부를 관리한다.
새로운 프로세스가 생성되면 운영체제는 새로운 주소 공간 할당에 필요한 영역을 찾기 위해 자료 구조를 검색해야 한다.
둘째, 프로세스가 종료할 때, 프로세스가 사용하던 메모리를 회수하여 다른 프로세스나 운영체제가 사용할 수 있게 해야 한다.
프로세스가 종료하면 운영체제는 종료한 프로세스의 메모리를 다시 빈 공간 리스트에 넣고 연관된 자료 구조를 모두 정리한다.
셋째, 문맥 전환이 일어날 때, 베이스와 바운드 레지스터 쌍을 저장하고 복원해야 한다. 운영체제는 메모리에 존재하는 프로세스 별
자료 구조 안에 베이스와 바운드 레지스터 값을 저장해야 한다. 이 자료 구조는 프로세스 구조체 또는 프로세스 제어 블럭이라고 불린다.
마찬가지로 프로세스를 다시 시작할 때, 또는 처음 실행시킬 때, 프로세스에 맞는 값으로 CPU의 베이스와 바운드 값을 설정해야 한다.
넷째, 예외 핸들러 또는 호출될 함수를 제공해야 한다. 운영체제는 부팅할 때 특권 명령어를 사용하여 이 핸들러를 설치한다.
중요한 것은 주소 변환은 운영체제의 개입 없이 하드웨어에 의해 처리된다는 것이다.
요약
베이스, 바운드 레지스터를 이용한 주소 변환, 메모리 가상화는 간단하다.
운영체제는 프로세스의 모든 메모리 접근을 제어할 수 있고, 접근이 항상 주소 공간의 범위 내에서 이루어지도록 보장할 수 있다.
그러나 프로세스 스택과 힙 사이의 공간이 낭비되고 있다. 이런 유형의 낭비를 내부 단편화라고 한다.
물리 메모리의 이용률을 높이고 내부 단편화를 방지하기 위해 더 정교한 기법이 필요하다. 첫 번째 시도는 세그멘테이션 기법이다.
'컴퓨터 시스템 > OSTEP' 카테고리의 다른 글
가상화 - 메모리 가상화 : 더 작은 페이지 테이블 (0) | 2022.01.26 |
---|---|
가상화 - 메모리 가상화 : 더 빠른 변환을 위한 TLB (0) | 2022.01.26 |
가상화 - 메모리 가상화 :페이징 (0) | 2022.01.25 |
가상화 - 메모리 가상화 :세그멘테이션 (0) | 2022.01.25 |
가상화 - 메모리 가상화 : 주소 공간의 개념 (0) | 2022.01.24 |