메모리 관리, 가상 메모리

2024. 2. 28. 16:14

CPU는 논리주소를 바라본다. 밑 그림에서 20, 30, 40번지가 논리주소. 500, 510, 520, 300 등이 물리주소.

 

Page Table은 물리메모리 안에 존재하기 때문에, 데이터 얻기 위해선 page table(물리메모리)에 접근해서 물리주소로 변환 후, 물리 메모리 접근해서 데이터 얻어와야 하니 물리 메모리 두 번 접근이 됨. 이 걸 빠르게 하기 위해 TLB에 페이지테이블 일부를 캐시해서 빠른 주소 변환 가능케함.

BUT, TLB는 index로 접근하는 게 아니라 순차탐색을 해야해서 완전 탐색 시간이 걸림. 그래서 Associative register를 통해 병렬적으로 탐색 가능하게끔 구성한다.

 

페이지 테이블 : 가상 메모리 주소를 물리 메모리 주소로 매핑하는 역할을 한다. 프로그램이 메모리에 접근하려 할 때, 해당 프로그램은 가상 주소를 사용한다. 그럼 OS는 페이지 테이블을 참조하여 해당 가상 주소가 실제로는 어떤 물리 주소를 가리키는지 확인한다. 페이지 테이블에서 페이지는 가상 메모리를 나타내고, 프레임은 물리 메모리를 나타낸다. 일대일로 매핑된다.

구조 : 보통 테이블 형태로, 각 행은 하나의 페이지를 나타낸다. 각 행은 해당 페이지의 정보를 포함하며, 이 정보에는 물리 주소, 접근 권한, 접근 상태 등이 포함된다.

MMU는 CPU 내부에 존재하며, 가상 주소를 물리 주소로 변환하는 과정을 담당한다. 이때 MMU는 페이지 테이블을 참조한다.

TLB는 MMU 내부에 존재하며, 최근 변환된 주소들을 캐싱한다.

페이지 폴트 : 프로그램이 접근하려는 페이지가 메모리에 로드되어 있지 않은 경우, 페이지 폴트가 발생. 이때 OS는 해당 페이지를 디스크에서 메모리로 로드한다.

 

TLB(Translation Lookaside Buffer)

  • 최근 사용된 페이지 테이블 항목을 저장하고, 이를 통해 페이지 테이블의 복잡한 탐색 과정을 건너뛰고 빠르게 주소 변환을 수행
  • 가상 주소는 두 부분으로 나뉜다. 페이지 번호와 오프셋. 페이지 번호는 페이지 테이블에서 해당 페이지를 찾는 데 사용되고, 오프셋은 해당 페이지 내에서 특정 바이트를 찾는 데 사용된다.
  • CPU가 가상 주소를 생성하면, TLB가 이 주소의 페이지 번호를 찾는다. TLB 히트라면, 해당 페이지의 물리 주소를 바로 반환하고, 이 주소와 원래의 오프셋을 결합하여 최종 물리 주소를 반환.
  • TLB 미스시 페이지 테이블 조회. 그 물리 주소를 TLB에 추가하고, 최종 물리 주소를 반환.
  • TLB는 일정한 크기를 갖고 있으므로, 다양한 알고리즘에 의해 교체 수행.

운영 체제의 역할

  1. 페이지 테이블 관리 : 프로세스가 생성될 때마다 페이지 테이블을 생성하고, 종료될때마다 페이지 테이블 제거
  2. 메모리 할당과 해제 : 프로세스가 메모리 요청할 때 해당 요청을 처리하고, 적절한 물리 메모리 할당
  3. 페이지 폴트 처리 : 프로세스가 접근하려는 페이지가 메모리에 없을 때 이를 처리. 디스크에서 해당 페이지를 찾아 메모리로 로드하고, 페이지 테이블을 업데이트한다.
  4. 스왑 아웃
  5. 메모리 보호 : 각 프로세스는 자신의 가상 메모리 공간에서만 실행되어야 한다. 다른 프로세스의 메모리 공간에 접근하는 것은 금지되어 있다.

페이지 폴트가 발생한다는 것은 프로세스가 접근하려는 페이지가 물리 메모리에 없다는 것을 의미한다. 즉 페이지 테이블은 해당 페이지에 대한 정보를 가지고 있지만, 해당 페이지는 현재 물리 메모리에 로드되어 있지 않는 상태.

요구 페이징이라는 테크닉 때문에 발생한다. 요구 페이징은 프로세스가 실제로 해당 페이지에 접근하려 할 때까지 페이지를 메모리에 로드하지 않는 방법이다. 

 

 

QA. Page Fault가 발생하면 os와 cpu의 동작 과정

 

QA. 페이징 시스템에서 LRU, LFU 사용 가능한가? 안된다면 실제 사용하는 알고리즘은?

실제 사용 알고리즘 : 

 

 

 

 

 

 

 

 

가상 메모리

 

가상메모리는 부족한 물리메모리를 가상메모리를 만들어 사용하는 것이다. 단어 그대로의 virtual이 아니다. 마치 없는 것을 만들어 내는 느낌이 아니라, 실제로는 이미 있는 것을 다르게 사용하는 의미이다. 가상메모리의 실제 공간은 하드디스크 + RAM이다.

실제로 프로세스가 실행될 수 있는 메모리 공간은 램 크기 만큼이지만 운영체제가 가상메모리 공간을 프로세스에게 제공해줌으로써 프로세스는 자신을 모두 메모리에 적재했다는 착각을 한다. 프로세스 입장에서는 가상 메모리 공간도 물리메모리 공간으로 인식하는 것이다. 그리고 운영체제는 가상메모리에 걸쳐서 적재된 프로세스의 부분이 실제로 적재가 필요하다면 물리메모리 공간과 SWAP 해준다. 프로세스의 모든 코드가 한번에 물리메모리에서 돌아가는 일은 없다. 필요한 부분만 실제 물리 메모리로 올라가기만 하면 되기 때문에, 이 부분을 운영체제가 계속 SWAPPING 해주는 것을 통해 가상 메모리를 구현한다.

 

메모리에는 고유의 주소값이 있다. 이를 물리 주소라고 부른다. 가상메모리 공간에도 주소가 붙어야 하는데, 이를 논리 주소라 한다. 운영체제 부분의 다음 주소부터 논리주소 0번으로 시작한다. 그리고 가상메모리까지 모든 주소를 붙인다.

실제로 데이터 처리를 하기 위해서는 메모리에 주소를 통해 접근해야한다. 논리주소 만으로는 메모리에 접근할 수 없다. 때문에 논리주소를 물리주소로 변환시켜 주는 과정이 필요하다.

 

 

 프로세스가 저장되는 공간을 보조 저장 장치까지 확장해서 프로세스를 보조 저장 장치에 저장하여 필요할 때만 메모리에 올려서 사용하면, 물리 메모리보다 더 큰 크기의 프로세스를 실행하는 것이 가능하다.

RAM의 부족한 용량을 보완하기 위해, 각 프로그램에 실제 메모리 주소가 아닌 가상의 메모리 주소를 할당하는 방식이다. 컴퓨터가 실제로 이용 가능한 메모리 자원을 추상화하여, 이를 사용하는 사용자들에게 매우 큰 메모리로 보이게 만든다.

OS는 프로세스들의 페이지 중에서 덜 중요한 것들을 하드디스크에 옮겨 놓고, 관련 정보를 페이지 테이블에 기록한다.

CPU는 프로세스를 실행하면서 페이지 테이블을 통해 페이지를 조회한다. 당장 사용하지 않는 영역을 하드디스크로 옮겨 필요할 때 다시 RAM으로 불러오고, 사용하지 않으면 다시 하드디스크로 내림을 반복하여 RAM을 효과적으로 관리하는 것을 스와핑이라고 한다.

가상 주소는 메모리 관리 장치에 의해 실제 주소로 변환되며, 이 덕분에 사용자는 실제 주소를 의식할 필요 없이 프로그램을 구축할 수 있다. 가상메모리는 가상 주소와 실제 주소가 매핑되어 있고, 프로세스의 주소 정보가 들어 있는 페이지 테이블로 관리된다. 이때 속도 향상을 위해 캐시(TLB)를 사용한다.

 

출처 : http://www.kocw.net/home/search/kemView.do?kemId=1226304

'Operation System' 카테고리의 다른 글

병행 제어  (0) 2024.02.06

BELATED ARTICLES

more