커널에서 쓰이는 메모리가 가상 메모리 인지 궁금합니다.
글쓴이: jongsuknim / 작성시간: 토, 2005/01/29 - 11:15오후
여러 모듈을 동시에 띄우고
각 모듈에서 kmalloc을 실행하여 메모리를 얻어 옵니다.
그리고 그들의 주소를 비교해본결과 서로 다른 모듈에서 같은 주소를 얻어온것을 보았습니다.
그렇다면 이들이 사용하는 주소는 가상 주소라는 말인데..
메모리 maped i/o 함수에서 주소값을 넘겨주는데.. 이때 쓰이는 주소값도 실제 물리 메모리 주소가 아닌 가상 주소인지.. 궁금합니다.
그리고 계속 kmalloc을 통해 메모리를 할당 받다보면 한 1M 정도 넘어가면 세그먼트 오류가 나는데.. 기왕 가상메모리로 할꺼면 넉넉하게 해도 괜찮지 않나요? 쥐알만큼 메모리를 주는 이유는 뭔가요? 혹시 가상메모리와 물리메모리가 1대1로 매핑이라도 되나요?
Forums:
책을 본지 좀 오래되어서 기억이 가물가물 한데....커널 메모리도
책을 본지 좀 오래되어서 기억이 가물가물 한데....
커널 메모리도 logical address 와 virtual address 로 나뉘어 있습니다.
logical address 는 physical memory와 1:1 매핑되며(주소가 같지는 않고 약간의 차이가 납니다. 특정 offset 만큼 이동하면 변환되는걸로 알고 있습니다) virtual address 는 무조건 1:1 매핑관계는 아닌것 같습니다.
어떤 함수를 사용하느냐에 따라 할당 되는 메모리가 틀린데, kmalloc() 같은 경우는 logical address, vmalloc() 은 virtual address 를 리턴하는것 같습니다.
자세한 사항은 Linux device driver 책에 잘 나와 있습니다.
아마 chapter 10 이후에 나올 겁니다.
답이 아니라 죄송~~
from saibi
댓글 달기