initp 커널 서비스

용도

커널 프로세스의 상태를 유휴 상태에서 준비 상태로 변경합니다.

구문

#include <sys/types.h>
#include <sys/errno.h>
int initp
(
pid, func, init_parms,
parms_length
, name)
pid_t  pid;
void ( func) (int
flag,
void* init_parms, int parms_length );
void * init_parms;
int  parms_length;
char * name;

매개변수

항목 설명
pid 초기화할 프로세스의 프로세스 식별자를 지정합니다.
func 프로세스의 초기화 루틴을 지정합니다.
init_parm 초기화 매개변수에 대한 포인터를 지정합니다.
parms_길이 초기화 매개변수의 길이를 지정합니다.
이름 프로세스 이름을 지정합니다.

설명

그만큼 초기화 커널 서비스가 전환을 완료합니다. 커널 프로세스 유휴 상태에서 준비 상태로. 프로세스의 유휴 상태는 다음과 같이 표시됩니다. p_status == SIDL . 전화하기 전에 초기화 서비스, 창조 프로세스를 생성하기 위해 서비스가 호출됩니다. 그만큼 창조 서비스는 프로세스 테이블 항목을 할당하고 초기화합니다.

그만큼 초기화 서비스는 프로세스 전용 세그먼트를 생성하고 초기화합니다. 프로세스는 다음 비트 세트에 의해 커널 프로세스로 표시됩니다. p_flag 프로세스 테이블 항목의 필드입니다. 이 비트, 즉 SKPROC 비트는 프로세스가 커널 프로세스임을 나타냅니다.

호출하는 프로세스 초기화 새로 생성된 프로세스를 초기화하는 서비스는 창조 새로운 프로세스를 생성하는 서비스입니다.

"커널 프로세스 사용" ~에 커널 확장 및 장치 지원 프로그래밍 개념 추가로 방법을 설명합니다. 초기화 커널 서비스는 다음에 의해 시작된 초기화 프로세스를 완료합니다. 창조 서비스.

그만큼 PID 매개변수는 초기화할 프로세스를 식별합니다. 이는 유효해야 하며 SIDL(유휴) 상태의 프로세스를 식별해야 합니다.

그만큼 이름 매개변수는 프로세스 이름을 지정하는 문자열을 가리킵니다. 이 문자열의 선행 문자는 사용자 구조에 복사됩니다. 복사되는 문자 수는 구현에 따라 다르지만 항상 4개 이상이 복사됩니다.

그만큼 기능 매개변수는 프로세스의 주요 진입점을 나타냅니다. 새 프로세스가 이 기능을 실행할 준비가 되었습니다. 만약 init_parms 매개변수가 null이 아닌 경우 이 루틴에 전달된 데이터를 가리킵니다. 매개변수 구조는 초기화 프로세스와 초기화 프로세스 간에 합의되어야 합니다. 그만큼 초기화 서비스는 지정된 데이터를 복사합니다. init_parm 매개변수(에 의해 지정된 정확한 바이트 수 포함) parms_길이 매개변수)의 데이터를 새 프로세스의 스택으로 보냅니다.

실행 환경

그만큼 초기화 커널 서비스는 다음에서 호출될 수 있습니다. 프로세스 환경 오직.

함수를 실행하는 커널 프로세스를 초기화하려면 main_kproc , 입력하다:

{ 
.
.
.
pid = creatp();
initp(pid, main_kproc, &node_num, sizeof(int), "tkproc");         
.
.
}
void
main_kproc(int flag, void* init_parms, int parms_length)
{
        .
        .
        .
        int i;
        i = *( (int *)init_parms );
        .
        .
        .
} 

리턴 값

항목 설명
0 성공적인 작업을 나타냅니다.
ENODEV 사용 가능한 프로세서가 포함되지 않은 프로세서 연결이 있기 때문에 프로세스를 예약할 수 없습니다. 이는 동적 프로세서 할당 해제로 인해 발생할 수 있습니다.
ENOMEM 프로세스를 초기화하는 데 메모리가 부족함을 나타냅니다.
EINVAL 다음을 나타냅니다. PID 유효하지 않은 매개변수입니다.