1
멀티 코어 CPU에서 다음과 같은 경우를 고려하면 간단하게 리눅스 커널을 사용할 수 있습니다.OS에서 2 개의 I/O 차단 프로세스 및 키스트 로크 이벤트
wait_char()
{
while (1)
{
ch = readchar();
putchar(ch);
}
}
- 나는 두 터미널 A와 B를 열어 처리 A와 처리 B 모두 차단 및 키보드 대기 I/O 큐에 넣어
- 각각 오는 인터럽트에 wait_char() 코드를 실행할 . A는 가 지금은 터미널 특히 B 입력
- CPU가 커널 모드에서 키보드 인터럽트 서비스 루틴을 실행하는 내 키보드에서 키를 선택하는 큐에 앞서 B의이다, 말할 수 것은 물론
- I는 입력 키를 볼 수 있습니다 콘솔에 에코.
이제 커널이 B (누가 I/O 대기열에 있었는지)에 대해 어떻게 알았습니까?
내가 100 % 확신하지는 않지만 나는 추측 할 것이다. bash는 당신이 입력 한 프로그램에'fork'와'execv'를합니다. 자식 프로세스와 부모 프로세스는'stdin'과'stdout'을 포함한'PD' 테이블의 모든 엔트리를 공유합니다. 처음에 프로그램 A를 실행 한 bash에서 키를 입력하고 입력을 입력하면 bash가 중단되어 OS가 해당 입력을 처리합니다. 프로그램 A와 bash는 그 입력을 받았습니다. 프로그램 B가 아니고 두 번째로 열린 bash. –