메모리는 프로세스의 데이터를 보다 효율적으로 관리하기 위해서 다양한 메모리 관리 기법을 활용하며 그중에서도 가상 메모리 기법을 가장 많이 사용한다.
가상 메모리는 물리 주소를 연속적으로 저장하는 연속 할당과 순서에 상관 없이 비어있는 공간에 할당하는 불연속 할당이 있으며 이번 시간에는 불연속 할당 기법 중 Paging 에 대해 알아보려고 한다.
Paging 은 간단하게 메모리를 Page 라는 단위로 나누어 데이터를 관리하는 방식으로 CPU 가 바라보는 프로세스의 논리주소, 실제 메모리에 저장되는 물리주소(Page 와 매핑되는 공간 = Frame) 그리고 논리주소와 물리주소를 매핑한 Page Table 로 나눠진다.
하지만 Page Table 은 프로세스마다 독립적으로 필요하며 마찬가지로 메모리에 저장되기에 결국엔 이 또한 메모리 관리를 위한 또 다른 공간 차지라고 볼 수 있다. 그렇다면 Paging 은 왜 효율적인 것일까?
메모리 관리의 목적은 프로그램의 프로세스가 프로그램의 모든 데이터를 필요로 하지 않기 때문에 모든 데이터를 메모리로 올려 사용하지 않고 필요한 부분만 가져와 사용하기 위한 방법이다. 하지만 Paging 이전 기법들은 내부 혹은 외부 공간을 효율적으로 관리하지 못했기에 결국 메모리의 가용성이 떨어졌다.
Paging 또한 관리 단위인 Page 보다 작은 내부 공간이 발생할 수 있다. 그렇지만 결국 내부 공간은 Page 보다 작은 크기이며 이전에 언급한 기법들에 비해 가용성이 높다. 또한 프로그램이라는 책에서 필요한 Page 만 메모리에 올려 사용함으로써 결과적으로 아주 작은 조각들만 남기면서 필요한 데이터만 알맞게 가져오는 효율적인 방식이라고 할 수 있다.
하지만 Page 의 물리 주소인 Frame 을 찾기 위한 Page Table 의 공간이 프로세스마다 필요하다. 이때 프로세스의 Page Table 은 주소 체계(32/64 bit) 에 따라 4GB/8GB 이상 메모리에 올릴 수 있다. 하지만 필요에 의해 올려둔 프로세스의 Page 도 마찬가지로 전부 사용하는 것이 아니라 자신의 스레드 루틴에 따라 몇몇 페이지만 자주 사용한다. 따라서 불필요한 Page Table 주소 공간 낭비 피해 보다 효과적인 Paging 방법을 알아보려고 한다.
1. HW - Translation Lookaside Buffer
HW 장치인 TLB(변환 색인 버퍼) 를 활용하는 방법. 캐시 메모리처럼 실행 중인 프로세스의 Page Table 정보를 저장한다. 물론 Page Table 의 원본 정보는 물리 메모리에 저장되지만 미리 TLB 에 미리 올려둠으로써 직접 메모리의 Page Table 에 접근하고 다시 Page 의 Frame 을 찾는 것보다 더욱 빠르게 접근이 가능하다.
2. Multi Level Page Table
Page Table 의 Page Table 을 만드는 방법. 필요한 기능에 따라 Page Table 을 나눠 만약 에러 처리 같은 자주 사용되지 않는 Abormal Case 의 Page 들은 객체 인스턴트를 생성조차 하지 않아 (Null) 결과적으로 메모리 낭비를 막을 수 있으며 이론적으로 Page Table 의 Level 이 많아 질 수 록 더욱 효과적으로 Paging 이 가능하다. (단, 역시 나눠진 Level 의 Page Table 만큼 추가 공간이 필요할 것이다)
3. Special Bit
각자 특별한 기법으로 소개되는데 결론적으로는 Page Table 의 1개의 컬럼인 Entry 에 구분자를 추가해 효과적으로 Page Table 을 관리하는 방법이다. 특히 Read-Only 를 구분해 같은 프로그램의 프로세스끼리 Page 를 공유하는 Shared Page 또한 효과적인 Paging 기법으로 소개된다.
결국 Paging 은 주어진 데이터를 메모리에 정해진 크기에 맞춰 저장하는 것으로 내부 단편화를 감수하는 기법으로 불연속 고정 할당이라고 볼 수 있다.
다음시간에는 페이징과 다르게 불연속 가변 할당인 Segmentation 에 대해 알아보자.
'컴퓨터 공학 > 운영체제' 카테고리의 다른 글
메모리 관리 - 가상 메모리 (0) | 2023.02.06 |
---|---|
메모리 관리 - Segmentation (0) | 2023.02.06 |
메모리 관리 (0) | 2023.01.31 |
Dead Lock (교착 상태) (0) | 2023.01.27 |
프로세스 동기화 문제 (1) | 2023.01.27 |