요구 페이징에 대한 질문입니다
글쓴이: 이명수 / 작성시간: 화, 2010/05/18 - 2:23오전
디스크에서 실행파일을 메모리에 적재할 때 처음부터 모든 페이지를 적재하는 것이 아니라
수행에 필요한 일부 페이지만 일단 적재하고 다른 페이지들은 실제로 참조될 때 적재하는 것을 디맨드 페이징이라고 한다고 합니다
이때, '수행에 필요한 일부 페이지'의 기준이 무엇인가요?
실행파일을 실행시키는 타이밍에서 CPU가 판단하는 것인가요?
아니면 컴파일될 때 미리 ELF 헤더 등에 컴파일러가 작성해놓는건가요?
그리고 수행에 필요한 페이지와 수행에 필요하지 않은 페이지의 기준이 무엇인가요?
Forums:
실행 프로그램의
실행 프로그램의 크기가 10바이트이며, 페이지의 크기가 1바이트라고 가정합니다. 그리고 프로그램은 0번지부터 수행한다고 하면 프로그램 수행에 필요한 페이지는 0번 주소를 담는 페이지겠죠... 나머지 페이지는 일단 필요가 없게 되구요. 그리고, 이 프로그램이 3번지 주소로 점프하게되면(함수호출 등) 3번지 주소를 담는 페이지가 또 필요하게 되구요. 이때 해당 페이지를 읽어들입니다.
이렇게 프로그램 수행 중 프로세스가 원하는 가상메모리에 물리메모리가 연결되어있지 않으면 MMU 하드웨어가 page fault 예외를 발생시킵니다. 이것을 CPU가 처리해 해당 가상주소에 물리 메모리를 읽어와 연결시켜 줍니다.(만약 page fault가 난 메모리 주소가 해당 프로세스가 사용할 수 없는 영역이면 잘못된 프로그램 수행으로 판단하고 프로그램을 죽여버립니다.)
자세한건 MMU의 동작에 대해 책을 다시한번 읽어보세요.
답변 감사합니다
답변 감사합니다
아 그러니까 당장 실행에 필요한 페이지 부분과 실행에 필요하지 않은 페이지 부분이 처음부터 따로 정해져 있는 것이 아니라
단순히 실행 순서대로 페이지 단위로 적재시키는 것이군요?
위의 예는 code
위의 예는 code 영역으로 설명했고 data 등 다른 영역또한 같습니다. 예를들어 malloc 등으로 메모리를 할당하더라도 해당할 메모리가 (그 메모리를 직접 접근하기 전에는) 실제 존재한다고 말하기 힘듭니다.
또한, 스택을 예로들면 프로세스의 스택이 8메가바이트 잡혀 있다고 하더라도 프로그램 초기 실행시 8메가바이트의 스택 메모리를 할당해 놓지 않고 스택이 자라는대로 실제 물리 메모리를 붙여줍니다.
네
다시 여쭤봐서 죄송한데요
힙과 스택은 말씀하신대로 알고 있었고
저는 code 영역이 궁금한데
제가 앞에서 질문드린대로
그러니까 code 영역이 적재될 때
"당장 실행에 필요한 페이지 부분과 실행에 필요하지 않은 페이지 부분이 처음부터 따로 정해져 있는 것이 아니라
단순히 실행 순서대로 페이지 단위로 적재시키는 것이군요?"
맞는지 확인 답변 부탁드립니다
.
이미 답변을 주셨지만
제가 지식이 짧고 이해력이 좋지 않아서
다시 한번 확인드립니다
죄송합니다
제가 알기로는...
네 그렇습니다. 메모리가 부족하면 해당영역을 회수해 다른 프로세스나 다른 부분에서 재사용 한다고 알고있습니다. 그리고 프로그램 실행이나 함수 호출 등으로 물리메모리에 올려지지 않은 메모리를 접근하면 다시 해당 페이지를 읽어들입니다.
답변 감사합니다
친절하고 자세한 설명 감사드립니다
좋은 하루 되세요
댓글 달기