슬랩 할당자에서 cache_grow에 대한 질문
글쓴이: jwpark0921 / 작성시간: 금, 2012/08/24 - 4:46오후
안녕하세요. 리눅스 커널에 대한 공부를 하고있는 학생입니다.
요즘 메모리 관리에서 슬랩 할당자에 대한 공부를 하고 있습니다.
페이지, 캐시, 슬랩, 객체... 이런 것들의 엮이고 엮이는 것을 이해하려니 머리에 쥐가나네요...
제가 드리고 싶은 질문은 슬랩할당자에서 캐시라는 것이 물리 메모리의 특정 부분에서 연속적인 공간을 캐시로 미리 할당한 다음 객체가 필요할때마다 이 캐시를 사용해서 객체를 할당한다고 알고 있습니다.
그런데 만약에 객체의 개수가 갑자기 많아져서 캐시를 성장시킬 필요성이 있는데 성장시킬 부분이 이미 다른 용도로 할당되어 있으면 어떻게 되는 건가요???
제가 생각해본 바로는 불연속적인 특정 위치에 할당하고 슬랩 리스트 연결을 해주는 것이라는 생각뿐이거든요... 소스 코드 열심히 찾아봐도 해당 코드가 어디있는지 감을 잡지도 못하겠습니다.
많은 분들의 도움 부탁드립니다. ^^
Forums:
음
불연속적인 위치에 할당하고 슬랩 리스트 연결을 해주는건 왜 문제라고 생각하시죠?
OS 구현나름이지만 범용 PC 같은 환경에서는 그런식으로 구현해서 크게 문제될건 없지 않을까요
연속적인 물리메모리가 필요한 상황은 DMA 를 사용할때 말고는 별로 없으니까요
자기실력이 좋다고 느껴지는건 공부를 안하고 있다는 신호.
아하~!
밤새도록 코드 후벼파보니깐 사실 kmem_cache_create() 함수를 호출할 시에는 캐시 디스크립터만 생성되어있지 처음부터 특정 공간을 할당받는건 아니었네요.
실제 메모리 할당은 슬랩의 생성과 해지에 따라 발생한다는 것을 알았습니다. 공간도 불연속적이라는 것도 찾았네요.
제시해주신 의견이 많이 도움이 되었습니다.
다만 제가 실력이 좋다고 느낀건 아니고 꽤 오랜 시간 후벼팠는데도 답이 안나와서 실력자분들께 여쭤볼려고 한거 뿐입니다. ㅠㅠ
댓글 달기