1. 페이징 시스템(Paging System)
- 프로그램(프로세스)을 같은 크기의 블록(= page)으로 분할하여 관리하는 시스템
=> 고정 분할 방식(Fixed Partition Multi-Programming)과 유사 - 메모리를 같은 크기의 페이지로 분할하는 방식이기에 간편하고 효율적인 관리가 가능
- 프레임단위로 메모리를 할당하기에 외부 단편화는 발생하지 않음
- 프로그램의 크기가 페이지의 크기로 나누어 떨어지지 않는다면 마지막 페이지에서 내부 단편화가 발생
- 프로그램의 논리적 구조를 고려하지 않은 방식이기에 페이지 공유, 페이지 보호 등이 복잡함
- 페이지(Page)
- 프로그램의 분할된 블록
- 프레임(Frame)
- 메모리가 분할된 블록
- Page와 같은 크기를 가짐
- 프로그램의 page -> 메모리의 frame에 대응
2. 주소 매핑(Address Mapping)
- (page number, offset) 의 쌍으로 이루어진 가상 주소를 사용
- PMT(Page Map Table)을 사용하여 가상주소를 실제주소에 매핑
- PMT에서는 페이지가 메모리에 적재되어있는지 여부를 나타내는 residence bit와
swap device 상의 어느 위치에 저장되어있는지를 나타내는 secondary storage address(= 실제주소),
메모리상의 어느 프레임에 적재되어있는지를 나타내는 page frame number 등의 값을 관리한다.
- 직접 매핑(Direct Mapping)
- PMT의 시작 주소가 b 이고 page 번호는 p, offset 이 d 일 때, 먼저 PMT에서 해당 엔트리를 참조
=> PMT에서의 해당 엔트리는 b + (entry_size * p) - residenct bit 이 1이라면 page frame number를 참조하여 적재된 메모리 프레임의 주소를 계산
=> 메모리에서의 시작 주소는 (page frame number * page_size) + d - 만약 residence bit 이 0이라면 메모리에 적재되지 않은 상태이기 때문에 page fault가 발생하고
프로그램(프로세스)은 커널에 swap device상의 페이지를 메모리 프레임에 적재하도록 요청한 뒤
요청이 완료될 때 까지 Block 상태가 되어 대기, 요청이 완료되면 다시 Ready 상태가 되어
단기 스케줄러에 의해 프로세서를 할당받으면 다시 작업을 수행하게 된다. - PMT가 커널에 존재하는 방식이기에 PMT 참조를 위해 한 번, 실제로 메모리를 참조하기 위해 한 번
총 두 번의 메모리에 대한 접근이 필요하기 때문에 성능이 저하되며 PMT를 저장해둘 메모리 공간도
별도로 필요하다.
- PMT의 시작 주소가 b 이고 page 번호는 p, offset 이 d 일 때, 먼저 PMT에서 해당 엔트리를 참조
- 관계 매핑(Associated Mapping)
- 직접 매핑에서 PMT의 참조 과정을 별도의 장비(TLB)에게 맡기는 방식
- TLB(Translation Lookaside Buffer)
- 메모리 접근 횟수에 따른 성능 저하를 막기 위해 사용하는 전용 기억장치
- PMT 참조 과정이 병렬 탐색을 통해 매우 빠른 속도로 이루어지도록 설계된 전용 하드웨어
- 성능만큼이나 가격이 매우 비싸기 때문에 큰 PMT를 다루기엔 어려움이 따름
- 메모리 접근 횟수에 따른 성능 저하를 막기 위해 사용하는 전용 기억장치
- 직접 매핑에서 PMT의 참조 과정을 별도의 장비(TLB)에게 맡기는 방식
- 절충안(Hybrid Direct/Associative Mapping)
- 직접 매핑과 관계 매핑을 절충하여 비용은 최소화하고 성능은 최대화하는 방식
- 작은 크기의 TLB를 PMT 전용의 캐시메모리처럼 사용하여 PMT 자체는 커널공간에 저장하고
PMT중 일부 엔트리만을 TLB에 적재하여 성능을 높인다. - 물론 기존에 배웠던 캐시메모리와 마찬가지로 최근에 사용된 영역이나 그 인접영역이
또다시 사용될 가능성이 높기 때문에(locality) 최근에 사용된 페이지들에 대한 entry 위주로
TLB에 적재한다.
- 직접 매핑과 관계 매핑을 절충하여 비용은 최소화하고 성능은 최대화하는 방식
- TLB에 PMT의 엔트리가 적재되어있다면 바로 TLB를 통해 작업을 수행하고(Associative Mapping)
적재되어있지 않다면 Direct Mapping 방식으로 작업을 수행, 해당 엔트리를 TLB에 캐싱한다.
3. 페이징 시스템의 메모리 관리
- 페이지와 같은 크기로, 즉 프레임(frame) 단위로 메모리를 분할하여 관리하고 사용
=> 연속 메모리 할당에서 봤던 고정 분할 방식과 유사
- 프레임 테이블(Frame Table)
- 각 프레임을 관리하기 위한 테이블
- 구성
- Page Frame Number
- 페이지 프레임 번호
- 메모리상의 몇 번째 프레임인지 나타내는 필드
- Allocated/Available
- 해당 프레임이 할당된 상태인지, 혹은 사용 가능한 상태인지를 나타내는 필드
- 해당 프레임이 할당된 상태인지, 혹은 사용 가능한 상태인지를 나타내는 필드
- PID
- 어느 프로세스가 사용중인지 나타내는 필드
- 어느 프로세스가 사용중인지 나타내는 필드
- Link
- 사용 가능한 프레임들에 바로 접근하기 위한 연결리스트
- 사용 가능한 프레임들에 바로 접근하기 위한 연결리스트
- AV(Availabe)
- Link의 시작점(head)
- Page Frame Number
- 각 프레임을 관리하기 위한 테이블
- 페이지 공유(Page Sharing)
- 여러 프로세스가 특정 page를 공유할 수 있음
- 연속 메모리할당 방식이 아니기 때문에 가능한 방식
- 공유 가능한 페이지
- 프로시저 페이지 => 함수 등 재사용되는 순수 코드
- 데이터 페이지 => 읽기 전용의 경우 공유 가능, 쓰기도 가능한 경우 병행 제어 기법 필요(동기화 등)
- 문제점
- 여러 프로세스가 공유하는 페이지에서 branch(= jump)가 발생하는 경우
jump의 목적지 주소를 어디로 잡아야할지 모호해지는 문제가 발생
=> 페이지는 고정된 크기로 분할했을 뿐 논리적인 단위가 아니기 때문 - 해결책
- 공유 페이지에 대한 정보는 PMT의 같은 엔트리에 저장하도록 할 수 있음
- 여러 프로세스가 공유하는 페이지에서 branch(= jump)가 발생하는 경우
- 여러 프로세스가 특정 page를 공유할 수 있음
- 페이지 보호(Page Protection)
- 공유되는 페이지에 대한 각 프로세스의 작업 권한을 protection bit를 통해 관리
- 각 프로세스는 자신의 페이지 테이블을 참조하여 허용된 작업만을 수행할 수 있음
- Valid / Read / Write / Execution 의 4비트로 이루어지며 각각 메모리 적재여부,
읽기 가능 여부, 쓰기 가능 여부, 실행 가능 여부를 나타낸다
- 공유되는 페이지에 대한 각 프로세스의 작업 권한을 protection bit를 통해 관리
'CS > 운영체제' 카테고리의 다른 글
#15 가상 메모리(Virtual Memory) - 하이브리드(Hybrid) (0) | 2022.01.18 |
---|---|
#14 가상 메모리(Virtual Memory) - 세그멘테이션(Segmentation) (0) | 2022.01.17 |
#12 가상 메모리(Virtual Memory) - 개념 (0) | 2022.01.11 |
#11 연속 메모리 할당(Continuous Memory Allocation) (0) | 2022.01.10 |
#10 메모리 관리(Memory Management) - 용어정리 (0) | 2022.01.07 |