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 |