저는 스케줄러에 대해 배우고 있으며 데이터 구조가 어떻게 구성되어 있는지 이해하기 위해 다양한 해킹을하고 있습니다. 이제 스케줄러의 실행 대기열이 어떻게 구성되어 있는지 이해하려고합니다. 그래서 프로세스가 주어지면 실행 대기열을 찾을 수 있다고 생각했습니다. 하지만 모든 실행 대기열을 반복하고 싶습니다. 어떻게해야합니까?시스템의 모든 실행 대기열에 어떻게 액세스합니까?
답변
내가 틀렸다고 정정하십시오. 각 프로세서에는 실행중인 프로세스에 대해 하나의 대기열 (이중 연결 목록으로 구성됨) 만 이 있습니다. 그러나 시스템에 더 많은 프로세스가있을 수 있습니다. 한 프로세서에서 하나의 작업을 시작한 다음 스케줄러가 컨텍스트를 전환하거나이 작업을 잠자기 상태로 전환하고 다른 프로세서로 마이그레이션하여 작업을 완료 할 수 있습니다.
프로세서에서 작업을 확인하려면 간단한 커널 모듈에서 for_each 매크로를 사용할 수 있습니다.
당신은 거의 옳다. 실행중인 큐는 두 개있다. 하나는 작동 중이며 다른 하나는 만료 된 작업이다. 어쨌든'for_each'는 무엇을 의미합니까? 그들 중 많은 수가 있습니다. –
예를 들면. 함수 "static int thread (void * data)"에서 https://github.com/0xDen/unptrace/blob/master/unptrace.c를 보면 loop - ** list_for_each ** 매크로를 볼 수 있습니다 작업을 반복하는 데 사용됩니다. – 0xDen
나는 그것에 대해 생각했다. 이 접근 방식은 큐를 실행하지 않고 작업을 제공하며 실행 대기열에 속하지 않은 모든 실행 가능 태스크도 제공합니다. 또한 모듈을 실행할 때 우연히 비어있는 다른 실행 대기열이 있는지 어떻게 알 수 있습니까? –
- 1. 에이펙스 테스트 실행 대기열에 걸림
- 2. Sinatra의 모든 양식 필드에 어떻게 액세스합니까?
- 3. 리피터에서 선택되지 않은 모든 항목에 어떻게 액세스합니까?
- 4. 상위 컨트롤러의 모든 요청에서 은닉에 어떻게 액세스합니까?
- 5. phpfox에서 퀴즈 모듈의 모든 대답에 어떻게 액세스합니까?
- 6. tabcontrol의 컨트롤에 어떻게 액세스합니까?
- 7. 유성에서는 process.env에 어떻게 액세스합니까?
- 8. PlatformConfiguration의 솔루션에 어떻게 액세스합니까?
- 9. QTabWidget에있는 위젯에 어떻게 액세스합니까?
- 10. MethodInterceptor에서 SecurityContext에 어떻게 액세스합니까?
- 11. TPicture.Graphic의 팔레트에 어떻게 액세스합니까?
- 12. 이 변수에 어떻게 액세스합니까?
- 13. WAR의 루트에 어떻게 액세스합니까?
- 14. NSMutableDictionary의 키에 어떻게 액세스합니까?
- 15. 어떻게 환경 변수에 액세스합니까?
- 16. Unity에서 데이터베이스에 어떻게 액세스합니까?
- 17. 메서드에서 배열에 어떻게 액세스합니까?
- 18. 개체 속성에 어떻게 액세스합니까?
- 19. 어떻게 콘텐츠에 액세스합니까?
- 20. Xcode에서 Genstrings에 어떻게 액세스합니까?
- 21. 해시 값에 어떻게 액세스합니까?
- 22. 팝업 버튼에 어떻게 액세스합니까?
- 23. WF4에서 데이터베이스에 어떻게 액세스합니까?
- 24. 어떻게 ApiController에서 HttpContext.Items에 액세스합니까?
- 25. ScriptSharp에서 JavaScript에 어떻게 액세스합니까?
- 26. GAS에서 posts.xml에 어떻게 액세스합니까?
- 27. 어떻게 ItemCommand에서 GridNoRecordsItem에 액세스합니까?
- 28. 어떻게 ListView에서 HeaderView에 액세스합니까?
- 29. 중첩 클래스에 어떻게 액세스합니까?
- 30. Java와의 연결에 어떻게 액세스합니까?
init_task를 사용하여 실행 큐를 추적 해 보았습니까? –
아니, 어떻게 그럴 수 있니? 추적이란 무엇을 의미합니까? –
리눅스 커널에는 기본적으로 runqueue 링크 목록의 헤더 인 init_task라는 변수 이름이 있습니다. 이 헤더를 사용하여 실행 큐를 탐색하십시오. 또한 어떤 커널 버전을 사용하고 있습니까? –