카운터=0"일 때 프로세스의 타임 슬라이스는 클록 인터럽트에 의해 업데이트됩니다. 3. 장치 드라이버가 길고 반복적인 작업을 실행할 때 , 프로세스가 중단, 예외 및 시스템 호출에서 사용자 모드로 돌아갈 때 스케줄러가 직접 호출됩니다."/> 카운터=0"일 때 프로세스의 타임 슬라이스는 클록 인터럽트에 의해 업데이트됩니다. 3. 장치 드라이버가 길고 반복적인 작업을 실행할 때 , 프로세스가 중단, 예외 및 시스템 호출에서 사용자 모드로 돌아갈 때 스케줄러가 직접 호출됩니다.">
Linux의 프로세스 스케줄링에서 발생하는 일: 1. 프로세스 상태 전환, 프로세스 종료, 프로세스 휴면 순간에 프로세스는 상태 전환을 위해 "sleep()" 또는 "exit()"와 같은 함수를 호출해야 합니다. 이 함수는 스케줄링을 적극적으로 호출합니다. 프로그램은 프로세스 스케줄링을 수행합니다. 2. 현재 프로세스의 "현재->카운터=0"일 때 프로세스의 타임 슬라이스는 클록 인터럽트에 의해 업데이트됩니다. 3. 장치 드라이버가 실행될 때; 길고 반복적인 작업인 경우 스케줄링을 직접 프로그램이라고 합니다. 4. 프로세스가 중단, 예외 및 시스템 호출에서 사용자 모드로 돌아갈 때.
이 튜토리얼의 운영 환경: linux7.3 시스템, Dell G3 컴퓨터.
리눅스 스케줄러는 프로세스 전환 여부를 결정하는 Schedule()이라는 함수입니다. 소위 스케줄링 타이밍은 스케줄러가 실행되는 상황을 나타냅니다.
Linux 프로세스 스케줄링은 선점형 멀티태스킹을 사용하므로 프로세스 중단 및 지속적인 실행에는 서로 협력이 필요하지 않습니다.
주로 다음과 같은 상황이 있습니다.
프로세스 상태 전환 순간: 프로세스 종료, 프로세스 휴면
프로세스는 상태를 수행하기 위해 sleep() 또는 exit() 및 기타 함수를 호출해야 합니다. 전환. 이 함수는 프로세스 스케줄링을 위해 스케줄러를 적극적으로 호출합니다.
현재 프로세스의 타임 슬라이스가 종료되면(현재->counter=0)
는 클록 인터럽트에 의해 업데이트되므로 이 상황은 기회 4와 동일합니다.
장치 드라이버
장치 드라이버가 길고 반복적인 작업을 수행할 때 스케줄러가 직접 호출됩니다. 각 반복 루프에서 드라이버는 need_resched 값을 확인하고 필요한 경우 스케줄러 Schedule()을 호출하여 CPU를 적극적으로 포기합니다.
프로세스가 인터럽트, 예외 또는 시스템 호출에서 사용자 모드로 복귀할 때
앞서 언급했듯이 인터럽트, 예외 또는 시스템 호출에서 복귀하든 결국 ret_from_sys_call()이 호출됩니다. 이 기능은 스케줄링 플래그를 확인하고 필요한 경우 호출 스케줄러를 호출합니다.
지식 확장
Linux에서는 프로세스가 할당된 시간보다 오래 실행될 수 없으므로 선점형 멀티태스킹을 사용하므로 서로 간의 협업을 중단하지 않고 프로세스를 일시 중지하고 계속할 수 있습니다.
Linux와 같은 멀티 태스킹 시스템에서는 여러 프로그램이 동일한 리소스를 사용하기 위해 경쟁할 수 있습니다. 이 경우 단기적인 버스트 작업을 수행하고 입력을 기다리기 위해 일시 중지하는 프로그램이 계속 유지하는 프로그램보다 낫다고 생각합니다. 계산을 위해 프로세서를 연결하거나 지속적으로 시스템을 폴링하여 입력이 도착했는지 확인합니다. 우리는 성능이 좋은 프로그램을 좋은 프로그램이라고 부르며 어떤 의미에서는 이 좋은 프로그램을 계산할 수 있습니다. 운영 체제는 nice 값을 기반으로 프로세스의 우선순위를 결정합니다. 프로세스의 nice 값은 기본적으로 0이며 프로그램 성능에 따라 계속 변경됩니다. 오랫동안 지속적으로 실행되는 프로그램은 일반적으로 우선순위가 낮습니다.
시스템 호출에서 돌아올 때 스케줄러가 호출되는 이유는 무엇인가요?
물론 이는 효율성상의 이유입니다. 시스템 호출에서 복귀한다는 것은 커널 상태를 떠나 사용자 상태로 복귀하는 것을 의미하며, 상태 전환에는 일정 시간이 소요되므로 사용자 상태로 복귀하기 전에 시스템은 커널에서 처리해야 할 모든 작업을 완료한 상태이다. 커널 상태.
각 클록 인터럽트가 발생할 때 커널이 수행하는 작업을 간략하게 살펴보겠습니다. 먼저 가장 빈번하게 발생하는 스케줄링 기회에 대해 전반적으로 이해한 다음 스케줄러의 구체적인 작업 프로세스에 대해 자세히 논의합니다.
각 타이머 인터럽트가 발생하면 세 가지 기능이 함께 작동하여 프로세스 선택 및 전환을 완료합니다: Schedule(), do_timer() 및 ret_form_sys_call().
schedule(): 프로세스 선택(스케줄링)을 완료하는 프로세스 스케줄링 함수
do_timer(): 클록 인터럽트 서비스 프로그램에서 호출되는 함수라고 하겠습니다. 함수의 주요 구성 요소인 이 함수가 호출되는 빈도는 초당 100회(100Hz 또는 100Hz라고 함)인 클럭 인터럽트의 빈도입니다.
ret_from_sys_call(): 시스템 호출 반환 함수.
시스템 호출이나 인터럽트가 완료되면 신호 처리, 핵심 작업 등 일부 마무리 작업을 처리하기 위해 이 함수가 호출됩니다.
추천 학습: Linux 비디오 튜토리얼
위 내용은 Linux 프로세스 스케줄링은 어떤 상황에서 발생합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!