[완료] 프로세스의 메모리 요청에 관한 질문입니다.
글쓴이: poohmong / 작성시간: 월, 2007/07/09 - 1:56오후
메모리 관련 부분을 공부하면서
프로세스에서 mm_struct를 관리하고 mm_struct에서 vm_area_struct를 유지 함으로써
프로세스가 사용하는 페이지에 대해서 리스트 형식으로 관리를 한다고 알고 있고
/proc 를 통해서 어떤 메모리 영역을 사용하는지도 알수 있다는걸 알았습니다.
헌데..
프로세스가 동작할때 필요한 부분만 물리적 메모리에 올려놓고 사용한다고 알고 있는데
이때 메모리 요청이 어디서 일어나는지 알수 있을까요?
이론적으론 swap in out을 통해서 물리메모리에 필요한 부분을 올려놓고 사용한다고 하는데
책에선.. 어떤식으로 요청이 생기는지에 대해선 설명이 없어서
이렇게 질문드립니다.
Forums:
예전 커널 소스를
예전 커널 소스를 공부할 때 그 부분을 살펴봤습니다만...
대강만 말씀드리자면, 커널에서 page table entry를 lookup하는 부분을 찾아보면 연결 고리를 찾을 수 있습니다. 잘 쫓아들어가다보면 swap의 존재를 알 수 있게 됩니다. page table entry 표시된 곳이 메모리에 올라와 있으면 바로 가서 얻어오게 됩니다. 그렇지 않을 때, 파일이 mapping된 곳이라면 연결된 address_space 구조를 따라가서 파일이 저장된 디스크에서 읽어오게 됩니다. 그런데 아무 mapping이 없는 메모리 영역일 경우 swap에서 읽어옵니다. 이 때 swap의 경우 연결된 address_space의 operation이 파일시스템이 아니고 swap 영역이 됩니다.
이 부분을 시작으로 해서 잘 찾아보면 swap에 넣는 부분도 찾으실 수 있으실 것입니다.
(지금 완전 가물가물한 기억으로 말씀드리고 있기 때문에, 심지어 저 address_space 구조 이름이 다른 것일 수도 있습니다.)
너무 수박 겉핥기식으로 가르쳐드려서 안하니만 못한게 아닌가 하는 생각도 듭니다만, 저도 생각이 나질 않습니다... =_=
리눅스 커널 분석하실 때는 lxr이나 vim + cscope를 이용하시면 편리합니다.:)
리눅스 커널을
리눅스 커널을 공부하신다면 아시고 계시겠지만...
참고로, 리눅스 커널의 address_space는 흔히 말하는 process address space와는 다른 개념을 설명하는 구조체입니다. 처음 볼 때 헷갈려서...
댓글 달기