각 CPU의 코어는 한 번에 하나 또는 두 개의 스레드를 처리할 수 있는데, 여러 스레드가 실행 중인데도 OS가 어떻게 안정적일까요?

각 CPU의 코어는 한 번에 하나 또는 두 개의 스레드를 처리할 수 있는데, 여러 스레드가 실행 중인데도 OS가 어떻게 안정적일까요?

더 설명하자면, 하이퍼 스레딩이 없는 듀얼 코어 CPU가 있다고 가정해 보겠습니다. 즉, 한 번에 2개의 스레드만 처리할 수 있다는 뜻입니다. 이제 두 개의 백그라운드 네트워크 스레드를 실행하는 네트워크 애플리케이션이 있고 각각 들어오는 연결을 기다리고 있다고 가정해 보겠습니다. 처리하려면 해당 스레드가 항상 실행되어야 하는데, 이제 다른 OS의 프로세스와 스레드가 여전히 작동하는 이유는 무엇입니까?! 제가 보기에는 두 개의 스레드가 CPU 처리 장치를 완전히 소모하기 때문에 처리할 수 없습니다. 왜냐하면 네트워크 수신 연결을 기다리고 있기 때문에 매 나노초마다 연결을 위해 준비되어 있어야 하기 때문입니다. 어떻게 발생하고 작동합니까? CPU가 어떻게 눈에 띄는 정지 현상 없이 많은 스레드를 한 번에 처리할 수 있습니까?! (한 번에 많은 무거운 프로그램을 실행하면 창이 느려지고 이상해지는 경우가 있다는 것을 알고 있지만 이는 일반적인 문제는 아닙니다.)

감사해요.

답변1

대답은 비교적 간단합니다. 스레드가 I/O 이벤트를 기다리고 있을 때 나머지 시간 조각을 OS에 넘겨주고 OS는 다른 스레드를 예약할 수 있습니다. 대기 시간이 긴 I/O가 완료되면 스레드는 실행 준비가 된 것으로 표시됩니다.

이는 대부분의 I/O가 I/O 요청이 완료되었는지 반복적으로 확인(폴링이라고 함)하는 대신 인터럽트로 관리되기 때문에 가능합니다.

답변2

협동적 멀티태스킹을 사용하고 나쁜 프로그램을 갖고 있다면, 그렇습니다. 당신 말이 맞습니다.

그러나 실제 세계에서는 다음과 같은 일이 발생해야 합니다.

  1. 협력적 멀티태스킹: I Tread는 CPU를 계속해서 사용하지 않습니다. 대신 일정 시간이 지난 후 또는 차단되면 다른 프로그램에 기회를 제공합니다.
    바울의 대답은 후자를 설명합니다.

  2. 선점형 멀티태스킹(거의 모든 곳에서 사용됨): OS(프로그램이 아님)는 짧은 시간 동안 CPU를 프로그램에 제공한 다음 CPU를 제거합니다. 이는 타이머를 실행하고 만료되면 프로세스를 중지하고 대기 중인 다음 트레드/프로그램에 전달하는 것만큼 간단할 수 있습니다.


귀하의 경우에는 두 명의 직원과 세 가지(또는 그 이상)의 작업이 있는 사무실로 생각하십시오. (작업 A, 작업 B, 작업 C라고 부르겠습니다.)

첫 번째 작업은 다음과 같은 감독자의 명령을 확인합니다.

  • 타이머를 10분으로 설정하세요. 그것이 꺼지면 현재 작업을 중단하고 TODO 목록의 맨 아래에 놓고 이 문서를 계속 읽으십시오.
  • 그런 다음 TODO 목록 상단에서 첫 번째 항목을 제거하고 작업을 시작합니다.
  • 반복하다.

작업자 1은 타이머를 설정하고 TODO 목록의 첫 번째 작업(이 경우 작업 A)을 가져옵니다.

Worker 2는 동일한 작업을 수행합니다. 즉, 타이머를 설정하고 현재 TODO 목록의 맨 위에 있는 내용을 가져옵니다. 작업자 1이 작업 A를 제거했으므로 작업자 2는 이제 작업 B에서 시작합니다.

10분 후에 타이머가 꺼집니다. 작업자 1은 작업 A 작업을 중단하고 감독자의 지시를 받습니다. 현재 작업을 TODO 목록의 맨 아래에 두는 상태입니다. 감독자의 지시를 계속하면 이제 타이머가 다시 시작되고 현재 TODO 목록의 맨 위에 있는 작업(작업-C)에 대한 작업이 시작됩니다.

작업자 2는 동일한 작업을 수행하고 작업 B를 중지하고 TODO 목록의 맨 위에서 시작합니다(예에서는 작업 A).

등등등..

이는 다소 단순화되었습니다. 그러나 이는 두 개의 트레드(작업자)가 세 개 이상의 작업에서 어떻게 100% 시간을 작동할 수 있는지에 대한 아이디어를 제공해야 합니다.

실제 스케줄러에는 더 많은 것들이 있습니다. 예: 인터럽트(작업 도중에 울리는 전화와 이를 처리하는 방법 비교), 스마트 일정 관리(동일한 작업자에게 동일한 작업을 제공하면 작업자가 이미 익숙하므로 작업이 더 빨리 완료될 가능성이 높습니다.) , I/O(직원이 도서관의 책이 필요한 경우 타이머가 만료될 때까지 기다리지 않고 즉시 다음 작업 등을 계속합니다.

답변3

OS는 서로 다른 CPU에서 여러 스레드가 실행될 때 안정성을 유지하는 것과 거의 같은 방식으로 안정적으로 유지됩니다. CPU 코어 외부에서 보면 동일한 코어에 있는 두 LP와 서로 다른 두 코어에 있는 하나의 LP 사이의 동작에는 뚜렷한 차이가 거의 없습니다. 두 경우 모두 세마포어와 같은 동일한 "다중 프로세서 안전" 프로그래밍 기술을 사용해야 합니다.

관련 정보