대용량 실행 파일 예제

대용량 실행 파일 사용법의 예제 시나리오입니다.

대형 프로그램 주소 공간 모델 예제

선호하는 주소 공간 모델이 다음과 같다고 가정합니다.
  • MAXDATA=0x50000000(비DSA)
  • 세그먼트 0xB, 0xC, 0xE에 필요한 shmat/mmap 영역
  • 공유 라이브러리 영역 텍스트와 미리 재배치된 데이터 액세스 용이성
주소 공간 배치 결과는 다음과 같습니다.
   0x0: 시스템 세그먼트
   0x1:
   0x2: 실행 시간 개인용 종속 항목/스택
   0x3: 프로세스 힙
   0x4: 프로세스 힙
   0x5: 프로세스 힙
   0x6: 프로세스 힙
   0x7: 프로세스 힙
   0x8:
   0x9:
   0xA:
   0xB: shmat/mmap(실행 후 맵핑됨)
   0xC: shmat/mmap(실행 후 맵핑됨)
   0xD: 공유 라이브러리 텍스트
   0xE: shmat/mmap(실행 후 맵핑됨)
   0xF: 미리 재배치된 라이브러리 데이터

이 예제에서 세그먼트 0x8 – 0xA를 실행 파일에 사용할 수 있음을 확인할 수 있습니다.

실행 파일 크기가 256MB보다 크고 512MB보다 작은 경우 이 상황에 이상적인 HUGE_EXEC 설정값은 다음과 같습니다.
  1. HUGE_EXEC=0
  2. HUGE_EXEC=0x8
  3. HUGE_EXEC=0x9

옵션 1과 2는 실행 파일을 세그먼트 0x8 – 0x9에 삽입하지만 옵션 3은 실행 파일을 세그먼트 0x9 – 0xA에 삽입합니다.

대형 프로그램 주소 공간 모델 예제

선호하는 주소 공간 모델이 다음과 같다고 가정합니다.
  • MAXDATA=0x50000000 DSA
  • 세그먼트 0xB, 0xC, 0xE에 필요한 shmat/mmap 영역
  • 공유 라이브러리 영역 텍스트와 미리 재배치된 데이터 액세스 용이성
주소 공간 배치 결과는 다음과 같습니다.
   0x0: 시스템 세그먼트
   0x1:
   0x2: 실행 시간 개인용 종속 항목/스택
   0x3: 프로세스 힙
   0x4:      |
   0x5:      |
   0x6:      v
   0x7: ____________ (데이터 한계)
   0x8:
   0x9:
   0xA:
   0xB: shmat/mmap(실행 후 맵핑됨)
   0xC: shmat/mmap(실행 후 맵핑됨)
   0xD: 공유 라이브러리 텍스트
   0xE: shmat/mmap(실행 후 맵핑됨)
   0xF: 미리 재배치된 라이브러리 데이터

이 예제에서 세그먼트 0x4 – 0xA를 실행 파일에 사용할 수 있음을 확인할 수 있습니다.

실행 파일 크기가 256MB보다 크고 512MB보다 작은 경우 이 상황에 이상적인 HUGE_EXEC 설정값은 다음과 같습니다.
  1. HUGE_EXEC=0x8
  2. HUGE_EXEC=0x9

옵션 1은 실행 파일을 세그먼트 0x8 – 0x9에 삽입하지만 옵션 2는 실행 파일을 세그먼트 0x9 – 0xA에 삽입합니다.

참고: DSA로 인해 시스템이 0xB – 0xC를 실행 파일에 사용하도록 선택하므로 HUGE_EXEC=0 설정은 이 고객에게 적합하지 않습니다. 그러면 실행 후 해당 세그먼트를 shmat/mmap에 사용할 수 없습니다. HUGE_EXEC를 세그먼트 0x4, 0x5, 0x6 또는 0x7 중 하나로 설정하면 요청대로 삽입할 수 있으며 프로세스 힙이 요청된 시작 세그먼트 바로 아래에 있는 세그먼트까지만 증가하도록 제한됩니다.

공유 라이브러리 영역에 대한 액세스 권한이 없는 대형 프로그램 주소 공간 모델

선호하는 주소 공간 모델이 다음과 같다고 가정합니다.
  • MAXDATA=0xB0000000 DSA
  • shmat/mmap 영역 없음
  • 공유 라이브러리 영역 액세스 용이성 없음
주소 공간 배치 결과는 다음과 같습니다.
   0x0: 시스템 세그먼트
   0x1:
   0x2: 실행 시간 개인용 종속 항목/스택
   0x3: 프로세스 힙
   0x4:      |
   0x5:      |
   0x6:      |
   0x7:      |
   0x8:      |
   0x9:      |
   0xA:      |
   0xB:      |
   0xC:      v
   0xD: ____________ (데이터 한계)
   0xE:
   0xF:

이 예제에서 세그먼트 0x4 – 0xF를 실행 파일에 사용할 수 있음을 확인할 수 있습니다.

실행 파일 크기가 256MB보다 크고 512MB보다 작은 경우 이 상황에 이상적인 HUGE_EXEC 설정값은 다음과 같습니다.
  1. HUGE_EXEC=0
  2. HUGE_EXEC=0xE

두 옵션 모두 실행 파일을 세그먼트 0xE – 0xF에 삽입합니다.

참고: HUGE_EXEC를 0x4 - 0xD 세그먼트 중 하나로 설정하면 요청대로 삽입할 수 있으며 프로세스 힙이 요청된 시작 세그먼트 바로 아래에 있는 세그먼트까지만 증가하도록 제한됩니다.

디폴트 프로세스 주소 공간 모델 예제

선호하는 주소 공간 모델이 다음과 같다고 가정합니다.
  • MAXDATA=0(비DSA)
  • shmat/mmap 영역 없음
  • 공유 라이브러리 영역 텍스트와 미리 재배치된 데이터 액세스 용이성
주소 공간 배치 결과는 다음과 같습니다.
   0x0: 시스템 세그먼트
   0x1:
   0x2: 실행 시간 개인용 종속 항목/프로세스 힙/스택
   0x3:
   0x4:
   0x5:
   0x6:
   0x7:
   0x8:
   0x9:
   0xA:
   0xB:
   0xC:
   0xD: 공유 라이브러리 텍스트
   0xE:
   0xF: 미리 재배치된 라이브러리 데이터

이 예제에서 세그먼트 0x3 – 0xC를 실행 파일에 사용할 수 있음을 확인할 수 있습니다.

실행 파일 크기가 256MB보다 크고 512MB보다 작은 경우 이 상황에 이상적인 HUGE_EXEC 설정값은 다음과 같습니다.
    1. HUGE_EXEC=0
    2. HUGE_EXEC=0x3
    ...
   10. HUGE_EXEC=0xB

옵션 1과 2의 결과는 동일하며 실행 파일을 세그먼트 0x3 – 0x4에 삽입합니다.

단일 공유 라이브러리 영역 텍스트 세그먼트가 있는 shtext_in_one 예제

선호하는 주소 공간 모델이 다음과 같다고 가정합니다.
  • MAXDATA=0x70000000(비DSA)
  • 세그먼트 0xC, 0xD, 0xE, 0xF에 필요한 shmat/mmap 영역
  • 공유 라이브러리 영역 액세스 용이성
주소 공간 배치 결과는 다음과 같습니다.
   0x0: 시스템 세그먼트
   0x1: 공유 라이브러리 텍스트
   0x2: 실행 시간 개인용 종속 항목/스택
   0x3: 프로세스 힙
   0x4: 프로세스 힙
   0x5: 프로세스 힙
   0x6: 프로세스 힙
   0x7: 프로세스 힙
   0x8: 프로세스 힙
   0x9: 프로세스 힙
   0xA:
   0xB:
   0xC: shmat/mmap(실행 후 맵핑됨)
   0xD: shmat/mmap(실행 후 맵핑됨)
   0xE: shmat/mmap(실행 후 맵핑됨)
   0xF: shmat/mmap(실행 후 맵핑됨)

이 예제에서 세그먼트 0xA – 0xB를 실행 파일에 사용할 수 있음을 확인할 수 있습니다.

실행 파일 크기가 256MB보다 크고 512MB보다 작은 경우 이 상황에 이상적인 HUGE_EXEC 설정값은 다음과 같습니다.
  1. HUGE_EXEC=0,shtext_in_one
  2. HUGE_EXEC=0xA,shtext_in_one

두 옵션 모두 실행 파일을 세그먼트 0xA – 0xB에 삽입하고 공유 라이브러리 텍스트를 세그먼트 0x1에 삽입합니다.

참고: HUGE_EXEC를 0xB – 0xE 중 하나로 설정하면 요청대로 삽입할 수 있으며 세그먼트 0xC – 0xF 중 일부를 실행 파일 다음에 shmat/mmap에 사용하지 못하게 합니다.

두 개의 공유 라이브러리 영역 텍스트 세그먼트가 있는 shtext_in_one 예제

선호하는 주소 공간 모델이 다음과 같다고 가정합니다.
  • MAXDATA=0x70000000 DSA
  • 세그먼트 0xA와 0xB에 필요한 shmat/mmap 영역
  • 공유 라이브러리 영역(doubletext32 속성으로 작성됨) 텍스트 액세스 용이성
주소 공간 배치 결과는 다음과 같습니다.
   0x0: 시스템 세그먼트
   0x1: 공유 라이브러리 텍스트(1차)
   0x2: 실행 시간 개인용 종속 항목/스택
   0x3: 프로세스 힙
   0x4:      |
   0x5:      |
   0x6:      |
   0x7:      |
   0x8:      v
   0x9: ____________ (데이터 한계)
   0xA: shmat/mmap(실행 후 맵핑됨)
   0xB: shmat/mmap(실행 후 맵핑됨)
   0xC:
   0xD:
   0xE:
   0xF: 공유 라이브러리 텍스트(2차)

이 예제에서 세그먼트 0xC – 0xE를 실행 파일에 사용할 수 있음을 확인할 수 있습니다.

실행 파일 크기가 512MB보다 크고 768MB보다 작은 경우 이 상황에 이상적인 HUGE_EXEC 설정값은 다음과 같습니다.
  1. HUGE_EXEC=0,shtext_in_one
  2. HUGE_EXEC=0xC,shtext_in_one

두 옵션 모두 실행 파일을 세그먼트 0xC – 0xE에 삽입하고 공유 라이브러리 텍스트를 세그먼트 0x1 - 0xF에 삽입합니다.

참고: HUGE_EXEC를 0x4 - 0x7 세그먼트 중 하나로 설정하면 요청대로 삽입할 수 있으며 프로세스 힙이 요청된 시작 세그먼트 바로 아래에 있는 세그먼트까지만 증가하도록 제한됩니다.