Non-continuous allocation
사용자 프로그램을 여러개의 block으로 분할
실행 시, 필요한 block들만 메모리에 적재
나머지 block들은 swap device에 존재
기법들
Paging syste
Segmentation system
Hybrid paging/segmentation system
Continuous allocation
Relative address (상대 주소)
프로그램의 시작 주소를 0으로 가정한 주소
Relocation (재배치)
메모리 할당 후, 할당된 주소(allocation address)에 따라 상대 주소들을 조정하는 작업
Non-continuous allocation
Virtual address (가상주소) = relative address
Logical address (논리주소)
연속된 메모리 할당을 가정한 주소
Real address (실제주소) = absolute (physical)
실제 메모리에 적재된 주소
Address mapping
Virtual address -> real address
사용자/프로세스는 실행 프로그램 전체가 메모리에 연속적으로 적재되었다고 가정하고 실행 할 수 있음
사용자 프로그램을 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를 가짐
동작 과정
1. 프로세스의 BMT에 접근
2. BMT에서 block b에 대한 항목(entry)를 찾음
3. Residence bit 검사
1. Residence bit = 0인 경우 (메모리에 없는 경우) swap device에서 해당 블록을 메모리로 가져오고 BTM 업데이트 후 2단계 수행
2. Residence bit = 1인 경우 (메모리에 있는 경우) BMT에서 b에 대한 real address 값 a확인
4. 실제 주소 r 계산 (r = a +d)
5. r을 이용하여 메모리에 접근
프로그램을 같은 크기의 블록으로 분할 (Pages)
용어
Page
프로그램의 분할된 block
Page frame
메모리의 분할 영역
Page와 같은 크기로 분할
특징
논리적 분할이 아니라 크기에 따른 분할
Segmentation 대비 Page 공유 및 보호 과정이 복잡함
Segmentation 대비 Simple and Efficient
외부 단편화 X, 내부 단편화 발생 가능
Address Mapping
Virtual address : v = (p,d)
p: page number
d: displacement(offset)
Address mapping
PMT(Page Map Table) 사용
Address mapping mechanism
Direct mapping (직접 사상)
Associative mapping (연관 사상)
TLB(Translation Look-aside Buffer)
Hybrid direct/associative mapping
Page Map Table (PMT)
Block mapping 방법과 유사
가정
PMT를 커널 안에 저장
PMT entry size = entrySize
Page size = pageSize
동작과정
1. 해당 프로세스의 PMT가 저장되어 있는 주소 b에 접근
2. 해당 PMT에서 page p에 대한 entry 찾음
p의 entry 위치 = b + p * entrySize
3. 찾아진 entry의 존재 비트 검사
1 Residence bit = 0 인 경우 (page fault->Context switching 발생 -> Overhead가 큼), swap device에서 해당 page를 메모리로 적재 PMT를 갱신한 후 3-2 단계 수행
2 Residence bit = 1인 경우, 해당 entry에서 page frame 번호 p’를 확인
4. p’와 가상 주소의 변위 d를 사용하여 실제 주소 r 형성
r = p’ * pageSize + d
5. 실제 주소 r로 주기억장치에 접근
문제점
메모리 접근 횟수가 2배 -> 성능 저하
PMT를 위한 메모리 공간 필요
해결방안
Associative mapping (연관사상)
PMT를 위한 전용 기억장치(공간) 사용
TLB(Translation Look-aside Buffer)에 PMT 적재
Associative high-speed memory
PMT를 병렬 탐색
Low overhead, hihg speed
Expensive hardware
큰 PMT를 다루기 어려움
두 기법을 혼합하여 사용 (집합 + 연관)
HW 비용은 줄이고, Associative mapping의 장점 활용
작은 크기의 TLB 사용
PMT: 메모리(커널공간)에 저장
TLB: PMT 중 일부 entry들을 적재
최근에 사용된 page들에 대한 entry 저장
Locality (지역성) 활용
프로그램의 수행과정에서 한번 접근한 영역으르 다시 접근 (temporal locality) 또는 인접 영역을 다시 접근(spatial locality)할 가능성이 높음
프로세스의 PMT가 TLB에 적재되어 있는지 확인
1. TLB에 적재되어 있는 경우,
residence bit를 검사하고 page frame 번호 확인
2. TLB에 적재되어 있지 않은 경우,
Direct mapping으로 page frame 번호 확인
해당 PMT entry를 TLB에 적재함
Page와 같은 크기로 미리 분할 하여 관리/사용
Page frame
Fixed Partition Multi-programming (고정분할) 기법과 유사
Frame table
Page frame당 하나의 entry
구성
Allocated/available field
PID field
Link field : For free list (사용가능한 fp들을 연결)
AV (free list의 시작점)
여러 프로세스가 특정 page를 공유 가능
Non-continuous allocation이기 때문에 가능
공유 가능 page
Procedurepages
Pure code (reenter code)
Data page
Read-only data
Read-write data
프로세스들이 shared page에 대한 정보를 PMT의 같은 entry에 저장하도록 함.
여러 프로세스가 page를 공유 할 때, Protection bit 사용
프로그램을 고정된 크기의 block으로 분할(page)/ 메모리를 block size로 미리 분할 (page frame)
외부 단편화 X, 내부 단편화 발생 가능
메모리 통합/압축 불필요
프로그램의 논리적 구조를 고려하지 않음
Page sharing/protection이 복잡
Segmentation system으로 해결
필요한 page만 page frame에 적재하여 사용
메모리의 효율적 활용
Page mapping overhead
메모리 공간 및 추가적인 메모리 접근이 필요
전용 HW 활용으로 해결가능 -> 하드웨어 비용 증가
프로그램을 논리적 block으로 분할 (segment)
Block의 크기가 서로 다를 수 있음
예) stack, heap, main procedure, shared lib, ETc.
특징
메모리를 미리 분할 하지 않음
Variable Partition Multi-programming (가변 분할)과 유사
Segment sharing/protection이 용이함
Address mapping 및 메모리 관리의 overhead가 큼
내부 단편화 X, 외부 단편화 발생 가능
Address mapping
Virtual address: v = (s, d)
s: segment number
d: displacement in a segment
Segment Map Table (SMT)
Address mapping mechanism
Paging system과 유사
Segment Map Table
Address mapping (direct mapping)
동작 과정
1. 프로세스의 SMT가 저장되어 있는 주소 b에 접근
2. SMT에서 segment s의 entry 찾음
s의 entry 위치 = b + s * entrySize
3. 찾아진 Entry에 대해 다음 단계들을 순차적으로 실행
1. 존재 비트가 0 인 경우, (missing segment fault) swap deive로부터 해당 segment를 메모리로 적재 하고 SMT를 갱신
2 변위(d)가 segment 길이보다 큰 경우 (d > ls), segment overflow exception 처리 모듈을 호출
3 허가되지 않은 연산일 경우 (protection bit field 검사), segment protection exception 처리 모듈을 호출
4. 실제 주소 r 계산 (r = as + d)
5. r로 메모리에 접근
Variable Partition Multi-programming (가변 분할)과 유사
Segment 적재 시, 크기에 맞춰 분할 후 적재
Segment sharing/protection
논리적으로 분할되어 있어, 공유 및 보호가 용이함
프로그램을 논리 단위로 분할 (segment)/ 메모리를 동적으로 분할
내부 단편화 X, 외부 단편화 발생 가능
Segment sharing/protection이 용이함
Paging system 대비 관리 overhead가 큼
필요한 segment만 메모리에 적재하여 사용
메모리의 효율적 활용
Segment mapping overhead
메모리 공간 및 추가적인 메모리 접근이 필요
전용 HW 활용으로 해결 가능
Paging과 Segmentation의 장점 결합
프로그램 분할
논리 단위의 segment로 분할
각 segment를 고정된 크기의 page들로 분할
Page 단위로 메모리에 적재
Address mapping
Virtual address : v = (s, p, d)
s : segment number
p : page number
d : offset in a page
SMT와 PMT 모두 사용
각 프로세스 마다 하나의 SMT
각 segment마다 하나의 PMT
Address mapping
Direct, associated 등
메모리 관리
Fixed Partition Multi-programming (고정 분할)과 유사
Direct (address) mapping
논리적 분할(segment)와 고정 크기 분할(page)을 결합
Page sharing/protection이 쉬움
메모리 할당/관리 overhead가 작음
외부 단편화 X, 내부 단편화 발생 가능
전체 테이블의 수 증가
메모리 소모가 큼
Address mapping 과정이 복잡
Direct mapping의 경우, 메모리 접근이 3배
성능이 저하될 수 있음
[참고] https://drive.google.com/file/d/1TfHzj3nz47y4eQX8Ij0J3aZhFQm-I-y6/view