Kernel Memory 찾기에 대한 질문 인데요~
글쓴이: hyper9 / 작성시간: 목, 2008/12/18 - 2:38오전
제목을 제대로 쓴건지 좀 헷갈리네요 ..
제가 이해하기로는 Linux의 경우 Kernel Memory라고 불리우는 영역과
User Space영역이 따로 있고, 이들이 서로 겹치지 않는 걸로 알고 있는데요..
(틀리면 지적해 주시면 감사하겠습니다 ~ ^^)
예를 들면 자기가 사용하는 Linux Desktop에서,,,저의 경우는 2GB의 Memory를
사용하고 있는데요,,
어느 정도의 양이 Kernel Memory로 할당되어 있는지, 또 얼마나 User Space에서
사용할 수 있는 양인건지,,어떻게 알아볼 수 있을까요?
그리고 그걸 조정하는 방법은 또 어떤건지도 함께 여쭤보고 싶네요.
조언 부탁드리겠습니다...
Forums:
음..
커널 메모리와 유저메모리의 비율 조정이라.. 글쎄요..
제가 알기로는 리눅스는 일단 논리주소라는 가상 메모리 주소를 사용합니다. 프로그램에서 사용하는 메모리가 논리주소고, 이 메모리 주소를 커널의 mmu에서 실제 물리주소로 변환하죠.
여기서, 32비트 리눅스 시스템에서는 4기가의 논리주소 영역이 있습니다. 그 논리주소 영역에서 처음부터 3기가 까지의 영역은 프로세스가 사용하는 유저 스페이스 메모리 주소영역이고, 그 다음부터 마지막까지의 1기가는 커널이 사용하는 커널영역으로 간주합니다. 여기서 물론 처음부터 프로세스가 4기가 메모리를 잡아놓고 있다는건 아닙니다. 프로세스가 사용할수 있는 논리주소 영역의 최대값이 3기가 대역이란거죠.
그럼 여기서 시스템은 2기가인데 4기가 영역을 쓴다? 물론 논리주소는 4기가 입니다. 하지만 실제로 사용되는 건 아니죠.
프로세스에 메모리를 할당하면 마지막 위치를 할당한 크기만큼 뒤쪽으로 옮기고 그 안에서 사용하게 되는데, 그 마지막 주소가 메모리의 3기가 되는 위치를 넘어갈수가 없다는거죠.. 그 뒷 주소영역은 커널영역일테니.. 이제 마지막위치(시스템 브레이크)를 옮겼으면, 이제 실제로 메모리에 할당을 해야 될텐데, 그건 시스템의 mmu에서 페이지 단위로 할당을 해줍니다. 이건 마찬가지로 커널 영역도 메모리 할당시 mmu를 이용해서 페이지 단위로 할당을 합니다. 따라서, 논리주소에서 커널영역은 1기가지만, 실제로 커널이 사용하고 있는 양은, 실제 커널이미지의 크기겠죠.
더불어 커널에서 생성된 여러 자료구조나 코드들의 크기도 포함해서요.
그러나 32비트 리눅스에서는 논리주소의 크기는 4기가로 고정되어있고, 유저영역은 3기가 커널영역은 1기가로 고정되어있습니다.;;
http://www.ibm.com/developerworks/kr/library/l-memory/
(틀린부분 있으면 지적해주세요..)
그렇다면,,
2GB의 Physical Memory를 가지고 있는 System의 경우는
1GB의 Kernel Memory와 1GB의 User Memory를가지고 있는 셈이 되는 건가요?
그럼,,이 것과,,High Mem, Low Mem은 또 어떻게 연결해서 이해를
해야하는 걸까요?
Low Mem은 1GB까지 올라가지 않는 것 같던데요..
그럼,,
Low Mem의 일부와 High Mem의 일부가 Kernel Memory를 구성하게 되는 걸까요?
조언 부탁 드립니다..감사합니다.
댓글 달기