QnA. Memory Paging과 Sementation 차이
메모리 공간을 분리하는 방법으로 페이징과 세그먼트가 있습니다.
가장 큰 차이점은 페이징은 고정된 크기로 메모리 공간을 나누며, 세그멘테이션은 서로 다른 크기로 메모리 공간을 다룹니다.
두 방식에서 생기는 내부 단편화, 외부 단편화 문제가 있으며, 세그멘테이션 방식에서 세그먼트 테이블에 세그먼트 번호, 시작 주소, 세그먼트 크기 정보를 가지고 있어 페이징 테이블보다 메모리 비용과 관리 비용이 높습니다.
가상 메모리란
실제 물리적 메모리의 크기를 넘어서는 메모리 공간을 제공하기 위해 사용되는 메커니즘이다.
(메모리에 로드된) 실행 중인 프로세스가 가상의 공간을 참조하여 더 큰 물리 메모리를 갖고 있는 것처럼 사용할 수 있도록 해줍니다.
내가 실행하고자 하는 프로그램의 용량이 5GB인데, 메모리는 4GB이다. 어떻게 실행할까?
올리는 것도 문제이지만, 올린다 하더라도 해당 프로그램이 실행될 때는 다른 작업은 아무것도 하지 못하게 된다.
가상 메모리를 통해, 프로세스의 전체 데이터를 한 번에 메모리에 적재하는 대신, 일부만 메모리에 로드하고 나머지는 보조기억장치의 스왑 공간에 저장하여 필요한 순간에 불러온다.
Paging
프로세스의 주소 공간을 고정된(동일한) 크기의 페이지 단위로 나누어 물리적 메모리에 불연속적으로 저장하는 방식이다.
- 메모리는 Frame이라는 고정 크기로 분할되고, 프로세스는 Page라 불리는 고정 크기로 분할됩니다.
- Memory : Frame
- Process : Page
하나의 프로세스는 연속적인 동작을 수행하는데, 이를 작은 조각으로 나누어 여기저기 흩어진다면 정상적으로 동작할까?
CPU는 연속된 주소 공간을 사용하는 것처럼 동작해야 하지만, 실제 메모리는 여러 곳에 흩어져 있을 수 있다.
이를 해결하기 위해, MMU(Memory Management Unit)가 논리 주소와 물리 주소를 매핑하여 변환을 수행합니다.
- 논리 주소 : 프로세스가 인식하는 주소이다. (주황색)
- 물리 주소 : RAM의 실제 주소이다. (파란색)
- 프로세스 P1은 5개의 페이지로 나눈다. (= 메인 메모리 5곳에 나눠서 할당)
- CPU는 논리 주소로 프로그램이 설정한 대로 연속적인 주소 값으로 명령을 내리고, 이는 메모리로 가기 전에 각 페이지의 실제 메모리 주소가 저장되어 있는 테이블에서 물리 주소로 변경되어야 한다.
- 프로세스를 나눈 조각을 Page, 메모리를 나눈 조간을 Frame
주소 변환 (Address Translation)
페이징 기법을 사용하기 위해서는 여러 개로 흩어진 페이지에 CPU가 접근하기 위해 페이지 테이블을 통해 주소를 변환해야 합니다.
세그멘테이션 기법에서는 Segmentation Table의 세그먼트 번호, 시작 주소, 세그먼트 크기 정보를 통해 주소를 변환합니다.
주소 변환 과정
- CPU가 논리 주소를 생성 : 프로그램이 사용하는 가상 메모리 주소
- MMU가 페이지 테이블을 통해 논리 → 물리 주소로 변환
- 변환된 물리 주소를 통해 실제 메모리 접근
내부 단편화
Ex) Page 크기 : 1024B, 프로세스 A가 3172의 메모리를 요구한다면 3개의 페이지 프레임(1024 x 3 = 3072)을 구성하고도 100B가 남기 때문에 총 4개의 페이지 프레임이 필요하다.
마지막 페이지 프레임에는 924B의 여유 공간이 남게 되는 내부 단편화 문제가 발생한다.
Segmentation
프로세스를 서로 크기가 다른 논리적인 블록 단위인 세그먼트로 분할하고 메모리에 배치하는 것 (각 세그먼트의 크기는 일정하지 않음)
세그먼트 테이블에는 세그먼트 번호, 시작 주소, 세그먼트 크기를 엔트리로 갖습니다.
- 각 프로세스마다 세그먼트 테이블이 필요하며, 테이블이 커지면 메모리 접근 속도가 느려지고 관리 비용이 증가한다.
주의할 점
- 세그먼트의 크기는 일정하지 않기 때문에, 테이블에 limit 정보가 주어진다.
- CPU에서 해당 세그먼트의 크기를 넘어서는 주소가 들어오면 인터럽트가 발생해서 해당 프로세스를 강제로 종료시킨다.
- 논리 주소(2, 100) -> 물리주소 4400번지
- 논리 주소(1, 500) -> limit이 400밖에 안되므로 인터럽트로 인해 프로세스 강제 종료(범위를 벗어남)
외부 단편화
Segment의 크기가 가변적이기 때문에, 메모리에 빈 공간이 있어도 필요한 크기의 연속된 공간이 없으면 할당이 불가능하다.
'CS > OS' 카테고리의 다른 글
What is Difference between Compiler and Assembler (0) | 2025.02.15 |
---|---|
[쉽게 배우는 운영체제] 6장 연습문제 및 심화문제 - 정리 (1) | 2022.10.14 |
[쉽게 배우는 운영체제] 5장 연습문제 및 심화문제 - 정리 (0) | 2022.10.14 |
[쉽게 배우는 운영체제] 4장 연습문제 및 심화문제 - 정리 (1) | 2022.10.11 |
[쉽게 배우는 운영체제] 3장 연습문제 및 심화문제 - 정리 (0) | 2022.10.11 |