메모리 관리 기법의 하나입니다. 컴퓨터에서 이용 가능한 기억 자원을 이상적으로 추상화하여 사용자에게 매우 큰 메모리로 보이게 만들고, 각 프로그램에 실제 메모리 주소가 아닌 가상의 메모리 주소를 주는 방식입니다. 이 방식은 멀티 태스킹 운영 체제에서 사용되며, 실제보다 큰 메모리 영역을 제공하는 방법으로 사용됩니다.
스와핑 swapping
대기 상태가 된 프로세스나 오랫동안 사용되지 않은 프로세스들을 임시로 보조기억장치 일부 영억으로 쫓아내고, 그렇게 해서 생긴 메모리상의 빈 공간에 또 다른 프로세스를 적재하여 실행하는 방식입니다.
- 스왑 영역(swap space) : 스왑 아웃되는 프로세스들을 보관하는 보조기억장치(secondary storage, Backing storage)의 일부 영역
- 스왑 아웃(sawp-out) : 현재 실행되지 않는 프로세스가 메모리에서 스왑 영역으로 옮겨지는 것
- 스왑 인(swap-in) : 스왑 영역에 있던 프로세스가 다시 메모리로 옮겨오는 것
- 기존의 물리 주소와는 다른 곳에 적재될 수 있음
⇒ 스와핑을 이용하면 프로세스들이 요구하는 메모리 주소 공간의 크기가 실제 메모리 크기보다 큰 경우에도 프로세스들을 동시 실행할 수 있습니다.
메모리 할당
비어 있는 메모리 공간에 프로세스를 연속적으로 할당하는 방식에서는 대표적으로 최초 적합, 최적 적합, 최악 적합의 세가지 방식이 있습니다.
- 최초 적합(first fit) : 프로세스가 적재 될 수 있는 공간을 발견하는 즉시 메모리를 할당하는 방식
- 검색을 최소화 → 빠른 할당 가능
- 최적 적합(best fit) : 프로세스가 적재될 수 있는 공간 중 가장 작은 공간에 프로세스를 배치하는 방식
- 최악 적합(worst fit) : 프로세스가 적재될 수 있는 공간 중 가장 큰 공간에 프로세스를 배치하는 방식
외부 단편화 external fragmentation
프로세스를 할당하기 어려울 만큼 작은 메모리 공간들로 인해 메모리가 낭비되는 현상을 의미합니다.
외부 단편화 해결 방안
- 압축
메모리 조각 모음이라고도 부르는 이 방식은 여기 저기 흩어져 있는 빈 공간들을 하나로 모으는 방식으로 메모리 내에 저장된 프로세스를 적당히 재배치 시켜 흩어져 있는 작은 빈 공간들을 하나의 큰 빈 공간으로 만드는 방법입니다.
단점 : 해당 방식이 진행되는 동안 시스템은 하던 일을 중지해야 하고, 메모리에 있는 내용을 옮기는 작업은 많은 오버헤드를 야기합니다.
내부 단편화internal fragmentation
페이지의 크기 단위가 프로세스의 크기 보다 커서 메모리가 남지만, 다른 프로세스는 사용할 수 없어서 메모리가 낭비 되는 것을 내부 단편화라고 합니다.
페이징Paging
페이징은 물리 주소 공간을 프레임 단위로 자르고 프로세스의 논리 주소 공간을 페이지 단위로 자른 뒤 각 페이지를 프레임에 할당하는 가상 메모리 관리 기법입니다.
페이징에서의 스와핑
페이지 인
메모리 ← 보조 기억 장치
페이지 아웃
메모리 → 보조 기억 장치
※ 프로세스를 이루는 페이지 중 일부 페이지만 메모리에 적재하고, 그 이외의 페이지들은 보조 기억 장치에 남겨두는 방식을 통해 물리 메모리보다 더 큰 프로세스를 실행 할 수 있습니다.
페이지 테이블page table
프로세스의 페이지 정보를 저장하고 있는 테이블입니다. 어떤 페이지가 어떤 프레임에 할당되었는지를 알려줍니다.
페이지 테이블을 이용해 프레임 번호를 확인하는 방법
프로세스가 실행될 때 CPU내의 레지스터 *PTBR은 프로세스의 페이지 테이블을 가리키고, CPU는 프로세스의 페이지 테이블을 통해 프로세스의 페이지가 적재된 프레임을 알 수 있습니다.
*페이지 테이블 베이스 레지스터(PTBR : Page Table Base Register) : 각 프로세스의 페이지 테이블이 적재된 주소를 가리키는 레지스터
문제점
페이지 테이블을 메모리에 두면 메모리 접근 시간이 두배로 늘어납니다.
해결
TLB(Translation Lookaside Buffer)
가상 메모리 주소를 물리적인 주소로 변환하는 속도를 높이기 위해 사용되는 캐시입니다. 페이지 테이블의 일부 내용을 저장합니다. 주로 최근에 사용된 페이지 위주로 가져와 저장합니다.
TLB 히트 : CPU가 발생한 논리 주소에 대한 페이지 번호가 TLB에 있을 경우
TLB 미스 : 페이지 번호가 TLB에 없어서 메모리 내의 페이지 테이블에 접근해야 하는 경우
페이징에서의 주소 변환
페이징 시스템에서 모든 논리 주소는 기본적으로 페이지 번호와 변위로 이루어져 있습니다. 논리 주소<페이지 번호, 변위> 는 페이지 테이블을 통해 물리 주소<프레임 번호, 변위>로 변환 됩니다.
페이지 번호 : 접근하고자 하는 페이지 번호
변위 : 접근하려는 주소가 프레임의시작 번지로부터 얼만큼 떨어져 있는지를 알기 위한 정보
페이지 테이블 엔트리 PTE
- 유효 비트 valid bit
- 현재 해당 페이지에 접근 가능 여부
- 현재 페이지가 메모리에 적재되어 있는지, 보조기억장치에 있는지를 알려주는 비트
- 1일 경우 : 메모리에 적재됨
- 0일 경우 : 메모리에 적재되지 않음
- 유효 비트가 0일때 페이지 폴트 예외 발생
페이지 폴트 처리 과정
1. CPU는 기존의 작업을 백업
2. 페이지 폴트 처리 루틴을 실행
3. 페이지 처리 루틴은 원하는 페이지를 메모리로 가져온 뒤 유효 비트를 1로 변경
4. 페이지 폴트 처리 완료, CPU가 해당 페이지 접근 가능
- 보호 비트 protection bit
- 해당 페이지의 읽고 쓰기 가능 여부
- 페이지 보호 기능
- 0일 경우 : 해당 페이지는 읽기만 가능
- 1일 경우 : 해당 페이지는 읽기, 쓰기 모두 가능
- 읽기(Read), 쓰기(Write), 실행(eXecute) 가능 여부를 나타내는 조합으로도 구현 가능
- 참조 비트 reference bit
- 접근 여부
- 1일 경우 : 적재 이후 CPU가 읽거나 쓴 페이지
- 0일 경우 : 적재 이후 한번도 접근하지 않음
- 수정 비트 modified bit
- 해당 페이지에 데이터를 쓴 적이 있는지 없는지 수정 여부
- 더티 비트 dirty bit 라고도 부름
- 스왑 아웃될때 값의 수정이 필요한지 아닌지 판단하기 위해 존재 \
- 1일 경우 : 변경된 적 있음
- 0일 경우 : 변경된 적 없음
Present bit : 해당 페이지가 물리 메모리에 존재하는지 확인 가능
Present bit와 valid bit의 차이점
- Valid bit는 CPU가 생성한 주소가 유효한지 유효하지 않은지를 나타내며 생성된 주소가 프로세스 주소 공간에 속하는지 여부를 알려줍니다.
- Present bit는 해당 페이지가 물리메모리에 존재하는지 존재 여부를 알려주는 비트이다. 존재하지 않을 경우에 접근 시 page fault가 발생한다. 합법적인 접근이며 없는 page를 메모리에 올리고 다시 접근한다.
Difference between present - absent bit and valid - invalid bit in a page table?
while reading I found this: Present/Absent bit – Present or absent bit says whether a particular page you are looking for is present or absent. In case if it is not present, that is called Page ...
cs.stackexchange.com
https://www.youtube.com/watch?v=ZA1xN-3ZYww
쓰기 시 복사copy on write
페이징의 이점 중 하나인 '프로세스 간에 페이지를 공유'의 대표적인 사례입니다.
부모 프로세스와 동일한 자식 프로세스가 생성되면 자식 프로세스는 부모 프로세스와 동일한 프레임을 가리 킵니다. 이 때문에 굳이 부모 프로세스의 메모리 공간을 복사하지 않고도 동일한 코드 및 데이터 영역을 가리 킬 수 있습니다. 그러나 둘 중 한 프로세스가 페이지에 쓰기 작업을 하는 순간 해당 페이지가 별도의 공간으로 복제됩니다. 이를 통해 프로세스 생성시간을 줄일 수 있고 메모리 공간 절약도 가능합니다.
페이지 교체와 프레임 할당
요구 페이징
프로세스를 메모리에 적재할 때 필요한 페이지만 메모리에 적재하는 기법입니다. 이 방식이 안정적으로 작동하기 위해선 페이지 교체와 프레임 할당 문제를 해결해야 합니다.
요구 페이징 작동 방식
1. CPU가특정페이지에 접근하는 명령어를 실행한다.
2. 해당 페이지가 현재 메모리에 있을 경우(valid bit 1) CPU는 페이지가 적재된 프레임에 접근한다.
3. 해당 페이지가 현재 메모리에 없을 경우(valid bit 0) 페이지 폴트 발생
4. 페이지 폴트 처리 루틴은 해당 페이지를 메모리로 적재하고 유효 비트를 1로 설정한다.
5. 1번을 다시 수행
순수 요구 페이징
아무런 페이지도 메모리에 적재하지 않은 채 실행부터 하는 기법으로 실행하는 순간부터 페이지 폴트가 계속 발생합니다.
페이지 교체 알고리즘
메모리가 가득 찼을 때 실행에 필요한 페이지를 적재하기 위해 메모리에 적재된 페이지를 보조기억장치로 내보내야 합니다. 이 때 내보낼 페이지를 결정하는 방법을 페이지 교체 알고리즘이라고 합니다.
FIFO 페이지 교체 알고리즘
가장 먼저 올라온 페이지부터 내보내는 방식
문제점 : 프로그램 실행 내내 사용될 내용을 포함한 페이지를 내보낼수 도 있음
→ 2차 기회 페이지 교체 알고리즘
최적 페이지 교체 알고리즘
CPU에 의해 참조되는 횟수를 고려하여 가장 오랫동안 사용되지 않을 페이지를 내보내는 페이지 교체 알고리즘.
다른 페이지 교체 알고리즘에 비해 페이지 폴트 발생 빈도가 가장 낮음.
실제 구현이 어려워 주로 다른 페이지 교체 알고리즘의 이론상 성능 평가를 위한 목적으로 사용
LRU 페이지 교체 알고리즘
최적 페이지 교체 알고리즘과 비슷한 방식으로 가장오랫동안 사용되지 않은 페이지를 교체하는 알고리즘
스레싱
프로세스가 사용할 수 있는 프레임 수가 적으면 페이지 폴트가 자주 발생합니다. 그 결과 페이지 교체에 너무 많은 시간을 쏟게됩니다. 이처럼 프로세스가 실제 실행되는 시간보다 페이징에 더 많은 시간을 소요하여 성능이 저해되는 문제를 스래싱thrashing이라고합니다.
동시에 실행되는 프로세스 수가 어느정도 증가하면 CPU 이용률이 높아지지만 필요 이상으로 늘리면 각 프로세스들이 사용할 수 있는 프레임 수가적어지기 따문에 페이지 폴트가 빈번히 발생하고 CPU 이용률이 감소합니다.
운영체제는 이를 해결하기 위해 최소한의 프레임 수를 파악하고 프로세스들에게 적절한 수만큼 프레임을 할당해줘야 합니다.
프레임 할당 방식
정적 할당 방식
- 균등 할당 equal allocation
- 모든 프로세스에 균등하게 프레임을 할당
- 비효율적임
- 비례 할당 proportional allocation
- 프로세스 크기에 맞게 프레임을 할당
동적 할당 방식
프로세스를실행하는 과정에서 배분할 프레임을 결정하는 방식
- 작업 집합 모델 사용 방식
- 작업 집합 : 실행 중인 프로세스가 일정시간 동안 참조한 페이지 집합
- 작업 집합의 크기만큼만 프레임을 할당하는 방식
- 페이지 폴트 빈도(PFF)를 사용하는 방식
- 페이지 폴트율에 상한선과 하한선을 정하고, 그 범위 안에서만 프레임을 할당하는 방식
'OS' 카테고리의 다른 글
파일과 디렉터리 (0) | 2024.02.16 |
---|---|
데드락(Deadlock, 교착 상태) (0) | 2024.01.20 |
프로세스 동기화[240222 - Spinlock추가] (2) | 2024.01.14 |
CPU 스케줄링 (2) | 2024.01.14 |
1. 운영체제(OS, Operating System) (0) | 2024.01.07 |