사용자 수준 공간에서 커널 공간에서 변수에 액세스합니다
-
18-09-2019 - |
문제
커널 공간에 정의 된 사용자 수준 공간에서 읽고 싶은 구조물이 있지만 사용자 수준 공간에는 여러 프로세스가 있습니다.
예시:
커널 모듈에는 글로벌 구조물이 있습니다. 구조 {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
.