기본 색인 | 섹션 9 | English | 日本語 | 옵션 |
#include <sys/param.h>
#include <sys/proc.h>
mi_switch() (은)는 프로세스 구조체안에 현재의 프로세스가 실행된 시간량을 기록해, 그 프로세스에 할당라고 있는 CPU 의 시간 제한 ((getrlimit) 2 (을)를 참조)에 비추어 이 값을 검사합니다. 소프트 제한의 초과는 그 프로세스에 SIGXCPU 시그널이 전달되는 결과를 불러, 한편 하드 제한의 초과는 SIGKILL (을)를 일으킵니다. 이러한 관리상의 일이 완료한 다음에, mi_switch() (은)는 실제로 프로세스 콘텍스트 스위칭을 행하는 머신 의존 routine cpu_switch() 에 제어를 인도합니다.
cpu_switch() (은)는 우선도 큐 데이터 구조에 대해, 실행 준비가 되어 있는 프로세스중에서 선택합니다. 우선도 큐는, 큐 선두 구조체인 배열 qs[NQS] (으)로 구성됩니다. 개개의 큐 선두 구조체에 의해, 같은 우선도의 실행 가능한 프로세스의 리스트를 식별합니다 (, <sys/proc.h> (을)를 참조). 단일의 말 whichqs (은)는, 하늘이 아닌 큐를 알 수 있는 비트 마스크를 포함해, 재빠르게 프로세스를 선택하는 것을 돕습니다. cpu_switch() (은)는 가장 높은 우선도를 가지는 큐상의 리스트 ( qs 안의 낮은 인데크스가 높은 우선도를 나타낸다 ) (으)로부터 최초의 프로세스를 삭제하지 않으면 안되어, 글로벌 변수 curproc 에 그 프로세스 구조체의 주소를 할당 없으면 안됩니다. 실행 큐상에 이용 가능한 프로세스가 없는 경우에는, cpu_switch() 하 "idle" 루프로 이행하게 되어 있습니다. idle 루프는 세치기를 허가할 필요가 있습니다. 이것에 의해, 이윽고 프로세스가 실행 큐상에 다시 나타납니다. cpu_switch() 하지만 이 발생을 기다리고 있는 동안은 변수 curproc 하 NULL (이어)여야 합니다.
mi_switch() 및 당연 cpu_switch() (은)는 splhigh()로 불려 가야 하는 것인 것에 주의해 주세요.
MI_SWITCH (9) | November 24, 1996 |
기본 색인 | 섹션 9 | English | 日本語 | 옵션 |
Ben Bullock이 유닉스 매뉴얼 페이지에서 서비스에 대한 의견을 주시기 바랍니다. Privacy policy.