Linux 커널 - pid(task_struct)로 현재 프로세스 찾기

Linux 커널 - pid(task_struct)로 현재 프로세스 찾기

나는 이것을 읽었다우편 엽서.

하지만 내 문제는 프로세스가 아닌 현재 프로세스에 있습니다(pid를 사용하여 찾습니다). 코드 이외의 문서를 찾을 수 없기 때문에 (예:이것) 제공된 기능, 예상 입력, 출력을 사용하는 방법에 대해 설명합니다.

편집하다:내 말은, task_struct *task를 선언하면 작업 포인터가 이미 현재 프로세스를 가리킨다는 뜻인가요?

답변1

Linux 커널은 다중 스레드이며 많은 프로세스가 동시에 실행됩니다. 현재 프로세스의 PID를 받으면 더 이상 "현재" 프로세스가 아닐 수 있습니다.

비선점형 커널은 완료될 때까지 프로세스를 실행할 수 있지만 일반적으로 그렇지 않습니다. 각 프로세스의 양호 수준을 설정할 수 있습니다. 좋은 수준 -20(좋지 않음)은 전체 시스템이 완료될 때까지 지능적인 방식으로 프로세스에 참여합니다.

프로세스가 디스크 읽기를 수행해야 하고 시스템이 메모리를 직접 읽을 수 있는 경우 커널은 다른 프로세스가 수백만 CPU 주기를 사용하도록 허용할 수 있습니다.

그러나 데스크탑 시스템의 경우 -20이라는 좋은 수준으로 설정된 사용자 프로세스는 많지 않습니다. 범위는 -10에서 10까지입니다. 활성화하면 top가장 중요한 프로세스를 볼 수 있으며 각 프로세스는 좋은 수준으로 표시됩니다.

Linux는 다중 스레드 커널을 사용하여 UNIX처럼 작동합니다. 각 스레드는 동일한 프로세스에 속할 수도 있고 다른 프로세스에 속할 수도 있습니다. 일반적으로 데스크톱 시스템은 사용자 상호 작용에 응답해야 하므로 선점형 코어와 빠른 타이머를 사용합니다.

코어가 비선점형이 아닌 이상 서버는 여러 번 심각한 성능 저하를 겪게 됩니다. 스레드, 선점 및 잠금의 개념은 매우 복잡합니다. 그러나 이는 몇 가지 개요를 제공합니다.

선점 및 스레딩

관련 정보