본문으로 바로 가기

VOS와 OpenVOS에서는 운영 체제가 사용자 주소 공간을 어떻게 관리하는지 세부 사항을 알지 못해도 많은 프로그래밍 작업을 수행할 수 있습니다. 하지만 그 세부 사항을 알아두면 흥미롭고, 때로는 작업을 수행하기 위해 기본 설정을 조정해야 할 때도 있습니다. 이 글은 VOS 사용자 주소 공간에 대한 소개입니다.

VOS 사용자 주소 공간은 5개의 영역으로 나뉘며, 각 영역은 특정 용도로 사용됩니다. 가장 낮은 주소(@0x)부터 가장 높은 주소(@7FFFFFFFx) 순으로, 프로그램 모듈 영역, 동적으로 할당된 공유 가상 메모리 영역, 사용자 힙, 사용자 스택, 그리고 운영 체제 자체에서 사용하기 위해 예약된 작은 영역이 있습니다. 다음 그림은 이러한 영역의 배열 순서를 보여줍니다. 그림은 실제 크기를 나타낸 것이 아닙니다. 이 그림은 V 시리즈 구현(VOS 릴리스 15.0 이상)에 특화된 것입니다.

OpenVOS 사용자 주소 공간
프로그램 모듈
공유 가상 메모리
사용자 힙
(데드 존)
사용자 스택
시스템 데이터

프로그램 모듈 영역의 크기는 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 및 bind 명령어의 설명을 참조하십시오.

 

© 2024 Stratus Technologies.