1 / 62

Chapter 7. 메모리 관리

Chapter 7. 메모리 관리. Kiho Hong (swear013@google.com). 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.

danno
Download Presentation

Chapter 7. 메모리 관리

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Chapter 7. 메모리 관리 Kiho Hong (swear013@google.com)

  2. Overview • Basic Concept • Memory Manager for Windows • System Memory Pools • Virtual Address Layouts • Section Object • Working Set

  3. Basic Concept

  4. AC MQ Arithmetic-Logic Circuits MBR IBR PC IR Control Cricuits MAR ISA Architecture • ISA (Instruction Set Architecture) I/OEquip. data ALU Main Memory address Program Control Unit

  5. Real Mode Address Memory 8bit • 8086 Memory Architecture • 16bit Data bus • 20bit Address bus Address Selector CPU 20bit addr bus 16bit data bus • 80286 Memory Architecture • 8086에 비해 더 빠른 속도 • 24bit Address bus

  6. Protect Mode Address • 80286 • Protect Mode 지원 • Multi-tasking 환경 • Segment Selector 를 통한 Virtual Address 지원 • 80386 • 진정한 32bit OS • 32 bit Address/data bus • 32 bit register • MMU (Memory Management Unit) 추가

  7. Virtual Address • 여러 개의 프로그램이 동시에 실행되는 Multi-Tasking 환경에서는 현재 실행중인 각각의 응용 프로그램 사이의 간섭이 없어야 한다. • 그러나 물리적인 메모리는 주소값이 정해져 있으며 각각의 응용 프로그램은 이를 할당받아 사용해야 한다. • 따라서 중간에 논리적 주소 개념을 도입하여 하나의 응용프로그램이 선형적인 메모리 주소를 사용하는 것처럼 제공하고 이를 변역하여 실제 물리 메모리에 매핑 해주는 기능을 서비스로 제공함.-> Virtual Address

  8. Virtual Address Impl. : Paging EX) • Page Frame 0K Physical Memory 32K 32K Disk 64K 만약 31K-33K사이의 데이터를 빈번히 검색해야 한다면?? Program 4K 8K Physical Memory Disk Program

  9. Virtual Address Impl. : Paging (cont’d) Process A • 가상주소를 실제 주소에 매핑하기 위해 매핑 테이블이 반드시 필요하게 된다. • 이를 “페이지 테이블” 이라고 함 • 따라서 실행중인 응용 프로그램은 각각의 페이지 테이블을 가지고 있다. 0K 0K A:0K -> 0K A:8K -> 4K 20K 0K 0K 20K 32K Process B Physical Memory 20K Process C

  10. Virtual Address Impl. : Paging (cont’d) Process A 사용중인 영역 Physical Memory 페이지 테이블 접근하려는 영역 0x00112233 ‘A’ ‘A’ Page Table 한 프로세스가 최대 4G의 메모리 사용 가능할 때 페이지 테이블은 얼마의 크기를 가져야 하나?

  11. Virtual Address Impl. : Paging (cont’d) • Page Table Physical Memory 0 32 12 0 Page Frame 0 00000000 offset 4096 Virtual Address offset . 8192 Page Frame # 4byte Frame number 4G (총1M개) 이와 같은 구조인 경우에 만약 프로그램의 가상 메모리 크기가 4G라고 한다면 필요한 Page table의 크기는 ? 4M byte Page Table

  12. Virtual Address Impl. : Paging (cont’d) • Page Table로 인해 발생되는 낭비를 줄이기 위해 제안된 방법 Virtual Address Page Table # offset 10 bit (page directoy index) 10 bit (page table index) 12 bit (offset in page) CR3 4Kb page offset Page Directory Page Table Dynamic Loading by MMU

  13. Virtual Address Impl. : Segmentation • 서로 크기가 달라도 상관없는 블록 단위 (세그먼트)로 프로그램을 쪼개어 메모리에 할당하는 기법 Segment A Main program (segment C) Stack (segment A) Segment B Symbol table (segment B) Segment C

  14. Intel Microprocessor Memory Model Selector(Reg.) Offset Segment Descriptor + DIR Page Offset CR3 4Kb page offset Page Directory Page Table

  15. Memory Manager for Windows

  16. Memory Manager • 메모리 관리자는 Windows executive의 일부로 Ntoskrnl.exe 파일에 들어있다. HAL에는 메모리 관리자의 구성 요소가 없다. • 메모리 관리자의 기본 작업 • 매핑 • 프로세스의 가장 주소를 읽어들여 실 주소로 변환 • 페이징 • 스레드가 시스템 코드가 사용 가능한 메모리를 초과하면 디스크를 이용하여 초과된 내용을 디스크에 저장하여 메모리를 확보, 사용할 수 있도록 하는 기능

  17. Memory Manager Components • Working set Manager • Process/Stack Swapper • Modified Page Writer • Mapped Page Writer • Dereference Segment Thread • Zero Page Thread

  18. EXPERIMENT : Memory Information

  19. EXPERIMENT : Memory Information

  20. Services the Memory Manager • 메모리 관리자의 서비스 • 가상 메모리를 할당/해제 • 프로세간의 메모리 공유 • 파일을 메모리에 매핑 • 가상 페이지를 디스크에 기록 • 가상 페이지 정보 제공 • 가상 페이지 보안 설정 변경 • 가상 페이지를 메모리에 고정 • 이들 서비스의 대부분은 Win-API 로 제공됨 • Page granularity virtual memory functions • Memory-mapped file functions • Heap functions

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

  22. Reserving & Committing Page • 페이지들은 사용자가 직접 해제,예약,할당이 가능하다. • 응용 프로그램은 우선 주소 공간을 예약한 뒤 그 주소 공간에 페이지들을 커밋한다. • 관련 함수 • VirtualAlloc • VirtualAllocEx • VirtualFree • VritualFreeEx • 메모리 예약은 상대적으로 빠르고 비용이 적게 드는데 이유는 실제 할당된 페이지 메모리를 사용하는 것이 아니기 때문이다. • 예약의 이점은 잠재적으로 인접 메모리를 사용할 수 있기 때문에 속도의 향상을 가져올 수 있다. (예로 사용자 모드의 스레드 프로그램 스택을 들 수 있다.)

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

  24. EXPERIMENT : Memory Mapped Files • MS Presentation에서 파일 Open시 실제 메모리 매핑을 확인 • 07_01

  25. Protecting Memory • Windows는 사용자 프로세스가 부주의또는 고의로 다른 프로세스나 운영체제의 주소 공간을 훼손할 수 없도록 메모리 보호를 제공 • 시스템 전체의 모든 데이터 구조체들과 커널 모드 시스템 구성 요소들에 의해 사용된 메모리 풀은 커널 모드에서만 접근 가능 • 각 프로세스는 다른 프로세스에 속한 스레드가 액세스하지 못하게 보호된 독립 주소 공간을 가진다.(예외 존재) • 가상 주소를 실제 주소로 변환하는 과정에서 제공되는 묵시적인 보호에 더하여 하드웨어에서 제공하는 명시적인 보호수단을 제공 • 공유 메모리 섹션 개체들은 윈도우 표준 엑세스 콘트롤(ACL)을 가지고 있어서 프로세스들이 섹션 개체들을 사용하고자 할 때 적적한 권한을 가지고 있는지 확인한다..

  26. COW (Copy-On-Write) • Lazy evaluation 기법 사용 • Debugger break-point 설정시 유용함 • POSIX 서브 시스템은 fork 구현에 이를 사용

  27. Heap Manager • VirtualAlloc등과 같은 페이지 최소 단위 함수들은 최소 할당단위가 64KB이다. • 이는 할당의 최소 크기가 64KB라는 의미가 아니라 64KB 단위로 메모리에 위치한다는 뜻이다. • 그러나 Page는 기본 단위가 4K로 되어 있다. • 게다가 사용자는 보통 이보다 훨씬 작은 메모리 블록을 요청한다. • Ex) int* pBuf = new int[100]; • 이러한 상황에 대한 효율적 처리를 위해 Windows에서는 Heap 관리자를 제공한다. • Windows API 형태로 Heap을 관리할 수 있도록 한다. • HeapCreate, HeapDestroy • HeapAlloc, HeapFree • HeapLock, HeapUnlock • HeapWalk

  28. Heap Manager (Cont’d) • Heap의 형식 • 각 프로세스는 최소한 하나의 Heap을 가진다. (기본 프로세스 힙)이 정보는 PEB에 포함된다. • 프로세스가 살아있는 동안 결코 삭제되지 않으며 기본 크기는 1MB이다. 링커 플래그를 이용하여 변경 가능하다. • 이 크기는 초기 예약치이며 추가 요청시 확장된다.

  29. Heap Manager (Cont’d) • Free List • 128 free chunks를 가진 이중 연결 리스트 (8bytes ~ 1024 bytes) • Chunk size 는 table row index * 8 bytes • Entry [0] is a 1KB <= size < 512KB를 가지는 다양한 크기의 Free list가 크기가 작은 순으로 정렬되어 있다. 1400 2000 2000 2408 16 16 48 48

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

  31. AWE (Address Windowing Extensions) • 32bit 버전의 Windows가 128GB까지 메모리를 지원 가능하도록 하는 기능 • 논리적 가상 주소 공간은 기본적으로 2G이고 Boot.ini를 변경하는 경우 3G까지 가능하지만 이 이상의 메모리를 요구하는 경우 AWE를 사용 • 작업 단계 • 사용될 실제 메모리 할당 • 실제 메모리를 매핑할 “창”처럼 동작하는 가상 주소 공간 영역 생성 • 실제 메모리를 여기에 매핑

  32. System Memory Pools

  33. System Memory Pools • 시스템 초기화시 메모리 관리자는 커널 모드 구성 요소들이 시스템 메모리를 할당하기 위해 다음의 동적 메모리 풀을 생성 • 비페이징 풀 : 언제나 메모리에 상주. 페이지 폴트를 내지않고 항상 액세스 할 수 있는 가상 주소 영역 • 페이징 풀 : 실제 메모리에서 제거되어 페이지 아웃될 수 있는 시스템 공간의 가상 영역 • 이 두 풀(Pool)은 시스템에서 실제 메모리의 양을 기반으로 초기 크기로 시작하여 필요한 경우 시스템 부팅 시에 계산된 실제 메모리 양을 기반으로 최대 크기까지 점점 증가한다. (기존 버전)

  34. EXPERIMENT : Max Pool Size • 07_02

  35. Virtual Address Layouts

  36. Virtual Address Layouts (x86) X64 및 IA64 Virtual Address Layouts은 교재p570참고

  37. x86 Virtual Address Translation • PTE (Page Table Entry) • 가상 주소가 실제로 매핑되어 있는 주소

  38. x86 Virtual Address Translation (Cont’d) • 가상 주소의 변환 (교재 p574 참고)

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

  40. EXPERIMENT : Examining the Page Dir • 커널 디버거에서 프로세스의 페이지 디렉토리의 실제 주소를 확인한다. • 07_03

  41. Page Directory (Cont’d)

  42. Page Tables and Page Entries • 20bit의 PFN • 12비트의 메타 정보 필드 • Accessed, Cache disabled, Dirty, Global 등등 교재 p579 표7-11참고

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

  44. Pysical Address Extension (PAE) • X86 프로세스에서 64G, x64 프로세스에서 1024G까지 메모리 사용 지원 (x64는 실제 128G)

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

  46. Invalid PTEs • Page File • 요청된 페이지가 파일에 상주. • Demand zero • 요구된 페이지가 반드시 제로 페이지를 만족해야 한다. • Zero Page List에서 페이지를 읽어오며 만약 페이지가 없는 경우에는 Free Page List 에서 페이지를 읽어와 0으로 초기화하며 반환한다. • Transition • 요청된 페이지가 메모리 내에서 Standby/Modified Page List에 존재한다. • Unknown • PTE는 제로이거나 페이지 테이블이 아직 존재하지 않는다. 이 경우에는 가상 주소 서술자(VAD)를 검사하여 Commit 여부를 확인한다.

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

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

  49. Section Object, Working Sets

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

More Related