1 minute read

  • 페이징 기법: 프로세스를 일정 크기인 페이지 단위로 잘라서 메모리에 적재시킴. 물리적인 단위.
  • 세그멘테이션: 프로세스를 세그먼트의 집합으로 생각함. 논리적 내용 단위임. 크기가 각각 다름.

세그멘테이션

크기가 서로 다른 논리적 단위인 세그먼트로 메모리를 할당하여 주소 변환을 함. 세그먼트들의 크기가 서로 다르기 때문에 메모리를 페이징 기법처럼 미리 분할해 둘 수 없고 메모리에 적재될 때 빈 공간을 찾아 할당하는 사용자 관점의 가상 메모리 관리 기법임. 이 경우, 코드 부에서 리소스 파트나 데이터 파트의 데이터를 참조하게 될 때 각 데이터들이 메모리의 어느 위치에 로드되어 있는지는 관여하지 않고 단지 오프셋 0을 기준으로 데이터를 다루게 됨.

하나의 프로세스가 동작하려면 기본적으로 코드, 데이터, 스택 세 가지의 세그먼트는 항상 가지고 있음. 더 들어가보면, 코드에서도 main 함수가 있을 수 있고 다른 함수나 루틴이 있을 수 있음. 데이터 영역에서도 어떤 구조체가 있을 수도 있고 배열도 있을 수 있음. 따라서 세그멘테이션은 물리적인 크기의 단위가 아닌 논리적 내용의 단위(의미가 같은)로 자르기 때문에 세그먼트들의 크기는 일반적으로 같지 않음.

MMU내의 재배치 레지스터를 이용하여 논리 주소를 물리 주소로 바꿔주는 방식을 취함. MMU는 세그먼트 테이블로 CPU에서 할당한 논리 주소에 해당하는 물리 주소의 위치를 가지고 있음. 이 방법을 이용하면 CPU는 프로세스가 연속된 메모리 공간에 위치한다고 착각을 하게 됨.

_1

                                      <출처:https://copycode.tistory.com/108>

세그먼트란?

**정확히 볼 것

세그멘테이션 기법의 세그먼트 가상주소는 v = (s,d)로 표현되며, s는 세그먼트 번호를, d는 블록 내 세그먼트의 변위를 나타냄. 실제 x86 동작 모드 중 가장 처음에 진입하는 16비트, Real Mode에서 진행되는 메모리 관리로써, Code segment, data segment, stack segment, extra segment가 있다. 이는 각 세그먼트가 64K 크기(2^16)로 고정되어 있다.

  • 세그먼트 테이블

페이징 기법의 페이지 테이블처럼, 세그멘테이션 기법에는 세그먼트 테이블이 사용됨.

세그먼트 테이블은 사용자가 정의한 주소를 실제 주소로 매핑하는 정보를 저장하고 있고, 각 세그먼트 항목별 Base/Limit 정보를 가지고 있음. 각각의 세그먼트들은 비슷한 성질의 데이터이기 때문에 이들이 가지는 속성에 대해 테이블을 마련해줌으로써 서로 다른 세그먼트 참조시에 그들에 대한 권한을 통제할 수 있음.

  • 세그멘테이션 단점

하나의 세그먼트 단위로 통제가 가능한 장점이 있지만 서로 다른 크기의 세그먼트들에 대해 필요 시에 메모리에 올리고 필요 없으면 내리는 작업을 반복하면 외부 단편화가 생기는 문제점이 있다.


참고 사이트:

https://copycode.tistory.com/108

https://softwareji.tistory.com/76

https://wansook0316.github.io/cs/os/2020/04/06/운영체제-정리-15-세그멘테이션.html

Tags:

Categories:

Updated:

Leave a comment