스와핑
- 프로세스를 임시로 보조기억장치로 보내고, 해당 빈 공간에 또 다른 프로세스를 적재하여 사용
- 프로세스들이 요구하는 메모리 주소 공간의 크기가 실제 메모리 크기보다 큰 경우에도 실행할 수 있음
- 스왑 영역
- 프로세스들이 쫓겨가는 보조기억장치의 일부 영역 - 스왑 아웃
- 현재 실행되지 않는 프로세스가 메모리에서 스왑영역으로 옮겨지는 것 - 스왑 인
- 스왑 영역에 있던 프로세스가 다시 메모리로 옮겨오는 것
- 스왑 아웃되기 전의 물리 주소와는 다른 주소에 적재될 수 있음
메모리 할당
최초 적합
- 메모리 내의 빈 공간을 순서대로 검색하다가 적재할 수 있는 공간을 발견하면 그 공간에 프로세스를 배치하는 방법
- 검색을 최소화할 수 있고, 빠른 할당이 가능함
최적 적합
- 운영체제가 빈 공간을 모두 검색해 본 후, 프로세스가 적재될 수 있는 공간 중 가장 작은 공간에 프로세스를 배치
최악 적합
- 운영체제가 빈 공간을 모두 검색해 본 후, 프로세스가 적재될 수 있는 공간 중 가장 큰공간에 프로세스를 배치
외부 단편화
- 프로세스들이 적재되고 삭제되며, 메모리 사이사이에 빈 공간이 생김
- 빈 공간이지만 큰 프로세스를 적재하기 어려우며 결국 메모리 낭비로 이어짐
해결방안: 압축
- 여기저기 흩어져있는 빈 공간들을 하나로 모으는 방식으로, 프로세스를 적당히 재배치
- 흩어져 있는 작은 빈 공간들을 하나의 큰 빈 공간으로 만들기
- 메모리에 있는 내용을 옮기는 작업은 많은 오버헤드를 야기
- 효율적으로 메모리를 압축하는 명확한 알고리즘을 결정하지 어려움
가상 메모리
- 실행하고자 하는 프로그램을 일부만 메모리에 적재하여 실제 물리 메모리 크기보다 더 큰 프로세스를 실행할 수 있게 하는 기술
페이징
- 페이지: 프로세스의 논리 주소 공간
- 프레임: 메모리 물리 주소 공간
- 메모리와 프로세스를 일정한 단위로 자른뒤, 메모리에 불연속적으로 할당
- 페이지 아웃: 페이징 시스템에서 스왑 아웃
- 페이지 인: 페이징 시스템에서 스왑 인
페이지 테이블
- 프로세스가 물리 주소에 불연속적으로 배치되더라도, 논리 주소에는 연속적으로 배치되도록 만들기
- 페이지 번호와 프로엠 번호를 짝지어 주는 일종의 이정표
- 현재 어떤 페이지가 어떤 프레임에 할당되었는지를 알려줌
- 프로세스들은 메모리에 분산되어 저장되어 있지만, CPU는 논리 주소를 순차적으로 실행하면됨
- 페이지 테이블 베이스 레지스터 (PTBR)
- 각 프로세스의 페이지 테이블이 적재된 주소를 가지고 있음
- 2번의 메모리 접근을 해야 찾을 수 있는 문제점 - 페이지 테이블 캐시 메모리 (TLB)
- 페이지 테이블의 일부 내용을 저장함
- 참조 지역성에 근거하여 최근에 사용된 페이지 위주
- TLB 히트: CPU가 발생한 논리 주소에 대한 페이지 번호가 TLB에 있을 경우
- TLB 미스: CPU가 발생한 논리 주소에 대한 페이지 번호가 TLB에 없을 경우
페이징에서의 주소 변환
- 특정 주소에 접근하기 위해서
- 어떤 페이지, 프레임에 접근하고 싶은지? (페이지 번호)
- 접근하려는 주소가 그 페이지, 프레임으로부터 얼마나 떨어져 있는지? (변위) - 논리 주소 <페이지 번호, 변위> → 페이지 테이블 → 물리 주소 <프레임 번호, 변위>로 변환
페이지 테이블 엔트리
- 페이지 테이블의 각각의 행
- 유효 비트, 보호 비트, 참조 비트, 수정 비트 등 중요한 정보들이 담김
- 유효 비트
- 현재 해당 페이지에 접근 가능한지 여부
- 페이지가 메모리에 적재되어 있다면 1
- 페이지가 메모리에 적재되어 있지 않다면 0
- 페이지 폴트: 메모리에 없는 페이지에 접근하려할 때 발생 - 보호 비트
- 페이지 보호 기능을 위해 존재하는 비트
- 페이지가 읽기만 가능한 경우 0
- 페이지가 읽기, 쓰기 가능할 경우 1
- 3개의 비트로 (읽기, 쓰기, 실행 권한)을 나타내기도함 - 참조 비트
- CPU가 이 페이지에 접근한 적이 있는지 여부
- 적재 이후 CPU가 읽거나 쓴 페이지는 1
- 한번도 읽거나 쓴적없는 페이지는 0 - 수정 비트 (더티 비트)
- 해당 페이지에 데이터를 쓴 적이 있는지 없는지 수정 여부
- 변경된 적이 있는 페이지는 1
- 변경된 적이 없는 페이지는 0
쓰기 시 복사
- 프로세스 간의 페이지를 공유할 수 있다는 점
- 프로세스 생성 시간을 줄여 메모리 공간 절약 가능
계층적 페이징
- 페이지 테이블 엔트리를 항상 메모리에 유지하지 않아도 되는 방법
- 페이지 테이블을 페이징하여 여러 단계의 페이지를 두는 방식
요구 페이징
- 처음부터 모든 페이지를 적재하지 않고, 필요한 페이지만을 메모리에 적재하는 기법
- 실행에 요구되는 페이지만 적재하는 기법
- 페이지 교체
- 이를 결정하는 알고리즘: 페이지 교체 알고리즘
페이지 교체 알고리즘
- 일반적으로 페이지 폴트를 가장 적게 일으키는 알고리즘
- 페이지 폴트 횟수
- 물리 메모리에 데이터가 없어서, 가상 메모리로부터 해당 페이지를 가져오는 것 - 페이지 참조열
- 연속된 페이지는 페이지 폴트를 발생시키지 않음
FIFO 페이지 교체 알고리즘
- 가장 먼저 올라온 페이지부터 내쫓는 방법
- 프로그램 실행 내내 사용될 내용을 포함할 수도 있기 때문에, 좋은 알고리즘은 아님
- 2차 기회 페이지 교체 알고리즘
- 한 번 더 기회를 주는 알고리즘
최적 페이지 교체 알고리즘
- CPU에 의해 참조되는 횟수를 고려하는 교체 알고리즘
- 가장 오랫동안 사용되지 않을 페이지를 교체
- 가장 낮은 페이지 폴트율을 보장하는 알고리즘
- 실제로 구현하기에는 어렵기 때문에, 이론상 성능을 평가하기 위해 사용
LRU 페이지 교체 알고리즘
- 가장 오랫동안 사용되지 않은 페이지를 교체하는 알고리즘
스래싱과 프레임 할당
스래싱
- 프로세스가 실제 실행되는 시간보다 페이징에 더 많은 시간을 소요하여 성능이 저하되는 문제
- 멀티프로그래밍의 정도: 메모리에서 동시 실행되는 프로세스의 수
- 정도가 높다면 현재 많은 프로세스가 동시에 실행 중
- 정도가 낮다면 현재 적은 프로세스가 동시에 실행 중
프레임 할당
- 균등 할당
- 모든 프로세스에 균등하게 프레임을 할당하는 방법 - 비례 할당
- 프로세스 크기에 따라 프레임을 다르게 할당하는 방법 - 작업 집합
- 실행 중인 프로세스가 일정 시간 동안 참조한 페이지의 집합
- CPU가 과거에 주로 참조한 페이지를 작업 집합에 포함한다면, 운영체제는 작업 집합의 크기만큼만 프레임을 할당하면 됨 - 페이지 폴트 빈도 기반
- 페이지 폴트율의 상한, 하한선을 정하고, 이 범위 안에서만 프레임을 할당하는 방식
'CS notes > OS' 카테고리의 다른 글
[OS] 파일 시스템 (1) | 2024.05.02 |
---|---|
[OS] 교착 상태를 막아봅시다. (0) | 2024.04.28 |
[OS] 프로세스 동기에 대해서 알아보자 (0) | 2024.04.27 |
[OS] CPU 스케줄링에 대해서 알아보자 (0) | 2024.04.25 |
[OS] 프로세스와 스레드 (0) | 2024.04.23 |