CSAPP/9장 가상메모리 7

Malloc Lab 후기

1. 메모리 할당 전략 비교전략특징장점단점사용 예시First-Fit- 가용 리스트의 처음부터 탐색하여 요청 크기 이상인 첫 번째 블록을 할당- "가장 빠른" 할당 방식을 제공- 구현이 간단하고 빠름- 작은 프로세스들끼리 비슷한 크기라면 외부 단편화가 비교적 적음- 메모리가 단편화될 경우, 시작 부분의 작은 구획 때문에 큰 요청을 처리하기 어려움- 빈번한 리스트 순회로 비용 증가 가능임베디드 시스템, 단일 파티션 관리 등 리소스가 제한적인 환경Next-Fit- First - Fit 과 유사하나, 마지막으로 할당한 위치부터 탐색을 재개- 리스트의 처음 부분을 반복 탐색하지 않아 순회 비용 절감 가능- 블록 재분배가 고르지 않아 균등하지 않은 단편화 발생 위험실시간 시스템에서 빠른 재할당이 필요할 때Best-..

[CSAPP] 9장 가상 메모리(Virtual Memory) - 9.9(9.9.11 ~ 9.9.14)

9.9.11 경계 태그 병합(Boundary-Tag Coalescing)해제된 블록과 인접한 빈 블록을 헤더·풋터(boundary tags) 정보를 이용해 즉시 합치는 방식입니다.풋터에 크기 정보를 복사해 두면, 해제 시 이전 블록의 크기를 O(1)로 알 수 있습니다​.free(ptr) 호출 시 왼쪽·오른쪽 이웃 블록의 할당 비트를 검사하고, 모두 자유 상태라면 세 블록을 하나로 합칩니다​. 즉시 병합(immediate coalescing)을 쓰면 외부 단편화를 효과적으로 줄이지만, 매 free마다 검사 비용이 추가될 수 있습니다​. Header/​Footer 모두에 블록 크기와 할당 비트(a/f)를 저장합니다.free 시 Footer로 이전 블록 크기를 즉시 알아낼 수 있어 빠른 병합이 가능합니다.병합..

[CSAPP] 9장 가상 메모리(Virtual Memory) - 9.9(9.9.6 ~ 9.9.10)

9.9.6 암시적 가용 리스트(Implicit Free List)힙의 모든 블록(할당·자유)을 헤더(header)·풋터(footer) 만으로 관리하고, 빈 블록을 찾을 때마다 힙을 처음부터 끝까지 순차 탐색합니다.헤더·풋터 구조크기(size) 필드: 블록 전체 크기(헤더+페이로드+패딩 포함)할당 비트(a): LSB로 “1=할당됨, 0=자유”를 표시동작 원리현재 블록의 헤더에서 크기와 할당 여부를 읽는다.다음 블록 주소로 포인터를 옮긴다.할당 비트가 0인 블록을 발견하면 그곳을 사용.힙 전체를 탐색하는 구조이므로 구현은 간단하지만, 블록 수 * n 에 비례한 O(n) 탐색 시간이 소요됩니다.9.9.7 할당 위치 선택(Placement)빈 블록 탐색 후 어떤 블록을 사용할지 결정하는 전략기법설명장,단점Fir..

[CSAPP] 9장 가상 메모리(Virtual Memory) - 9.9(9.9.1 ~ 9.9.5)

동적 메모리 할당은 C 프로그램이 실행 중에 힙(heap) 영역에서 메모리 블록을 확보·반환하는 기법입니다.힙은 초기화되지 않은 데이터 세그먼트(.bss) 바로 뒤에서 시작해, 커널이 brk/sbrk 호출로 demand-zero 페이지를 위로 확장하는 영역입니다.할당자는 힙을 크기가 다양한 블록들의 집합으로 유지하며, 각 블록은 할당됨(allocated) 또는 비어 있음(free) 상태로 표시됩니다.이때 메모리를 직접 malloc/free로 관리하는 방식을 명시적 할당자(explicit allocator), 가비지 콜렉터가 자동으로 해제하는 방식을 암시적 할당자(implicit allocator)라고 한다​구분명시적(explicit) 할당자암시적(implicit) 할당자관리 주체프로그래머가 직접 mall..

[CSAPP] 9장 가상 메모리(Virtual Memory) - 9.5 ~ 9.8

9.5 가상 메모리를 통한 메모리 보호가상 메모리 시스템은 프로세스마다 독립된 주소 공간을 제공할 뿐 아니라, 페이지 단위로 접근 권한을 통제할 수 있는 메커니즘을 갖추고 있습니다.페이지 테이블 엔트리(PTE)의 권한 비트각 PTE에 SUP(kernel vs user), READ, WRITE 비트를 두어 접근을 제어합니다.사용자 모드가 SUP=1인 페이지 접근 시 Segmentation Fault 발생 읽기/쓰기 비트가 맞지 않으면 Protection Fault 발생메모리 보호 다이어그램┌─────────────┐ PTE: SUP=0, R=1, W=0│ Virtual VP0 │ ──▶│ Physical PP2 │ (읽기만 가능)└─────────────┘ Permissions: r/o ┌..

[CSAPP] 9장 가상 메모리 (Virtual Memory) - 9.3 ~ 9.4

9.3 가상 메모리를 캐시로 사용하기가상 메모리 시스템은 디스크(보조 저장장치)에 있는 데이터를 메인 메모리(RAM)로 필요할 때 불러오는 캐시 역할을 합니다.즉, 메모리 그 자체가 디스크의 캐시로 동작하는 구조입니다.9.3.1 DRAM 캐시의 구조가상 주소 공간은 일정한 크기 단위인 페이지(Page)로 나뉩니다.운영체제는 이 가상 페이지를 메인 메모리의 프레임(Frame)에 매핑하여 사용합니다.페이지(Page): 가상 메모리의 기본 단위 (보통 4KB)프레임(Frame): 물리 메모리의 기본 단위 (페이지와 크기 동일)👉 디스크 → 페이지 단위👉 메인 메모리 → 프레임 단위하나의 프로세스는 수천~수만 개의 페이지를 가질 수 있고, 이 중 일부만이 실제 메모리에 올라와 있습니다.9.3.2 페이지 테이..

[CSAPP] 9장 가상 메모리(Virtual Memory) - 9.1 ~ 9.2

왜 가상 메모리를 배워야 할까?가상 메모리는 단순한 메모리 관리 기술이 아닙니다. 현대 운영체제, 컴파일러, 하드웨어의 핵심 연결고리이자, 다음과 같은 강력한 기능을 제공합니다.(1) 효율적인 메모리 사용→ 실제 메모리보다 큰 프로그램도 실행 가능하게 해줍니다. 디스크에 있는 데이터를 필요할 때만 메모리에 불러오는 캐시 구조로 동작합니다.(2) 프로세스 간 메모리 보호→ 각 프로세스는 자기만의 가상 주소 공간을 갖습니다. 다른 프로세스 메모리에 접근할 수 없어 안정성이 보장됩니다.(3) 메모리 관리 단순화→ 개발자는 '주소'를 직접 신경 쓰지 않고도 동적으로 메모리를 할당하고 해제할 수 있습니다.9.1 물리 및 가상 주소 방식물리 주소 (Physical Address)실제 DRAM(메인 메모리) 상의 주..