tail head cat sleep
QR code linking to this page

Man page  — MI_SWITCH

명칭

mi_switch, cpu_switch – 별의 프로세스 문맥에의 스윗치

내용

서식

#include <sys/param.h>
#include <sys/proc.h>

void
mi_switch(void);

void
cpu_switch(struct proc *p);

해설

mi_switch() 함수는 머신비의존인 프로세스 콘텍스트 스위칭의 사전 처리를 실장하고 있습니다. 횡령 불가능한 커널 모드 실행의 방침의 결과로서, 커넬내의 얼마 안되다 구별된 장소로부터 마셔 불려 갑니다. 3 개(살)의 주된 mi_switch 의 사용은 이하로 거론됩니다.
  1. sleep(9) [영어] 및 tsleep(9) [영어] 중에서, 어느 리소스가 이용 가능하게 되는 것을 기다리기 위해서(때문에) 현재의 프로세스가 자발적으로 CPU 를 방폐할 때.
  2. 트랩 (예를 들면, 시스템 콜, 디바이스 세치기) 의 취급의 다음에, 커널이 유저 모드 실행을 위해서(때문에) 돌아올 준비 때. 통상 이 경우는, 현재의 프로세스의 시그널 배치안의 변화의 검출의 후에 머신 의존의 트랩 핸들링 코드에 의해 취급되는지, 보다 높은 우선도의 프로세스가 실행 가능하게 되었을지도 모를 때입니다. 후자의 이벤트는 머신 정의의 need_resched() 의 호출에 의한 머신비의존의 스케줄링 routine에 의해 전달됩니다.
  3. 시그널 핸들러 코드 ((issignal) 9 (을)를 참조) 중(안)에서, 프로세스를 정지시키는 시그널이 도착되었을 경우.

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()로 불려 가야 하는 것인 것에 주의해 주세요.

관련 항목

issignal(9) [영어], spl(9), tsleep(9) [영어], wakeup(9) [영어]


MI_SWITCH (9) November 24, 1996

tail head cat sleep
QR code linking to this page


Ben Bullock이 유닉스 매뉴얼 페이지에서 서비스에 대한 의견을 주시기 바랍니다. Privacy policy.

Unix is a junk OS designed by a committee of PhDs.
— Dave Cutler