운영 체제가 사용자 주소 공간을 관리하는 방법에 대한 세부 정보를 모르고 VOS 및 OpenVOS에서 많은 프로그래밍 작업을 수행할 수 있습니다. 그러나 세부 사항을 아는 것이 재미 있고 때로는 기본 구성을 조정해야하는 작업을 수행하는 것이 즐겁습니다. 이 게시물은 VOS 사용자 주소 공간에 대한 소개입니다.
VOS 사용자 주소 공간은 5개의 영역으로 나뉘며, 각 영역은 특정 용도로 사용됩니다. 순서대로, 가장 낮은 주소(@0x)에서 가장 높은 주소(@7FFFFFFFx)에 이르기까지 프로그램 모듈 영역, 동적으로 할당된 공유 가상 메모리 영역, 사용자 힙, 사용자 스택 및 운영 체제 자체에 의해 사용하기 위해 예약된 작은 영역입니다. 다음 다이어그램은 이러한 영역의 순서를 보여 주어 있습니다. 그것은 규모를 조정하지 않습니다. 이 다이어그램은 V 시리즈 구현(VOS 릴리스 15.0 이상)에 따라 다릅니다.
프로그램 모듈 |
공유 가상 메모리 |
사용자 힙 |
(데드 존) |
사용자 스택 |
시스템 데이터 |
프로그램 모듈 영역의 크기는 128MB로 고정됩니다. 시스템 데이터 영역의 크기는 2MB 미만으로 고정됩니다. 다른 3개 영역의 크기를 조정하여 실행 프로그램의 요구를 충족시킬 수 있습니다. 공유 가상 메모리 영역의 기본 크기는 896MB입니다. 따라서 처음 두 영역은 주소 공간의 1기가바이트 또는 절반을 차지합니다. 사용자 힙의 기본 크기는 VOS 또는 OpenVOS 버전에 따라 다소 다릅니다. 릴리스 17.0에서 기본 크기는 64MB입니다. 사용자 스택의 기본 크기는 8MB입니다. 힙과 스택 사이의 사용되지 않는 공간을 데드 존이라고 합니다. 힙이 자라기 때문에(높은 주소로 낮은 주소)가 자라고 스택이 아래로 자라기 때문에(높음에서 낮음), 데드 존은 확장을 위해 힙 또는 스택에 의해 청구될 수 있습니다. 힙, 스택 및 시스템 데이터에 사용할 수 있는 가상 메모리의 총 양은 또 다른 1기가바이트입니다. 모든 총 사용자 프로세스는 2기가바이트의 가상 메모리에 액세스할 수 있습니다.
사용할 수 있는 힙 공간의 총 양은 관리 제한의 대상이 됩니다. 스택 공간과 총 공간(프로그램 모듈 공간의 합, 공유 가상 메모리 공간, 힙 공간 및 스택 공간)도 마찬가지입니다. 모듈 전체 제한은 list_default_cmd_limits 명령을 사용하여 보고 update_default_cmd_limits 명령을 사용하여 수정됩니다. 새 프로세스는 이러한 모듈 전체 값을 상속합니다. 프로세스가 실행되고 나면 list_process_cmd_limits 명령을 사용하여 해당 제한을 보고 update_process_cmd_limits 명령을 사용하여 수정할 수 있습니다.
그런 다음 프로세스 전체 제한 값을 사용하여 프로그램이 실행될 때마다 사용된 제한을 초기화합니다. 프로그램이 실행되면 s$get_current_cmd_limits 및 s$set_current_cmd_limits 하위 루틴을 호출하여 실행 기간 동안 제한을 검색하거나 수정할 수 있습니다. 이러한 방식으로 프로그램은 시스템의 초기 기본 값보다 스택에 대한 공간을 더 많이 예약하거나 사용할 수 있는 힙 공간의 양을 늘릴 수 있습니다. 반대로 코딩 오류로 인해 너무 많은 공간을 사용하는 것이 우려되는 경우 사용할 수 있는 공간의 양도 줄일 수 있습니다.
자세한 내용은 update_default_cmd_limits 및 바인딩 명령에 대한 설명을 참조하십시오.