2020년 7월 1일 수요일

가상 메모리

메모리

램(Ram) 은 디스크(SSD, HDD)보다 매우 빠르다. 대신 매우 비싸다.

또 운영체제가 바로 사용하는 메모리이기 때문에 디스크처럼 크기가 너무 크면 접근하는데 시간이 오래 걸린다.

그래서 4g, 8g 정도가 사용되고, 다수의 프로그램을 돌리는데 필요한 용량은 디스크를 빌린다.

이때 사용되는게 Virtual Memory 이다.

간단하게 몇가지 특징만 추려서 이야기하자.

1.

많은 데이터의 당장 필요한 부분만 렘으로 올려서 사용한다.

즉 디스크가 메모리의 보조기억장치가 된다.

프로세스의 가상 메모리 공간을 위해 예약된 공간을 Swap Space 라고 부른다.

2.

Win32 의 경우 한번에 접근할 수 있는 크기는 2^32 == 4G 이다.

그래서 이 경우 프로세스마다 4G 의 가상메모리를 부여한다.

접근의 효율성, 메모리 할당의 안전성 등을 위해 메모리는 페이지라는 단위로 나뉘어진다.

실제 메모리도 페이지 단위로, 가상 메모리도 페이지 단위로 나뉘고,

페이지의 크기만큼 Page Ofset 를 두어 이 변위를 통해 페이지 내부에 접근한다.

가상 메모리의 크기는 2의 Vritual Page number + Virtual page offset 제곱 승이다.

메인 메모리의 크기는 2의 Physical page number + Phyisical page offset 의 제곱 승이다.

주의할 건 페이지라는 단위는 같기 때문에, 가상주소와 실제주소의 변위의 크기는 똑같다는 점이다.

Page number 는 달라도 되며, 달라야지 가상주소가 메인메모리보다 커질 수 있다.

그런데 실제 주소에 있을 수 있는 페이지 수는 메인메모리가 작으니까, 또 나눠서 쓰니까 얼마 되지 않는다.

그렇다고 가상 메모리 공간을 완전 검색하여 원하는 페이지를 찾자니, 디스크는 속도가 느려서 너무느리다.

그래서 운영체제는 프로그램을 생성할 때마다 페이지 테이블을 만든다.

페이지 테이블은 Virtual page number 만큼의 인덱스를 가지고,

유효한 페이지인지 살피는 1비트와 Physical page number 의 크기의 비트를 한 인덱스마다 갖는다.

페이지 테이블을 가상 주소의 인덱스로 접근해서 실제 메모리에 있으면 그걸 쓰고,

실제 메모리에 없으면 하드디스크에서 그 메모리를 메인메모리에 적재하고 페이지 테이블도 수정한다.

자주 쓰는 건 메인 메모리에 있을 테니까 하드디스크까지 내려가는 일은 적을 것이고,

최대한 적게 내려가도록 하드웨어, 운영체제 짜는 사람은 고민한다.

아래 글은 왜 win64 에서 가상 메모리가 왜 2^64가 아니라 2^48 인지 설명하는 글.

한줄 요약은 그렇게 하면 전력소모와 속도가 느려짐.

댓글 없음:

댓글 쓰기

List