Non-continuous allocation (비연속적 메모리 할당)
사용자 프로그램을 여러 개의 block으로 분할
실행 시, 필요한 block들만 메모리에 적재 (나머지 block들은 swap device에 존재)
📌가상 메모리
물리적인 메모리 공간은 한정적이다. 그래서 프로세스 전체를 메모리에 올리지 않고 가장 많이 사용되는 일부 프로세스만 메모리에 적재하고 나머지는 Swap-device에 놔두고 Swap-device까지 메모리 처럼 사용하는 것이다. (파레토 법칙 : 전체 결과80%는 20%원인으로 발생)
즉, 가상 메모리는 실제 메모리보다 크다고 착각하게 만들어주는 기술.
Non-continuous allocation
- Virtual address(가상주소) = relative address(continuous allocation)
- Logical address(논리 주소)
- 연속된 메모리 할당을 가정한 주소(프로그램이 나눠져 있지 않다고 가정)
- Real address (실제 주소) = absolute(physical)
- Address mapping : Virtual address ➡ Real address
Block Mapping
- 사용자 프로그램을 block 단위로 분할/관리
- 각 block에 대한 address mapping 정보 유지
- Virtual address : v = (b,d)
- b = block Number, d = displacement(offset) in a block(시작점과의 거리)
- Block map table (BMT)
- Address mapping 정보 관리
- Kernel 공간에 프로세스마다 하나의 BMT를 가짐
전체 프로세스는 swap device에 있음
block number : block의 번호
residence bit : 적재 여부
real address : 실제 주소
실제 Mapping
- 가상주소(b, d)
📌Virtual Storage Methods
📌 Paging System
- 프로그램을 같은 크기의 블록으로 분할 (pages)
- Terminologies
- Page : 프로그램의 분할된 blok
- Page frame : page와 같은 크기로 분할 된 메모리 영역
- SwapDevice(가상메모리)에 Process가 page크기로 나눠진 형태로 들어가 있음
- 특징
- 논리적 분할이 아님(크기에 따른 분할)
- segmentation 대비 공유 및 보호 과정이 복잡함, function 단위가 아님
- segmentation 대비 간단하고 효율적임
- 외부 단편화가 발생되지 않음(같은 페이징 크기 이므로, 공간이 충분한데 못올라가는 경우는 없음) ↔ 내부단편화는 있음
Demand paging (요구 페이징)
- Demand : 페이지를 요구 했을 경우에만 메모리에 적재
페이징 기법을 바탕으로 프로세스의 필요한 페이지들만 메모리에 적재하고 나머지는 swap-device에 두었다가 필요한 페이지들만 메모리를 할당 받고 적재하는 메모리 관리 기법이다.
📌Address Mapping - Paging
- Virtual address : v = (p, d)
- p : page number , d : displacement(offset)
- Address mapping = PMT(Page Map Table) 사용
page frame 번호로 올라간 메모리 위치 확인
secondary storage address : swap device에서 저장되어 있는 위치
- Address mapping mechanism
- Direct mapping (직접 사상), block mapping과 유사
- Associative mapping (연관 사상)
- Hybrid direct/associative mapping
Direct Mapping
- Block mapping 방법과 유사함
- PMT를 커널안에 저장, PMT entry size = entrySize로 지칭, Page size = pageSize로 지칭 한다고 가정
- 해당 프로세스의 PMT가 저장되어있는 주소 b에 접근한다.
- 해당 PMT에서 page p에 대한 entry를 찾는다.
- p의 entry 위치 = b + p*entrySize
- 찾은 entry가 메모리에 적재 되었는 지 검사 (residence bit)
- Residence bit = 0 인 경우 (page falut)❗가 발생
swap device에서 해당 page를 메모리에 적재한다.
➡ running에서 asleep으로 내려오고 다시 running 된다.
⏩ asleep상태가 되면 context switching이 발생 된다 = 오버헤드가 큼
- p'와 가상 주소의 위치 d를 사용하여 실제 주소 r을 구한다.
- 실제 주소 r로 주기억장치에 접근한다.
- 문제점
- PMT가 kernel에 있어서 메모리 한번 접근한 후 main memory를 다시 접근한다.
메모리 접근 횟수가 2배 ➡ 성능 저하 발생
- PMT를 위한 메모리 공간 필요
- 해결방안
- Associative mapping (TLB)
- PMT를 위한 전용 기억장치(공간)사용
- Hierarchical paging, Hashed page table, Inverted page table 등
Associative mapping
- TLB(Translation Look-aside Buffer)에 PMT 적재
- Address mapping을 할 때 옆에 두고 사용하는 특별한 장치
- associative high-speed memory : PMT 탐색 전용 HW
- PMT를 병렬 탐색 (HW로 따로 계산 안하고 바로 찾을 수 있음)
- Low overhead, high speed
- Expensive hardware ➡ 비싸서 크기가 작다(12bits), PMT를 다루기가 어려움
Hybrid direct/associative mapping
- 두 기법을 혼합해서 사용
- HW 비용은 줄이고, Associative mapping의 장점을 활용
- 작은 크기의 TLB 사용
- PMT : 메모리(커널 공간) 에 저장
- TLB : PTM 중 일부 entry만 적재 (최근에 사용된 page들에 대한 entry 저장)
- Locality(지역성) 활용
- 한번 접근한 영역을 다시 접근 또는 인접 영역을 다시 접근할 가능성이 높음
- 프로세스의 PMT가 TML에 적재 되어 있는 지 확인
- TLB에 적재 되어 있는 경우 ➡ residence bit를 검사하고 page frame 번호를 확인
- 적재되어 있지 않은 경우
➡ Direct mapping으로 page frame 번호 확인 후 해당 PMT entry를 TML에 적재
Memory Management - Paging
- Page와 같은 크기로 미리 분할하여 관리/사용
- Frame table
- Page frame당 하나의 entry
- 구성
- Allocated/available field(할당,사용 가능)
- PID field(실제 페이지)
- Link field: For free list(빈 공간관리 배열), 빈 entry에 대한 linked list
- AV: Free list headr (free list(빈공간)의 시작점을 지칭)
Page Sharing
- 여러 프로세스가 특정 page를 공유 가능
- Non-continuous allocation이기 때문에 (프로세스를 쪼개서 적재 가능함)
- 공유 가능 page 종류
- Procedure pages (재 진입이 가능해서 Pure,reenter code라고도 불림)
- Data page
- Read-only: 직관적으로 바로 공유가능
- Read-write: 상호배제 문제로 병행성 제어 기법 관리하에서 사용 가능
여러개의 Editor 프로그램을 사용할 때
실제 작성하는 문서인 Data만 따로 다른 곳에 기록
- Data page sharing
- page frame number를 같은 곳을 공유
- Procedure Page Sharing
- Problem : 메인메모리에서 부르는 이름이 다름(P1(k1)과 P2(k1)의 위치는 서로 다른데 함수를 부른땐 똑같이 Branch(K1, d)가 되기 때문에 문제 발생)
- 해결방법 : 각 페이지에서 부르는 이름을 통일
- 프로세스들이 공유하는 페이지에 대한 정보를 PMT의 같은 entry에 저장하도록
Page Protection
- 여러 프로세스가 page를 공유 할 때 보안 문제 발생
- Protection bit (V:메인메모리 적재여부 + RWE:접근권한 설정)를 사용
요약
- 프로그램을 고정된 크기의 block으로 분할 (page) / 메모리를 block size로 미리 분할 (page frame)
- 외부 단편화 문제 없음
- 메모리 통합/압축 불필요(오버헤드 감소)
- 프로그램의 논리적 구조 고려하지 않음
- 프로그램이 여러개로 걸쳐 적재 되어 있어서, 공유 및 보호가 복잡
- ➡ Segmentation System으로 논리적 구조 고려
- 필요한 page만 page frame에 적재하여 사용
- Page mapping overhead
- 메모리 공간 및 추가적인 메모리 접근(*2)이 필요
- 전용 HW 활용으로 해결 가능하나 HW 비용 증가 ➡ Hybrid
https://youtu.be/EdTtGv9w2sA [Course] Operating System (CPA310) - 운영체제 강의. HPC Lab. KOREATEC