운영체제 기본/가상 메모리: 두 판 사이의 차이
가상 메모리 원리를 ELF 실행 이미지 배치 각론과 연결 |
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> | ||