Segmentation

이한수·2022년 3월 22일
0

OS

목록 보기
8/10
post-thumbnail

개인 공부 내용 정리 목적입니다.
참고 : 양희재 교수님(OS)
참고 : https://velog.io/@codemcd/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9COS-14.-%EC%84%B8%EA%B7%B8%EB%A9%98%ED%85%8C%EC%9D%B4%EC%85%98

1.Segmentation

프로세스를 물리적으로 일정한 크기로 나눠서 메모리에 할당하던 paging과 반대되는 방식이다.

논리적 내용을 기반으로 나눠서 메모리에 배치하며 그 크기가 paging처럼 같지 않다.

(즉 , 의미있는 크기로 나눈다)

세그먼트에서 이용하는 테이블은 세그먼트 테이블이라고 하며 ,

MMU내의 재배치 레지스터 값을 바꿈으로써 cpu는 프로세스가 연속된 메모리 공간에 위치한다고 착각하게 해서 메모리를 이용한다는 점은 페이징과 같지만, 내부 구조는 조금 다르다.

세그먼트 테이블은 세그먼트 번호와 시작 주소(base), 세그먼트 크기(limit)를 갖는다.

페이징과 달리 그 크기가 일정하지 않기 때문에 주어지는 것이며 , 만일 범위를 넘어서는 주소를 참조 할 시 인터럽트가 발생되어 프로세스를 종료 시킨다.

2.보호와 공유

1)보호

모든 주소는 세그멘트 테이블을 경유 하며 세그먼트 테이블 엔트리마다 r,w,x를 두어 제어한다.

2)공유

메모리 낭비 방지 . 같은 프로그램을 쓰는 복수 개의 프로세스가 있다면 ,
code + data + stack에서 code는 공유 가능(non-self-modifying code = reentrant code = pure code)

페이징과 다를바 없어보이나 결론을 말하자면 페이징에서의 보호와 공유보다 더 낫다.

나누는 기준이 논리적이기 때문인데 , code , stack ,date등 이런 논리적인 기준점으로 나누기 때문에 섞여도 상관없으니 일정한 크기로만 나누는 페이징 보다 제어하기가 더욱 용이하다.

3.Paging vs Segmentation

그럼 실제로 세그멘테이션만 이용하겠구나 싶지만, 그럼에도 불구하고 대부분의 OS에서는 페이징을 사용한다.

왜?? 세그멘테이션을 쓰면 외부 단편화 문제가 다시 발생한다.

왜?? 논리적인 크기로 나누기 때문에 그 크기가 매우 다양하기 때문이다.

그럼 섞어쓸 수는 없을까??? 있다!!

프로세스를 처음 자를 때는 세그멘트를 기준으로 자른다.
그리고 바로 메인 메모리에 올릴 려면 크기가 다르기 때문에 외부 단편화가 우려되니 ,
이 나뉘어진 세그멘트를 페이지로 다시 한번 나누는 것이다.

이렇게 하면 2가지의 장점을 모두 가져갈 수 있지 않을까 싶지만 ,

세그멘트 테이블과 페이지 테이블이 2개 존재하여 cpu에서 메모리로 가는 과정에서 주소

변환이 2번 이루어진다는 단점이 있다.

profile
성실하게

0개의 댓글