문제

커널 공간에 정의 된 사용자 수준 공간에서 읽고 싶은 구조물이 있지만 사용자 수준 공간에는 여러 프로세스가 있습니다.

예시:

커널 모듈에는 글로벌 구조물이 있습니다. 구조 {int a; int b; } 테스트;

사용자 수준 모듈에서는 그 글로벌 구조물을 "외부"했습니다.

extern struct {int a; int b; } 테스트;

컴파일러는 불평하지 않으며 Linkage 편집기는 불평하지 않습니다. 그러나 사용자가 여러 프로세스가있는 경우 각 프로세스에 대해 구조물이 복제됩니까? 외부와 함께 공유 메모리를 사용하면 커널 구조물에 액세스 할 수 있으며 N 프로세스가 있으면 공유 이후 1 개만 있습니다. 1 개의 사용자 수준 프로세스로 커널 수준 변수에 액세스 할 수 있지만 프로세스가 더 많으면 "외부"가있는 각 구조에 대한 클론을 얻습니다.

내 질문은 여러 사용자 수준 프로세스가 커널 수준 변수를 읽을 수 있습니까?

도움이 되었습니까?

해결책

사용자 공간은 어쨌든 커널 RAM을 직접 볼 수 없으며 Mmap'ing /dev /kmem은 좋은 솔루션이 아닙니다 (제 생각에는 실제로 추악하고 커널 디버깅에만 사용해야합니다).

가장 좋은 방법은 /Proc (매우 쉽습니다) 또는 IOCTL (약간 더 복잡한)이있는 문자 거부를 통해 노출하는 것입니다.

(NB : Linux / Unix 특정입니다)

다른 팁

대부분의 운영 체제에서 사용자 공간에서 커널 공간 변수에 액세스 할 수 없습니다.
OS가 제공하는 메커니즘을 통해 데이터를 노출해야합니다. 이것은 사용자 정의 시스템 호출, VFS 또는 다른 형태의 IPC를 통해 노출 된 파일 일 수 있습니다.

UNIX에서 이것은 일반적으로 수행됩니다 mmap-일부 특수 장치 파일과 같은 /dev/kmem.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top