# Linux v5.18 VMA 구현 원문

각 링크는 torvalds/linux의 고정 tag **v5.18**에서 받은 전체 파일입니다.
본문에 수록한 function/struct뿐 아니라 같은 파일의 앞뒤 정의도 읽을 수 있습니다.
원 header, copyright, 주석, configuration 분기와 끝의 빈 줄을 보존했습니다.
아래 SHA-256은 받은 파일 전체의 byte hash입니다.

이 목록은 kernel source tree 전체가 아닙니다. 포함된 header의 모든 dependency나
build configuration을 제공한 userspace 실행 예제로 취급하지 않습니다.
kernel 전체가 필요하면 [공식 v5.18 tree](https://github.com/torvalds/linux/tree/v5.18)를
사용하셔야 합니다.

## License

[그 tag의 COPYING](upstream-v5.18/COPYING),
[GPL-2.0 본문](upstream-v5.18/LICENSES/preferred/GPL-2.0),
[Linux-syscall-note](upstream-v5.18/LICENSES/exceptions/Linux-syscall-note)를
원문 그대로 제공합니다.

`mm/mmap.c`, `mm/util.c`, `kernel/fork.c`에는 GPL-2.0-only가,
두 mm header와 `include/linux/mman.h`, x86 syscall 파일에는 GPL-2.0 표기가 있습니다.
`arch/x86/mm/mmap.c`는 **GPL-2.0-or-later**입니다.
`mm/shmem.c`에는 SPDX 표기 대신 “This file is released under the GPL.”이라는
원 notice가 있습니다. 이 경우에도 kernel COPYING의 GPL version 2 조건을 함께
확인할 수 있도록 보존했으며, 원 파일의 license 표기를 임의로 바꾸지 않았습니다.

syscall exception은 kernel을 호출하는 userspace program의 경계에 관한 조건입니다.
내부 kernel 함수를 복사한 코드를 일반적인 syscall 호출과 같은 것으로 취급하지 않습니다.
한국어 해설 전체에 이 license를 자동 적용하거나 법률적 안전을 보증하는 것은 아닙니다.

## 파일

| 전체 파일 | SHA-256 |
| --- | --- |
| [mm/mmap.c](upstream-v5.18/mm/mmap.c) | `7cc8b5fe2f2e4c929c4f7a59680f5878e4805255a97376e35b66c6f824a156dc` |
| [mm/util.c](upstream-v5.18/mm/util.c) | `7671f0893ad20e674d1fdb2579ee066f6f83445dcc231f0383e2bd6f1a85a22f` |
| [include/linux/mm.h](upstream-v5.18/include/linux/mm.h) | `3eb51f9b89552d50e69685ac0778e92af3215bfa65c0d723b38433e1f39f5ae3` |
| [include/linux/mm_types.h](upstream-v5.18/include/linux/mm_types.h) | `4e15c8c6ace368d650dcb448b4e27a5f780c9d2c41f026d1a7d82323b2d933ef` |
| [kernel/fork.c](upstream-v5.18/kernel/fork.c) | `7b4a08a56b05bc949a9b7603380acca9017178aa78e1a14f72374071d541a70c` |
| [include/linux/mman.h](upstream-v5.18/include/linux/mman.h) | `13880e0c7939f47036e89a34b25cb1e4a8b0174e776438bf68f43133b35ab883` |
| [arch/x86/kernel/sys_x86_64.c](upstream-v5.18/arch/x86/kernel/sys_x86_64.c) | `11522d4aca834395b62c8fd5c46cae6f10ccb7a2ee3b73a743e03188edcfda79` |
| [mm/shmem.c](upstream-v5.18/mm/shmem.c) | `028ad8e8368d5e6156d0be4ce51f2e19b80ee074274e00e2e3d70d2c78a0b1fa` |
| [arch/x86/mm/mmap.c](upstream-v5.18/arch/x86/mm/mmap.c) | `467d73341a5edde82d5ea8e31d5e1f283828bf959119eb921004156a3aa22764` |
| [COPYING](upstream-v5.18/COPYING) | `fb5a425bd3b3cd6071a3a9aff9909a859e7c1158d54d32e07658398cd67eb6a0` |
| [LICENSES/preferred/GPL-2.0](upstream-v5.18/LICENSES/preferred/GPL-2.0) | `f6b78c087c3ebdf0f3c13415070dd480a3f35d8fc76f3d02180a407c1c812f79` |
| [LICENSES/exceptions/Linux-syscall-note](upstream-v5.18/LICENSES/exceptions/Linux-syscall-note) | `8e378ab93586eb55135d3bc119cce787f7324f48394777d00c34fa3d0be3303f` |

## 본문 코드와의 관계

[provenance.json](provenance.json)은 선택한 43개 function/struct의 tag,
원 파일 hash, 정확한 줄 범위, 수록된 Markdown heading과 code block을 연결합니다.
본문에서는 tab을 네 칸 기준으로 표시하고 긴 `do_brk_flags()` 선언만 줄을
나누었습니다. token·분기·주석은 생략하지 않았습니다.
다운로드 파일 자체에는 이 표시 변환도 적용하지 않았습니다.

v5.18은 고전 RB-tree 경로를 읽기 위한 명시적인 선택입니다.
책의 정확한 source commit이나 현대 v6.18의 Maple Tree 구현이라고 주장하지 않습니다.
두 tag의 write-notify·shmem THP 조건처럼 달라지는 부분은 해당 글에서 구분합니다.
