아래 표시된 ps 명령의 출력(kthreadd, ksoftirqd, kworker)에서 일부 프로세스에 실행 파일이 없다는 것을 알 수 있으며 이는 커널 스레드이기 때문에 일부 커널을 처리해야 하는 이유를 알았습니다. 스레드를 프로세스처럼 취급합니까, 아니면 프로세스처럼 보이게 합니까? 스레드 이름 뒤의 이 숫자는 무엇을 의미하나요? 예를 들어, 신호를 보내 사용자 공간에서 이러한 스레드를 종료할 수 있습니까?
root 2 0 0 Nov30 ? 00:00:00 [kthreadd]
root 3 2 0 Nov30 ? 00:00:03 [ksoftirqd/0]
root 5 2 0 Nov30 ? 00:00:00 [kworker/0:0H]
root 7 2 0 Nov30 ? 00:00:41 [rcu_sched]
답변1
인용하다Linux 장치 드라이버, 제3판. 옵션을 굵게 표시하고 싶었기 때문에 견적 버튼을 사용하지 않았습니다.
별도로 명시하지 않는 한 이러한 옵션은 모두 즐겨 사용하는 커널 구성 도구의 "커널 해킹" 메뉴에서 찾을 수 있습니다. 모든 아키텍처가 이러한 옵션 중 일부를 지원하는 것은 아닙니다.
구성_디버그_커널
이 옵션을 사용하면 다른 디버깅 옵션을 사용할 수 있지만 그 자체로는 어떤 기능도 활성화되지 않습니다.
CONFIG_DEBUG_SLAB
이 중요한 옵션은 커널 메모리 할당 기능에서 다양한 유형의 검사를 활성화합니다. 이러한 검사가 활성화되면 많은 메모리 오버플로 및 초기화 손실 오류가 감지될 수 있습니다. 할당된 메모리의 각 바이트는 호출자에게 전달되기 전에 0xa5로 설정되고, 해제되면 0x6b로 설정됩니다. 드라이버의 출력(또는 종종 죄송합니다 목록)에서 이러한 "독성" 패턴이 반복적으로 나타나는 경우 찾아야 할 오류의 종류를 정확히 알 수 있습니다. 디버깅이 활성화되면 커널은 할당된 각 메모리 개체 앞뒤에 특수 보호 값을 배치합니다. 이 값이 변경되면 커널은 누군가가 메모리 할당을 초과했다는 사실을 알고 큰 소리로 불평합니다. 보다 모호한 오류에 대한 다양한 검사도 가능합니다.
CONFIG_DEBUG_PAGEALLOC
해제되면 전체 페이지가 커널 주소 공간에서 제거됩니다. 이 옵션을 사용하면 작업 속도가 상당히 느려질 수 있지만 특정 유형의 메모리 손상 오류를 빠르게 지적할 수도 있습니다.
CONFIG_DEBUG_SPINLOCK
이 옵션이 활성화되면 커널은 초기화되지 않은 스핀 잠금 및 기타 다양한 오류(예: 잠금을 두 번 잠금 해제)에 대한 작업을 트랩합니다.
CONFIG_DEBUG_SPINLOCK_SLEEP
이 옵션을 사용하면 스핀 잠금이 유지되는 동안 절전 모드 시도를 확인할 수 있습니다. 실제로, 잠자기 상태일 수 있는 함수를 호출하면 문제의 호출이 잠자기 상태가 아니더라도 불평을 할 것입니다.
구성_초기화_디버그
__init(또는 __initdata)로 표시된 항목은 시스템 초기화 또는 모듈 로드 시간 후에 삭제됩니다. 이 옵션을 사용하면 초기화가 완료된 후 초기화 시간 메모리에 액세스하려고 시도하는 코드를 확인할 수 있습니다.
디버깅 정보 구성
이 옵션을 사용하면 커널이 전체 디버그 정보로 빌드됩니다. gdb를 사용하여 커널을 디버깅하려면 이 정보가 필요합니다. gdb를 사용할 계획이라면 CONFIG_FRAME_POINTER를 활성화하는 것이 좋습니다.
CONFIG_MAGIC_SYSRQ
"마법 SysRq" 키를 활성화합니다. 이 장의 뒷부분인 섹션 4.5.2에서 이 키를 살펴보겠습니다.
CONFIG_DEBUG_STACKOVERFLOW CONFIG_DEBUG_STACK_USAGE
이러한 옵션은 커널 스택 오버플로를 추적하는 데 도움이 될 수 있습니다. 스택 오버플로의 확실한 징후는 합당한 역추적 없이 죄송합니다 목록입니다. 첫 번째 옵션은 커널에 명시적인 오버플로 검사를 추가하고, 두 번째 옵션은 커널이 스택 사용량을 모니터링하고 마법 SysRq 키를 통해 일부 통계를 제공하도록 합니다.
CONFIG_KALLSYMS
이 옵션(일반 설정/표준 기능 아래)은 커널 기호 정보가 커널에 내장되도록 합니다. 기본적으로 활성화되어 있습니다. 기호 정보는 디버깅 컨텍스트에서 사용됩니다. 기호 정보가 없으면 oops 목록은 16진수 커널 추적만 제공하므로 그다지 유용하지 않습니다.
CONFIG_IKCONFIG CONFIG_IKCONFIG_PROC
일반 설정 메뉴에 있는 이러한 옵션을 사용하면 전체 커널 구성 상태가 커널에 내장되고 /proc를 통해 사용할 수 있게 됩니다. 대부분의 커널 개발자는 자신이 사용하는 구성을 알고 있으므로 이러한 옵션(커널을 더 크게 만드는)이 필요하지 않습니다. 그러나 다른 사람이 만든 커널의 문제를 디버깅하려는 경우에는 유용할 수 있습니다.
CONFIG_ACPI_DEBUG
"전원 관리/ACPI"에서. 이 옵션은 자세한 ACPI(고급 구성 및 전원 인터페이스) 디버깅 정보를 켜는데, 이는 ACPI 관련 문제가 의심되는 경우에 유용합니다.
구성_디버그_드라이버
"장치 드라이버"에서. 낮은 수준 지원 코드의 문제를 추적하는 데 유용한 드라이버 코어의 디버깅 정보를 켭니다. 드라이버 코어에 대해서는 14장에서 논의할 것입니다.
CONFIG_SCSI_CONSTANTS
이 옵션은 장치 드라이버/SCSI 장치 지원 아래에 있으며 자세한 SCSI 오류 메시지에 대한 정보가 내장되어 있습니다. SCSI 드라이버를 사용하는 경우 이 옵션이 필요할 수 있습니다.
구성 입력 EVBUG
이 옵션(장치 드라이버/입력 장치 지원 아래)은 입력 이벤트의 자세한 로깅을 설정합니다. 이 옵션은 입력 장치용 드라이버를 개발하는 경우 유용할 수 있습니다. 그러나 이 옵션이 보안에 미치는 영향에 유의하십시오. 비밀번호를 포함하여 입력하는 모든 내용을 기록합니다.
구성_분석
이 옵션은 "분석 지원" 아래에 있습니다. 프로파일링은 일반적으로 시스템 성능 조정에 사용되지만 특정 커널 중단 및 관련 문제를 추적하는 데에도 사용할 수 있습니다.
설명하다
이 옵션을 활성화하면 출력을 받을 수 있습니다.스레드 데몬충돌. 어떤 경우에는 실행 중인 프로젝트/스레드에 대한 추가 정보를 제공합니다. 설명작업자 스레드는 여기에서 찾을 수 있습니다.. RCU_Scheduler는 틱 메커니즘입니다.복제 업데이트 읽기. 무엇인가요Linux 커널의 ReadCopyUpdate?
커널 작업을 처리할 때 커널 스레드에서 사용하는 항목입니다. 사용자 공간 도구에 의해 종료되어서는 안 됩니다.