제가 찾아보거나, 생각하기로는
당연히 연속적인 메모리여야 한다고 생각하는데
확신이 안선 나머지 이렇게 질문드려요.
당연히 연속적인 메모리여야 한다고 생각하는데
확신이 안선 나머지 이렇게 질문드려요.
댓글 10
-
백창우
2008.11.06 17:14
굳이 그럴 필요는 없을것 같은데요. 해당 영역이 물리적으로 분할되어 있더라도 page table에서 하나의 영역으로 모아주고, 그리고 이렇게 모아준 page table에 대해서 모든 task에게 반영이 된다면 굳이 물리적으로 연속적이지 않아도 paging에 의해 연속될테니 문제가 없을것 같습니다. -
백창우
2008.11.06 17:15
단, OS가 이런 기능을 지원해주어야 겠지요. -
맥주
2008.11.07 19:39
initial RAM disk (initrd) 를 말씀하시는 것인지..? 그렇다면 연속된 메모리가 맞습니다. app 의 속도를 높이기 위해서 별도 운용되는 ramdisk 메커니즘 또한 연속된 메로리가 아닌가? 생각합니다. block 디바이스 드라이버 이기 때문에 그렇다라고 생각이 되는데요. 이건 확실치 않습니다. ㅋㅋㅋ -
신철수
2008.11.11 09:31
답변 감사드립니다.~! -
신철수
2008.11.12 11:51
아, 백창우님 제가 물리적인 연속성이 필요한 이유가
외부 디바이스에서 DMA를 위해서 아주 큰 연속된 버퍼가 필요해서요. -
허경탁
2008.11.14 09:48
외부 디바이스에서 DMA로 할당받아서 계속적으로 쓰실려는 목적이라면, bootmem을 사용하시는 것이 더 나을 듯 싶습니다.
단, 이렇게 될 경우에 할당받은 메모리를 Kernel에서 관리할 수가 없기 때문에, 전체 사용가능한 메모리의 용량은 줄어들게 됩니다. -
신철수
2008.11.17 10:30
허경탁님 그럼 커널에서 관리를 못한다는 건
디바이스에서 DMA로 올려준 영역을 커널에서 접근을 아예 못한단 말씀이신건가요? DMA로 올려준 데이터를 받아와야 해서 말이지요. -
맥주
2008.11.18 14:19
허경탁님 오랜만이네요. ^^ 신철수님 타겟에 물리 메모리가 64M 가 있는데, 10M 정도 전용 공간을 사용하고 싶다면, 커널에게 실제 메모리가 54M 뿐이라고 알려주고, 이것은 bootmem allocator 가 초기화 되기 전에 설정해 줍니다. 그럼 커널은 실제로 54M 에 대한 부분만 메모리 정책으로 관리 하게 될 겁니다. arm 커널은 대부분 타겟에 맞게 fix 하는 경우가 많습니다. x86은 BIOS 에게 물어 보기 때문에 좀 뜯어 고쳐야 할 것 같은데.. 암튼 10M를 남겨 두고, 차후 디바이스 드라이버에서 남겨둔 부분에 대한 페이지 테이블을 만들고 사용하면 될 것 같네요. 그럼 커널도 침범하지 못하는 전용 공간이 되지요. -
맥주
2008.11.18 14:31
참 커널이 침범 못하다는건 읽기/쓰기를 못한다는 건 아닙니다.. 일반적으로 메모리 할당/해제를 담당하는 커널의 메모리 관리 영역에서 빠진다는 것입니다. -
허경탁
2008.11.19 16:52
이백님 정말...정말 오래간만이세요...^^
매일 참석할려고만 하고, 실제로는 잘 못 나가네요...ㅠ.ㅠ
갑자기 조직이 변경되면서 신선한(?) 업무를 맡게 되었습니다.
커널도 계속 공부해야하는데, 쉽지만은 않네요....^^
.