OS
Noncontiguous allocation
-
Paging
- Process의 virtual memory를 동일한 사이즈의 page 단위로 나눔
- Virtual memory의 내용이 page 단위로 noncontiguous하게 저장됨
- 일부는 backing storage에, 일부는 physical memory에 저장
-
Basic Method
- physical memory를 동일한 크기의
frame
으로 나눔
- logical memory를 동일 크기의 page로 나눔(frame과 같은 크기)
- 모든 가용 frame들을 관리
- page table을 사용하여 logical address를 physical address로 변환
- External fragmentation 발생 안함
- Internal fragmentation 발생 가능
Implementation of Page Table
- Page table은 main memory에 상주
- Page-table base register(PTBR)가 page table을 가리킴
- Page-table length register(PTLR)가 테이블 크기를 보관
- 모든 메모리 접근 연산에는 2번의 memory access 필요
- page table 접근 1번, 실제 data/instruction 접근 1번
- 속도 향상을 위해
- associative register 혹은 translation look-aside buffer(TLB : 일종의 캐시)라 불리는 고속의 lookup hardware cache 사용
- Associative registers(TLB): parallel search가 가능
- TLB에는 page table 중 일부만 존재
- Address translation
- page table 중 일부가 associative register에 보관되어 있음
- 만약 해당 page #가 associative register에 있는 경우 곧바로 frame #를 얻음
- 그렇지 않은 경우 main memory에 있는 page table로부터 frame #를 얻음
- TLB는 context switch 때 flush (remove old entries)
Two-Level Page Table
사용 하는 이유
: page table을 위한 공간을 줄일 수 있기 때문인데 그 이유는 전체 주소 공간(logical memory)중에서 상당 부분은 실제 사용이 되지 않는 부분이다. 그래서 page table의 안쪽 테이블이 만들어지지 않기 때문이다.
- 현대의 컴퓨터는 address space가 매우 큰 프로그램 지원
- 32bit address 사용시 : 232Byte(4GB)의 주소 공간
- page size가 4KB시 1MB(약 100만)개의 page table entry 필요
- 각 page entry가 4Byte시 프로세스당 4MB의 page table 필요
- 그러나, 대부분의 프로그램은 4GB의 주소 공간 중 지극히 일부분만 사용하므로 page table 공간이 심하게 낭비됨
- page table 자체를 page로 구성
- 사용되지 않는 주소 공간에 대한 outer page table의 엔트리 값은 NULL(대응하는 inner page table이 없음)
Multilevel Paging and Performance
- Address space가 더 커지면 다단계 페이지 테이블 필요
- 각 단계의 페이지 테이블이 메모리에 존재하므로 logical address의 physical address 변환에 더 많은 메모리 접근 필요
- TLB를 통해 메모리 접근 시간을 줄일 수 있음
- 4단계 페이지 테이블을 사용하는 경우
- 메모리 접근 시간이 100ns, TLB 접근 시간이 20ns이고
- TLB hit ratio가 98%인 경우
- effective memory access time = 0.98 x 120 + 0.02 x 520 = 128 nanoseconds
- 결과적으로 주소 변환을 위해 28ns만 소요
Memory Protection
- Page table의 각 entry 마다 아래의 bit를 둔다
- Protection bit
- page에 대한 접근 권한(read/write/read-only)
- Valid-invalid bit
- valid는 해당 주소의 frame에 그 프로세스를 구성하는 유효한 내용이 있음을 뜻함 (접근 허용)
- invalid는 해당 주소의
frame에 유효한 내용이 없음
을 뜻함(접근 불허)
- 프로세스가 그 주소 부분을 사용하지 않는 경우
- 해당 페이지가 메모리에 올라와 있지 않고 swap area에 있는 경우
Inverted Page Table
- page table이 매우 큰 이유
- 모든 process 별로 그 logical address에 대응하는 모든 page에 대해 page table entry가 존재
- 대응하는 page가 메모리에 있든 아니든 간에 page table에는 entry로 존재
- Inverted page table
- Page frame 하나당 page table에 하나의 entry를 둔 것 (system-wide)
- 각 page table entry는 각각의 물리적 메모리의 page frame이 담고 있는 내용 표시(process-id, process의 logical address)
- 단점
- 조치
- associative register 사용(expensive)
Shared Page
- Shared code
- Re-entrant Code(=Pure code)
- read-only로 하여 프로세스 간에 하나의 code만 메모리에 올림(ex, text editors, compilers, window systems)
- Shared code는 모든 프로세스의 logical address space에서 동일한 위치에 있어야 함
- Private code and data
- 각 프로세스들은 독자적으로 메모리에 올림
- Private data는 logical address space의 아무 곳에 와도 무방
Segmentation
- 프로그램은 의미 단위인 여러 개의 segment로 구성
- 작게는 프로그램을 구성하는 함수 하나하나를 세그먼트로 정의
- 크게는 프로그램 전체를 하나의 세그먼트로 정의 가능
- 일반적으로는 code, data, stack 부분이 하나씩의 세그먼트로 정의됨
- Segment는 다음과 같은 logical unit 들이다
- main(),
- function,
- global variables,
- stack,
- symbol table, arrays
- s : 세그먼트 번호
- d : 세그먼트 오프셋
- limit : 세그먼트의 길이를 나타냄
- base : 세그먼트의 시작 위치를 나타내는 값
- paged segment
- 장점 : allocation 문제가 발생하지 않는다
- Memory Management는 OS가 관리하는 것이 아니고 HW적으로 관리한다.
본문 출처 : 운영체제 - 이화여자대학교 반효경