OS

벼락치기 - 운영체제 11

haerangssa 2024. 6. 9. 23:17

w11. 가상 메모리의 기초 2

🚶‍♀️ 불연속 메모리 할당 - segmentation

segment: 프로세스를 논리적 의미를 단위로 분할한 것. (가변크기로, 사용자가 정함)

=> 일반적으로 code, data, stack을 각각 하나의 segment로 정의함. 

(작게는 함수 하나하나, 크게는 program전체를 하나의 segment로 정의가능)

 

segmentation: 프로세스를 segment로 잘라서 memory에 배치하는 방법


paging과 segmentation 할당의 비교

공통점은

process가 통으로 올라가는 것이 아니라, 자른 부분들이 올라갈 수 있다는 것!


🏃‍♂️ segmentation table의 mapping 방식

 

segmentation table의 구성

limit(segmentation의 크기)와 base address(Physical M 상의 시작주소, byte단위)

그리고 entry에는 segment 번호가 들어감. (paging에서는 frame 번호)

 

limit

세그먼트(공간)의 크기.

limit은 paging 기법에는 존재하지 않음. => 페이징은 크기가 정해져 시작과 끝주소를 알 수 있기 때문.

limit을 넘는 주소로 접근하면 오류가 발생함. 

+

할당 시, 보통 First fit/ Best fit 사용(가변분할) => external fragmentation 발생. (남는 공간에 들어가지 못하는 상황)

physical M이 부족할 때 swap area 사용.

 

segmentation의 가상주소 / 주소변환

- 형태: VA=<S(segment 번호),D>

- 주소변환 과정

1. 가상주소 구함 

2. seg-table에서 s의 시작주소 base address를 알아낸 후, D를 더하여 physical address구함. 

*이때, MMU는 d가 segment의 limit보다 큰지 점검하고, 크다면 오류와 함께 프로세스 강제종료, 크지 않다면 physical address 구함. 

3. 구한 물리주소에 접근해 원하는 데이터를 읽거나 씀.

 

segment memory 관리의 장단점

장점

- internal fragmentation이 없음(가변분할의 특징이기도 함.)

- 코드 보호와 공유에 유리함

단점

- external fragmentation이 발생 => 일반적으로 더 심각한 문제라서 segmentation 기법은 거의 사용하지 않음. 

- 크기가 동일하지 않은 segment로 swapping 할 수 없음. 


🚴‍♀️  paged segmentation (segmentation-paging 혼용기법)

동적 주소 변환 과정

 

1. 사용자가 데이터를 요청하면, 해당 주소가 몇번째 S의 몇번째 P로부터 얼마나 떨어져있는지 D 계산하여 

가상주소 VA=<S, P, D> 구함

2. segmentation table의 해당 세그먼트 번호로 가서 

 

 - 권한이 있는 page에 접근하는지

 - 자신의 영역을 벗어나는 불법 접근이 아닌지  

 

두가지를 확인함. 이상이 없다면 연결된 page table로 이동.

 

3. page table에서 해당 페이지가 어느 frame에 저장됐는지 찾음

- physical M에 frame 있다면 바로 메모리에 접근

- 없다면 swap area에 가서 해당 page 를 physical M으로 가져옴

 

4. physical M에 있는 frame의 처음 위치에서 D만큼 떨어진 곳에 가서 데이터 읽거나 씀


🚶‍♀️Demand paging - 요구 페이징

모든 페이지를 가져오면 낭비=> 사용자가 요구할 때만 해당 page를 M으로 가져오는 것.

 

Demand paging의 효과

1. 메모리의 절약

2. 메모리를 효율적으로 관리(꽉차면 관리 어려움)

3. 응답속도 향상

 

예) 포토샵: 필터들은 사용자가 필요로 할 때마다 memory로 가져옴. 

=> 페이지 테이블 내에 valid/ invalid를 통해 physical M(0-valid)에 있는지, Swap(1-invalid)에 있는지 구분 가능


🏃‍♂️ Page tagle entry의 구조

   page가 swap area에 있는 경우는 두가지.

 

- demand paging으로 인해 처음부터 physical M에 올라가지 못한 경우

- 메모리가 꽉 차서 swap area로 옮겨 온 경우


🚴‍♀️  Page fault

- valid bit(유효비트): 0-page가 메모리에 존재/ 1-page가 swap area에 존재

 

0일땐 page table에 frame num을 써주고,

1일 땐 page table에 swap num을 써줌.

 

- page fault

process가 페이지를 요청했을 때, 그 페이지가 메모리에 없는 상황. 

=> page fault가 발생하면 os가 일을 처리함

 

1. page fault 발생

2. 해당 프로세스는 block상태로 이동

3. user mode가 kernel mode로 바뀌고, OS가 swap area에서 physical memory로 페이지를 옮김 => I/O 작업

4. 디스크 read가 끝나면 page table entry(행을 이렇게 표현)에 valid/invalid 기록

5. ready queue에 프로세스 넣고, 때가되면 dispatch

6. cpu에서 다시 실행

1. page 요청

2. 적재여부 조사

3. page fault trap 

4. 빈 프레임 탐색

5. HDD에서 해당 값 가지고 올라옴 *

6. page load *

7. page table 수정

8. process 재시작

이 과정에서 os가 관여하는 부분은 *


🚴‍♀️  Page replacement(페이지 교체)

1. page fault 발생 (찾는 페이지가 p.t에 없음)

2. swap area에 있는 해당 페이지를 메모리의 빈 영역에 올림

     메모리가 꽉 찬 경우

     2-1. 잘 사용하지 않는 페이지(victim page)를 swap으로 내쫓기

     2-2. swap에 있는 해당 page를 올리기

3. page table update.

 

페이지 교체 알고리즘

어떤 페이지를 swap area로 보낼지 결정하는 알고리즘

 

victim page(대상페이지)

페이지 교체 알고리즘에 의해 swap area로 보낼 페이지


+ segmentation fault와 page fault

세그멘테이션 오류

사용자의 process가

1. 주어진 메모리 공간 벗어날 때

2. 접근 권한이 없는 곳에 접근할 때

해당 process 강제종료.

페이지 오류

해당 page가 physical memory에 없을 때 발생하는 오류.

swap area에서 해당 page를 physical memory로 옮기고 작업 재개. (사용자 프로세스와 무관)


🚶‍♀️ locality(지역성)

기억장치에 접근하는 패턴이 고르지 않고 특정 영역에 집중되는 성질. 

 

페이지 교체 알고리즘이 쫓아낼 page를 찾을 때 지역성을 바탕으로 함!

 

1. Spatial locality (공간의 지역성)

현재 위치에서 먼거리보다는 가까운 거리의 데이터에 접근할 확률이 높음.

 

2. Temporal locality (시간의 지역성)

현재보다 먼 시간에 접근한 데이터보다 가까운 시간에 접근한 데이터가 사용될 확률이 높음.

/

 

공간의 지역성과 시간의 지역성을 모두 확인할 수 있는 예시

for문

'OS' 카테고리의 다른 글

벼락치기 - 운영체제 12  (0) 2024.06.10
벼락치기 - 운영체제 10  (0) 2024.06.09
벼락치기 - 운영체제 9  (0) 2024.06.09