[CS] 불연속할당_Segmentation기법

do yeon kim·2022년 10월 22일
0

CS-운영체제

목록 보기
15/20

http://www.kocw.net/home/cview.do?cid=3646706b4347ef09

Segmentation기법

페이징기법은 프로그램을 주소공간을 같은 크기의 페이지 단위로 쪼개는 것이다.
세그멘테이션기법은 프로그램의 주소공간을 의미 단위로 쪼개는 것이다.

프로세스가 실행되면 code, data, stack이 각 프로세스 별로 주소공간에 생기게 된다.
code, data, stack과 같은 단위는 프로세스의 주소공간 중에서 의미를 가지는 단위이다.

각각이 세그먼트가 된다.
code,data,stack 그 상태로 의미가 있는 세그멘트가 될수도 있지만, 이를 좀더 세분화해서 더 잘게 쪼개진 세그멘트가 될수도 있다.

세그멘테이션 기법의 주소변환은 페이징기법의 주소변환과 비슷한 측면이 있다.
논리적주소는 세그먼트 번호offest으로 구성된다.

세그먼트별로 서로 다른 물리적 메모리 위치에 올라가기 때문에 세그먼트별로 주소변환을 해주어야 하고, 그렇기 때문에 세그먼트 테이블이라는 것이 존재한다.

주소변환을 위해서 base레지스터와 length레지스터가 존재하는데,
base레지스터는 세그먼트 테이블의 시작위치를 알려주는 용도
length 세그먼트 테이블의 길이 세그먼트의 갯수를 알려주는 용도로 사용된다.

세그멘테이션 기법에 의한 주소변환의 위와 같다.

cpu가 논리주소를 주게되면 두 부분으로 나누게 된다. 세그먼트번호와 세그먼트에서 떨어진 정도를 나타내는 offset으로 나뉜다.

세그멘테이션 기법은 세그먼트의 길이가 다 다르므로 limit이라는 것을 통해 길이를 가지고 있다.
limit과 offset을 통해서 제대로 되었는지 확인한다.
시작위치에다가 offset을 더해서 주소변환을 하게 된다.

의미단위로 쪼개기 때문에 의미단위의 작업을 하는 경우라면 세그멘테이션 기법이 용이하다.

프로세스의 주소공간을 의미단위인 세그먼트 단위로 나누어서 관리하는 방법이다.
물리주소에 세그먼트 단위로 올라가게 된다.

주소변환도 세그먼트 별로 주소변환이 이루어져야 한다.
cpu가 논리 주소를 주게 되면 물리주소로 변환하기 위해서 세그먼트 테이블을 검색한다. 논리주소는 세그먼트번호와 세그먼트 안에서 얼마나 떨어져있는지를 구분하는

세그먼트안에는 엔트리가 얼마나 있는가?
페이지테이블의 경우는 엔트리가 정해져 있다.
세그먼트의 경우는 테이블의 엔트리 갯수가 프로그램이 사용하는 세그먼트의 갯수로 정해질 수 있다. 세그먼트가 몇개 있는가에 따라 갯수가 정해진다.

세그먼트가 물리적메모리에 어느 부분에 위치해 있는가가 주소변환이다.
세그먼트테이블의 해당 엔트리에 가면 물리적메모리의 시작위치 base라는 주소값이 있다. base값에 다가 얼만큼 떨어져 있는지 offset을 더해주면은 물리적주소가 된다.

세그먼트는 의미단위로 자르는 것이다. 그래서 크기가 균일하지 않기 때문에
세그먼트의 길이가 얼마인지(limit) 테이블에 시작위치(base)와 같이 담겨져 있다.

세그먼트안에서 얼만큼 떨어져 있는지(offset, ==>s,d의 d에 해당) 해당하는 값이 세그먼트의 길이(limit)보다 더 큰값이라고 하면 잘못되니 메모리 참조가 된다.
세그먼트 안에서 얼만큼 떨어져있는지를 나타내는 offset값이 limit값보다 작은 값인지 합당한 메모리 참조인지를 체크해보고 그런 경우에만 주소변환을 해주고 아닌 경우는 트랩을 발동해서 메모리 참조를 못하게 막는다.

stbr과 stlr은 테이블 안에 있는 base와 limit과는 다른 값이다.
stbr과 stlr은 테이블의 시작위치와 테이블의 길이를 가지고 있다.

shared 세그먼트는 같은 논리적인 공간에 있어야 한다.



Paged_Segmentation 기법

페이지기법과 세그먼트 기법을 혼합한 기법이다.
세그먼트를 가지고 여러개의 페이지로 구성하는 기법이다.

하나의 세그먼트가 여러개의 페이지로 다시 쪼개져서 나누어서 들어가게 된다.
allocation 문제가 발생하지 않는다. hole이 생기는 문제가 없게 된다.
물리적메모리에는 페이지 단위로 올라가기 때문에 allocation문제가 발생하지 않는다.

0개의 댓글