Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

개발 공부

세그멘테이션 (Segmentation) 본문

대학교 공부/운영체제

세그멘테이션 (Segmentation)

방구석개발입문 2021. 6. 4. 23:58

●프로세스를 논리적 내용(=세그멘트)로 잘라서 메모리에 배치

    -프로세스는 세그먼트의 집합

    - 세그멘트의 크기는 일반적으로 같지 않다.

 

●세그멘트를 메모리에 할당

MMU 내의 재배치 레지스터 값을 바꿈으로써 CPU는 프로세스가 연속된 메모리 공간에 위치한다고 착각 MMU는 세그먼트 테이블이 된다.

 

 

주소변환

●논리주소

: CPU가 내는 주소는 세그멘트 번호(s) + 변위(d)

 

● 주소변환 : 논리 주소 -> 물리주소

- 세그멘트 테이블 내용 : base + limit

- 세그멘트 번호(s)는 세그멘트 테이블 인덱스 값

- s에 해당되는 테이블 내용으로 시작 위치 및 한계값 파악

- 한계(limit)을 넘어서면 segment violation 예외상황 처리

- 물리주소 = base[s] + d

Limit Base 예제
1. 논리주소(2, 100) 물리주소는?
s= 4300, d=100
>>4300+100=4400 (Limit은 400이므로 4700까지 가능)

2. 논리주소(1,500) 물리주소는?
s=6300 , d=500
>>6300+500 = 6800 (Limit은 400이므로 6700까지 가능)
(Limit범위가 400이므로 벗어나므로 인터럽트가 걸려 해당 프로세스는 강제 종료됨)
1000 1400
400 6300
400 4300
1100 3200
1000 4700

 

 

 

 

 

보호와 공유

●보호 : 해킹 등 방지

:모든 주소는 세그멘트 테이블을 경유하므로 세그멘트 테이블 엔트리마다 r,w,x비트르르두어 해당 세그멘트에 대한 접근 제어 가능

-페이징보다 우월

 

●공유 : 메모리 낭비 방지

:같은 프로그램을 쓰는 복수개의 프로세스가 있다면 code + data + stack에서 code는 공유 가능

(단, non-selfmodifying code = reentrant code = pure code 인 경우)

-프로세스의 세그멘트 테이블 코드 영역이 같은 곳을 가리키게 

-페이징보다 우월

 

* 일정 크기인 page단위로 자르면 어떤 page에는 code도 있고 data도 있고, 다른 page에는 data도 있고, stack도 함께 있을 수 있음

>> code만을 실행해야 하는데 code와 data가 함계 존재하면 곤란 stack도 마찬가지

     어떤 것은 read만 or write만 해야하는데 둘이 동시 존재시 보호나 보안이 어려워짐

>>세그먼트는 논리적으로(등심, 안심, 부채살등 부위별처럼) 의미있는 크기로 자를 수 있어

      보호 보안 공유등이 가능하고 페이징 보다 우월합니다.

 

그러나 세그멘트의 장점이 있지만 단점이 있어 사용하지 않고 paging을 일반적으로 사용함

-세그멘트로 자르면 코드 데이터 스택 등 크기가 각각다름

-2개의 조각난 메모리 공간을 합해야 메모리에 올릴 수 있는 상황이 발생 가능 >> 외부 단편화문제

프로세스를 잘라 메모리에 할당하는 것은 단편화 문제를 해결하기 위함인데 그 문제가 해결되지 않아 사용할 이유가 없어 게스멘트를 사용하지 않음

 

 

 

 

 

외부단편화

:세그먼트 크기는 고정이 아니라 가변적임

크기가 다른 각 세그멘트를 메모리에 두려면 >> 동적 메모리 할당

First-, best- worst-fit, compaction 등 문제

 

● 세그멘테에션 + 페이징 (paged segmentation)

세그멘테이션은 보호와 공유에서 효과적

페이징은 외부 단편화 문제를 해결

따라서 세그멘트를 페이징하자!

 

1)세그멘트를 페이징 함

2) 프로세스를 자를 때 처음에는 의미있는 세그멘트로 자르고 (코드, 데이터, 스택)

3) 그다음 코드 데이터 스택을 일정 간격(page)로 자른다

 

'대학교 공부 > 운영체제' 카테고리의 다른 글

가상 메모리  (0) 2021.06.08
페이징 Paging  (0) 2021.06.04
주기억장치 관리 (Main Memory Management)  (0) 2021.06.03