230 likes | 509 Views
5 장 . 메모리 관리. 이 장의 강의 목표. 메모리 관리 정책을 이해한다 . 메모리 관리 기법의 발전 과정을 이해한다 . 가상 메모리를 이해한다 . 페이지 / 세그먼테이션 방법을 이해한다 . page fault 처리 방법을 이해한다. 수행. 컴파일. prev task. prev task. new task. Memory. OS. CPU. CPU. CPU. CPU. CPU. 문맥으로 관리. Disk. inode. 지금까지 강의 내용을 살펴보면 (1/2). edit test.c.
E N D
이 장의 강의 목표 • 메모리 관리 정책을 이해한다. • 메모리 관리 기법의 발전 과정을 이해한다. • 가상 메모리를 이해한다. • 페이지/세그먼테이션 방법을 이해한다. • page fault 처리 방법을 이해한다.
수행 컴파일 prev task prev task new task Memory OS CPU CPU CPU CPU CPU 문맥으로 관리 Disk inode 지금까지 강의 내용을 살펴보면 (1/2) edit test.c test.exe int sum = 0; int main() { int i; for (i=0; i<10;i++) sum += i; printf(“%d”, sum); } .data .align 4 .type sum,@object .size sum,4 .text .global main .type main, @func main: pushl %ebp … movl -4(%ebp), %eax addl %eax, sum … test.exe가 더 이상 passive가 아닌 active한 객체로 변화 • test.exe가 수행 되려면 디스크에서 메모리로 이동되어야 함 메모리 관리 필요 (언제, 어디에 올릴 것인가?)
지금까지 강의 내용을 살펴보면 (2/2) • 용어 정리 (Terminology) • compile, assemble, linking, loading의 차이는?
register 메모리 계층 구조 • 메모리 계층 구조 • Caching is more and more important (how to keep consistency?) CPU cache • larger capacity • lower speed • lower cost Main Memory Secondary Storage Server (or INTERNET)
메모리 관리 정책 • 3가지 메모리 관리 정책 (three strategies) • 반입 정책 (Fetch strategy) • 언제 프로그램(페이지)를 메모리로 가져올 것인가? • 요구 반입 정책 (demand fetch) : reactive • 선반입 정책(prefetch) : proactive, intelligent agent in Web 등에서 사용 • 배치 정책 (Placement strategy) • 프로그램(페이지)를 메모리 어디에 위치 시킬 것인가? • 최초 적합(first fit), 최적 적합(best fit), 최악 적합(worst fit) • 교체 정책 (Replacement strategy) • 메모리 공간이 부족할 때 어떤 프로그램(페이지)를 메모리에서 교체시킬 것인가? • LRU, LFU, MRU, Working Set, ...
메모리 관리 기법의 발전 (1/8) • 단일 사용자 전용 시스템 (single user system) • 고정 분할 다중 프로그래밍(fixed partition multiprogramming system) • 절대 번역 어셈블러 (absolute assembler) • 재배치 가능 어셈블러 (relocating assembler) • 가변 분할 다중 프로그래밍 (variable partition multiprogramming system) • 가상 메모리 (virtual memory system) • 페이징 (paging) • 세그먼트 (segment, region, vm_area_struct) • 페이징과 세그먼트 혼용 (paging/segment)
task Kernel 메모리 관리 기법의 발전 (2/8) • 단일 사용자 전용 시스템 (single programming system) main memory protection register • 태스크가 메모리보다 클 경우에는 ? overlay 이용
task 4 task 1 Kernel task 2 task 3 메모리 관리 기법의 발전 (3/8) • Multiprogramming system • 고정 분할 다중 프로그래밍: 절대 번역 • internal fragmentation 발생
task 4 task 1 task 2 Kernel task 3 메모리 관리 기법의 발전 (4/8) • Multiprogramming system • 고정 분할 다중 프로그래밍: 재배치 (relocation) 가능
task 1 task 1 task 2 task 2 Kernel task 4 task 4 task 3 task 3 메모리 관리 기법의 발전 (5/8) • Multiprogramming system • 가변 분할 다중 프로그래밍 • 고정 분할에 비해 효과적으로 메모리 사용 • no free lunch: coalescing, compaction 필요
40KB 30KB task 3 task 4 task 7 15KB Kernel task 2 task 1 task 5 task 6 200KB 메모리 관리 기법의 발전 (6/8) • Multiprogramming system • 가변 분할 다중 프로그래밍 • 시나리오 • 전체 메모리는 500KB, 커널이 60KB 사용 • task 1 생성. 50KB 할당. • task 2 생성. 40KB 할당. • task 3 생성. 25KB 할당. • task 4 생성. 30KB 할당. • task 5 생성. 50KB 할당. • task 6 생성. 15KB 할당. • task 7 생성. 30KB 할당. • task 2 종료 • task 4 종료. • task 6 종료 • 이때 task 8이 생성되면 어디에? (크기는 25KB로 가정) first fit, best fit, worst fit방법 존재
task 3 task 7 Kernel task 8 task 1 task 5 메모리 관리 기법의 발전 (7/8) • Multiprogramming system • 가변 분할 다중 프로그래밍 • 이전 슬라이드 시나리오에서 task 8을 first fit으로 할당하였다고 가정하면 다음 그림과 같이 됨 • 이때 task 3이 종료하면 coalescing • 사용 가능 공간이 모여 있는 것이 성능상에 유리 주기적인 compaction 필요
4GB 4GB data stack data heap stack 3GB 3GB task 2 task 1 heap text 커널 커널 text 0 0 메모리 관리 기법의 발전 (8/8) • 가상 메모리 (Virtual memory) • 프로그램이 참조하는 메모리와 물리적인 메모리를 구분 • 가상 주소(virtual address), 물리 주소(physical address) task 2 task 1 physical memory virtual memory virtual memory
가상 메모리 (1/8) • 가상 메모리 (Virtual memory) • 각 태스크가 참조하는 논리적인 메모리 (태스크 마다 존재) • 32bit computer의 경우 가상 메모리 크기는 4GB • 말 그대로 가상임 (실제 메모리가 아님) • 가상 주소를 갖는다 • 물리 메모리 (Physical address) • 실제 존재하는 main memory • 각 태스크의 가상 메모리 일부(region)가 존재한다. • 가상 메모리의 일부(region)가 • 고정된 크기이면 • 가변적인 크기이면 페이지 기반 가상 메모리 시스템 세그먼트 기반 가상 메모리 시스템
… physical memory 가상 메모리 (2/8) • 페이지 시스템 : 물리 메모리 구조 • 물리 메모리는 고정된 크기의 기본 단위로 구분된다. • 기본 단위를 페이지 프레임(page frame)이라고 함. 보통 4KB • 물리 메모리의 기본 단위를 page frame, 가상 메모리의 기본 단위를 page라고 한다!!
Disk data … stack text inode 커널 physical memory virtual memory 가상 메모리 (3/8) • 페이지 시스템 : 태스크 로딩 • test.exe라는 프로그램을 수행 시킨다고 가정 (ELF format) • 이 응용의 text는 12KB, data는 8KB, 초기 stack은 4KB로 가정 • 이 응용은 malloc을 사용하지 않음 test.exe pf5 t2 t2 t1 d1 t3 pf3 t1 d2 pf2 d1 • test.exe가 수행 되려면 디스크에서 메모리로 이동되어야 함
page page frame t1 pf3 t2 pf5 t3 - d1 pf2 d2 - … pf5 t2 s1 pf6 pf3 t1 pf2 d1 physical memory 가상 메모리 (4/8) • 페이지 시스템 : 주소 변환 • 디스크 내용을 물리 메모리에 로딩(loading) 하면서 위치 정보 기록 pf6 s1 Page table • 태스크 자료 구조 (task struct)에서 page table을 관리: 메모리 문맥 • 위의 구조에서 프로그램이 가상 주소 1000번지에 접근하면 메모리 어디에 접근하는가? • 가상 주소 5000번지에 접근하면? 또한 가상 주소 9000에 접근하면?
task struct Disk t1 pf3 t2 pf5 t3 - d1 pf2 d2 - … pf6 s1 pf5 t2 t2 s1 pf6 t1 d1 inode t3 pf3 t1 Page table d2 pf2 d1 physical memory 가상 메모리 (5/8) • 페이지 시스템 : 페이지 부재 결함 • 페이지 프레임에 존재하지 않는 페이지를 접근할 때 pf4 pf4 t3 test.exe
new task new task2 … page page page frame page frame t1 pf3 t2 pf5 … t1 pf2 t2 pf4 … Page table Page table physical memory 가상 메모리 (6/8) • 결국 태스크가 생성되면
가상 메모리 (7/8) • 가상 메모리 장단점 • 장점 • 단점은? (no free lunch) • 태스크에게 물리적 메모리 이상의 공간 제공 (32bit CPU의 경우 4G) • 요구 페이징 (demand paging) 지원 • 메모리 배치 정책이 불필요 • 태스크간 메모리 공간 보호 • 태스크간 페이지 공유 가능 (효율적인 공유 메모리 지원) • 주소 변환 (address translation) 과정 필요 TLB (Translation Lookahead Buffer) 이용 HAT (Hardware Address Translation) 이용
가상 메모리 (8/8) • 가상 메모리의 그 외 이슈 • 세그먼트 기반 가상 메모리 • 고정된 크기의 페이지 대신 가변 크기의 세그먼트 사용 • 주소 변환: 세그먼트 테이블 • 최근 대부분의 OS는 세그먼트와 페이지 기법을 함께 사용. 접근 제어나 공유에는 세그먼트를 사용하고, 주소 변환에는 페이지를 사용. • 페이지 교체 • 물리 메모리의 공간이 full 되었을 때 어떤 페이지를 메모리에서 쫓아낼 것인가? • locality 이용 • FIFO, LRU, LFU, MRU, Working Set, clock algorithm 등의 방법 존재 • thrashing을 방지해야 함.
이 장의 결론 • 3가지 메모리 관리 정책 이해 • 메모리 관리 기법 발전 과정 이해 • 가상 메모리를 이해한다. • 페이지 기법 이해 • 페이지 부재 결함 처리 방법 이해 • 가상 메모리의 장단점 이해