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

가상 메모리 원리를 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>