programing

"시스템 호출 차단"이란 무엇을 의미합니까?

muds 2023. 10. 13. 22:36
반응형

"시스템 호출 차단"이란 무엇을 의미합니까?

"시스템 호출 차단"의 의미는 무엇입니까?

운영체제 강좌에서는 멀티 스레드 프로그래밍을 공부하고 있습니다.교과서에서 "스레드가 차단 시스템 호출을 할 때 다른 스레드가 실행되도록 허용할 수 있습니다."라고 읽었을 때 무슨 의미인지 잘 모르겠습니다.

차단 시스템 호출은 작업이 완료될 때까지 기다려야 합니다.read()좋은 예가 될 것입니다. 입력이 준비되지 않은 경우, 입력이 완료될 때까지 대기합니다(물론 이 경우에는 차단 시스템 호출이 되지 않을 수도 있지만, blocking 이외로 설정하지 않은 경우).분명히 한 스레드가 차단 시스템 호출 중에 대기하는 동안 다른 스레드가 다른 작업을 수행하는 중에 꺼질 수 있습니다.

차단 시스템 호출의 경우 호출자는 시스템 호출이 돌아올 때까지 아무것도 할 수 없습니다.시스템 호출이 길 수 있는 경우(예: 파일 IO 또는 네트워킹 IO 관련), 이는 좋지 않은 일이 될 수 있습니다(예: 도착하지 않는 네트워크에서 패킷을 기다리는 스레드가 차단되어 응답하지 않는 응용 프로그램에서 "취소" 버튼을 망치로 두드린 사용자를 상상해 보십시오).이 문제를 해결하기 위해(차단 시스템 호출이 반환될 때까지 기다리는 동안 유용한 작업을 수행하려면) 스레드를 사용할 수 있습니다. 한 스레드는 차단되었지만 다른 스레드는 유용한 작업을 계속할 수 있습니다.

대안은 시스템 호출을 차단하지 않는 것입니다.이 경우 시스템 호출이 (거의) 즉시 반환됩니다.긴 시스템 호출의 경우 시스템 호출 결과는 나중에 호출자에게 전송되거나(예: 일종의 이벤트 또는 메시지 또는 신호) 호출자가 나중에 폴링합니다.이렇게 하면 여러 가지 긴 시스템 호출이 동시에 완료되기를 기다리는 스레드를 하나씩 가질 수 있으며, 스레드의 번거로움(그리고 잠금, 레이스 상태, 스레드 스위치의 오버헤드 등)을 피할 수 있습니다.그러나 시스템 호출의 결과를 얻고 처리하는 데 따르는 번거로움도 증가합니다.

차단 시스템 호출 주위에 차단되지 않는 래퍼를 작성하는 것은 거의 항상 가능합니다. 래퍼가 스레드를 생성하여 즉시 반환하고, 생성된 스레드가 차단 시스템 호출을 수행하여 시스템 호출 결과를 원래 호출자에게 전송하거나 원래 호출자가 폴링할 수 있는 곳에 저장합니다.

또한 비차단 시스템 호출을 중심으로 차단 래퍼를 작성하는 것도 가능합니다. 래퍼는 시스템 호출을 수행하고 시스템이 반환되기 전에 결과를 기다립니다.

이 아주 짧은 글을 읽어보시기 바랍니다: http://files.mkgnu.net/files/upstare/UPSTARE_RELEASE_0-12-8/manual/html-multi/x755.html 특히 시스템 호출을 차단하는 것이 동시 프로세스뿐만 아니라 스레드의 문제가 될 수 있는 이유를 읽을 수 있습니다.

시스템 호출에서 하나의 스레드 차단이 다른 스레드의 코드 업데이트를 무기한 지연시킬 수 있기 때문에 다중 스레드 응용 프로그램에서 특히 문제가 됩니다.

도움이 되길 바랍니다.

차단 시스템 호출은 모든 프로세스가 시스템에 일부 서비스를 요청하지만 해당 서비스는 현재 사용할 수 없는 시스템 호출입니다.따라서 특정 시스템 호출로 프로세스가 차단됩니다.

멀티 쓰레드와 관련된 상황을 명확히 하고 싶다면 링크를 통해 확인할 수 있습니다.

언급URL : https://stackoverflow.com/questions/19309136/what-is-meant-by-blocking-system-call

반응형