이 름
mremap − 가 상 메 모 리 주 소 를 재 대 응 시 킨 다 .
사 용 법
#include
<unistd.h>
#include <sys/mman.h>
void * mremap(void * old_address, size_t old_size , size_t new_size, unsigned long flags);
설 명
mremap 는 존 재 하 는 메 모 리 대 응 을 확 장 (또 는 축 소 )하 며 , 동 시 에 내 부 적 으 로 그 대 응 을 이 동 시 킨 다 (flags인 자 와 이 용 할 수 있 는 가 상 주 소 공 간 에 의 해 제 어 된 다 ).
old_address는 확 장 (또 는 축 소 )하 기 를 원 하 는 가 상 메 모 리 블 럭 의 예 전 주 소 이 다 . old_address는 페 이 지 정 렬 이 되 있 어 야 한 다 . old_size는 가 상 메 모 리 블 럭 의 예 전 크 기 이 다 . new_size는 바 꾸 려 하 는 새 로 운 가 상 메 모 리 블 럭 의 크 기 이 다 .
flags인 자 는 플 래 그 의 비 트 맵 이 다 .
리 눅 스 에 서 메 모 리 는 페 이 지 로 나 누 어 진 다 . 사 용 자 프 로 세 스 는 (하 나 또 는 ) 여 러 개 의 선 형 가 상 메 모 리 세 그 먼 트 들 을 가 지 고 있 다 . 각 각 의 가 상 메 모 리 세 그 먼 트 는 하 나 또 는 여 러 개 의 실 제 메 모 리 페 이 지 로 (페 이 지 테 이 블 내 ) 대 응 된 다 . 각 각 의 가 상 메 모 리 세 그 먼 트 는 잘 못 된 메 모 리 에 접 근 되 면 세 그 먼 트 위 반 을 발 생 시 키 는 (즉 , 읽 기 전 용 세 그 먼 트 에 쓰 기 를 할 때 ) 자 신 만 의 보 호 모 드 (접 근 권 한 )를 가 지 고 있 다 .
세 그 먼 트 영 역 외 의 가 상 메 모 리 접 근 또 한 세 그 먼 트 위 반 을 발 생 시 킨 다 .
mremap는 리 눅 스 페 이 지 구 조 를 사 용 한 다 . mremap는 가 상 주 소 와 메 모 리 페 이 지 사 이 의 대 응 을 바 꾼 다 . 이 것 은 realloc을 매 우 효 율 적 으 로 수 행 하 기 위 해 사 용 될 수 있 다 .
플 래 그
MREMAP_MAYMOVE
연 산 이 실 패 하 면 , 현 재 가 상 주 소 에 대 한 크 기 변 경 이 불 가 능 한 경 우 가 상 주 소 를 바 꾸 도 록 지 정 한 다 .
반 환 값
성 공 시 , mremap는 새 로 운 가 상 메 모 리 영 역 에 대 한 포 인 터 를 반 환 한 다 . 에 러 시 , −1이 반 환 되 며 ,errno는 적 당 한 값 으 로 설 정 된 다 .
에 러
EINVAL |
유 효 하 지 않 은 인 자 가 주 어 졌 다 . 대 부 분 old_address가 페 이 지 정 렬 되 있 지 않 은 경 우 이 다 . | ||
EFAULT |
"Segmentation fault" old_address에 서 old_address+old_size 범 위 의 일 정 주 소 가 이 프 로 세 스 를 위 한 유 효 한 가 상 메 모 리 주 소 가 아 니 다 . 비 록 요 청 된 전 체 주 소 공 간 을 포 함 하 는 대 응 이 있 을 지 라 도 사 용 자 는 EFAULT를 받 을 수 있 으 며 , 이 런 대 응 은 다 른 타 입 의 것 이 다 . | ||
EAGAIN |
메 모 리 세 그 먼 트 가 잠 겨 져 있 어 다 시 대 응 시 킬 수 없 다 . | ||
ENOMEM |
메 모 리 영 역 이 현 재 가 상 주 소 로 확 장 될 수 없 으 며 , MREMAP_MAYMOVE 플 래 그 가 flags에 설 정 되 있 지 않 다 . 또 는 , 이 용 할 수 있 는 (가 상 ) 메 모 리 가 충 분 하 지 않 다 . |
호 환
이 시 스 템 콜 은 리 눅 스 에 한 정 적 이 며 , 호 환 성 을 염 두 에 둔 프 로 그 램 에 서 사 용 해 서 는 안 된 다 . 4.2BSD는 완 전 히 다 른 의 미 의 mremap(2) 시 스 템 콜 (실 제 로 구 현 되 지 않 음 )이 있 다 .
관 련 항 목
getpagesize(2), realloc(3), malloc(3), brk(2), sbrk(2), mmap(2)
메 모 리 페 이 지 에 관 한 더 많 은 정 보 는 좋 아 하 는 OS 교 재 를 참 고 하 라 > (Andrew S. Tannenbaum의 Modern Operating Systems, Randolf Bentson의 Inside Linux, Maurice J. Bach의 The Design of the UNIX Operating System.)
역 자
정 강 훈 <skyeyes [AT] soback.net>, 2000년 5월 15일