학부 내용 정리/[ 2-1 ] 운영체제

[ OS ] Segmentation

haena02 2022. 4. 18. 03:24
반응형

 

1.  Segmentation 

 

1.1 base and bounds registers의 문제점

 

전에 배운 가상 공간 배치방법의 문제점은 프로그램이 크다면 물리메모리에 자리 찾아주기 힘들고(연속적이어야 하기 때문). 사용되지 않은구간이 너무 많다는 것이다 (free)

 

1.2 Segment

 

1) 세그먼트는 특정 길이의 주소공간의 연속된 부분이다 (코드, 스택, 힙)

2) 각각에 base and bounds가 존재하며 세그먼트 각각이 연속적일 필요는 없다.

 

1.3 Segmentation

 

1) 물리적 메모리의 서로 다른 부분에 세그먼트를 배치한다

2) 물리적 메모리를 free로 채우지 않는다. 

 - 사용된 메모리만 공간을 할당한다

 - 사용하지 않는 주소 공간에 다른 공간을 수용할 수 있음

 

왼쪽은 기존의 물리 메모리이다.  16KB 단위로 주어져 있어 빈공간이 너무 크다. 오른쪽은 세그멘테이션 방식이다. 보면 낭비되는 빈 공간이 덜하다는 것을 알 수 있다. 

 

1.4 Address Translation

 

 

위 그림은 세그멘테이션을 가상메모리로 구현한 것이다. 이제 메모리 접근에 대하여 알아볼 것이다.

 

1) 가상 메모리 100B 접근

32KB + 100B = 32868B

100B<2KB 이기 때문에 문제 없음

 

2)  4200B 접근

34KB+4200B  (X)

34KB +( 4200B-4KB ) (O)

 

3) 7KB 

예외처리 됨 (아무것도 없는 곳을 가르킴)

 

1.5 주소를 찾을 때 어떤 세그먼트를 기준으로 찾을까? (code , heap)

가상주소의 상위 몇 비트를 기준으로 주소 공간을 만든다. 위 사진은 14비트 짜리 즉 16KB (2^14) 주소 공간이 있다. 

 

아래 코드는 하드웨어에 의해 주소로 반환되는 코드이다.

// get top 2 bits of 14-bit VA
Segment = (VirtualAddress & SEG_MASK) >> SEG_SHIFT 

// now get offset 
Offset = VirtualAddress & OFFSET_MASK 
if (Offset >= Bounds[Segment])  // 예외처리를 위해 길이 비교
	RaiseException(PROTECTION_FAULT) 
else 
	PhysAddr = Base[Segment] + Offset // 물리메모리
	Register = AccessMemory(PhysAddr) 
    
    
//SEG_MASK: 0x3000 상위 두비트만 11로 설정
//SEG_SHIFT: 12  상위 두비트를 알기 위해 사용
//OFFSET_MASK: 0xFFF  12개의 1

 

 

1.6 주소를 찾을 때 어떤 세그먼트를 기준으로 찾을까? (steak)

 

스택은 어디로 주소가 자라는지에 대한 정보가 필요함

앞에서 얻어온 12 비트 주소 사용 못함. 

 

위 사진과 같은 방법으로 찾아야한다.

 

1.7 Code Sharing

메모리를 절약하기 위해 코드 세그먼트를 공유한다. 다른 세그먼트 들은 Read와 Wrire 모두 가능하지만 코드 세그먼트는 공유되어야 하므로 read 와 execute 만 가능하다. 코드 세그먼트를 읽기전용으로 설정하면 여러 프로세스에서 동일한 코드를 고융할 수 있다. 

 

1.8 Fine-grained vs. Coarse-grained

Coarse-grained - Code, stack, and heap

Fine-grained - 더 많은 세그먼트로 분리-> 레지스터 증가 -> 하드웨어 능력 필요

 

1.9 OS Support

1) Context switch

세그먼트의 레지스터는 저장하고 복구하고 해야한다.

 

2) 실제 메모리의 사용가능한 공간 관리

새 주소 공간이 생성되면 OS는 해당 세그먼트를 위한 물리적 메모리공간을 찾을 수 있도록 프리리스트를 만들어서 관리 해야한다. 각 세그먼트의 크기가 다를 수 있다. 물리적 메모리는 작은 구멍만한 free 공간이 빠르게 생겨서 세그먼트를 할당하기 힘들다. 

 

 

 

이렇게 빈공간을 모아주는 방법은 여러개가 있다.

 

 

1.10 Free-list management algorithms

 

1) Best-fit

가장 크기가 비슷한 곳에 삽입한다 (내림 차순으로 정렬 후 차례차례 확인)

2) Worst-fit

기장 큰 공간에 넣는다 (내림 차순으로 정렬 후 맨 위에)

3) First-fit

맨 위에의 개념이 아니라 무조건 처음 발견한 곳에 넣는다.

4) Buddy algorithm

메모리를 프로세스가 들어갈만큼 쪼개고 쪼갠다. 사용하지 않는 메모리는 합쳐 놓는다

 

버디 알고리즘

반응형

'학부 내용 정리 > [ 2-1 ] 운영체제' 카테고리의 다른 글

[ OS ] Translation-Lookaside Buffer  (0) 2022.04.19
[ OS ] Paging  (0) 2022.04.18
[ OS ] Address Spaces  (0) 2022.04.18
[ OS ] Multiprocessor Scheduling  (0) 2022.04.17
[ OS ] Multi-Level Feedback Queue  (0) 2022.04.17