62
Chapter 7. 메메메 메메 Kiho Hong ([email protected])

Chapter 7. 메모리 관리

  • Upload
    danno

  • View
    128

  • Download
    16

Embed Size (px)

DESCRIPTION

Chapter 7. 메모리 관리. Kiho Hong ([email protected]). Overview. Basic Concept Memory Manager for Windows System Memory Pools Virtual Address Layouts Section Object Working Set. Basic Concept. AC. MQ. Arithmetic-Logic Circuits. MBR. IBR. PC. IR. Control Cricuits. MAR. - PowerPoint PPT Presentation

Citation preview

Page 1: Chapter 7.  메모리 관리

Chapter 7. 메모리 관리Chapter 7. 메모리 관리

Kiho Hong([email protected])

Page 2: Chapter 7.  메모리 관리

OverviewOverview

Basic ConceptMemory Manager for WindowsSystem Memory PoolsVirtual Address LayoutsSection ObjectWorking Set

Page 3: Chapter 7.  메모리 관리

Basic ConceptBasic Concept

Page 4: Chapter 7.  메모리 관리

ISA ArchitectureISA Architecture

ISA (Instruction Set Architecture)

MainMemory

I/OEquip.

MBR

Arithmetic-LogicCircuits

AC MQ

MAR

IBR

IR

PC

ControlCricuits

Program Control Unit

ALUdata

address

Page 5: Chapter 7.  메모리 관리

Real Mode AddressReal Mode Address

8086 Memory Architecture16bit Data bus20bit Address bus

AddressSelector

CPU

20bit addr bus

Memory

8bit

16bit data bus

80286 Memory Architecture8086 에 비해 더 빠른 속도24bit Address bus

Page 6: Chapter 7.  메모리 관리

Protect Mode AddressProtect Mode Address

80286Protect Mode 지원Multi-tasking 환경Segment Selector 를 통한 Virtual Address 지원

80386진정한 32bit OS32 bit Address/data bus32 bit registerMMU (Memory Management Unit) 추가

Page 7: Chapter 7.  메모리 관리

Virtual AddressVirtual Address

여러 개의 프로그램이 동시에 실행되는 Multi-Tasking 환경에서는 현재 실행중인 각각의 응용 프로그램 사이의 간섭이 없어야 한다 .

그러나 물리적인 메모리는 주소값이 정해져 있으며 각각의 응용 프로그램은 이를 할당받아 사용해야 한다 .

따라서 중간에 논리적 주소 개념을 도입하여 하나의 응용프로그램이 선형적인 메모리 주소를 사용하는 것처럼 제공하고 이를 변역하여 실제 물리 메모리에 매핑 해주는 기능을 서비스로 제공함 .-> Virtual Address

Page 8: Chapter 7.  메모리 관리

Virtual Address Impl. : PagingVirtual Address Impl. : Paging

Page Frame

DiskProgram

Physical Memory

32K

64K 만약 31K-33K 사이의 데이터를빈번히 검색해야 한다면 ??

4K

8K

Program

Physical Memory

Disk

EX) 0K

32K

Page 9: Chapter 7.  메모리 관리

Virtual Address Impl. : Paging (cont’d)Virtual Address Impl. : Paging (cont’d)

가상주소를 실제 주소에 매핑하기 위해 매핑 테이블이 반드시 필요하게 된다 .이를 “ 페이지 테이블” 이라고 함따라서 실행중인 응용 프로그램은 각각의 페이지 테이블을 가지고 있다 .

Physical Memory

Process A

Process B

Process C

0K

0K

0K

20K

20K

20K

0K

32K

A:0K -> 0K

A:8K -> 4K

Page 10: Chapter 7.  메모리 관리

Virtual Address Impl. : Paging (cont’d)Virtual Address Impl. : Paging (cont’d)

Process A

Page Table

‘A’0x00112233

사용중인 영역페이지 테이블

접근하려는 영역

‘A’

Physical Memory

한 프로세스가 최대 4G 의 메모리 사용 가능할 때페이지 테이블은 얼마의 크기를 가져야 하나 ?

Page 11: Chapter 7.  메모리 관리

Virtual Address Impl. : Paging (cont’d)Virtual Address Impl. : Paging (cont’d)

Page Table

00000000 offset12 032

Page Frame 0

.

Page Frame #

Virtual Address

Page Table

Frame number

0

4096

8192

이와 같은 구조인 경우에 만약 프로그램의가상 메모리 크기가 4G 라고 한다면 필요한Page table 의 크기는 ? 4M byte

4byte

4G ( 총 1M 개 )

offset

Physical Memory

Page 12: Chapter 7.  메모리 관리

Virtual Address Impl. : Paging (cont’d)Virtual Address Impl. : Paging (cont’d)

Page Table 로 인해 발생되는 낭비를 줄이기 위해 제안된 방법

Page Table # offset

10 bit(page directoy index)

Virtual Address

10 bit(page table index)

12 bit(offset in page)

4Kbpage

offsetPage Directory

Page Table

CR3

Dynamic Loading by MMU

Page 13: Chapter 7.  메모리 관리

Virtual Address Impl. : SegmentationVirtual Address Impl. : Segmentation

서로 크기가 달라도 상관없는 블록 단위 ( 세그먼트 ) 로 프로그램을 쪼개어 메모리에 할당하는 기법

Segment A

Segment B

Segment C

Stack(segment A)

Symbol table(segment B)

Main program(segment C)

base size Attr.

1000 1400 r/w

2400 1000 r

4000 200 r

Page 14: Chapter 7.  메모리 관리

Intel Microprocessor Memory ModelIntel Microprocessor Memory Model

DIR Page Offset

4Kbpage

offsetPage Directory

CR3

Page Table

Selector(Reg.) Offset

SegmentDescriptor +

Page 15: Chapter 7.  메모리 관리

Memory Manager for WindowsMemory Manager for Windows

Page 16: Chapter 7.  메모리 관리

Memory ManagerMemory Manager

메모리 관리자는 Windows executive 의 일부로 Ntoskrnl.exe 파일에 들어있다 . HAL 에는 메모리 관리자의 구성 요소가 없다 .

메모리 관리자의 기본 작업매핑

프로세스의 가장 주소를 읽어들여 실 주소로 변환페이징

스레드가 시스템 코드가 사용 가능한 메모리를 초과하면 디스크를 이용하여 초과된 내용을 디스크에 저장하여 메모리를 확보 , 사용할 수 있도록 하는 기능

Page 17: Chapter 7.  메모리 관리

Memory Manager ComponentsMemory Manager Components

Working set ManagerProcess/Stack SwapperModified Page WriterMapped Page WriterDereference Segment ThreadZero Page Thread

Page 18: Chapter 7.  메모리 관리

EXPERIMENT : Memory InformationEXPERIMENT : Memory Information

Page 19: Chapter 7.  메모리 관리

EXPERIMENT : Memory InformationEXPERIMENT : Memory Information

Page 20: Chapter 7.  메모리 관리

Services the Memory ManagerServices the Memory Manager

메모리 관리자의 서비스가상 메모리를 할당 /해제프로세간의 메모리 공유파일을 메모리에 매핑가상 페이지를 디스크에 기록가상 페이지 정보 제공가상 페이지 보안 설정 변경가상 페이지를 메모리에 고정

이들 서비스의 대부분은 Win-API 로 제공됨Page granularity virtual memory functionsMemory-mapped file functionsHeap functions

Page 21: Chapter 7.  메모리 관리

Large & Small PageLarge & Small Page

페이지 테이블에 접근하기 위해서는 많은 시간이 소요되고 이를 빠르게 처리하기 위해 TLB 를 사용(Translation Look-Aside Buffer)이는 하드웨어 캐쉬에 저장된다 .페이지의 크기가 작으면 요구되는 TLB 의 크기가 많아지므로 시스템의 성능 저하가 예상된다 .

Page 22: Chapter 7.  메모리 관리

Reserving & Committing PageReserving & Committing Page

페이지들은 사용자가 직접 해제 , 예약 , 할당이 가능하다 .응용 프로그램은 우선 주소 공간을 예약한 뒤 그 주소 공간에 페이지들을 커밋한다 .관련 함수

VirtualAllocVirtualAllocExVirtualFreeVritualFreeEx

메모리 예약은 상대적으로 빠르고 비용이 적게 드는데 이유는 실제 할당된 페이지 메모리를 사용하는 것이 아니기 때문이다 .예약의 이점은 잠재적으로 인접 메모리를 사용할 수 있기 때문에 속도의 향상을 가져올 수 있다 . ( 예로 사용자 모드의 스레드 프로그램 스택을 들 수 있다 .)

Page 23: Chapter 7.  메모리 관리

Shared Memory and Mapped FilesShared Memory and Mapped Files

기존의 시스템에서는 프로세스간 메모리 공유가 매우 간단하였으나 가상 주소 시스템에서는 어려움이 따름이를 위해서 공유 메모리 기능이 요구됨개별 데이터를 저장하기 위해서는 개별 메모리 영역이 요구되나 수정되지 않는 데이터들은 손상 없이 공유될 수 있다 . 효율성을 놓이기 위해 COW 기능이 제공된다 .

Page 24: Chapter 7.  메모리 관리

EXPERIMENT : Memory Mapped FilesEXPERIMENT : Memory Mapped Files

MS Presentation 에서 파일 Open 시 실제 메모리 매핑을 확인07_01

Page 25: Chapter 7.  메모리 관리

Protecting MemoryProtecting Memory

Windows 는 사용자 프로세스가 부주의 또는 고의로 다른 프로세스나 운영체제의 주소 공간을 훼손할 수 없도록 메모리 보호를 제공

시스템 전체의 모든 데이터 구조체들과 커널 모드 시스템 구성 요소들에 의해 사용된 메모리 풀은 커널 모드에서만 접근 가능

각 프로세스는 다른 프로세스에 속한 스레드가 액세스하지 못하게 보호된 독립 주소 공간을 가진다 .( 예외 존재 )

가상 주소를 실제 주소로 변환하는 과정에서 제공되는 묵시적인 보호에 더하여 하드웨어에서 제공하는 명시적인 보호수단을 제공

공유 메모리 섹션 개체들은 윈도우 표준 엑세스 콘트롤 (ACL) 을 가지고 있어서 프로세스들이 섹션 개체들을 사용하고자 할 때 적적한 권한을 가지고 있는지 확인한다 ..

Page 26: Chapter 7.  메모리 관리

COW (Copy-On-Write)COW (Copy-On-Write)

Lazy evaluation 기법 사용Debugger break-point 설정시 유용함POSIX 서브 시스템은 fork 구현에 이를 사용

Page 27: Chapter 7.  메모리 관리

Heap ManagerHeap Manager

VirtualAlloc 등과 같은 페이지 최소 단위 함수들은 최소 할당단위가 64KB 이다 .

이는 할당의 최소 크기가 64KB 라는 의미가 아니라 64KB 단위로 메모리에 위치한다는 뜻이다 .

그러나 Page 는 기본 단위가 4K 로 되어 있다 .게다가 사용자는 보통 이보다 훨씬 작은 메모리 블록을 요청한다 .

Ex) int* pBuf = new int[100];

이러한 상황에 대한 효율적 처리를 위해 Windows 에서는 Heap 관리자를 제공한다 .Windows API 형태로 Heap 을 관리할 수 있도록 한다 .

HeapCreate, HeapDestroyHeapAlloc, HeapFreeHeapLock, HeapUnlockHeapWalk

Page 28: Chapter 7.  메모리 관리

Heap Manager (Cont’d)Heap Manager (Cont’d)

Heap 의 형식각 프로세스는 최소한 하나의 Heap 을 가진다 . ( 기본 프로세스 힙 )이 정보는 PEB 에 포함된다 .

프로세스가 살아있는 동안 결코 삭제되지 않으며 기본 크기는 1MB 이다 . 링커 플래그를 이용하여 변경 가능하다 .

이 크기는 초기 예약치이며 추가 요청시 확장된다 .

Page 29: Chapter 7.  메모리 관리

Heap Manager (Cont’d)Heap Manager (Cont’d)

Free List128 free chunks 를 가진 이중 연결 리스트 (8bytes ~ 1024 bytes)

Chunk size 는 table row index * 8 bytesEntry [0] is a 1KB <= size < 512KB 를 가지는 다양한 크기의 Free list 가 크기가 작은 순으로 정렬되어 있다 .

0

1

2

3

4

5

6

1400 2000 2000 2408

16 16

48 48

Page 30: Chapter 7.  메모리 관리

Heap Manager (Look-Aside Lists)Heap Manager (Look-Aside Lists)

빠른 메모리 할당 및 삭제를 위한 리스트여러 개의 스레드들이 전역 힙 잠금을 가하지 않고도 쉽게 메모리를 할당받을 수 있다 .고정된 크기의 메모리를 관리한다 .힙 당 128 개의 참조 목록이 있으며 이것은 32bit 플랫폼에서는 1KB까지 , 64bit 플랫폼에서는 2KB까지 할당을 다룬다 .

0

1

2

3

4

5

6

16

48 48

Page 31: Chapter 7.  메모리 관리

AWE (Address Windowing Extensions)AWE (Address Windowing Extensions)32bit 버전의 Windows 가 128GB까지 메모리를 지원 가능하도록 하는 기능논리적 가상 주소 공간은 기본적으로 2G 이고 Boot.ini 를 변경하는 경우 3G까지 가능하지만 이 이상의 메모리를 요구하는 경우 AWE 를 사용작업 단계

사용될 실제 메모리 할당실제 메모리를 매핑할 “창”처럼 동작하는 가상 주소 공간 영역 생성실제 메모리를 여기에 매핑

Page 32: Chapter 7.  메모리 관리

System Memory PoolsSystem Memory Pools

Page 33: Chapter 7.  메모리 관리

System Memory PoolsSystem Memory Pools

시스템 초기화시 메모리 관리자는 커널 모드 구성 요소들이 시스템 메모리를 할당하기 위해 다음의 동적 메모리 풀을 생성

비페이징 풀 : 언제나 메모리에 상주 . 페이지 폴트를 내지않고 항상 액세스 할 수 있는 가상 주소 영역페이징 풀 : 실제 메모리에서 제거되어 페이지 아웃될 수 있는 시스템 공간의 가상 영역

이 두 풀 (Pool) 은 시스템에서 실제 메모리의 양을 기반으로 초기 크기로 시작하여 필요한 경우 시스템 부팅 시에 계산된 실제 메모리 양을 기반으로 최대 크기까지 점점 증가한다 . ( 기존 버전 )

Page 34: Chapter 7.  메모리 관리

EXPERIMENT : Max Pool SizeEXPERIMENT : Max Pool Size

07_02

Page 35: Chapter 7.  메모리 관리

Virtual Address LayoutsVirtual Address Layouts

Page 36: Chapter 7.  메모리 관리

Virtual Address Layouts (x86)Virtual Address Layouts (x86)

X64 및 IA64 Virtual Address Layouts 은 교재p570참고

Page 37: Chapter 7.  메모리 관리

x86 Virtual Address Translationx86 Virtual Address Translation

PTE (Page Table Entry)

가상 주소가 실제로 매핑되어 있는 주소

Page 38: Chapter 7.  메모리 관리

x86 Virtual Address Translation (Cont’d)x86 Virtual Address Translation (Cont’d)

가상 주소의 변환 ( 교재 p574 참고 )

Page 39: Chapter 7.  메모리 관리

Page DirectoryPage Directory

각 프로세스는 단일 페이지 디렉터리를 가짐실제 메모리 주소는 KPROCESS 에 저장되지만 프로세스에는 가상 주소로 매핑된다 . (C030000)x86 에서는 CR3 레지스터에 페이지 디렉터리의 실제 주소를 프로세스 내 스레드의 컨텍스트 전환시마다 로드한다 .페이지 디렉토리 항목 (PDE) 는 4byte 로 이루어져 있는데 20bit 는 PFN 값을 , 그 외는 메타 정보 등을 가지고 있다 .

Page 40: Chapter 7.  메모리 관리

EXPERIMENT : Examining the Page DirEXPERIMENT : Examining the Page Dir

커널 디버거에서 프로세스의 페이지 디렉토리의 실제 주소를 확인한다 .07_03

Page 41: Chapter 7.  메모리 관리

Page Directory (Cont’d)Page Directory (Cont’d)

Page 42: Chapter 7.  메모리 관리

Page Tables and Page EntriesPage Tables and Page Entries

20bit 의 PFN12 비트의 메타 정보 필드

Accessed, Cache disabled, Dirty, Global 등등

교재 p579표 7-11참고

Page 43: Chapter 7.  메모리 관리

Translation Look-Asied Buffer (TLB)Translation Look-Asied Buffer (TLB)

페이지 테이블은 효율적인 주소 공간 정보를 제공하지만 페이지 자체에 접근하는 시간으로 인해 속도 문제가 있음 .시스템 성능 향상을 위해 대부분의 CPU 는 특정 페이지를 캐쉬함 . (MMU 기능 제공 )

Page 44: Chapter 7.  메모리 관리

Pysical Address Extension (PAE)Pysical Address Extension (PAE)

X86 프로세스에서 64G, x64 프로세스에서 1024G까지 메모리 사용 지원 (x64 는 실제 128G)

Page 45: Chapter 7.  메모리 관리

Page FaultPage Fault

PTE 에는 해당 Page 가 유효한지를 체크하는 필드가 포함되어 있음 .만약 유효 비트가 꺼져 있다면 이것은 현재 프로세스가 대상 Page 를 어떤 이유로 해서 접근이 불가능한 상태임을 나타낸다 .이를 페이지 폴트 (Page Fault) 라고 한다 .Fault 라는 의미 때문에 프로그램이 더 이상 구동되지 않는 상태라고 착각하기 쉬우나 그렇지 않다 .Access 오류의 원인은 교재 p589 에 서술

Page 46: Chapter 7.  메모리 관리

Invalid PTEsInvalid PTEs

Page File요청된 페이지가 파일에 상주 .

Demand zero요구된 페이지가 반드시 제로 페이지를 만족해야 한다 .Zero Page List 에서 페이지를 읽어오며 만약 페이지가 없는 경우에는 Free Page List 에서 페이지를 읽어와 0으로 초기화하며 반환한다 .

Transition요청된 페이지가 메모리 내에서 Standby/Modified Page List에 존재한다 .

UnknownPTE 는 제로이거나 페이지 테이블이 아직 존재하지 않는다 . 이 경우에는 가상 주소 서술자 (VAD) 를 검사하여 Commit 여부를 확인한다 .

Page 47: Chapter 7.  메모리 관리

ProtoType PTEsProtoType PTEs

두 프로세스 사이에 공유되는 페이지는 프로토 타입 PTE 에 매핑 된다 .섹션 개체 (Section Object) 가 생성될 때 함께 생성된다 .이는 페이지를 관리하기 위한 목적으로 이를 통해 페이지의 ref count 등을 추적한다 .

Map view 에서 ..

Page 48: Chapter 7.  메모리 관리

Virtual Address Descriptor (VAD)Virtual Address Descriptor (VAD)

VirtualAlloc 시 메모리를 바로 할당하는 것이 아니라 VAD 에 서술함 .이는 실제 메모리를 요구할 때 까지 대기하는 것임 .Lazy evaluation메모리 관리자가 관리하며 프로세스의 주소 공간의 상태를 기술하여 이진 트리로 구현 .

Page 49: Chapter 7.  메모리 관리

Section Object,Working Sets

Section Object,Working Sets

Page 50: Chapter 7.  메모리 관리

Section ObjectSection Object

파일 매핑용 섹션 개체둘 이상의 프로세스가 공유할 수 있는 메모리 블록을 표현섹션 개체는 페이지 파일 또는 디스크상의 다른 파일과 매핑된다 . 따라서 메모리 연산만으로 파일을 기술할 수 있다 . (mapped file I/O)

Page 51: Chapter 7.  메모리 관리
Page 52: Chapter 7.  메모리 관리

Working SetsWorking Sets

프로세스가 유지하는 실제 메모리 영역세 가지 종류의 Working set 이 존재

프로세스 Working set 은 단일 프로세스 내에서 스레드가 사용하는 프로세스 Working set시스템 Working set : 페이징 가능한 시스템 코드의 부분집합터미널 서비스가 활성화된 시스템에서 각 세션이 사용하는 세션 Working set

Demand Paging메모리 관리자는 메모리로 페이지를 로드하기 위해 클러스터링을 가지는 페이지 요구 알고리즘을 가진다 .몇 개의 가상 페이지를 묶어서 클러스터 단위로 읽어놓게 되면 디스크 읽기 횟수가 줄어든다 .

Page 53: Chapter 7.  메모리 관리

Logical PrefetcherLogical Prefetcher

프로그램의 초기 로드시 발생되는 Page fault 는 속도 저하의 원인이 된다 .이것은 대개 디스크 탐색 시간이 원인이 된다 .Windows XP 에서 소개된 프리패쳐는 부팅될 때나 Application 이 시작될 때 엑세스된 데이터와 코드를 감시하고 다음 번 부팅이나 프로그램 시작시 이 자료를 이용하여 속도를 향상한다 .별도의 프리패쳐 폴더에 파일 형태로 저장

Page 54: Chapter 7.  메모리 관리

Placement PolicyPlacement Policy

Thread 가 page fault 를 내면 메모리 관리자는 가상 페이지를 실제 메모리의 어느 위치에 넣을 것인지를 결정최상의 위치를 결정하기 위해 사용하는 일련의 규칙을 배치정책 (Placement policy) 라고 한다 .Page fault 발생시 실제 메모리가 모두 사용 중이면 새로운 Page 를 메모리에 올리기 위해 어느 페이지를 제거할 것인지를 결정페이지 교체 정책

LRU (Least recently used) : 가장 사용한 적이 없는 페이지 제거FIFO : 메모리에 올라온 순으로 가장 먼저 올라온 것을 제거

Page 55: Chapter 7.  메모리 관리

Working Set ManagementWorking Set Management

모든 프로세스는 최소 50 페이지의 기본 작업 세트와 345 페이지의 최대 작업 세트를 가진다 .SetProcessWorkingSetSize 함수로 변경 가능그러나 하드 작업 세트 한계 (Hard Working Set Limit : Win2003 에 추가 ) 를 사용할 수 없으면 메모리 관리자가 별도로 자신만의 작업을 수행함 . Page Fault 가 발생하면 프로세스의 Working Set limit 와 시스템의 여유 메모리를 검사하고 조건이 허용되면 메모리를 추가함 . 그러나 메모리가 부족하면 메모리 교체 정책 수행

Page 56: Chapter 7.  메모리 관리

Balance Set Manager and SwapperBalance Set Manager and Swapper

Working Set 의 확장과 정리는 균형 세트 관리자(balance set manager) 라고 하는 시스템 스레드에서 발생이는 메모리 관리자의 작업 세트 관리자를 호출하여 작업 세트의 분석과 조정 수행균형 세트 관리자의 이벤트 개체

초당 한번씩 주기적으로 동작하는 타이머가 신호를 발생작업세트가 조정되어야 한다고 판단되는 시점에 메모리 관리자가 신호

Page 57: Chapter 7.  메모리 관리

Page Frame Number DatabasePage Frame Number Database

Page 58: Chapter 7.  메모리 관리

Page Frame Number DatabasePage Frame Number DatabasePysical Memory

Page 59: Chapter 7.  메모리 관리

Page List Dynamics Page List Dynamics

Page 60: Chapter 7.  메모리 관리

PFN Data StructuresPFN Data Structures

PFN Database 항목이 고정크기를 가지고 있지만 페이지 상태에 따라 다른 의미를 가진다 .

Page 61: Chapter 7.  메모리 관리

ConclusionConclusion

Windows 메모리 관리자가 가상 메모리를 구현하고 있는 방법을 알아봄 .

메모리 관리자의 구현은 오래 걸리면서 불필요한 일들을 최대한 배제하기 위해 lazy evaluation 기법에 의존함 .

이외에도 메모리 관리자는 캐쉬 관리자와 밀접한 관계를 가짐 (Chapter 11)

Page 62: Chapter 7.  메모리 관리

참고 목록참고 목록

Operating System Concepts ISBN:0471417432

Windows 구조와 원리 , 그리고 CodesISBN:8979143966