나는 운영 체제에 관한 프로젝트를 진행 중이며 운영 체제의 프로세스 스케줄링 데이터가 필요합니다. 데이터에는 각 프로세스에 대한 CPU 시간 조각 및 메모리 요구 사항과 함께 단기 스케줄러 및 장기 스케줄러의 모든 프로세스 목록이 포함되어야 합니다. 또한 다른 프로세스가 언제, 어떤 프로세스에 의해 선점되었는지에 대한 데이터도 필요합니다. Linux에서 이 모든 데이터를 수집할 수 있는 방법이 있습니까? 어떻게 해야 하나요?
Linux 소스 코드에는 구조체가 있습니다 task_struct
. include/linux/sched.h
구조체에 있는 각 개체의 상태를 가져오는 방법이 있나요?
답변1
심층적인 일정 정보가 필요한 경우 다음 도구 중 하나를 사용할 수 있습니다.
- 성능
- 시스템 클릭
- dtrace (리눅스 포트 상태가 어떤지 모르겠습니다)
- 시스템 마이닝
이들 모두는 커널 후크를 활용하여 컨텍스트 전환, 인터럽트, I/O, 시스템 호출 등과 같은 이벤트를 노출할 수 있습니다.
답변2
다음 명령을 사용하여 프로세스, 스케줄러, 운영 체제 및 하드웨어의 기타 구성 요소에 대한 풍부한 내부 정보를 얻을 수 있습니다.
cat /proc/...
어디에... 많은 일이 있을 수 있어요. 예를 들어 프로세스 ID 뒤에 여러 특정 정보 요청이 있거나 다음과 같은 스케줄러 디버깅 정보 요청이 있을 수 있습니다.
cat /proc/sched_debug
전체 옵션 목록을 보려면 를 입력하십시오 ls /proc
. sched_debug, cpuinfo, meminfo, uptime 등과 같은 흥미로운 이름이 포함된 긴 프로세스 ID 번호 목록이 표시됩니다.
모두 가상 파일 시스템 덕분입니다프로세스 파일 시스템 이에 대해 더 자세히 읽을 수 있습니다.여기.
또 다른 유용한 명령은 다음과 같습니다.
top
프로세스 예약 방법, 메모리 사용량 등에 대한 실시간 정보가 표시됩니다.
답변3
이 ps
명령은 좋은 출발점입니다. 선택한 프로세스 집합(아마도 모든 프로세스)에 대해 표시되는 정보를 지정할 수 있습니다. man
options 에 대한 플래그로 지정되어 얻을 수 있는 사용 가능한 정보에 대한 자세한 내용은 해당 페이지를 읽을 수 있습니다 -O
.
시작하고 싶은 내용은 다음과 같습니다.
ps -O "%mem nice state upr pri cpu"