독학사 운영체제 편을 공부하고 정리한 글입니다.
페이지 호출 기법
가져오기 정책(fetch): 데이터를 언제 메모리로 가져올 것 인가
1) 요구 페이징
프로세스가 요청할 때 메모리에 가져온다.
가급적 적은 양의 프로세스만 유지하기 때문에 메모리를 효율적으로 관리한다.
필요한 모듈만 실행하기 때문에 응답속도가 향상된다.
2) 예상 페이징
예상 되는 페이지를 미리 가져오는 방식
캐시 메모리는 예상 되는 데이터르 미리 메모리에 가져온다.
예상이 실패 했을 경우 효율이 낮으므로 현대 운영체제는 요구 페이징을 기본으로 한다.
페이지 테이블 엔트리
페이지는 물리 메모리에 있거나 스왑 영역(하드디스크)에 보관되어 있다.
- 스왑 아웃: 물리 메모리에 있던 페이지를 스왑 영역으로 내보내는 것
- 스왑 인: 스왑 영역에 있던 페이지를 물리 메모리에 가져오는 것
- 스왑 영역에 페이지가 있는 경우
페이지가 스왑영역에 있을 때 해당 페이지 엔트리의 유효비트는 1로 표시한다.
1) 요구 페이징으로 인해 처음부터 물리 메모리에 올라가지 못한 경우
2) 메모리가 꽉차서 스왑 영역으로 내보내진 경우
- 페이지 테이블 엔트리의 구성
1. 페이지 번호
페이지-프레임 쌍의 매핑을 위한 페이지 고유 번호이다.
2. 프레임 번호
메모리 관리자는 프레임 번호를 이용하여 가상 주소를 물리 주소로 변환한다.
주소 필드라고도 한다.
3. 플래그 비트
a) 접근 비트 (a) / reference bit: 페이지가 메모리에 올라온 후 사용한 적이 있는지 알려주는 비트이다.
b) 변경비트 (m) / dirty bit: 페이지가 메모리에 올라온 후 데이터의 변경이 있었는 지 알려주는 비트이다.
c) 유효 비트 (v) / present bit: 실제 메모리에 있는 지 나타내는 비트, 1일 경우 해당 페이지는 스왑 영역에 있다.
d) 읽기, 쓰기, 실행 비트 (r/w/x): 페이지에 대한 읽기, 쓰기, 실행 권한을 나타낸다.
페이지 부재
- 유효 비트, present bit의 변화
- 페이지가 물리 메모리에 있는 지 스왑 영역에 있는 지 나타내는 유효 비트는 1 일 경우 스왑영역에 있다는 뜻이고 0 일 경우 물리 메모리에 있다는 뜻이다.
- 스왑 인이 되었을 경우 해당 페이지의 엔트리에서 유효 비트는 (1->0)으로 변화하고 스왑 아웃의 경우 반대로 (0->1)로 변한다.
- 물리 메모리에 있는 페이지의 경우 주소 필드에 해당 물리 주소, 프레임을 저장하고
- 스왑 영역에 있는 페이지의 경우 주소 필드에 스왑 영역 저장 장치의 주소를 저장한다.
페이지 부재
프로세스가 요청한 페이지가 메모리에 없는 상황을 말한다. 페이지 부재 발생시 해당 페이지를 사용할 수 있도록
스왑 영역에서 물리 메모리로 옮겨야 한다.
- 메모리에 빈 프레임이 있는 상태에서 페이지 부재가 발생한 경우
a) 페이지 부재 발생
프로세스가 페이지 3번을 요청 했을 때 해당 페이지 테이블 엔트리의 유효 비트가 1인 것을 확인하고 페이지 부재가 발생한다.
b) 스왑 인
스왑 영역의 해당 주소 5번에서 데이터 D를 비어있던 물리 메모리 3번 프레임에 적재한다.
c) 업데이트
기존 페이지 테이블 엔트리의 유효 비트(1->0)와 실제 프레임 번호(5->3)로 업데이트 한다.
- 메모리에 빈 프레임이 없는 상태에서 페이지 부재가 발생한 경우
빈 프레임이 없는 경우 물리 메모리에 있는 프레임 중 "희생자" 프레임을 결정하여 스왑 아웃을 해야한다.
희생자 프레임을 결정하는 알고리즘이 페이지 교체 알고리즘이라고 한다.
a) 페이지 부재
데이터 E에 대한 유효 비트가 1이다.
b) 스왑 아웃
페이지 교체 알고리즘으로 A가 대체되어 스왑 영역 6번 주소로 스왑 아웃 되었다.
c) 업데이트
기존 페이지 테이블 엔트리에서 A에 대한 유효 비트(0->1)와 주소필드(2->6)를 업데이트 한다.
d) 스왑 인
데이터 E를 스왑 영역 4번에서 물리 메모리 2번 프레임에 적재 시킨다.
e) 업데이트
4번 페이지에 대한 유효 비트(1->0)와 주소 필드(4->2)를 업데이트 한다.
- Segmentation Fault vs Page Fault
세그먼테이션 오류는 사용자 프로세스가 주어진 메모리 영역을 벗어나거나 접근 권한이 없는 메모리에 접근할 때 발생하고 프로세스를 강제 종료한다.
페이지 부재는 요청한 페이지가 물리 메모리에 없을 때 발생하는 오류로 스왑 영역에서 해당 페이지를 물리 메모리를 적재하는 작업을 실행한다. 사용자 프로세스와는 관련이 없다.
데이터의 지역성
1) 공간의 지역성
최근 접근된 데이터의 주소와 가까운 주소를 가진 데이터가 다음에 접근될 확률이 높다.
2) 시간의 지역성
최근 접근된 데이터들은 미래에 또다시 접근될 확률이 높다.
3) 캐시의 지역성
두 지역성을 활용하여 데이터를 미리 캐시 메모리에 가져온다. 캐시 적중률이 높을 수록 효율이 좋다.
4) 페이지 교체 알고리즘에서 활용
희생자 페이지를 결정할 때 지역성 이론을 활용하여 미래에 접근될 확률이 적은 페이지를 스왑 아웃하는 것이 바람직하다.
'Computer Science 기본 지식 > 운영체제' 카테고리의 다른 글
[C++ Thread] C++ Thread 생성하기 (0) | 2021.04.24 |
---|---|
[운영체제] 가상 메모리 (3) 페이지 교체 알고리즘과 프로세스 적재 정책 (0) | 2021.01.20 |
[운영체제] 가상 메모리 (1) 페이징과 세그먼테이션 (0) | 2021.01.19 |
[운영체제] 주 메모리 관리 (0) | 2021.01.18 |
[운영체제] 교착상태 (0) | 2021.01.16 |