2010-07-21 6 views
3

시스템 호출이 호출 할 때 어떤 프로세스 상태가 있습니까?syscall을 호출 할 때 프로세스 상태?

내 말은

,

그것은 프로세스의 ... 읽거나 쓰기와 같은 I/O 시스템 콜의 asume하지 않는 itselft 커널 코드를 실행하거나 프로세스가 suspendes이며, "커널 스레드"처럼 거기에 그 syscall 핸들러를 실행하는 (그리고 (current)라고 불리는 프로세스를 아는)?

실행이 준비 중으로 변경되거나 실행 중으로 변경된 경우 확실하지 않습니다.

답변

1

프로세스 자체는 커널 모드로 전환하고 시스템 호출을 실행합니다. 커널은 커널 스택으로 전환하지만 프로세스를 호출합니다. 커널 내부에서 실행되는 프로세스는 상태 Running을 가지며 선취되어 State Runnable에서 종료 될 수 있습니다.

+0

감사합니다 :) _____ – makakko

2

이것은 시스템 호출의 기능에 달려 있습니다.

많은 숫자로 PI를 계산하고 응용 프로그램이 지정하는 버퍼에 결과를 저장하는 가설적인 syscall이 있다고 가정하면이 프로세스는 아마도 "R"실행 상태 일 것입니다. 커널 모드로 전환해도 호출 한 태스크 컨텍스트에서는 실행되지 않습니다.

물론 많은 시스템 호출이 대기합니다. 예를 들어 sleep()을 예로 들어 보겠습니다. 회전하는 대신 CPU를 해제합니다. 이것은 커널 타이머를 등록하여 프로세스를 휴면 상태로 만듭니다.

꽤 많은 syscalls는 잠들지 않습니다. getpid()와 마찬가지로 항상 RAM에있는 정보를 검색합니다. 예를 들어, 이미 커널 버퍼에있는 데이터에 대해 read()를 호출하는 경우와 같이, 때로는 잠자기하는 많은 사람들이 그렇게하지 않아도됩니다.

+0

대단히 감사합니다 .. – makakko

관련 문제