문제

내가 쓰는 장치 드라이버,다른 것들 사이에 할당하는 메모리 블록으로 kmalloc.이 메모리를 해제할 때 사용자 프로그램 파일을 닫습니다.중 하나에서의 내한 실험,사용자 프로그램으로 추락한 파일을 닫지 않고.

것이 아무것도가 해방 이 메모리는?

에서 또 다른 실험,이동 kfree()close() 기능 module_exit() 기능입니다.실행하는 경우 사용자 프로그램은 두 번 연속으로 나라 kmalloc 다시 같은 포기하지 않고,자유롭게 첫 번째.따라서,내가 잃었다 포인터를 메모리,과할 수 없습니다.

은 이 기억을 잃은 시스템까지 재부팅,또는 그가 해제될 때 나는 언로드 드라이버입니까?

도움이 되었습니까?

해결책

커널은 결코 자동으로 해제됩니다.이 포함됩 kmalloc.

모든 메모리에 관련된 열린 파일 기술자 발표해야한다면 파일이 자동으로 닫힙니다.
면 프로세스가 종료하는 어떠한 이유로든(함 kill -9),열려 있는 모든 파일기술자와 운전에 가까이 함수가 호출됩니다.그래서 만약 당신이 무료로,거기에 아무것도는 프로세스 할 수 있는 것은 메모리 후 프로세스는 죽는다.

다른 팁

하지 마시기 바랍에 관련의 사용자 경험 공간으로는 커널 프로그래밍입니다.

나는 무엇을 의미합니까?

정상적인 프로세스를 정해 그들면,종료하지 않는 경우는 커널 모듈이기 때문에 그들은 정말 프로세스입니다.

기술적으로,로드하는 경우 모듈화한 다음 kmalloc,당신은 무엇이었을 요구 하는 커널에 할당하는 메모리를 위한 당신 커널에서 공간의 기술적으로 새로운 메모리에 대한 전체적인 커널 경우에도 당신이 당신이 바로 당신의 모듈에는 할당된 커널 메모리가 있다면 명시적으로 해제됩니다.

간단한 측면에서 당신의 질문에 대답:모든 kmalloc 필요 kfree,다른 메모리에 남아 있을 만큼 시스템입니다.

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