9-1.[os] 요구 페이징
가져오기 정책: 프로세스가 필요로 하는 데이터를 언제 메모리로 가져올지 결정하는 것
요구 페이징(demand paging): 프로세스가 요청할 때 메모리로 가져오는 방법
요구 페이징의 개요
- 컴퓨터 오래 켜두면 느려짐: 작업하지 않고 쉬는 프로세스나 좀비 프로세스가 메모리를 차지해서 메모리 관리가 복잡해지기 때문!
필요한 모듈만 메모리에 올려 실행하고 나머지는 필요할 때 불러온다
- 메모리 절약
- 메모리를 효율적으로 관리
- 응답 속도를 향상시키기
예시) 포토샵
- 포토샵 + (피부 보정 필터, 노이즈 제거 필터)
- 모든 프로세스를 메모리에 올리면 메모리 많이 차지하고 오래 걸림
- 메모리에는 포토샵 본 프로그램만 올리고 사용자가 필요로할 때마다 메모리로 가져온다
미리 가져오기:
- 요구 페이징과 반대
- 앞으로 필요할거라고 예상되는 페이지를 미리 가져오는 방식 예) 캐시
- 장점: 시스템 성능을 향상
- 단점: 미리 가져온 데이터가 쓸모없으면 피해가 큼
- 현대 운영체제는 요구 페이징을 사용
- 순수한 스와핑(swapping): 프로세스를 구성하는 모든 페이지를 메모리에 올리는 것
- 게으른 스와퍼(lazy swapper): 사용자가 요구할 때 메모리에 올리는 것
- 프로세스 입장에선 프로세스를 구성하는 모든 페이지가 한꺼번에 메모리로 올라오는 게 좋다
페이지 테이블 엔트리 구조
- 가상 메모리의 크기 = 물리 메모리 + 스왑 영역
- 스왑 영역: 하드디스크에 존재하나 메모리 관리자가 관리하는 영역
- 스왑인: 스왑 영역 -> 물리 메모리
- 스왑아웃: 물리 메모리 -> 스왑 영역
페이지가 스왑 영역에 있는 경우:
- 요구 페이징으로 인해 처음부터 물리 메모리에 올라가지 못한 경우
메모리가 꽉 차서 스왑 영역으로 옮겨 온 경우
유효 비트(valid bit): 페이지가 메모리에 있는지, 스왑 영역에 있는지 페이지 테이블에 표시할 때 사용하는 비트
페이지 테이블 엔트리(PTE):
- 페이지 테이블의 한 행
- 페이지 번호 + 플래그 비트 + 프레임 번호
- 직접 매핑 -> 페이지 번호 없음
주소 필드(address field)
접근 비트(access bit):
- 페이지가 메모리에 올라온 후 사용한 적이 있는지
- 읽기, 실행 -> 비트가 1이 됨
- = 참조 비트(reference bit)
변경 비트(modified bit):
- 페이지가 메모리에 올라온 후 데이터의 변경이 있었는지
- 쓰기, 추가 -> 비트가 1이 됨
- = 더티비트(dirty bit) - 새로운 값으로 오염되었다
유효 비트(valid bit):
- 페이지가 실제 메모리에 있는지를 나타내는 비트
- 물리 메모리가 부족할 경우 일부 페이지가 스왑 영역으로 옮겨짐
- = 현재 비트(present bit) - 해당 페이지가 메모리에 존재하는지
읽기, 쓰기, 실행 비트:
- 접근 권한 비트(rights bit) = 읽기 비트(read bit) + 쓰기 비트(write bit) + 실행 비트(execute bit)
페이지 부재
가상 메모리의 페이지 테이블에서 물리 메모리에 있는지, 스왑 영역에 있는지 표시하기 위해 유효 비트 사용
페이지가 메모리에 있다 -> 유효 비트 0 ->주소 필드에 물리 메모리의 프레임 번호 저장
- 페이지가 메모리에 없다 -> 유효 비트 1 -> 주소 필드에 스왑 영역의 페이지 주소 저장
페이지 부재(page fault): 프로세스가 페이지를 요청했을 때 그 페이지가 메모리에 없는 상황
- 프로세스가 페이지 3을 요청
- 페이지 테이블의 유효 비트가 1 -> 페이지 부재 발생
- 스왑 영역의 0번에 있는 페이지 -> 물리 메모리로 이동(스왑인)
- PTE 유효 비트 1 -> 0, 주소 필드 0 -> 5
- 페이지 부재 발생
- 스왑 영역에 있는 페이지를 메모리의 빈 영역으로 이동
- 페이지 테이블 갱신
페이지 교체 알고리즘 (page replacement algorithm): 어떤 페이지를 스왑 영역으로 내보낼지 결정하는 알고리즘
대상 페이지 (victim page): 페이지 교체 알고리즘에 의해 스왑 영역으로 보낼 페이지
- 해당 페이지의 유효 비트가 1 -> 페이지 부재
메모리가 꽉 차 있음 -> 스왑 영역에 있는 페이지(E)를 가져와야하는데 못함 -> 메모리 프레임 3번의 페이지 A를 스왑 영역으로 내보냄(스왑 아웃)
PTE 1의 유효 비트: 0 -> 1, 주소필드: 프레임 3 -> 스왑인 주소 6 소 6으로바뀐다.
- 스왑영역 1번에 있던 페이지 E가프레임 3으로 올라감(스왑인).
- PTE 4의 유효 비트: 1 -> 0, 주소 필드: 스왑 주소 1 -> 프레임 3
세그먼테이션 오류:
- 사용자의 프로세스가 주어진 메모리 공간을 벗어나거나 접근 권한이 없는 곳에 접근할 때 발생
- 사용자 프로세스에 의해 발생하며 해당 프로세스를 강제 종료하여 해결
페이지 부재:
- 해당 페이지가 물리 메모리에 없을 때 발생하는 오류
- 사용자 프로세스와 무관
- 메모리 관리자는 스왑 영역에서 해당 페이지를 물리 메모리로 옮긴 후 작 업을 진행
지역성
지역성
- 메모리가 꽉 차서 어떤 페이지를 스왑 영역으로 보낼 때 되도록 앞으로 사용하지 않을 페이지를 쫓아내는 것이 좋다
- 페이지 부재 줄이고 컴퓨터 성능이 높아짐
- 자주 사용될 페이지를 쫓아내면 다시 물리 메모리로 불러와야 해서 시스템의 성능이 떨어짐
- 페이지 교체 알고리즘 -> 지역성(locality)을 바탕으로 함
- 공간의 지역성, 시간의 지역성, 순차적 지역성
공간의 지역성
- spatial locality
- 집 앞 편의점에 갈 확률이 더 높다
- 현재 위치에서 가까운 데이터에 접근할 확률이 먼 거리에 있는 데이터에 접근할확률보다 높다
시간의 지역성
- temporal locality
- 어제 산 잡지를 읽을 확률이 더 높다
- 가까운 시간에 접근한 데이터가 더 먼 시간에 접근한 데이터보다 사'용될 확률이 높다
- 공간적 지역성이랑 비슷해서 대충 생략함
순차적 지역성
- sequential locality
- 여러 작업이 순서대로 진행되는 경향이 있다
- 일반적인 프로그래밍도 순서대로 진행됨
예) 캐시
- 시간적, 공간적으로 가까이 있는 데이터 가져오는게 캐시 적중률을 높임
- 현재 5번 실행 -> 10번 o 200번x
- goto문 사용하면 엉뚱한 행으로 이동해서 이미 가져온 데이터가 쓸모없어짐 -> 쓰지말 것!