안녕하세요..
오늘은 페이징과 세그먼테이션에 관련해서 글을 써보도록 하겠습니다.
페이징과 세그먼테이션은 컴퓨터 메모리를 관리하는 방법 두가지입니다. 메모리 관리방법을 활용하여 메모리를 활용해야 하는 이유는 대표적으로 운영체제가 효율적으로 메모리를 할당하고 관리하기 위해서입니다.
이 두 방법은 각각 다른 방식으로 메모리를 나누고 관리하며, 두 방법은 모두 메모리 사용의 최적와와 실행 속도 향상 두가지를 최우선적인 목표로 가지고 있습니다.
두 개의 이론을 살펴보기 전에 먼저 알아야 할 선행 지식에 대해서 알아보도록 하겠습니다.
가상 주소
: 프로그램이 실행될 때 CPU가 참조하는 주소로, 실제 물리적 메모리 주소와 구분됨
이는 각 프로그램이 독립적인 주소 공간을 사용하도록 하여 프로그램 간의 충돌을 방지하고, 메모리를 보다 효율적으로 사용할 수 있도록 합니다. 가상 메모리 시스템을 사용하면 한정된 물리적 메모리만으로도 훨씬 큰 메모리를 다룰 수 있는 효과가 생깁니다. 운영체제는 가상 주소를 물리적 메모리 주소로 변환해 주는 역할을 하며, 이를 주소 변환 또는 메모리 매핑이라 합니다.
가상 메모리
: 물리적 메모리(RAM)의 크기를 넘어 더 많은 메모리를 사용할 수 있게 돕는 메모리 관리 기법
가상 메모리는 물리 메모리보다 큰 주소 공간을 사용하는 프로그램들이 원활히 실행될 수 있도록 하는 메모리 관리 기법입니다. 이 시스템은 디스크의 일부 공간을 RAM처럼 사용하는 방식으로, 실제 물리 메모리보다 더 많은 메모리를 사용할 수 있도록 돕습니다.
운영체제는 프로그램에 가상 주소를 할당하고, 실제 메모리에 접근할 때는 이 가상 주소를 물리 주소로 변환합니다. 이 과정을 "주소 변환" 또는 "메모리 매핑"이라고 하며, 주소 변환을 통해 프로그램들은 독립적인 메모리 공간에서 실행되어, 충돌 없이 다양한 작업을 수행할 수 있습니다.
외부 단편화
: 메모리를 할당하고 해제하는 과정에서 작은 빈 공간들이 흩어지면서 사용하지 못하는 메모리가 생기는 현상
다양한 크기의 프로세스가 메모리 공간에 할당되고 해제되는 과정에서 남는 공간들이 일정하지 않은 크기의 단편으로 남게 됩니다. 이렇게 발생하는 작은 빈 공간들은 총합으로 보면 상당한 크기가 될 수 있지만, 필요한 크기의 연속된 공간을 확보하지 못해 다른 프로세스가 사용할 수 없는 비효율적인 상태가 됩니다.
내부 단편화
: 프로세스에 할당된 메모리 블록 내부에 사용되지 않는 공간이 발생하는 현상
8KB의 메모리가 필요한 프로세스가 있다고 가정할 때, 운영체제가 10KB의 블록을 할당할 경우 남은 2KB가 사용되지 않고 남게 되는 상황입니다. 이와 같이 할당된 블록 내부에서의 공간 낭비가 내부 단편화입니다. 이는 페이지 기반의 메모리 관리 시스템에서 자주 발생하며, 단편화가 쌓이면 결국 시스템의 메모리 사용 효율이 저하될 수 있습니다.
가상 메모리를 통해 가상 주소를 물리 메모리 주소로 변환하여 프로그램이 메모리를 사용할 수 있습니다. 이 과정에서 메모리 관리 방식에 따라 외부 단편화나 내부 단편화가 발생할 수 있습니다. 가상 메모리는 주로 페이징 기법과 세그먼테이션 기법을 통해 관리됩니다.
이제 본격적으로 가상 메모리를 관리하는 페이징 기법과 세그먼테이션 기법에 대해 알아보도록 하겠습니다.
페이징
: 메모리를 일정한 페이지로 나누어 관리하는 방법
가상 메모리 주소공간을 페이지, 실제 물리 메모리 주소공간을 프레임으로 나눕니다. 그리고 각 페이지는 특정 프레임에 매핑되어 있습니다.
이후, CPU가 가상 주소를 요청할 때 페이지 테이블을 통하여 물리적 주소로 변환합니다.
이렇게 메모리를 관리하는 페이징 기법은 일정한 크기의 페이지로 가상 메모리를 분할하기 대문에 메모리 외부 단편화문제를 최소화할 수 있다는 장점이 있습니다.
하지만 페이지마다 매번 페이지 테이블을 조회하는 방식으로 인해 오버헤드가 발생할 수 있습니다.
세그먼테이션
: 프로그램의 논리적인 구조에 따라 메모리를 가변 크기의 세그먼트로 나누는 방법
메모리를 코드, 데이터, 스택 등 프로그램의 논리적 구조에 따라 세그먼트로 나누어 관리합니다. 구조에 따라 메모리가 고정되지 않고 변화하게 되며, 세그먼트의 번호와 오프셋으로 구성된 주소를 통해 메모리에 접근합니다.
가변 크기로 할당하는 만큼 내부 단편화를 줄일 수 있지만 외부 단편화가 발생할 수 있습니다. 또한, 위에서의 페이징이 페이지 테이블을 사용하였듯이, 세그먼테이션에서도 세그먼트 테이블을 사용하여 메모리에 접근하며, 세그먼트 테이블은 각 세그먼트의 시작주소와 길이 주소를 저장해주고 주소 변환 시에 참조됩니다.
두 가지의 차이를 간략하게 표로 정리하면 아래와 같습니다.
요소 | 페이징 | 세그먼테이션 |
분할 방식 | 고정 크기(페이지) | 가변 크기(세그먼트) |
주소 구조 | 페이지 번호 + 오프셋 | 세그먼트 번호 + 오프셋 |
단편화 | 외부 단편화 없음, 내부 단편화 가능 | 외부 단편화 가능, 내부 단편화 없음 |
테이블 | 페이지 테이블 | 세그먼트 테이블 |
사용 목적 | 메모리 관리 효율화, 외부 단편화 방식 | 논리적 구분에 따른 메모리 할당 |
요즘은 둘의 단점을 상호 보완하기 위해 페이징과 세그먼테이션을 결합하는 세그먼테이션 페이징 기법을 활용하기도 합니다. 주소 변환을 위해 외부에는 세그먼트 테이블을, 내부에는 페이지 테이블을 이용하는 방법입니다.
나중에 조금 더 힘을 내서 보충해보도록 하겠습니다..
그럼 20000
'개발 > CS' 카테고리의 다른 글
데드락(DeadRock, 교착상태) (5) | 2024.11.24 |
---|---|
공유 자원을 보호하자 - 세마포어(Semaphore)와 뮤텍스(Mutex) (0) | 2024.11.19 |
[컴퓨터개론] - CPU 스케줄러 (0) | 2024.10.21 |
[컴퓨터개론] - PCB와 문맥교환(context switching) (2) | 2024.10.16 |
[컴퓨터개론] - 프로세스과 스레드 (1) | 2024.04.27 |