가상 메모리를 관리하는 기법으로 프로세스가 사용하는 메모리 공간을 잘게 나누어 비연속적으로 실제 메모리에 할당하는 메모리 관리 기법
프로세스의 일부분만 메모리에 로드하고 나머지는 보조 기억 장치(가상 메모리 공간)에 할당하여 실제 메모리 크기와 관계없이 메모리를 사용할 수 있도록 가상 메모리 주소를 사용한다.
1) 연속 메모리 기법
프로그램 전체가 메모리에 연속적으로 할당되는 기법
고정 분할 기법 : 메모리가 고정된 파티션으로 분할. 내부 단편화 발생
동적 분할 기법 : 파티션들이 동적으로 생성되고, 자신의 크기와 같은 파티션에 메모리 할당. 외부 단편화 발생
2) 불연속 메모리 기법
프로그램의 일부가 서로 다른 주소 공간에 할당될 수 있는 기법
Page : 프로세스를 고정된 크기로 나눈 블록
Frame : 메모리를 고정된 크기로 나는 블록
Segment : 서로 다른 크기의 논리적 블록
프로세스의 주소 공간을 페이지(page)단위로 나누어 고정된 사이즈로 나누어 물리적 메모리에 불연속으로 저장하는 방식
메모리는 Frame이라는 고정크기로 분할되고, 프로세스는 Page라는 고정크기로 분할됨
Frame : 물리주소 공간을 페이지와 같은 사이즈로 나눈 것. 페이지가 저장된 실제 물리 메모리의 위치 영역의 단위
Page : 프로세스가 바라보고 있는 메모리 공간. 즉 논리 주소 공간의 단위. 페이지 사이즈(=프레임 사이즈)는 하드웨어에 의해 정해진다.
페이지와 프레임을 대응시키는 page mapping 과정이 필요
연속적이지 않은 공간도 활용할 수 있기 때문에 외부 단편화 문제 해결
- 내부 단편화 문제는 해결하지 못한다.
프로세스 크기가 페이지 크기의 배수가 아닐 경우,
마지막 페이지는 한 프레임(페이지)를 다 채울 수 없어서
발생하는 공간으로 메모리 낭비의 원인이 된다.
페이지 크기가 4KB인데, 10KB의 메모리를 필요하는 프로세스가 있다면? 페이지 3개가 할당되어야 10KB 메모리를 쓸 수 있다. 마지막으로 할당된 페이지는 크기는 4KB이지만, 실제 사용하고 있는 메모리는 2KB. 따라서2KB만큼 메모리를 낭비하는 내부 단편화가 발생
페이지 테이블에는 각 페이지 번호와 해당 페이지가 할당된 프레임의 시작 물리 주소를 저장
Page table : 각각의 페이지가 실제 메모리에 어떤 프레임이 저장되는가에 대한 매핑 정보를 담고 있는 자료구조. 프로세스가 실행될 때 연속된 위치의 메모리라고 이해한 상태로 각각의 페이지가 어디에 있는지 빠르게 찾을 수 있도록 도움.
page table은 프레임 번호를 담고 있는 배열
page table의 index == 페이지 번호
page table의 value == 프레임 번호
물리적인 고정 크기로 분할하는 페이징과는 달리 프로그램의 논리적인 내용 단위로 프로세스의 메모리 공간을 분리하는 기법
프로세스를 서로 크기가 다른 논리적인 블록 단위인 세그먼트(Segment)로 분할하여 메모리에 할당하는 방식
논리적 단위로는 method, procedure, function, object, variables, stack 등 함수단위로 나눌 수 있고, C컴파일러 관점에서는 코드, 전역 변수, 힙, 스택, 표준 C 라이브러리 단위로 구분지어 나눌 수 있다.
돼지를 잡아서 보관을 한다고 생각할 때, 페이징의 방법을 사용하면 돼지를 모두 같은 단위로 잘라서 보관을 하는 것.세그먼테이션은 부위별로 다른 크기로 잘라서 보관하는 것.
각 세그먼트는 연속적인 공간에 저장
세그먼트들의 크기가 서로 다르기 때문에 프로세스가 메모리에 적재될 때 빈 공간을 찾아 할당하는 기법
페이징과 마찬가지로 mapping을 위한 segment table 필요
프로세스가 필요한 메모리 공간만큼 메모리를 할당해주기 때문에 내부 단편화 문제는 발생하지 않지만, 중간에 메모리를 해제하면 생기는 외부 단편화 문제가 발생
페이징 기법은 물리 메모리를 같은 크기로 나누어 관리하기 때문에 메모리 관리가 수월한 반면 페이지 테이블의 크기가 크다.
세그먼테이션 기법은 페이지 테이블의 크기를 작게 유지할 수 있으냐 물리 메모리의 외부 단편화로 인해 추가적인 관리가 불가피하다.
세그먼테이션-페이징 혼용 기법은 이 두 기법의 장점만 취한 가상 메모리 관리 기법이다.
참고 :
https://cocoon1787.tistory.com/860
https://bellog.tistory.com/159
https://code-lab1.tistory.com/55
https://velog.io/@chappi