Linux 커널은 여러 병렬 syscall() 요청을 어떻게 처리합니까?

Linux 커널은 여러 병렬 syscall() 요청을 어떻게 처리합니까?

멀티 코어 시스템(예: 8개 코어)이 있고 코어에서 실행되는 모든 작업이 syscall()동시에 코어에 요청하면 어떻게 되는지 궁금합니다. 내 질문은 커널이 여러 병렬 syscall()요청, 병렬 또는 순차 또는 기타 웨이브를 처리하는 방법입니다.

답변1

과거에는 커널에 대한 호출이 다음을 사용하여 직렬화되었습니다.큰 커널 잠금. 하지만 오래전에 제거되었고, 그 이전에도 상당수의 커널 경로에서 BKL을 더 이상 사용하지 않아 오랫동안 시스템 호출이 병렬로 실행되어 왔습니다. 커널 자체에 선점 기능이 도입되면서 시스템 호출은 서로를 방해할 수도 있습니다(참조:이전 Linux 커널이 선점형이 아닌 이유는 무엇입니까?더 알아보기).

따라서 귀하의 질문에 대한 짧은 대답은 커널이 여러 병렬 시스템 호출을 병렬로 처리한다는 것입니다.

어떤 경우에는 시스템 호출 실행에 잠금 획득이 포함되어 충돌하는 시스템 호출을 직렬화하지만 시간이 지남에 따라 이는 덜 일반적이게 되며 기존 잠금은 제거되거나 더 세분화된 잠금으로 대체됩니다(성능이 저하될 때). 문제).

관련 정보