간단하게 말해서 프로세스의 논리 메모리와 물리 메모리를 분리하기 위해 생긴 개념이다. 왜 분리를 해야 하냐면, 물리 메모리의 한계를 극복하기 위해서이다.
무슨 말이냐면 여러 프로그램을 돌리면 메모리 부족의 문제가 생긴다. 이는 메모리 침범의 문제로 이어지기 때문에 이를 해결하고자 한 방법이다. 이런 이유 때문에 가상 메모리와 물리 메모리를 분리한다는 의미다. 논리 메모리가 가상 메모리다.
왜 가상 주소가 필요한지 예를 들어보자,
3개의 프로그램을 일정 시간에 따라 반복적(time에 따라)으로 돌리고 메인 메모리의 크기는 64KB라고 가정해보자.
그러면 먼저 taks1 (32KB), task2(16KB), task3(48KB)의 정보는 Hard disk에 다 들어있을 것이다.
그러다가 task1이 실행되면 메인 메모리에 올라가 동작한다.
그러다가 시간이 끝나서 다음엔 task2가 메인 메모리에 올라가 동작한다.
중간에 멈추고 task3가 동작해야 하는데, 남은 공간이 충분하지 않았기 때문에 메모리에 올라가 있던 task1과 task2를 빼내야 한다. 그리곤 task3을 메인 메모리에 적재하고 PC의 값은 0으로 세팅된다.
그러다가 task1을 다시 동작할 때는 또 공간이 부족해서 메모리를 다시 세팅하는데 이때 PC가 0으로 다시 세팅된다.
PC가 0으로 세팅되면 분명 task1이 멈췄던 순간부터 동작해야 하는데 그러지 못하고 다시 처음부터 시작한다.
즉, 영원히 같은 부분만 동작한다. 그러니 뒤에 명령어들 실행되지 못하고, 실행도 안되는데 메모리에 올라가 있는 낭비가 존재한다.
이런 문제를 해결하고자 가상공간이 필요하다. 실제 공간과 분리해야 하기 때문이다. 또한 page의 개념이 나온 이유기도 하다.
추가로 설명을 하자면
task1의 C 코드를 컴파일하면, 2진 코드로 변환된다. 변환된 이 코드는 가상 주소를 생성한다. 그리고 프로그램의 code와 data가 연속적으로 가상 주소에 들어간다. 이 공간은 task1만 사용하는 공간이다. task2, task3도 마찬가지다.
즉, 각각의 프로그램마다 자기 자신만의 가상공간을 점유하고 있다.
이렇게 우린 각각의 프로그램마다 가상 메모리에 할당된다.
그렇다면 용량이 부족하진 않을까 하는 걱정이 든다. 하지만 64bit 컴퓨터에서 생성할 수 있는 2^48인 16TB보다 hard disk가 작기 때문에 용량이 부족하진 않다.
프로세스마다 가상 메모리를 가지는데, 이렇기 때문에 모든 가상 메모리를 더하면 실제 물리 메모리보다 큰 용량을 가진다.
이렇듯 가상 메모리를 사용하면 여러 프로세스가 물리 메모리를 공유할 수도 있고 더 많은 프로세스를 동시에 동작할 수도 있고 I/O의 load나 swap을 덜 할 수 있다.
'CS > OS & 하드웨어' 카테고리의 다른 글
아스키코드, 유니코드, UTF-8의 차이 (0) | 2023.09.10 |
---|---|
메모리 (RAM) 구조 (0) | 2023.08.28 |
Memory Allocation (논리 메모리, 물리 메모리, Dynamic Loading, Paging이 나온 이유 ) (0) | 2023.08.24 |
Swapping 스와핑 ( page in, page out ) (0) | 2023.08.24 |
CPU 스케줄링(Scheduling) 알고리즘 정리 및 요약 | FCFS, SJF, Round Robin (0) | 2023.07.29 |