Kim Seon Deok

[OS] Segmentation 본문

운영체제

[OS] Segmentation

seondeok 2022. 12. 4. 14:58

 

 

 

segmentation

 

 

page는 프로세스를 일정크기로 자르는 기법을 말한다.

segment는 프로세스를 논리적인 내용에 맞게 자르는 기법이다. 논리적 구분에 따라 크기가 가변적이다.

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

 

프로세스를 일정크기로 잘랐던 paging기법은 cpu가 프로세서가 연속된 메모리 공간에 위치했다 착각하게 만들기 위해 mmu 재배치 레지스터로 page table을 사용했다.

 

segmentation기법은 비슷한 방식으로 segment table을 사용한다. 역시 cpu는 프로세스가 연속된 메모리 공간에 위치한다고 착각한다.

메인메모리에 있는 프로세스 시작번지 base들이 segment table의 내용이 된다.

cpu가 내보내는 주소를 segment number와 dismplacement로 구분한다.

segment table은 추가적으로 limit 비트를 추가해 (base + displacement) 값이 limit값보다 큰지 작은지 확인한다.

(base + displacement) 값 > limit이라면 segment table에서 cpu로 인터럽트 신호를 보내 해당 프로세서를 강제로 종료시킨다. → segment violation 예외 발생

(base + displacement) 값 < limit이라면 인터럽트가 발생하지 않는다.

segment number displacement  
0 0 3000(0번 세그먼트의 base값) 3000
0 50 3000(0번 세그먼트의 base값) 3000+50
2 80 500(2번 세그먼트의 base값) 500+80
2 800 500(2번 세그먼트의 base값) 500+800

 

 

 

 

 

 

Address Translation

 

Logical address

cpu가 내보내는 주소이다.

Logical address
segment number displacement

 

segment number는 segment table의 인덱스 번호이다. segment number가 가리키는 segment table의 내용값은 base값이다.

 

Physical address

(base + displacement) = physical address

limit값과 physical address를 비교해 limit보다 크다면 segment violation예외를 발생시켜 인터럽트를 처리한다.

 

 

 

 

보호와 공유

 

보호(Protection) : 해킹 방지

segment 기법이 paging 기법보다 우월한 이유?

paging 기법은 무조건 일정한 크기의 page 단위로 자르기 때문에 각 조각 안에 다른 프로세스의 코드, 데이터, 스택이 섞일 수 있다.

하지만 segment 기법은 논리적인 단위로 프로세스를 자르기 때문에 각 조각 안에는 한 프로세스 조각에 대한 코드, 데이터, 스택만 존재한다.

또한 세그먼트 테이블 엔트리마다  r(read), w(write), x(execute) 3비트를 추가해 해당 페이지에 대한 접근을 제어한다.

 

 

 

공유(sharing) : 메모리 낭비 방지

프로그램은 코드, 데이터, 스택으로 구성된다. 하드디스크 내부 프로세서들의 코드가 모두 똑같다면 코드는 중복되고, 메모리는 낭비된다. 따라서 세그먼트 테이블에 코드영역은 항상 같게 고정시키고 데이터 영역만 달라지도록 하면 메모리를 낭비를 막을 수 있다.
중복되는, 프로세스의 세그먼트 테이블 코드영역이 같은 곳을 가리키는 코드를 non self modifying code = reentrant code = pure code라 한다.

 

 

 

 

 

 

 

 

 

'운영체제' 카테고리의 다른 글

[OS] Page Replacement  (0) 2022.12.04
[OS] Virtual Memory, Page Fault  (0) 2022.12.04
[OS] Paging  (2) 2022.11.30
[OS] Contiguous Memory Allocation  (0) 2022.11.30
[OS] Main Memory Management, 메모리 낭비 방지  (0) 2022.11.29
Comments