동적 메모리 할당
- free()와 가비지 컬렉터
- 명시적 할당과 해제
- 동적 메모리 할당으로 인한 내부 단편화 발생 가능
- 동적 할당은 워드 단위 (C 기준)
- 되도록이면 같은 페이지 내의 워드를 할당하려고 함
- 힙 영역의 끝은 brk (break) 라는 변수로 관리함
- 블록 = 할당받은 하나의 공간
- word = 4byte
- 가상 메모리는 페이지 단위로 나뉘어있는데 가상 주소를 워드 단위로 어떻게 가리킬 수 있는가?
- 물리 메모리와 가상 메모리는 페이지 단위로 매핑되어있고, 하위 12비트로 가리키는 오프셋의 위치는 서로 동일하기 때문에 문제없음 !!
요구 페이징 기법
malloc을 통해서 가상 주소를 할당받았더라도 현재 그 가상 주소에 매핑된 페이지는 없음 !!
따라서 페이지 테이블의 valid bit는 0이다
해당 가상 주소를 역참조해서 접근하였을 때 비로소 페이지 폴트가 발생하면서 필요한 물리 페이지를 할당해주고 그 정보를 페이지 테이블에 기록해줌
명시적 할당기와 묵시적 할당기
- 할당기는 힙을 다양한 크기의 블록들의 집합으로 관리
명시적 할당기
- C표준 라이브러리의 malloc 패키지처럼 직접 free 함수를 호출하여 할당을 해제해야 함
malloc은 32비트 시스템에서는 8의 배수인 주소를, 64비트 시스템에서는 16의 배수인 주소를 리턴한다.
만약 가용한 가상 메모리 공간이 없다면 NULL을 리턴하고 errno를 설정한다
- 항상 8의 배수 아니면 16의 배수로 해야하기에 padding 공간이 필요할 수도 있다
묵시적 할당기
묵시적 가용 리스트
이제 힙 내에서 가용 블록과 할당 블록을 어떻게 구분할 것인가?