[ 연속 메모리 할당 ]
프로세스에 연속적인 메모리 공간을 할당하는 방식
외부 단편화 문제
프로세스가 실행되고 종료되길 반복하며 메모리 사이에 빈 공간이 생김. 분명 빈 공간이지만 그 공간보다 큰 프로세스가 들어오면 적재하기 어려움 => 메모리 낭비
외부 단편화 문제 해결 방안 - 압축
흩어져 있는 빈 공간들을 하나로 모으는 방식
메모리 내에 저장된 프로세스를 적당히 재배치시켜 여기저기 흩어져 있는 작은 빈 공간들을 하나의 큰 빈 공간으로 만드는 방법
단점
압축하는 동안 하던 프로세스를 중지해야 함.
메모리에 있는 내용을 옮기는 작업은 많은 오버헤드를 야기
어떤 프로세스를 어떻게 움직여야 오버헤드를 최소화하며 압축할 수 있는지에 대한 명확한 방법을 결정하기 어려움.
[ 스와핑 ]
현재 실행되지 않는 프로세스들을 임시로 보조기억장치로 보내고, 생긴 메모리상의 빈 공간에 또 다른 프로세스를 적재하여 실행하는 방식
프로세스들이 쫓겨나는 보조기억장치의 일부 영역 = 스왑 영역
현재 실행되지 않는 프로세스가 메모리에서 스왑 영역으로 옮겨지는 것 = 스왑 아웃
스왑 영역에 있던 프로세스가 다시 메모리로 옮겨오는 것 = 스왑 인
프로세스들이 요구하는 메모리 주소 공간의 크기가 실제 메모리 크기보다 큰 경우에도 프로세스들을 동시 실행할 수 있다.
[ 연속 메모리 할당 방식 ]
메모리 내에 빈 공간이 여러 개 있다면 프로세스를 어디에 배치할지를 결정해야 함.
최초 적합
운영체제가 메모리 내의 빈 공간을 순서대로 검색하다가 적재할 수 있는 공간을 발견하면,
그 공간에 프로세스를 배치하는 방식
프로세스가 적재될 수 있는 공간을 발견하는 즉시 메모리를 할당하기 때문에 검색을 최소화할 수 있어 빠른 할당이 가
최적 적합
운영체제가 빈 공간을 모두 검색해 본 후, 프로세스가 적재될 수 있는 공간 중 가장 작은 공간에 프로세스를 배치하는 방식
최악 적합
운영체제가 빈 공간을 모두 검색해 본 후, 프로세스가 적재될 수 있는 공간 중 가장 큰 공간에 프로세스를 배치하는 방식
400p 1번 최초 적합 / 최악 적합 / 최적 적합 |
[ 페이징 ]
프로세스의 논리 주소 공간을 페이지라는 일정한 단위로 자르고, 메모리 물리 주소 공간을 프레임이라는 페이지와 동일한 크기의 일정한 단위로 자른 뒤 페이지를 프레임에 할당하는 가상 메모리 관리 기법
페이징에서 주소 변환
1. 어떤 페이지 & 프레임에 접근하고 싶은지
2. 접근하려는 주소가 그 페이지나 프레임으로부터 얼마나 떨어져 있는지
=> 2가지 조건을 바탕으로 특정 주소에 접근하므로 모든 논리 주소는 페이지 번호와 변위로 이루어져 있음.
내부 단편화 문제
페이징 과정에서 모든 프로세스가 페이지 크기에 딱 맞게 잘릴 수 없음. (=모든 프로세스의 크기가 페이지의 배수는 아님), 이런 과정에서 생기는 메모리 낭비
[ 페이지 테이블 ]
페이지 번호와 프레임 번호를 짝지어 주는 이정표로, 프로세스가 물리 주소에 불연속적으로 배치되더라도 논리 주소에는 연속적으로 배치되도록 하기 위해 이용
페이지 테이블 베이스 레지스터 (PTBR)
각 프로세스의 페이지 테이블이 적재된 주소
페이지 테이블 캐시 메모리 (TLB)
페이지 테이블을 메모리에 두면 메모리 접근 시간이 2배로 늘어나는데, 이러한 문제를 해결하기 위해 CPU 옆에 두는 페이지 테이블의 캐시 메모리
TLB 히트, TLB 미스
TLB 히트는 CPU가 발생한 논리 주소에 대한 페이지 번호가 TLB에 있을 경우 발생, TLB 미스는 페이지 번호가 TLB에 없어 메모리 내의 페이지 테이블에 접근
페이지 테이블 엔트리
페이지 테이블의 각 엔트리 (=페이지 테이블의 각 행)
페이지 번호, 프레임 번호, 유효 비트, 보호 비트, 참조 비트, 수정 비트가 담겨 있음.
유효 비트
해당 페이지에 접근 가능한지 여부
현재 페이지가 메모리에 적재되어 있는지 혹은 보조기억장치에 있는지 알려주는 비트 ( 적재되어 있으면 1, 아니면 0 )
IF, 유효비트가 0인 메모리에 접근하면?
페이지 폴트 예외가 발생함.
페이지 폴트 처리
1. CPU가 기존 작업 백업
2. 페이지 폴트 처리 루틴 실행
3. 페이지 처리 루틴은 원하는 페이지를 메모리로 가져8와 유효 비트를 1로 변경
4. 페이지 폴트 처리 후 CPU는 해당 페이지에 접근 가능
보호 비트
페이지 보호 기능
해당 페이지가 읽고 쓰기가 모두 가능한 페이지인지, 혹은 읽기만 가능한 페이지인지 알 수 있음
( 읽기만 가능하면 0, 모두 가능하면 1 )
실행하기(Execute) 기능 추가 가능
참조 비트
CPU가 이 페이지에 접근한 적이 있는지 여부
(CPU가 읽거나 쓴 페이지는 1, 그런 적이 없으면 0 )
수정 비트 (더티 비트)
해당 페이지에 데이터를 쓴 적이 있는지 없는지 수정 여부
( 변경된 적이 있다면 1, 변경된 적이 없다면 0 )
페이지가 메모리에서 사라질 떄 보조기억장치에 쓰기 작업을 해야 하는지, 할 필요가 없는지를 판단하기 위해 존재
[ 요구 페이징 ]
프로세스를 메모리에 적재할 때 모든 페이지를 적재하지 않고 필요한 페이지 만을 메모리에 적재하는 기법
(=실행에 요구되는 페이지만 적재)
순서
1. CPU가 특정 페이지에 접근하는 명령어를 실행
2. 해당 페이지가 현재 메모리에 있을 경우, CPU는 페이지가 적재된 프레임에 접근
3. 해당 페이지가 현재 메모리에 없으면 페이지 폴트 발생
4. 페이지 폴트 발생시, 해당 페이지를 메모리로 적재하고 유효 비트를 1로 설정
요구 페이징이 안정적으로 작동하려면, 1. 페이지 교체 / 2. 프레임 할당 과정이 해결되어야 함.
[ 페이지 교체 알고리즘 ]
메모리에 적재된 많은 페이지 중 어떤 페이지를 내보내는 것이 좋을지 결정하는 알고리즘
페이지 폴트가 적게 발생해야 좋은 페이지 교체 알고리즘임 ( 페이지폴트 발생 시 보조기억장치에 다녀와야 하므로 시간⬆️)
=> 페이지 폴트 횟수는 페이지 참조열을 통해 알 수 있음
페이지 참조열
CPU가 참조하는 페이지들 중 연속된 페이지를 생략한 페이지열
1. FIFO 페이지 교체 알고리즘
메모리에 가장 먼저 올라온 페이지부터 보조기억장치로 보내는 방식 (= 오래 머물면 나가)
구현이 간단하지만, 프로그램 실행 내내 사용될 내용은 보존해야 되는데 먼저 적재되었다는 이유로 보조기억장치로 내쫓길 수 있음
(+) 이를 개선한 2차 기회 페이지 교체 알고리즘
2. 최적 페이지 교체 알고리즘
CPU에 의해 참조되는 횟수를 고려하는 페이지 교체 알고리즘
보조기억장치로 내보내야 할 페이지는 앞으로 사용 빈드가 가장 낮은 페이지로 생각하고, 앞으로 사용 반도가 가장 낮은 페이지를 교체하는 알고리즘 (*가장 오래 사용되지 않을 페이지를 교체)
낮은 페이지 폴트율을 보장할 수 있는 장점
사용 빈도가 낮을 페이지를 예측해야 하기 때문에 구현이 어려운 단점
3. LRU 페이지 교체 알고리즘
가장 오래 사용되지 않을 페이지를 교체하는 알고리즘
외에도 다양하게 존재!
프레임이 3개, 페이지 참조열이 2313523423이면, LRU 알고리즘을 사용했을 때 페이지 폴트가 몇 번 발생하는가? 2 3 1 3 5 2 3 4 2 3 (2)(1)(5) ==> 3번 |
'👩💻 알고리즘 > 🎛️ 컴퓨터 구조 & OS' 카테고리의 다른 글
[ 혼공학습단 12기 ] 15강 - 파일 시스템 (0) | 2024.08.26 |
---|---|
[혼공학습단 12기] 13강 - 교착 상태 (0) | 2024.08.24 |
[혼공학습단 12기] 12강 - 프로세스 동기화 (0) | 2024.08.23 |
[혼공학습단 12기] 11강 - CPU 스케줄링 (0) | 2024.08.04 |
[혼공학습단 12기] 10장, 프로세스와 스레드 (0) | 2024.07.28 |