Search
Duplicate

메모리 관리 - Paging & Segmentation

태그
1 more property

메모리 관리 기법

다중 프로그래밍 시스템에서는 여러 프로세스를 수용하기 위해 주기억장치를 동적 분할하는 메모리 관리 작업이 필요하다.

가상 메모리

물리 메모리 크기의 한계를 극복하기 위해 나온 기술이다. 즉, 물리 메모리보다 큰 프로세스를 수행하기 위해 가상 메모리를 사용한다.
이를 위해 프로세스는 가상 주소를 사용하고, 실제 해당 주소에서 데이터를 읽고 쓸 때만 물리 주소로 바꿔주는필요한 부분만 메모리에 적재하는 방식을 사용한다.
가상 메모리와 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

각 구조의 논리적인 역할과 상관 없이 일률적으로 같은 크기의 페이지로 쪼개 물리 메모리에 올리는 페이징 기법과는 달리,
세그멘테이션 기법은 서로 크기가 다른논리적 단위인 세그먼트로 나누어, 서로 다른 크기의 세그먼트가 물리 메모리 위에 올라가는 것을 확인할 수 있다.