2013-10-25 1 views
1

나는 Linux Kernel의 sysfs 가상 파일 시스템에서 수업 숙제를하고있다. sysfs 가상 파일 시스템을 설정하는 과정에서 Linux 커널은 실제 메모리를 블록으로 구성하고이 directoy sys/devices/system/memory의 섹션으로 구성합니다. 이 디렉토리에서 메모리 덩어리는 memory0, meomory1, memory2 등으로 표시 될 것입니다.리눅스 커널에서 메모리 인터리빙 및 메모리 분할이 일어나는 순위는 어디입니까?

리눅스 커널을 파헤쳐 본 결과, 메모리가 128MB 블록으로 나뉘어져 메모리 섹션으로 나뉘며 발견되었습니다. C 파일에서이 작업을 수행하는 코드는 Memory.c입니다. 위의 C 파일에서 memory_dev_init() 메서드는 전체 메모리 블록을 분할하여 섹션으로 나누는 논리를 가지고 있습니다.

rank0: [0-512KB] [2048KB-2560KB] [4096KB-4608KB] ... 
    rank1: [512KB-1024KB] [2560KB-3072KB] [4608KB-5120KB] ... 
    rank2: [1024KB-1536KB] [3072KB-3584KB] [5120KB-... 
    rank3: [1536KB-2048KB] [3584KB-4096KB] ... 

내 숙제의 일환으로, 내가 얻을 수 있도록이로 순위 형식을 변경하려면 : 아래와 같이 내 교수 당으로, 리눅스에서 메모리는 계급으로 분할되며, 순위는 메모리 주소를 인터리브 포함 연속 된 메모리 블록 :

rank0: [0-512KB] [512KB-1024KB] [1024KB-1536KB]... 
    rank1: [1536KB-2048KB] [2048KB-2560KB] [2560KB-3072KB]... 
    rank2: [3072KB-3584KB] [3584KB-4096KB] [4096KB-4608KB]... 
    rank3: [4608KB-5120KB] ... 

그래서 난 그냥이 메모리 인터리빙이 발생하고 기존의 현재 리눅스 커널에서 어떤 일이 일어나고 순위 위치를 정확히 알고 싶어요. 누구든지 올바른 방향으로 나를 가리켜 주시겠습니까?

답변

0

질문을 실제로 사용하지 않아서 잘 모르겠습니다. 사실 그것은 일종의 학술 연구이며, 당신이 달성하고자하는 것은 완전히 메모리 인터리빙을 비활성화하여 달성 할 수 있습니다. 인터리빙을 비활성화하면 sysfs에도 적절한 "그림"이 표시됩니다.

즉, 코딩이 필요없고 구성이 변경되었습니다.

+0

안녕하세요 Anton! 답변 해주셔서 감사합니다. 구성을 정확히 변경할 수있는 위치를 알려주십시오. BIOS 또는 하드웨어의 설정을 변경해야합니까? 나는 실제로 Qemu에 리눅스 커널을 로딩하여 이것을 수행하고있다. 그렇다면 리눅스 커널에서 설정을 바꾸는 방법을 가르쳐주세요. 또한 어쨌든 내 시스템에서 인터리빙이 일어나는 곳을 볼 수 있습니까? 그렇다면 터미널에서 어떻게 볼 수 있는지 말해 주시겠습니까? –

0

BIOS의 메모리 인터리브 설정을 살펴보십시오. 여기에 두 플랫폼에서이를 수행하는 방법을 설명하는 post이 있습니다.