운영체제 기본/가상 메모리: 두 판 사이의 차이
mmap 파일 메모리 매핑 각론을 연결; 페이지 캐시 상세 확장은 보류 |
BIOS GRUB 부팅 경로 보강과 각론 형식 통일 |
||
| (같은 사용자의 중간 판 하나는 보이지 않습니다) | |||
| 10번째 줄: | 10번째 줄: | ||
== 페이지 단위의 간접 참조와 그 비용 == | == 페이지 단위의 간접 참조와 그 비용 == | ||
페이징은 가상 주소 공간과 물리 메모리를 일정한 크기의 조각으로 나눈다. 가상 페이지를 물리 페이지에 연결하면 물리적으로 흩어진 메모리도 프로그램에는 연속된 배열처럼 보인다. 페이지 테이블은 연결과 권한을 기록하고, [[운영체제 기본/보호#실행 권한, 주소, 자원의 경계|MMU]]는 이를 이용해 주소를 변환한다. 메모리를 읽을 때마다 운영체제를 호출하는 방식은 아니다. | 페이징은 가상 주소 공간과 물리 메모리를 일정한 크기의 조각으로 나눈다. 가상 페이지를 물리 페이지에 연결하면 물리적으로 흩어진 메모리도 프로그램에는 연속된 배열처럼 보인다. 페이지 테이블은 연결과 권한을 기록하고, [[운영체제 기본/보호#실행 권한, 주소, 자원의 경계|MMU]]는 이를 이용해 주소를 변환한다. 메모리를 읽을 때마다 운영체제를 호출하는 방식은 아니다. | ||
예를 들어 페이지가 4 KiB라면 가상 주소 <code>0x1234</code>는 가상 페이지 번호 1과 페이지 내부 오프셋 <code>0x234</code>로 나뉜다. 페이지 1을 물리 페이지 9에 연결했다면 물리 주소는 <code>0x9234</code>가 된다. 변환되는 것은 페이지 번호이며, 페이지 안의 위치는 그대로 유지된다. | |||
대신 변환 정보를 저장할 메모리와 이를 찾는 시간이 든다. CPU는 최근 변환 결과를 TLB(Translation Lookaside Buffer, 주소 변환 캐시)에 보관해 이 비용을 줄인다. 페이지를 크게 하면 같은 범위를 더 적은 항목으로 표현할 수 있지만, 일부만 쓰는 페이지의 낭비가 커지고 큰 물리 영역을 마련하기 어려워질 수 있다. 페이징은 연속된 물리 공간을 요구하는 부담을 줄이지만, 단편화와 관리 비용을 모두 없애지는 않는다. <ref name="source-1">[https://docs.kernel.org/admin-guide/mm/concepts.html 커널 문서: 주소 변환과 페이지 크기].</ref> | 대신 변환 정보를 저장할 메모리와 이를 찾는 시간이 든다. CPU는 최근 변환 결과를 TLB(Translation Lookaside Buffer, 주소 변환 캐시)에 보관해 이 비용을 줄인다. 페이지를 크게 하면 같은 범위를 더 적은 항목으로 표현할 수 있지만, 일부만 쓰는 페이지의 낭비가 커지고 큰 물리 영역을 마련하기 어려워질 수 있다. 페이징은 연속된 물리 공간을 요구하는 부담을 줄이지만, 단편화와 관리 비용을 모두 없애지는 않는다. <ref name="source-1">[https://docs.kernel.org/admin-guide/mm/concepts.html 커널 문서: 주소 변환과 페이지 크기].</ref> | ||
| 52번째 줄: | 54번째 줄: | ||
주소의 의미는 매핑이 유지되는 동안에만 성립한다. 매핑을 제거한 뒤 같은 주소를 재사용하면 남아 있는 포인터 값이 같아도 대상은 달라진다. 파일 매핑과 열린 파일의 참조도 수명이 다르다. Unix의 파일 매핑은 만들 때 사용한 디스크립터를 닫아도 유지될 수 있다. 사적 매핑의 변경은 원본 파일에 전달되지 않지만, 원본의 이후 변경까지 차단하는 고정 스냅샷을 보장하지는 않는다. 공유 여부, 접근 권한, 매핑의 수명은 각각 별도로 정해지는 조건이다. <ref name="source-4">[https://man7.org/linux/man-pages/man2/mmap.2.html Linux man-pages: mmap(2)].</ref> | 주소의 의미는 매핑이 유지되는 동안에만 성립한다. 매핑을 제거한 뒤 같은 주소를 재사용하면 남아 있는 포인터 값이 같아도 대상은 달라진다. 파일 매핑과 열린 파일의 참조도 수명이 다르다. Unix의 파일 매핑은 만들 때 사용한 디스크립터를 닫아도 유지될 수 있다. 사적 매핑의 변경은 원본 파일에 전달되지 않지만, 원본의 이후 변경까지 차단하는 고정 스냅샷을 보장하지는 않는다. 공유 여부, 접근 권한, 매핑의 수명은 각각 별도로 정해지는 조건이다. <ref name="source-4">[https://man7.org/linux/man-pages/man2/mmap.2.html Linux man-pages: mmap(2)].</ref> | ||
== 관련 각론 == | == 관련 각론 == | ||
* [[운영체제 기본/Linux의 ELF 로딩/ELF 세그먼트와 주소 공간|ELF 세그먼트와 주소 공간]]: 실행 파일의 코드·데이터를 파일 매핑과 익명 메모리로 구성하는 과정. | |||
* [[운영체제 기본/Linux의 파일 메모리 매핑|mmap을 통한 파일 읽기]]: 주소 영역 등록, 첫 메모리 접근, 파일 폴트와 PTE 설치. | * [[운영체제 기본/Linux의 파일 메모리 매핑|mmap을 통한 파일 읽기]]: 주소 영역 등록, 첫 메모리 접근, 파일 폴트와 PTE 설치. | ||
== 참고 문헌 == | == 참고 문헌 == | ||
<references /> | <references /> | ||