작은 메모장

운영체제의 프로세스 가상주소공간 본문

KISA 사이버 보안 훈련/리버스 엔지니어링 훈련

운영체제의 프로세스 가상주소공간

으앙내눈 2023. 7. 2. 17:50

가상주소공간(Virtual Address Space)

가상주소는 물리메모리와는 다른 가상의 메모리 공간을 논리적으로 구현한 것으로, 프로세스의 실행파일 및 데이터를 저장하는 용도로 사용

프로세스는 가상 주소를 사용하고, 데이터를 사용(읽기/쓰기) 할 때는 물리 주소로 변환하여 사용

즉, 이 VAS를 사용하기 위해선 가상 주소(Virual Address)와 물리 주소(Physical Address)가 필요

 

이게 왜 필요한가?

프로세스는 큰것부터 작은것까지 용량이 다양함

용량이 큰 프로세스를 메모리에 그대로 올리게 되면, 메모리 용량에 큰 부담이 됨

문제는 메모리에 다른 프로세스까지 같이 존재하고, 동작한다는 것

즉, 한정된 메모리에서 여러 프로세스를 실행시킬 수 있도록 메모리 구조를 구성하는가?의 해답으로 나온 개념

 

MMU

가상 주소를 쓰는 것은 좋은데, 실제 어떤 물리 주소에 이 데이터가 매핑되어 있는지 알 수 있어야함

이를 위해 만들어진 것이 MMU(Memory Management Unit)

CPU가 코드를 실행 시, 가상 주소 메모리 접근이 필요할 때, 가상 주소를 물리 주소 값으로 변환하면 하드웨어

즉, CPU는 가상주소를 다루고, 가상 메모리의 가상 주소를 접근할 때 MMU에게 질의

 

외부 단편화 문제

MMU는 연속할당이라는 특이한 시스템을 가지고 있음

연속할당이란, 한 프로세스의 모든 논리적 주소에 동일한 주소값을 계속 더하면서 메모리를 부여하는 방식

즉, 메모리에 통째로 프로세스가 올라가는 개념

문제가 있다면, 중간 중간 남는 메모리 공간이 상당히 많다는 것

이 남는 공간으로 인해 메모리에 남는 공간이 있음에도 용량이 큰 프로세스가 메모리에 올라가지 못하는 경우가 생김

이 문제가 외부 단편화 문제

 

페이징(Paging System)

가상 메모리 시스템을 구현하는 방법 중 가장 많이 쓰이는 방법, 외부 단편화 문제를 해결하기 위해 나온 개념

메모리에 올라가는 주소를 연속적으로 할당하지 않고, 불연속적으로 할당하되, 할당된 메모리를 관리하는 방법

 

페이징에는 두 가지 개념이 존재, 페이지와 프레임

   - 페이지(Page) : 가상 메모리를 일정한 크기로 나눈 블록

   - 프레임(Frame) : 물리 메모리를 일정한 크기로 나눈 블록

페이지와 프레임의 크기는 같으며, 페이지에 대응하는 프레임을 쉽게 탐색 가능

 

모든 프로세스는 페이지 크기만큼 조각화되고, 물리적 메모리도 페이지 크기만큼 조각화

조각화된 프로세스의 페이지는 불연속적으로 프레임에 할당

이때, 어떤 페이지가 어떤 프레임에 할당 되었는지는 페이지 테이블에 저장

페이징 예시

위 경우를 보자

가상 메모리의 페이지는 4개, 물리 메모리의 프레임은 8개로 구성되어 있고, 이를 매핑시키는 페이지 테이블이 존재

0번 페이지는 5번 프레임에,

1번 페이지는 6번 프레임에,

2번 페이지는 1번 프레임에,

3번 페이지는 2번 프레임에 매핑되어 있다고 페이지 테이블에 적혀있음

이를 그대로 따라가면, 각 페이지의 내용이 페이지 테이블에 적혀있는 경로대로 물리 메모리에 올라가 있는것을 확인 가능

 

페이징의 장점?

- 주소를 연속적으로 사용하지 않음 => 외부 단편화를 해결

위 사진에서, 0번, 3번, 4번, 7번 프레임이 비어있으나, 다른 프로세스가 언제든지 할당 가능함

- 프로세스끼리의 메모리 공유가 훨씬 용이해짐

위 경우에서, 프로세스 P1, P2, P3는 똑같은 내용의 페이지 ed1, ed2, ed3를 공유하고 있음

이를 따로따로 부여하는 것이 아닌, 똑같은 내용을 페이지는 같은 페이지 주소를 페이지 테이블에 저장하면 됨