본문 바로가기

CS/운영체제(OS)

운영체제 - 가상메모리의 개념

728x90

 

일반적인 컴퓨터구조

 

위 컴퓨터 구조에서 프로그램이 실행될 때, 예를들어 유튜브를 실행하거나 VS CODE 를 실행하려면 우리는 Main Memory 에 프로세스를 적재해야한다. 그리고 요즘 램은 16~32기가 정도 되는데 편의를 위해 10기가 라고 가정하자.

 

그리고 우리는 지금 메이플스토리, 워드, 카카오톡을 실행한다고 가정하자. 그런데 알다시피 요즘 메이플스토리 용량은 10기가가 넘는다. 그리고 워드도 1기가는 되고 카카오톡은 500메가 정도되지만 1기가라고 하면

 

메이플 : 10

워드 : 1

카톡: 1

 

이 세개의 프로그램을 동시에 실행하려면 메인 메모리에 무려 12기가가 필요하다! 그렇다면 이 세개는 실행이 안될까? 아니다. 아주 잘 될 것이다. 조금은 렉이 걸릴 수 있지만 잘된다. 

이것을 가능캐 해주는 것이 가상메모리이다.

 

가상 메모리

우리는 12기가가 필요한데 10기가로 이를 해결했다. 이는 10기가의 메모리가 마치 12기가처럼 보인다. 그래서 가상메모리라는 이름이 붙었다. 이것이 어떻게 가능할까? 

 

메인 메모리는 프레임 단위로 나뉘고, 이 프레임 안에는 프로세스의 페이징 단위가 들어갈 수 있다. 예를 들어 메이플 스토리의 경우 내가 빅토리아 아일랜드에 있으면 굳이 지금 루디브리엄의 정보를 가지고 있을 필요가 없다. 그래서 10기가를 전부 가져오지 않고 3.3기가씩 3등분 페이징을 진행하는데 여기서는 빅토리아 아일랜드 정보, 루디브리엄 정보, 필수 정보 세개로 나누었다고 하자. 필수와 빅토리아 아일랜드 정보만 메모리에 올린다. 그리고 워드와 카카오톡을 적재하면 8.6기가가 되어 3개의 프로그램이 잘 작동한다.

 

그런데 만약 사용자가 루디브리엄으로 이동한다면? 앗,, 메인 메모리에 정보가 없다!! 이러면 빅토리아 아일랜드의 부분 3.3을 다시 하드로 내리고 루디브리엄 3.3을 적재해야한다. 이것이 페이지 부재 이다. 

 

이제 컴퓨터과학적으로 들어가보자. 

 

페이지 테이블 = MMU

 

지금 보면 가상 메모리는 아주 많은데 막상 물리 메모리는 적은 것을 알 수 있다. 즉, 가상 메모리엔 메이플 스토리의 모든 것이 있는데 물리 메모리엔 메이플 스토리의 모든것이 없다는 의미이다.

 

CPU에서 가상 주소를 통해 루디브리엄의 정보를 MMU에 보냈다. 그런데 어라? 페이지 부재가 발생했다. 그렇다면 운영체제에 인터럽트를 보내고 MMU에 빅토리아 아일랜드를 내리고 루디브리엄을 추가한다. 

 

 

MMU와 Translation Lookaside Buffer(TLB)

우리는 위에서 보았듯, CPU는 언제나 MMU를 들려서 최적의 경우 메인메모리에 페이지가 있어서 실행할 수 있다 하더라도 메인메모리에서 CPU로 가져오는 시간이 든다. 그래서 많이 사용하는 시스템의 경우 캐시에 저장해 레지스터 접근으로 빠르게 사용할 수 있다. 또 메이플로 치면 당연히 언제 사용할지 모르는 스킬들은 레지스터로 갖고 있는게 좋겠다.

 

1. 주소 요청

2. 캐시에 있으면 바로 가져오기

3. 없으면 메인 메모리에서 물리주소 가져오기

4. 물리주소에서 실제 페이지 가져오기

5. 데이터 전달

 

요구 페이징 (Demand Paging), 페이지 교체 정책

가상 메모리의 가장 큰 장점은 필요한 것만 가져온다는 것이다. 이것을 요구 페이징이라 한다. 그래서 위의 방법처럼 페이징 폴트가 났을 때는 페이지 교체 정책이 필요한데 캐시 교체 정책과 아주 유사하다.

 

1. Fisrt In First Out 알고리즘 : 말그대로 순서대로 왔다갔다 한다.

 

2. Least Recently Used(LRU) 알고리즘 : 가장 최근에 사용한 페이지를 교체, 가장 최근 썼으니 더이상 안쓰겠지 하는 정책

 

3. Least Frequently Used(LFU) 알고리즘 : 가장 적게 사용한 페이지를 교체, 메이플의 경우 초기 로그인 화면 정보를 게임 중 계속 가지고 있을 필요가 없다는 정책