0

내가 멀티 태스킹을 읽은 것은 정말로 빠른 속도로 일어나는 컨텍스트 스위칭 뿐이므로 병렬 처리의 환상을 제공합니다.컨텍스트 스위칭만으로 모든 작업을 동시에 완료하더라도 멀티 태스킹은 어떻게 가능합니까?

하지만 혼란 스럽네요. 컨텍스트 스위칭으로 전체 데이터를 처리해야하고 CPU가 동시에이를 처리하는 방법은 무엇입니까?

예 : 저는 VLC에서 5 분 길이의 노래를 듣고 KMP로 5 분 동안 다른 노래를 듣고 있습니다. 따라서 CPU는 10 분 길이의 데이터를 처리해야합니다. 그러나 두 곡 모두 동시에 끝납니다. 그게 어떻게 가능해? 일부 개념을 잘못 해석 한 경우 수정하십시오.

싱글 및 멀티 코어 프로세서에 대한 답변을 제공해 줄 수 있습니까?

+0

'전체 컨텍스트 전환으로 처리해야하는 경우에도 CPU가 동시에 처리하는 방식은 무엇입니까?' 프로세스/스레드는 대부분 입출력을 기다리고 있으므로 입출력이 완료 될 때 사용 가능한 여유 CPU가 충분하기 때문입니다. 현대적인 선점 형 멀티 태스킹 커널은 모두 고성능 I/O에 관한 것입니다. CPU 실행은 IO를 기다리고 있거나 다른 스레드의 신호를 기다리고 있고 진행할 수있는 스레드로 공급되기 때문에 사용할 수없는 스레드에서 보류됩니다. 하나 이상의 코어를 보유하면 커널이 준비된 스레드를 해당 코어에 디스패치 할 수있는 기회가 늘어납니다. –

답변

0

단일 CPU 코어의 멀티 태스킹이 빠른 컨텍스트 스위칭이라는 것이 맞습니다. 이것은 멀티 코어 CPU를 고려할 때 좀 더 복잡해 지지만 아이디어는 대체로 동일합니다.

오디오 장치는 특히 흥미로운 예입니다. 그들은 CPU 간섭없이 자신의에 사운드를 생성하는 재생을위한 버퍼를 가지고 있습니다. 멀티 태스킹에서 작동하는 방식은 재생 버퍼가 낮아짐에 따라 사운드 장치가 OS (또는 드라이버 또는 응용 프로그램)에 알리고 일부 CPU 시간이 버퍼를 다시 채우는 데 소비된다는 것입니다. 다행히 데이터를 버퍼로 전송하는 것이 재생보다 훨씬 빠르기 때문에 CPU가 다른 모든 일을 할 수있게 해줍니다.

예제에는 시스템이 하나 더 있습니다. 시스템의 어딘가에서 '믹서'가 구현되었습니다. 때로는 사운드 카드에 있고, OS에있는 경우도 있습니다. 믹서는 모든 응용 프로그램에서 재생하려는 소리를 가져와 사운드 카드의 버퍼로 공급할 수있는 단일 재생 스트림으로 결합합니다. 다행스럽게도 믹싱은 지나치게 복잡하지 않으므로 오디오를 재생하는 데 걸릴 때까지 오디오의 10 초를 믹스하는 데 거의 시간이 걸리지 않습니다.

+0

그래서 다른 작업도 일부 버퍼를 가지고 있다고 가정합니까? 예를 들면. 게임을하고 다른 응용 프로그램을 동시에 실행합니다. Keypresses는 더 높은 우선 순위를 가지므로 게임을 제어하는 ​​동안 즉시 등록됩니다. 내가 제대로하고 있니? –

+0

예. 예를 들어, Windows에서는 각 창에 메시지 대기열이 있습니다. 키를 누를 때마다 여러 메시지가 '포커스'가있는 창으로 전송됩니다. 하나의 메시지는 키가 눌려 졌음을 나타내며, 또 다른 메시지는 키가 해제 될 때를 나타내며 다른 문자는 문자 입력 여부를 나타냅니다. 창을 소유 한 응용 프로그램은 해당 타임 슬라이스가 올 때마다 이러한 메시지를 처리합니다. 참고로 Windows 컨텍스트 전환에 대한 타임 슬라이스는 약 10ms (초당 100 번의 컨텍스트 전환) 였으므로 키 누름에 약간의 지연이 있음을 알 수 없었습니다. – lockcmpxchg8b

+1

@ lockcmpxchg8b '윈도우를 소유 한 응용 프로그램은 타임 슬랏이 올 때마다이 메시지를 처리합니다.'- 아니요! 적어도, 이것은 매우 오도 된 것입니다. 사용 가능한 코어가있는 경우 메시지를 처리하는 앱 스레드 (일반적으로 GUI를 관리하는 스레드)는 메시지가 사용 가능하게되면 즉시 실행됩니다. 'timeslices'를 기다리는 것은 없습니다. 이러한 고성능 I/O는 Windows와 같은 선점 형 멀티 태스킹 OS를 사용하는 주된 이유입니다. –