세그멘테이션 기법은 프로그램을 여러 개의 논리적인 블록으로 나누고, 이 블록을 메모리에 적재하는 방식입니다. 이를 쉽게 이해할 수 있도록 단계별로 설명하겠습니다.
세그먼트의 개념
• 세그먼트(Segment)는 프로그램을 논리적으로 나누어 놓은 부분입니다. 각 세그먼트는 프로그램에서 하나의 기능이나 데이터를 담당하는 부분이 될 수 있습니다.
• 예를 들어, 프로그램의 코드, 데이터, 스택 등이 각각 다른 세그먼트로 나뉠 수 있습니다.
• 페이지 기법과의 차이점은, 페이지는 일정한 크기로 나누지만 세그먼트는 각기 다른 크기를 가질 수 있습니다.
세그먼트 번호의 역할
• 세그먼트 기법에서 세그먼트 번호는 프로그램의 논리적인 구성 요소와 대응합니다. 즉, 세그먼트 번호는 프로그램의 코드, 데이터, 스택 등 특정 부분을 나타냅니다.
• 이와 달리 페이지 기법에서는 페이지 번호가 프로그램의 논리적 구조와는 관련 없이 단순히 고정된 크기로 나뉩니다.
동적 할당과 재배치
• 세그먼트는 프로그램 실행 중 메모리에 동적으로 할당되거나, 필요한 경우 재배치될 수 있습니다. 즉, 세그먼트가 실행될 때마다 메모리에서 적절한 크기의 빈 공간에 할당됩니다.
• 이 방식 덕분에 필요한 만큼의 메모리만 할당받게 되어 메모리 낭비가 줄어듭니다.
주소 사상 (Address Mapping)
• 프로그램의 주소(논리 주소)는 실제 메모리 주소(물리 주소)와 다릅니다. 이때 세그먼트 테이블을 사용하여 논리 주소를 물리 주소로 변환합니다.
• 세그먼트 테이블은 각 세그먼트가 메모리에서 어디에 위치하는지를 저장하는 테이블입니다.
세그먼트 테이블의 역할
• 세그먼트 테이블은 현재 활성화된 프로세스의 모든 세그먼트의 정보를 관리합니다.
• 세그먼트가 메모리의 어느 위치에 있는지, 그리고 해당 세그먼트의 길이(크기)를 저장합니다.
접근 권한 제어
• 세그먼트에 접근할 때는 시스템이 접근 권한을 제어합니다. 이는 프로그램이나 다른 프로세스가 마음대로 세그먼트에 접근하지 못하게 하기 위한 보안 장치입니다.
• 접근 권한은 읽기(Read), 쓰기(Write), 실행(Execute), 접근 금지(Access Denied)와 같은 방식으로 제어됩니다.
요약
1. 프로그램을 논리적인 세그먼트로 나누어 관리.
2. 세그먼트는 프로그램의 각 구성 요소에 대응하며, 크기가 다를 수 있음.
3. 메모리에서 필요한 만큼만 동적으로 할당되고 재배치 가능.
4. 세그먼트 테이블을 사용해 논리 주소를 물리 주소로 변환.
5. 접근 권한을 제어하여 보안 강화.
이 과정을 통해 메모리 관리의 효율성을 높이면서도, 프로그램의 논리적 구조에 맞춘 할당이 가능합니다.