2016-07-05 2 views
0

인터럽트로 인해 OS가 현재 작업에서 CPU를 변경하고 커널 루틴을 실행하게됩니다. 이 경우 시스템은 CPU에서 실행중인 프로세스의 현재 컨텍스트를 저장해야합니다. 그러나 임의의 프로세스가 시스템 호출을 할 때 컨텍스트 전환이 발생하는지 여부를 알고 싶습니다.무작위 시스템 호출에 의한 컨텍스트 스위치

답변

0

임의의 프로세스가 시스템 호출을 할 때 컨텍스트 전환이 발생하는지 여부를 알고 싶습니다.

정확하게는 아닙니다. 프로세스가 현재 실행중인 경우에만 프로세스가 시스템 호출을 할 수 있음을 상기하십시오. 이미 실행중인 프로세스로 컨텍스트를 전환 할 필요가 없습니다.

프로세스가 블로킹 시스템 호출 (예 : sleep())을하면, 현재 프로세스가 현재 잠자기 상태이므로 다음 실행 가능 프로세스로 컨텍스트가 전환됩니다. 그러나 그것은 또 다른 문제입니다.

+0

"프로세스 제어 블록"의 역할이이 프로세스에 무엇인지 말해 줄 수 있습니까? –

0

일반적으로 콘텐츠 스위치를 발생시키는 두 가지 방법이 있습니다. (1) 타이머 인터럽트는 강제적으로 컨텍스트 스위치를 만드는 스케줄러를 호출하거나 (2) 프로세스가 수행합니다. 대부분의 운영 체제에는 프로세스가 CPU를 산출하게하는 많은 시스템 서비스가 있습니다.

0

글쎄, 나는 당신의 요점을 가지고. 먼저, 시스템 호출에 대한 아주 기본적인 아이디어를 정리합니다.
프로세스/프로그램이 syscall을 생성하고 커널을 인터럽트하여 syscall 핸들러를 호출 할 때. TSS는 커널 스택을로드하고 syscall 함수 테이블로 점프합니다.
그것은 그 프로그램 자체의 다른 부분을 실행하는 것과 실제로 동일합니다 참조, 유일하게 중요한 변화가 커널 여기에 중요한 역할을하고 코드의 조각 링에서 실행됩니다 귀하의 질문에 "0

지금 무엇을 것입니다 무작위 프로세스가 시스템 호출을 할 때 컨텍스트 전환이 발생하면 어떻게 될까요? "

아무 것도 일어나지 않을 것입니다. 이전에 작업했던 것과 같은 방식으로 작동합니다. TSS에서 정상 주소를 갖는 대신에 임의의 프로세스의 TSS에서 커널 스택 및 SysCall 함수 테이블 주소를 가리키는 주소를 갖게됩니다.

관련 문제