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
- 각각의 Segment는 page 단위로
분리된다.
- Segment는
프로세스간에
공유될
수
있다.
- 추가의 virtual page가 Segment에 mapping 될
수
있다.
- 이미
사용중인 segment는
프로세스로
지정될
수
도
있고
분리될
수
도
있다.
- 신규 segment는
프로세스에
의해
할당되거나
제거된다.
- Segment는
프로세스간에
공유될
수
있다.
- Virtual address는 segment register로
구성된다.
- 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를
지원하기
위해
사용
- Working: 프로그램
실행동안 stack/data 영역으로
사용되는 temporary memory
- Virtual Page는
실제 memory page 또는 disk drive와
같은
이차
저장매체와
연관되어
있다.
- Memory Segment 종류
- Kernel
- User Text
- Shared Library Text
- Shared Data
- Process Private
- Shared Library Data
- Kernel
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 |