🎨메모리 관리 기법
1. 연속 메모리 기법
- 프로그램 전체가 메모리에 연속적으로 할당
- 고정 분할 기법 : 메모리가 고정된 파티션으로 분할, 내부 단편화 발생
- 동적 분할 기법 : 파티션들이 동적으로 생성되고 자신의 크기와 같은 파티션에 메모리 할당, 외부 단편화 발생
2. 불연속 메모리 기법
- 프로그램 일부가 서로 다른 주소 공간에 할당될 수 있는 기법
- Page : 프로세스를 고정된 크리고 나눈 블록
- Frame : 메모리를 고정된 크기로 나눈 블록
- Segment : 서로 다른 크기의 논리적 블록
🔍가상 메모리
![](https://velog.velcdn.com/images/hyena/post/fec97fdd-638d-4edc-8ed4-b583284a684e/image.png)
- 실제 메모리 크기와 관계없이 메모리를 사용할 수 있도록 가상 메모리 주소를 사용
- 프로세스의 일부분만 메모리에 로드하고 나머지는 보조 기억 장치(가상 메모리 공간)에 할당
- MMU를 통해 논리 주소, 물리 주소를 나누어서 사용하여 CPU를 속임
( * MMU(Memory Management Unit) : 가상 주소를 실제 메모리 주소로 변환해주는 장치)
- 가상 주소를 주 기억장치의 실제적인 주소로 매핑하는 방법을 통해 구현
[장점]
- 실제 메모리(RAM)보다 더 큰 공간 사용 가능
- 가상의 주소를 사용해 논리적인 연속성 제공
- 물리 메모리의 주소 공간을 몰라도 됨
🚝페이징(Paging)
![](https://velog.velcdn.com/images/hyena/post/7a79969c-d789-4ba3-b367-2b364a844df2/image.png)
- 프로세스의 주소 공간을 고정된 사이즈의 페이지 단위로 나누어 물리적 메모리에 불연속적으로 할당하는 방식
- 메모리는 Frame이라는 고정크기로 분할되고, 프로세스는 Page라는 고정크기로 분할됨
- 페이지와 프레임은 크기가 같음
- 페이지와 프레임을 대응시키는 page mapping 과정이 필요하여 paging table을 생성해야 함
- 연속적이지 않은 공간도 활용할 수 있기 때문에 외부 단편화 문제 해결
- 페이지 테이블에는 각 페이지 번호와 해당 페이지가 할당된 프레임의 시작 물리 주소를 저장
[단점]
프로세스의 크기가 페이지 크기의 배수가 아닐 경우 마지막 페이지에 내부 단편화가 발생하고 페이지의 크기가 클수록 내부 단편화가 커짐
➡ 페이지 단위를 작게 하면 내부 단편화 문제도 해결할 수 있겠지만 page mapping 과정이 많아지므로 효율이 떨어짐
🚝세그멘테이션
![](https://velog.velcdn.com/images/hyena/post/3e3110aa-bbea-48d0-8456-d95043e58763/image.png)
- 프로세스를 서로 크기가 다른 논리적인 블록 단위인 세그먼트(Segment)로 분할하여 메모리에 할당
- 각 세그먼트는 연속적인 공간에 저장
- 세그먼트들의 크기가 서로 다르기 때문에 프로세스가 메모리에 적재될 때 빈 공간을 찾아 할당하는 기법
- 페이징과 마찬가지로 mapping을 위한 segment table 필요
[단점]
프로세스가 필요한 메모리 공간만큼 메모리를 할당해주기 때문에 내부 단편화 문제는 발생하지 않지만, 중간에 메모리를 해제하면 생기는 외부 단편화 문제가 발생
💡 Paging vs Segmentation
- Paging은 고정 크기를 가짐
- Segmentation은 가변 크기를 가짐
- Paging은 내부 단편화 발생 가능, Segmentation은 외부 단편화 발생 가능
출처 : https://cocoon1787.tistory.com/860