메모리 관리 기법
다중 프로그래밍 시스템에서는 여러 프로세스를 수용하기 위해 주기억장치를 동적 분할하는 메모리 관리 작업이 필요하다.
가상 메모리
•
물리 메모리 크기의 한계를 극복하기 위해 나온 기술이다. 즉, 물리 메모리보다 큰 프로세스를 수행하기 위해 가상 메모리를 사용한다.
•
이를 위해 프로세스는 가상 주소를 사용하고, 실제 해당 주소에서 데이터를 읽고 쓸 때만 물리 주소로 바꿔주는필요한 부분만 메모리에 적재하는 방식을 사용한다.
가상 메모리와 MMU (Memory Management Unit) , TLB 간의 관계
MMU(Memory Management Unit)
•
CPU는 가상 메모리 주소를 다루고, 실제 해당 주소 접근 시 MMU 하드웨어 장치를 통해 물리 메모리에 접근한다.
◦
하드웨어 장치를 이용해야 주소 변환이 빠르기 때문에 MMU라는 별도의 장치를 두고 있는 것이다.
TLB(Traslation Lookaside Buffer)
•
MMU가 물리 주소를 확인하기 위해서는 메모리를 갔다 와야 함
•
메모리에 접근하는 시간은 CPU 안에서 레지스터를 처리하는 시간에 비하면 200배 정도 느림
•
이 문제를 해결하기 위해 TLB라는 별도의 하드웨어 장치의 지원을 받는다.
•
TLB를 사용하는 경우, 가상 주소와 대응되는 물리 주소는 한 번 변환되면 TLB에 저장되어 그 다음부터는 MMU가 page table에 다녀오는 것이 아니라 TLB에서 해당하는 물리 주소를 찾는다.
•
이 경우 메모리에 반복적으로 접근하는 것을 막아 가상 주소에 해당하는 물리 주소를 반복적으로 찾는 경우 시간을 단축할 수 있다.
연속 메모리 관리
프로그램 전체가 하나의 커다란 메모리 공간에 연속적으로 할당되는 것
고정 분할 기법
•
주기억장치가 고정된 파티션으로 분할된다. 프로세스는 균등 크기의 파티션 또는 그보다 큰 파티션에 적재된다.
•
장점 : 구현이 간단하다, 운영체제의 오버헤드가 적다
•
단점 : 내부 단편화가 발생할 수 있다. 최대 활성 프로세스가 고정된다.
동적 분할 기법
•
파티션들이 동적 생성되며 자신의 크기와 같은 파티션에 적재된다.
•
장점 : 내부단편화가 없다. 주기억장치를 효율적으로 사용할 수 있다.
•
단점 : 외부 단편화를 해결하기 위한 메모리 집약이 요구된다. 처리기 효율이 나빠진다.
불연속 메모리 관리
프로그램의 일부가 서로 다른 주소 공간에 할당될 수 있는 기법
페이징 기법
페이징 기법
•
프로세스의 주소 공간을 동일한(고정된) 사이즈의 페이지 단위로 나누어 물리적 메모리에 불연속적으로 저장하는 방식이다.
•
외부 단편화와 압축 작업을 해결하기 위한 기법이다
•
Frame : 물리 메모리를 일정한 크기로 나눈 블록 (메모리)
•
Page : 가상 메모리를 일정한 크기로 나눈 블록 (프로세스)
•
외부 단편화 문제는 해결되지만, 마지막 페이지에서 내부 단편화 문제가 존재한다.
페이징 기법의 동작
•
페이지 번호를 기반으로 가상 주소와 물리 주소의 매핑 정보를 기록하고 사용한다.
페이지 테이블은 각 프로세스의마다 존재하며, 하나의 프로세스의 가상 메모리를 실제 메인 메모리의 어느 프레임에 적재되어있는가를 명시한다.
Multi Level Paging (다중 단계 페이징)
•
항상 전체 페이지 테이블 정보를 다 메모리에 올리게 되면 쓸데없이 많은 공간을 낭비할 수 있다.
•
페이지 정보를 단계를 나누어 생성함으로써 이러한 공간의 낭비를 막을 수 있는데, 이를 다중 단계 페이징 시스템이라 일컫는다.
다중 단계 페이징 기법의 동작
•
다중 단계 페이징 시스템에서는 페이지 번호를 나타내는 bit를 구분해서 단계를 나눈다 (리눅스는 3단계, 최근에는 더 복잡하게 4단계로 나눠서 처리를 하는 경우도 있다고 함)
•
각각의 페이지 디렉토리는 페이지 디렉토리에 해당하는 페이지 테이블 시작 주소를 가리킴
•
페이지 테이블에서 해당 페이지 정보를 찾아서 OFFSET 정보와 함께 활용해, 해당하는 물리 주소를 가지고 오게 됨
요구 페이징 (Demand Paging)
•
프로세스의 모든 데이터를 메모리로 적재하지 않고, 실행 중에 필요한 시점에서만 메모리로 적재함
◦
선행 페이징(anticipatory paging 또는 prepaging)의 반대 개념
▪
선행 페이징: 미리 프로세스와 관련된 모든 데이터를 메모리에 올려놓고 실행하는 방식
◦
더 이상 필요하지 않은 페이지 프레임은 다시 저장매체에 저장 (페이지 교체 알고리즘 필요)
페이지 교체 알고리즘
FIFO (First In First Out) Page Replacement Algorithm
•
가장 먼저 들어온 페이지를 내린다.
•
물리 메모리에 페이지를 추가할 공간이 부족하면, 제일 먼저 들어온 페이지의 위치에 새로운 페이지를 올려 교체한다.
최적 페이지 교체 알고리즘 (OPTimal Replacement Algorithm)
•
앞으로 가장 오랫동안 사용하지 않을 페이지를 내린다.
•
일반 OS에서는 구현 불가
LRU(Least Recently Used) Page Replacement Algorithm
•
가장 오래 전에 사용된 페이지를 교체
•
OPT 교체 알고리즘은 구현이 불가하므로, 대신 가장 사용한 지 오래된 페이지를 새로운 페이지와 교체하는 방식으로 구현
•
가장 많이 쓰이는 페이지 교체 알고리즘
LFU(Least Frequently Used) Page Replacement Algorithm
•
가장 적게 사용된 페이지를 새로운 페이지와 교체한다.
NUR(Not Used Recently) Page Replacement Algorithm
•
LRU와 마찬가지로 최근에 사용하지 않은 페이지부터 교체하는 기법
•
각 페이지마다 참조 비트(R), 수정 비트(M)을 둠 (R, M)
◦
(0, 0), (0, 1), (1, 0), (1, 1) 순으로 페이지 교체
스레싱(Thrashing)
•
반복적으로 페이지 폴트가 발생해서, 과도하게 페이지 교체 작업이 일어나, 실제로는 아무 일도 하지 못하는 상황
•
프로그램은 수행하지 못한 채 페이지 폴트와 페이지 스왑만 반복적으로 수행
세그멘테이션 (Segmentation)
•
프로세스를 서로 크기가 다른 논리적인 블록 단위인 '세그먼트(Segment)'로 분할하고 메모리에 배치하는 것을 말하며, 각 세그먼트의 크기는 일정하지 않다.
•
프로세스를 Code + Data + Stack 영역으로 나누는 것 역시 세그멘테이션의 모습이다. 물론, code, data, stack 각각 내부에서 더 작은 세그먼트로 나눌 수도 있다.
•
페이징 기법에서는 가상 메모리를 같은 크기의 블록으로 분할하는 것과 대조됨
세그멘테이션 기법의 동작
•
세그먼트 기법도 페이징 기법과 유사하게, 특정 레지스터가 가리키고 있는 세그먼트 테이블에 접근하여 해당 세그먼트에 매핑된 base 물리주소에 d에 해당하는 변위를 더해 해당 데이터의 물리 주소를 얻어낼 수 있다.
•
하지만, 테이블은 조금 다르다. 세그먼테이션을 위한 테이블은 세그먼트 테이블이라고 한다.
•
세그먼트에서 주소변환 역시, 페이징과 유사하다. 한 가지 주의할 점은 세그먼트의 크기는 일정하지 않기 때문에, 테이블에 limit 정보가 주어진다. 그리고 CPU에서 해당 세그먼트의 크기를 넘어서는 주소가 들어오면 인터럽트가 발생해서 해당 프로세스를 강제로 종료시킨다.
Paging vs Segmentation
•
각 구조의 논리적인 역할과 상관 없이 일률적으로 같은 크기의 페이지로 쪼개 물리 메모리에 올리는 페이징 기법과는 달리,
•
세그멘테이션 기법은 서로 크기가 다른, 논리적 단위인 세그먼트로 나누어, 서로 다른 크기의 세그먼트가 물리 메모리 위에 올라가는 것을 확인할 수 있다.