
User memory access(사용자 메모리 접근)란, 프로그램이 실행되는 동안 프로세스가 사용할 수 있는 메모리 공간에 접근하는 것을 의미합니다. 이는 프로세스가 데이터를 읽고 쓰는 등의 작업을 수행하기 위해 필요한 동작입니다.
프로세스는 운영체제에 의해 메모리 공간이 할당되며, 이 공간은 주로 가상 메모리로 관리됩니다. 가상 메모리는 프로세스에게 할당된 메모리 영역으로, 실제 물리적인 메모리와 매핑되어 동작합니다. 이렇게 가상 메모리가 할당되면 프로세스는 그 영역을 자신의 메모리로 인식하고 접근할 수 있습니다.
사용자 메모리 접근은 프로세스가 자신의 가상 메모리 영역에 접근하여 데이터를 읽거나 쓰는 동작을 말합니다. 예를 들어, 변수에 값을 저장하거나, 배열의 요소에 접근하거나, 동적으로 메모리를 할당하는 등의 작업이 사용자 메모리 접근에 해당합니다.
일반적으로 사용자 메모리 접근은 프로그래밍 언어의 문법과 라이브러리 함수를 통해 이루어집니다. 프로그래머는 변수를 선언하고 값을 할당하거나, 배열 인덱스를 사용하여 요소에 접근하거나, 동적 메모리 할당 함수를 사용하여 메모리를 할당하는 등의 작업을 수행합니다.
이러한 사용자 메모리 접근은 프로세스가 실행 중인 컨텍스트에서 이루어지며, 운영체제는 프로세스의 가상 메모리를 실제 물리 메모리와 매핑하고 접근 권한을 관리합니다. 따라서 사용자 메모리 접근은 프로그램이 정상적으로 동작하도록 필수적인 동작이며, 프로그래밍 언어와 운영체제가 함께 지원하고 관리합니다.
주소 공간은 실행 중인 프로그램(=프로세스)이 가정하는 메모리의 모습입니다. 운영체제에서 메모리 개념을 이해하는 것이 메모리를 어떻게 가상화할지를 이해하는 핵심과도 같습니다. 하나의 주소 공간에는 실행 프로그램의 모든 메모리 상태를 갖고 있습니다. 메모리 내 각 세그먼트(메모리에서 특정 길이를 갖는 연속적인 주소 공간)가 나타나 있으며 각각 코드, 힙, 빈 공간, 스택 세그먼트로 구성되어 있습니다

프로그램 코드 세그먼트는 명령어를 보관하는 곳입니다. 코드는 정적이기 때문에 메모리에 저장하기 쉽습니다(코드 양이 변한다거나 하지 않으니 용량이 고정됨). 즉, 프로그램이 실행되면서 추가 메모리를 필요로 하지 않기 떄문에 주소 공간의 가장 상단에 배치합니다.
다음으로 프로그램 실행과 더불어 확장 혹은 축소될 수 있는 두 종류의 주소 공간이 존재합니다. 주소 공간의 상단에서 하방으로 커지는 힙과 주소 공간의 하단에서 시작해 상방으로 커지는 스택입니다.힙은 동적으로 할당되는 메모리를 위해 사용하며, 마지막으로 스택은 함수 호출 체인상에서 현재 위치, 지역 변수, 함수 인자 및 반환 값등을 저장하는데 사용됩니다.
두 메모리 영역은 프로세스가 진행됨에 따라 확장할 여지가 있기 때문에 위 그림처럼 배치합니다. 그래야 두 영역 모두 가운데 쪽으로 확장할 수 있기 때문입니다. (참고: 이런 배치는 관례로 멀티 스레드 환경에서는 이런 식으로 주소 공간을 나누면 동작하지 않습니다.)