본문 바로가기

IBM/AIX

AIX Virtual Memory Management

AIX Virtual Memory Management

Virtual Address Space
Virtual address space
프로세스가 참조하는 어드레스 범위이며, AIX에서는 16개의 Segment segment 256MB 구성된다. 따라서 최대 4GB virtual address space 가지고 있다. Kernel 경우 virtual address space 모두 사용할 있지만, Process 경우에는 제한된 공간만 참조할 있다.

Demand Paging
Data
참조되는 순간에만 실제 Page(Real Memory 최소 관린 단위) 복사되며, Mapping 사용자가 인식할 없는 순간에 수행된다
.
Data
:
    A page from the page space.
    A page from a file on disk.

AIX
에서는 kernel 또한 페이징을 사용하며, 페이징되지 않는 영역을 'pinned'라고 한다. 하지만, 대부분의 Kernel 영역은 페이징 영역을 사용하고 있다. Pager daemon 실제 Page(Real Memory 최소 관린 단위) pool 유지하기 위해, 사용 가능한 page 개수가 high-water mark 이하이면 low-water mark 도달할 까지 가장 오래된 pager 삭제하게 된다(LRU 알고리즘
).

Memory Management Definitions

  • Page - 고정된 Memory 최소단위(Size : 4096 bytes for AIX)
  • Paging Space - Inactive 상태인 메모리 페이지를 유지하기 위해 memory manager 의해 사용되는 disk 공간
  • Real Memory - 시스템 내부에 장착된 실제 메모리
  • Virtual Memory - system memory manager 의해 프로그램 프로세스에 주어진 메모리
  • Address Space - 메모리를 접근하는 프로그램에서 활용하는 address set

Virtual Memory


Virtual Memory
개념을 도입함으로써, 연속적인 address space 가지는 사용자 프로그램이 대용량 메모리를 사용할 있으며 시스템의 physical memory 크기보다 공간도 할당할 있다.

  • Virtual Memory Mapping H/W 의해 이루어지며, 보통 메모리와 paging space 펼쳐진다.
  • H/W & S/W 의해 관리되는 최소 단위는 1Page 이며, Page Fault 발생시 Virtual Memory Manager virtual memory address 사용하는 프로그램 프로세스에 page fault 발생한 내용을 보내기 위해 작업을 시작한다.

Hardware Address Translation

32bit virtual address

  • Segment register : 가장 단의 4 bit( segment ID 포함 )
  • Virtual page index : segment register이후의 16bit( segment page )
  • Byte offset : 마지막 12 bit( page offset )

2^4 = 16 ( 가장 단위 4bit 16개의 segment register 하나를 선택한다. )
2^28 = 256 MB(
segment 256 MB 구성
: virtual page index + byte offset )
2^12 = 4K(
page 단위는
4K )
16 segment * 256 MB/segment = 4 GB
2^32 = 4GB( 32 bit virtual address space )


    T=0 - Always 0 for memory space
    Ks - Supervisor-state protection key
    Kp - User-state protection key
    N - No-execute protection

64-bit Segment Table



Memory Segments

  1. 각각의 Segment page 단위로 분리된다.
    • Segment 프로세스간에 공유될 있다.
    • 추가의 virtual page Segment mapping 있다.
    • 이미 사용중인 segment 프로세스로 지정될 있고 분리될 있다.
    • 신규 segment 프로세스에 의해 할당되거나 제거된다.
       
  2. Virtual address segment register 구성된다.
  3. Segment type
    • Working: 프로그램 실행동안 stack/data 영역으로 사용되는 temporary memory
    • Persistent: Local file system 위해 file data 저장하는 memory
    • Client: NFS or CD-ROM 같이 client file system 위해 사용되는 memory
    • Log: Journalling 작업동안 file system 쓰고 읽는데 사용되는 memory
    • Mapping: Application 동일한 memory segment 여러 object 배치하도록 mmap() interface 지원하기 위해 사용

 

  1. Virtual Page 실제 memory page 또는 disk drive 같은 이차 저장매체와 연관되어 있다.
  2. Memory Segment 종류
    • Kernel
    • User Text
    • Shared Library Text
    • Shared Data
    • Process Private
    • Shared Library Data

Segment Register Map in 32-bit User Mode

Segment

-----------------------------------------------------

 0x0         Kernel Segment (only parts visible)

 0x1         User Text

 0x2         User Data, Initial User Thread Stack

 0x3         Available for User (shmat, mmap)

 0x4-0xb     Available for User (shmat, mmap)

 0xc         Available for User (shmat, mmap)

 0xd         System Shared Library Text Segment

 0xe         Available for User (shmat, mmap)

 0xf         Pre-Process Shared Library Data Segment

Large Address Space Model in 32-bit

AIX
에서는 user data 영역으로 256MB 이상을 지원하며, 경우 maxdata binder option 지정하여야 한다. 또한 Large user data 프로그램은 segment 3에서 malloc 수행하여, 최대 8개의 segments(1020*1024*256*8, 2GB) 사용할 있다. 하지만 경우에도 여전히 segment 1 user text User Stack segment 2 256MB 제한되며, segment 11 12 large address space model 의해 사용할 없다.

Large Address Model Compile Option

기본 option으로 Compile 하는 경우 하나의 Segment 가질 있는 256MB 이상을 참조할 없다. 그래서 Large Address 필요한 프로그램의 경우 아래와 같은 Option 주어야 가능하다.

cc sample.o -bmaxdata:0x80000000 ->
필요에 따라 segment 개수를 변경할 있으며, 최대 8개의 segment 지정할 있음.

'IBM > AIX' 카테고리의 다른 글

mpio_get_config  (0) 2011.10.10
바뀐LUN사이즈를VG에적용할때  (0) 2011.10.06
savevg  (0) 2011.10.04
log볼륨생성  (0) 2011.08.17
ulimt 값을 한꺼번에 unlimited 로 바꾸실때  (0) 2011.07.18
Command & Location  (0) 2011.07.12
os 패치에 관하여..  (0) 2011.07.07
여러가지 명령어 모음  (0) 2011.07.07
서버 TCP/IP 네트워크 성능테스트에 사용할 수 있는 명령어  (0) 2011.07.07
var/adm/ras/errlog 문제..  (0) 2011.07.07