운영체제 기본/가상 메모리: 두 판 사이의 차이

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 />