CH14. 가상 메모리
연속 메모리 할당
- 연속 메모리 할당 : 프로세스를 연속적인 메모리 공간에 할당하는 방식
- 스와핑(swapping) : 현재 실행되지 않는 프로세스를 보조기억장치로 내보내고, 확보된 메모리 공간에 다른 프로세스를 적재하여 실행하는 기법
- 스왑 영역(swap space) : 내보낸 프로세스가 저장되는 보조기억장치의 일부 영역
- 스왑 아웃(swap-out) : 프로세스가 메모리에서 스왑 영역으로 옮겨지는 것
- 스왑 인(swap-in) : 프로세스가 스왑 영역에서 메모리로 옮겨지는 것
- 스와핑을 통해 필요한 메모리가 실제 메모리 공간보다 큰 프로세스도 동시에 실행할 수 있다.
- 메모리 할당 방식
- 최초 적합(first fit) : 최초로 발견한 적재 가능 메모리 공간에 프로세스를 배치하는 방식
- 최적 적합(best fit) : 적재 가능한 메모리 공간 중 가장 작은 공간에 프로세스를 배치하는 방식
- 최악 적합(worse fit) : 적재 가능한 메모리 공간 중 가장 큰 공간에 프로세스를 배치하는 방식
- 외부 단편화(external fragmentation) : 메모리 공간 사이의 프로세스를 적재하기 어려울 만큼 작은 공간들에 의해 메모리가 낭비되는 현상
- 연속 메모리 할당 시 프로세스들을 동시에 실행하기 위해 스와핑을 하는 과정에서 외부 단편화 문제 발생
- 메모리 압축(compaction) : 흩어져 있는 빈 메모리 공간들을 하나로 모으는 것
- 메모리에 저장된 프로세스들을 적당히 재배치하여 흩어져있는 빈 메모리 공간을 하나로 모아서 사용
- 메모리 압축은 많은 오버헤드를 야기하고, 압축하는 동안 시스템이 동작을 중지해야 하므로 비효율적
페이징을 통한 가상 메모리 관리
- 가상 메모리(virtual memory) : 실행하고자 하는 프로그램을 일부만 메모리에 적재하여 실제 물리 메모리 크기보다 더 큰 프로세스를 실행할 수 있게 하는 기술
- 페이징(paging) : 논리 주소 공간을 페이지 단위로 자르고 물리 주소 공간을 프레임 단위로 자른 뒤 각 페이지를 프레임에 할당하는 가상 메모리 관리 기법
- 프로세스를 불연속적으로 할당하여 외부 단편화 문제를 해결
- 반대로, 프로세스가 페이지 단위로 나누어 떨어지지 않을 때 페이지의 남는 메모리 공간이 낭비되는 내부 단편화 문제가 발생할 수 있음
- 프로세스 크기가 108KB일 때 페이지 크기가 10KB이면 마지막 페이지는 2KB가 남음
- 내부 단편화를 적절히 방지하면서도 페이지 테이블 크기가 너무 커지지 않도록 적절한 페이지 크기를 찾아야 한다.
- 페이징에 스와핑 사용
- 프로세스 실행에 필요한 일부 페이지들만 메모리에 적재하고, 당장 실행에 필요하지 않은 페이지들은 보조기억장치(스왑 영역)에 남겨 둠
- 페이지 아웃(page-out) : 페이지 단위 스왑 아웃
- 페이지 인(page-in) : 페이지 단위 스왑 인
- 즉, 프로세스를 실행하기 위해 프로세스 전체가 메모리에 적재될 필요가 없다.
- 페이지 테이블(page table) : 페이지 번호와 프레임 번호를 매칭시켜 놓은 표
- CPU는 논리 주소를 순차적으로 읽어서 프로세스 실행
- 물리 주소가 불연속적으로 배치되어 있더라도, 페이지와 프레임이 페이지 테이블에서 1:1로 매칭되어 있으므로 순서대로 실행시킬 수 있다.
- 페이지 테이블 베이스 레지스터(PTBR; Page Table Base Register) : 각 프로세스의 페이지 테이블이 적재된 주소를 저장하는 CPU 내부 레지스터
- 프로세스를 실행하면 페이지 테이블이 메모리에 적재되고, 그 주소가 PTBR에 기록됨
- TLB(Translation Lookaside Buffer) : 페이지 테이블의 캐시 메모리 (in MMU)
- 페이지 테이블은 메모리에 위치하므로 프레임을 읽기 위해 메모리를 두 번 접근해야 함
- 페이지 테이블에 접근하여 프레임 번호를 찾음
- 해당 프레임 번호로 접근
- 참조 지역성에 근거하여 최근에 사용된 페이지들을 TLB에 저장해 두고 사용하여 속도 향상
- TLB 히트(TLB hit) : 논리 주소에 대한 페이지 번호가 TLB에 있을 때
- TLB 미스(TLB miss) : 논리 주소에 대한 페이지 번호가 TLB에 없을 때
- TLB 히트인 경우 메모리 접근 횟수가 1회로 줄어든다.
- 페이지 테이블 엔트리(page table entry) : 페이지 테이블의 각 행
- 페이지 번호, 프레임 번호 : 논리 주소와 물리 주소 매핑
- 유효 비트(valid bit) : 페이지 접근 가능 여부 (메모리 적재 여부)
- 페이지 폴트(page fault) : 유효 비트가 0인 페이지에 접근할 때 발생하는 예외
- 페이지 폴트 처리 과정
- 페이지 폴트(인터럽트) 발생
- 페이지 폴트 처리 루틴(인터럽트 서비스 루틴) 실행
- 페이지 폴트 처리 루틴 종료 후 CPU 실행 재개
- 보호 비트(protection bit) : 페이지 쓰기 가능 여부
- 운영체제는 보호 비트가 0인 페이지에 쓰기 시도를 막아서 페이지를 보호한다.
- 보호 비트 종류
- 읽기(r; read), 쓰기(w; write), 실행(e; execute)
- 보호 비트가
110
이면 읽기와 쓰기는 가능하지만 실행은 안됨
- 참조 비트(reference bit) : CPU가 해당 페이지에 접근한 적 있는지 여부
- 수정 비트(modified bit) or 더티 비트(dirty bit) : CPU가 해당 페이지에 쓰기를 한 적이 있는지 여부
- 수정 비트가 1인 페이지는 스왑 아웃될 때 보조기억장치에 수정된 값을 기록하는 추가 작업 필요
페이지 교체와 프레임 할당
- 요구 페이징(demand paging) : 프로세스 실행에 요구되는 페이지만 메모리에 적재하는 기법
- 현재 프로세스 실행에 필요하지 않은 페이지들은 유효 비트가 0인 상태로 보조기억장치에 저장
- CPU가 유효 비트가 0인 페이지에 접근하려고 시도하면 페이지 폴트를 발생시켜 메모리에 적재시킴
- 순수 요구 페이징(pure demand paging) : 프로세스 실행 시 처음부터 메모리에 어떤 페이지도 적재하지 않고 실행하는 기법
- 첫 명령어 시작 순간부터 페이지 폴트가 계속 발생하며 메모리에 페이지를 적재할 것
- 실행에 필요한 페이지들이 메모리에 적재되어 갈수록 페이지 폴트 빈도가 낮아짐
- 페이지 교체(page replacement) : 메모리가 가득 찼을 때 실행에 필요한 페이지를 메모리에 적재하기 위해 기존 적재된 페이지를 보조기억장치로 보내는 것
- 페이지 교체 알고리즘 : 어떤 프로세스를 교체할 것인지 선택하는 알고리즘
- 페이지 폴트 횟수를 기준으로, 가장 적게 발생하는 알고리즘의 성능을 좋게 평가한다.
- 페이지 참조열(page reference string) : 페이지 폴트 횟수를 계산할 수 있는 페이지열(sequence)
- 같은 페이지에 여러 번 접근할 때는 페이지 폴트가 발생하지 않음
- 연속된 페이지를 생략한 페이지열을 바탕으로 페이지 폴트 횟수 계산
- 종류
- FIFO 알고리즘(First-In First-Out) : 메모리에 가장 먼저 올라온 페이지부터(오래된 페이지부터) 스왑 아웃시키는 알고리즘
- 2차 기회 알고리즘(Second Chance) : 참조 비트가 1인 페이지는 스왑 아웃하지 않고 참조 비트를 0으로, 적재 시간을 현재로 초기화하여 FIFO 알고리즘의 문제를 개선한 알고리즘
- 최적 알고리즘(Optimal) : 앞으로도 사용 빈도가 가장 낮은 페이지를 스왑 아웃시키는 알고리즘
- 성능이 가장 좋지만 현실적으로 사용 빈도를 예측하기는 불가능함
- 실제로 운영체제가 사용하지 않고 다른 알고리즘의 성능 평가 기준으로 활용
- LRU 알고리즘(Least Recently Used) : 가장 오랫동안 사용되지 않은 페이지를 스왑 아웃시키는 알고리즘
- 최적 알고리즘을 현실적인 방법으로 변형
- 최근에 사용되지 않은 페이지들은 앞으로도 사용되지 않을 것으로 간주함
- 스래싱(thrashing) : 지나치게 빈번한 페이지 교체로 인해 CPU 이용률이 낮아지는 문제
- 좋은 페이징 알고리즘을 사용하더라도, 프로세스가 사용할 수 있는 프레임 수가 적으면 페이지 폴트가 자주 발생할 수밖에 없다.
- 프로세스를 무조건 많이 동시에 실행한다고 해서 컴퓨터 성능이 비례하여 좋아지지 않는다.
- 프로세스가 너무 많이 실행되면 어느 순간부터는 어떤 프로세스가 사용할 수 있는 프레임 수가 적어짐
- 프레임 수가 적어지면서 페이지 교체(페이지 폴트)가 더 많이 일어남
- 페이지 교체가 일어나는 동안에는 CPU가 프로세스를 실행하지 못하므로 성능이 저하됨
- 즉, 스래싱은 프로세스가 최소한으로 필요로 하는 프레임을 수가 보장되지 않아서 발생하므로, 필요한 프레임 수를 적절하게 할당하는 것이 중요하다.
- 프로세스에 프레임을 할당하는 방법
CH 15. 파일 시스템