Paging 기법은
가상메모리의 기법에서 더욱 효율적이게 메모리를 관리하는 것이다.
가상 메모리에서는 해당 프로세스의 관련된 데이터 모두를 적재하는 것이 아니다.라고 말했다.
단순히 레지스터에 시작주소 값을 담아 사용하기에는 연속된 메모리영역이 필요하다.
하지만 연속된 메모리영역을 확보하는 것은 무척이나 힘든 일이기 때문에
이제 프로세스의 물리 주소 공간이 연속되지 않아도 되는 메모리 관리 기법인 페이징을 쓰는 것이다.
페이징이란?
페이징은 virtual memory를 page로 나누는 기법을 말한다.
일반적으로 물리메모리는 동일한 크기의 frame으로
논리메모리는 동일한 크기의 page로 나눈다.
**page size는 하드웨어에 의해 결정된다.
페이징이 작동하는 원리
page table을 사용하여 논리 메모리를 실제 물리메모리로 변환하는 과정을 거쳐서
실제 메모리에 접근한다.
**Page Table은 가상 주소를 물리적 주소로 바꾸기 위한 정보를 가지고 있는 Table을 말한다.
요구 페이징, Demand Paging
CPU에 의해 프로세스가 수행되기 위해서 적재할 페이지를 언제 가져올 지에 관한 내용이다.
프로세스가 수행되는 시점에 특정 페이지를 메인 메모리에 적재하는 것이다.
다시 말해서 요구된 페이지만을 메인 메모리에 적재한다.
동시에 모든 페이지를 적재하지 않으며
이런 식으로 수행하는 것은 사용되지 않는 페이지를 기억장치에 읽어들이는 것을 예방하고
교체시간, 메모리 공간를 절약하고 다중 프로그래밍 정도를 높일 수 있다.
요구 페이징은 메인메모리에 실행할 프로세스의 페이지가 전혀 없어도 프로세스는 수행을 시작할 수 있게 하고
프로세스는 최초의 명령부터 page miss를 일으킬 뿐이고 그냥 필요한 page에 적재하면 된다.
다만 page miss가 일어났을 때에는 Disk에서 읽어오므로 오버헤드가 크다.
또한 개별 프로그램의 처음 시작할 때에는 지연이 발생한다.
그리고 페이지 교체 알고리즘의 영향을 많이 받는다.
페이징으로 해결할 수 있는 문제
페이징은 연속 메모리 할당을 괴롭히는 2가지 문제인
외부 단편화, 관련 압축의 필요성을 피할 수 있게 한다.
**그러나 내부 단편화가 생길 수 있다.
page table에는 어떻게 접근을 할까?
page table은 Main Memory에 있는데 레지스터로 하면 더 빠를 것 같지만
레지스터 가지기엔 용량이 너무 커서 그렇다.
근데 메인 메모리에 접근하려면 page table을 이용해야하는데
page table이 메인메모리에 있으면 어떻게 이용하냐????
그래서 page table의 위치와 page table의 크기는 레지스터가 가지도록 한다.
위에서 PTBR, PTLR이 그 역할을 수행한다.
메모리에 페이지 테이블을 저장하면 문맥 교환 속도가 빨라지지만 메모리 액세스 시간이 느려질 수 있다.
다시 말해서 메모리에 접근하기 위에 page table에 접근하고
다시 메모리에 접근하는 2번의 access가 필요해진다.
(이를 극복하기 위한 TLB 아래에나옴)
아까 말했듯이
CPU,OS가 쓰는 가상메모리 주소는 물리적 주소와 다르다.
때문에 가상메모리에서는 물리적 주소로 바꾸는 작업이 필요하다.
이것을 Address Translation이라고 부른다.
CPU에서는 VA를 쓰지만 캐시 메모리, 메인 메모리에선 PA, Physical Address를 쓴다.
때문에 Translation은 CPU와 캐시 사이에서 발생한다.
하지만 뭔가 이상하다.
물리적 주소를 알려면 Main Memory에 대해서 검색을 한다는 뜻인데..
그렇다.
Translation 작업에는 Main memory 접근을 필요로 한다.
** page table은 Main memory에 존재한다.
즉, 캐시에서 Miss가 난다면 접근을 2번이나 해야하는 비용이 높은 작업을 해야한다는 것이다.
이를 극복하기 위해 TLB라는 장치를 만들었다.
Translation Lookaside Buffer로 최근에 Translation 했던 정보를 담는 버퍼다.
해당 버퍼는 캐시역할을 하며 최근에 접근한 page에 대한 물리적 주소를 저장해놓는다. (물론 일부만 저장)
만약 해당 정보에 Translation 정보가 있다면 Main Memory를 access하지 않아도 되어 비용을 줄일 수 있다.
즉, 메인메모리 Pagetable lookup 하는 과정을 줄이는 것이다.
page fault(miss), 페이지 폴트(부재)
해당 페이지에 내가 원하는 data가 없는 것으로
page fault는 Disk에서 page를 불러오는 작업(replace)을 해야만한다.
Disk에서 가져오는 일은 무척 비용이 큰 일이다.
**Page의 miss는 OS가 관리한다.
Page fault 이후에는 page replace가 일어난다.
page fault로 일어난 작업이다.
즉, Disk 에서 읽어오는 작업은 비용이 정말 큰 작업이다.
교체가 일어날 땐
보통 최근에 쓰지 않은 순서대로 페이지를 교체해 나간다. (LRU)
외부단편화란
연속적인 메모리 영역을 요구할 때 생기는 문제로써
ex) 10 크기 메모리가 있고 4,5,6 프로그램이 존재한다고 하자
만약 6크기를 가진 메모리가 올라간다면 남은 4영역에 4가 올라갈 수 있을 것이라 생각한다.
하지만 6크기를 가진 프로그램이 3~8까지 차지해버렸다.
그렇게되면 0,1,2,9 라는 메모리영역이 남아도 프로그램이 적재될 수 없는 현상을 말한다.
내부 단편화란
이것은 일정한 크기를 할당하기 때문에 생기는 문제다.
ex) 크기가 91인 프로그램이 있다. 페이지당 10의 크기를 가지고 있어서
페이지 10개를 이 프로그램을 적재하기 위해서 필요하다.
하지만 91임에도 10개를 할당받아서 실제 frame, 물리메모리에서는 9가 남는다.
하지만 해당 주소에는 다른 영역이 침범할 수 없어서 사용할 수 있음에도 접근을 못하는 경우를 말한다.
이러한 단편화 현상을 딜레마를 낳는다.
프레임 모두 할당한답시고 페이지 크기를 무진장 작게 만들면
페이지 테이블의 크기가 커지게 되고 페이지 테이블이 차지하는 공간이 낭비된다.
그렇다고 엄청 크게 만들면 2049B인데 2048B의 페이지의 크기를 가지면
2번째 페이지가 1칸 빼고 다 낭비되는 불상사도 생긴다.
[컴퓨터(Computer Science)/운영체제(Operation System)] - Paging, 페이징, 불연속 메모리 할당 [운영체제]
[CS Interview] - Virtual Memory, 가상메모리란?
'CS Interview' 카테고리의 다른 글
교착상태, Deadlock (0) | 2021.11.01 |
---|---|
(A)Synchronous 그리고 (Non)-Blocking (2) | 2021.10.22 |
삽입 정렬, Insertion Sorting 에 대하여 (0) | 2021.09.15 |
CPU Bound와 I/O Bound의 차이 (0) | 2021.09.09 |
Deep Copy vs Shallow Copy, 얕은 복사와 깊은 복사 (0) | 2021.09.01 |