리눅스에서는 프로세스의 메모리를 크게 5가지의 세그먼트(Segment) 로 구분합니다. 여기서 세그먼트란 적재되는 데이터의 용도별로 메모리의 구획을 나눈 것인데, 크게 코드 세그먼트, 데이터 세그먼트, BSS 세그먼트, 힙 세그먼트, 그리고 스택 세그먼트로 구분합니다.

운영체제가 메모리를 용도별로 나누면, 각 용도에 맞게 적절한 권한을 부여할 수 있다는 장점이 있습니다. 권한은 읽기, 쓰기, 그리고 실행이 존재하며, CPU는 메모리에 대해 권한이 부여된 행위만 할 수 있습니다.
예를 들어, 데이터 세그먼트에는 프로그램이 실행되면서 사용하는 데이터가 적재됩니다. CPU는 이곳의 데이터를 읽을 수 있어야 하며, 따라서 이 영역에는 읽기 권한이 부여됩니다. 반면 이 영역의 데이터는 실행 대상이 아니므로 실행 권한은 부여되지 않습니다.
세그먼트를 자세히 이해하려면 운영체제의 메모리 관리기법 중 하나인 세그먼테이션 기법과 인텔 x86-64(x64)에서 관련된 하드웨어의 설계를 조금 알아야 합니다. 하지만 이는 이 로드맵의 범위를 넘어가므로 여기서 다루지는 않겠습니다. '실행 중인 프로세스의 메모리가 오른쪽과 같이 5개의 영역으로 구분된다.' 정도로만 이해하시면 될 것 같습니다.
각각의 세그먼트에 대해 좀 더 자세히 살펴보겠습니다.
**코드 세그먼트(Code Segment)**는 실행 가능한 기계 코드가 위치하는 영역으로 **텍스트 세그먼트(Text Segment)**라고도 불립니다.