Почему современные приоритетные многозадачные ОС зависают при загрузке процессора?

1813

Это открытый вопрос со многими возможными ответами, но, возможно, есть одна большая вещь, которую я упускаю из виду. Если нет, возможно, этот вопрос должен быть вики сообщества.


Я не использую другие ОС достаточно часто, чтобы судить, но, безусловно, во всех версиях Windows операционная система может быть запущена, когда приложения подключаются к ЦП. Понятно с ранними версиями, с совместной многозадачностью.

Однако, с преимущественной многозадачностью, разве операционная система не должна ставить себя и свой графический интерфейс на более высокий приоритет, чтобы оставаться отзывчивой, даже когда пользовательские приложения запрашивают полную загрузку ЦП? В конце концов, ОС не нужно выдавать какие-либо временные интервалы. В большинстве случаев меня не волнует, что приложение, которое потребует минут процессорного времени, задерживается на несколько микросекунд, чтобы графический интерфейс ОС мог реагировать на ввод.

Иногда это помогает установить процессы с высоким ЦП на более низкий приоритет, возможно потому, что это позволяет другим приложениям с низким ЦП, с которыми я взаимодействую, быть более отзывчивыми, создавая впечатление более отзывчивого общего опыта. Или приоритет приложения действительно влияет на его взаимодействие с процессами ОС?

Я видел это много раз, когда у меня было достаточно физической памяти без использования жесткого диска. Похоже, что использование процессора является основным согласованным элементом, когда флаги ОС.

Контрпример: часто, когда система почти полностью зависла, мышь остается отзывчивой. Таким образом, ОС защищает эту часть себя от некоторых проблем. Точно, как это отдельный вопрос, я просто поднять его в качестве примера.

5
Я не понимаю, как это разумный компромисс. Я бы предпочел сделать «полезную» работу, даже если это означает, что пользовательский интерфейс менее отзывчив. Может быть, это только я. David Schwartz 11 лет назад 0
Загрузка пользовательского интерфейса должна быть незначительной по сравнению с процессами, которые выполняются в течение ощутимого промежутка времени, поэтому повышение приоритета ОС не должно оказывать существенного влияния на длительный процесс. Подумайте, вы бы предпочли индикатор выполнения или ваша программа установилась на 50 миллисекунд раньше? Я подозреваю, что большинство людей предпочли бы отзывчивость, хотя пользователи SU могут быть исключительными. 11 лет назад 1
Загрузка пользовательского интерфейса не является пренебрежимо малой, поскольку требует перехода к коду, выполняющему пользовательский интерфейс, который требует переключения контекста, удаления кэшей ЦП и т. Д. David Schwartz 11 лет назад 3
@DavidSchwartz, возможно, но он спрашивает о задачах, которые занимают * намного больше * времени по сравнению с временем, которое требуется для пользовательского интерфейса. Например, если задание (например, кодирование видео) занимает значительное время, скажем, 10 минут, выполнение не будет завершено на пять минут быстрее, если не будет отображаться ход выполнения, оно может завершиться через пять * секунд. * Быстрее; т. е. обратная связь и возможность приостановки, отмены и т. д. того стоят. Synetech 11 лет назад 0
@JonofAllTrades, проблема может быть вызвана не только использованием процессора, но и взаимоблокировками. Если на ресурсе заблокированы два потока, загрузка ЦП будет низкой, но пользовательский интерфейс будет заморожен. Это также может произойти, если поток обрывается и каким-то образом оказывается в бесконечном цикле (который может или не может привязать процессор). Что касается мыши; это потому, что он обрабатывается CSRSS, который действительно имеет высокий приоритет; но даже это может замерзнуть (когда-нибудь застревал курсор и гудел динамик ПК?) Synetech 11 лет назад 0
@Synetech: Я не согласен с вами, и дизайнеры современных ОС, похоже, тоже не согласны с вами. David Schwartz 11 лет назад 0
@DavidSchwartz, и именно поэтому люди расстраиваются, когда система зависает. Synetech 11 лет назад 1
@Synetech: Точно, длительный процесс, интенсивно использующий процессор, не должен замедлять работу ОС или других приложений. Если это так, ОС вряд ли заслуживает называться «многозадачность». 11 лет назад 1
@DavidSchwartz: Я не думаю, что в дизайне ОС есть сознательное решение позволить графическому интерфейсу зависать во время длительных задач, интенсивно использующих процессор. Я подозреваю, что мы все уже привыкли к этому, и мне интересно, есть ли веские причины, по которым так должно быть. 11 лет назад 1
Недавно я установил Process Lasso (http://bitsum.com/processlasso/), который очень хорошо справляется с этой проблемой: он снижает приоритет ЦП, когда приложение привязывает ЦП, поэтому другие программы не испытывают недостатка в ресурсах. Это было очень полезно для меня. 10 лет назад 0

5 ответов на вопрос

5
LawrenceC

Единственные вещи, которые действительно могут привести к зависанию одной из «современных многозадачных ОС»:

  1. аппаратный сбой
  2. Процессор застрял в драйвере устройства (из-за 1 или плохого программирования)
  3. фатальное исключение в драйвере устройства или другом коде ядра (из-за 1 или плохого программирования)

Операционная система в многозадачной ОС всегда будет отключать задачу, когда заканчивается ее временной интервал. Однако, если программа предназначена для реагирования на ввод пользователя, но не реагирует на ее временной интервал, то ошибка в программе

Скорее всего, оболочка не отвечает. В винде это есть explorer.exe. Вы можете попробовать следующее:

  • альтернативная оболочка Windows (Litestep и т. д.)
  • прервите все файлы через explorer.exe taskmgr.exe, затем запустите cmd.exeи выполните свои действия через командную строку. Или запустите небольшую программу, предназначенную для запуска других программ.

explorer.exeэто одна из тех программ Windows, в которых много компонентов, которые можно подключить. Вот и посмотри как дела без этого.

Меня интересуют не только откровенные зависания, но и случаи, когда графический интерфейс пользователя сильно замедлен, этого достаточно, чтобы разочаровывать компьютер. Использование альтернативной оболочки - интересная идея, хотя, возможно, она не практична для большинства пользователей (кто-нибудь помнит альтернативные интерфейсы для Windows 3?). 11 лет назад 0
Если бы только Microsoft была в равной степени заинтересована ... Конечно, возможно, учитывая рост iOS и мобильных платформ, возможно, это является возможной причиной для Metro ... LawrenceC 11 лет назад 0
3
Anonymous

Попробуйте Linux. Если вы на самом деле компилируете ядро, вы можете указать временной интервал. Также вы можете увидеть эффект preempt. Срез времени в 1000us лучше, если вы создаете сервер, который (вероятно) не будет иметь пользовательского интерфейса, о котором нужно беспокоиться (но он все равно будет превентивной многозадачной ОС). С другой стороны, 100us приведут к чрезвычайно отзывчивой системе. Большинство дистрибутивов имеют 100us на своих настольных ОС, что означает, что даже если мой ЦП на 100% использует все ядра, мой пользовательский интерфейс все еще отзывчив (вы можете попробовать).

2
Chris O

Что касается Windows, то Windows 7 работает намного лучше, чем XP, когда дело доходит до такого рода вещей, поэтому я бы не согласился с вашим утверждением «все версии Windows». Но даже с XP, когда вы используете клиентскую версию ОС, Windows отдает приоритет перед приложением переднего плана (по умолчанию). Независимо от того, какая версия ОС, если все процессы застряли в ожидании одного и того же общего ресурса (может быть, ввода-вывода), все они будут вести себя без ответа.

Еще один способ решения этой проблемы: если explorer.exe занят в ожидании общего ресурса (включая время процессора), то сам рабочий стол / оконный менеджер будет вести себя без ответа. Аналогично для любых приложений, которые прямо или косвенно ожидают освобождения explorer.exe.

Конечно, лучше, чем в предыдущих версиях. Тем не менее, я все еще могу надежно уменьшить свою машину (Phenom dual 2.8, 4 ГБ) до уровня сканирования, пересчитав большую книгу Excel, тем самым привязав оба ядра, но используя мало памяти или доступ к жесткому диску, и не взаимодействуя с какими-либо драйверами. 11 лет назад 0
@JonofAllTrades - Как уже упоминали другие, Excel может выполнять чрезмерное переключение контекста (таким образом, замедляя всю систему) или слишком часто отключая строки кэша (также замедляя всю систему). Возможно, что Excel можно оптимизировать для этого конкретного сценария, но маловероятно. Если вам не важна скорость вычислений, вы можете установить привязку процессора к одному ядру для Excel (Диспетчер задач -> щелкните правой кнопкой мыши Excel.exe -> Установить сходство), и это даст все остальное ядро остальная часть системы и должна сделать вещи более отзывчивыми. Chris O 11 лет назад 0
1
Luaan

Приложения пользовательского режима обычно не могут замедлять графический интерфейс вашей ОС. Однако ситуация не так однозначна, как кажется. Не существует ни одного приложения в пользовательском режиме, которое бы на 100% было пользовательским, либо из-за системных вызовов (особенно файловой системы), либо из-за сопоставления виртуальной памяти.

В большинстве случаев ОС не застревает в процессе работы процессора, она застревает в ожидании какого-либо ресурса ввода-вывода. Это особенно очевидно, когда вы исчерпываете физическую память и начинаете заходить в файл подкачки (хотя учтите, что ОС может свободно помещать память в файл подкачки, даже если имеется достаточно физической памяти). Windows обычно довольно умна в этом, но вполне возможно «сломать» это.

Если это действительно процессор, скорее всего, это из-за жадного драйвера (подавляющее большинство которого не написано Microsoft). Драйверы режима ядра освобождаются от упреждающей многозадачности (как из-за задержек, так и по причинам надежности), поэтому, если драйвер запускает второй длинный цикл на процессоре, вам не повезло, это не будет прервано.

Отличный и простой инструмент, чтобы увидеть кое-что из этого, - Process Explorer (из SysInternals), который показывает время ядра процессора (т. Е. Сколько работы процессора над ядром выполняется в ядре, а не пользователю). сами приложения). Windows 7 и более поздние версии также включают это в свой диспетчер задач (это красная линия на графиках загрузки процессора).

В общем, упреждающая многозадачность не избавляет разработчиков ОС от необходимости идти на компромиссы. Это всегда обходится дорого, а планирование задач действительно очень сложно (сейчас моя ОС манипулирует более чем 2000 потоками - это довольно много, и я ничего не делаю). Было бы лучше выделить потокам меньше времени и тратить больше времени на переключение контекста? Было бы лучше дать им больше времени, жертвуя латентностью?

Итак, проверьте, что делают жесткие диски. Проверьте, как используется ваша память. Проверьте время ядра. Это вполне вероятно покажет вам, почему Windows теряет отзывчивость, когда вы выполняете тяжелую работу. Некоторые из них можно исправить (освобождая память, ограничивая нарушителя памяти, выбирая привязку к процессору вручную ...), некоторые решаются простым обновлением драйверов (графические драйверы были довольно заметны по причинам, которые они вызывали, что, вероятно, сыграло свою роль в Windows, сбрасывая их из режима ядра в режим пользователя в последних версиях).

Кроме того, говоря о графическом процессоре, современные Windows используют ускорение графического процессора для визуализации графического интерфейса (на самом деле, в некоторой степени, так же, как и Windows XP). Если ваше приложение значительно облагает налогом графический процессор, это также может привести к снижению скорости отклика Windows, особенно в Aero. Поскольку графические процессоры все чаще используются в качестве «гипер» процессоров GP, это может быть важно даже вне игр и тому подобного.

Еще одним серьезным нарушителем является плохо написанное многопоточное приложение. Кэширование памяти довольно легко убить, если вы делаете глупые вещи, а ОЗУ крайне медленное по сравнению с самим ЦП, поэтому без эффективного кеширования ЦП работает очень и очень медленно (даже если он в основном ожидает все время). Это еще сложнее на многоядерных ЦП (и многопроцессорных системах), поскольку для обеспечения согласованности многие многопоточные операции требуют аннулирования кэшированных данных (так что один ЦП не имеет доступа к «старому» значению переменная в памяти вне ее кеша / регистров). Все это невероятно быстро, но ... процессоры быстрее. Намного быстрее. Что, конечно, также представляет проблемы разных поставщиков ЦП, которые по-разному обрабатывают одни и те же вещи, совершенно отдельно от гораздо более высокого уровня ОС.сильно распараллеленные, они больше не выполняют одну инструкцию за другой.

Таким образом, даже если ОС все делает идеально (очевидно, невозможный идеал), она все равно может остановиться из-за проблем с оборудованием и связи с оборудованием. Что хорошего в том, что у вас есть 4-ядерный процессор, когда ваше приложение полностью насыщает память R / W? Что хорошего в том, что у него быстрый жесткий диск, когда каждый считываемый байт должен проходить через процессор (помните PIO?). Каждая аппаратная операция, которая не использует прямой доступ к памяти, может потенциально остановить ваш процессор.

И теперь большая часть Windows работает как приложения пользовательского режима. И они также взаимодействуют с запущенными приложениями - если я попрошу explorer.exeчто-то сделать для меня, он не сможет ничего сделать в это время. Если я отправлю миллиарду оконных сообщений в окно, оно оставит след.

Просто так много всего происходит, все время ... гарантии очень трудны. Обратите внимание, как быстро все становится, как только появляется экран «ctrl-alt-delete» - внезапно, как будто ничего не случилось :)

0
LMSingh

В частности, к окнам, приходящим на сканирование. Одна из наиболее распространенных причин, которые я нахожу, заключается в том, что несколько процессов используют достаточно виртуальной памяти, чтобы начать принудительный обмен. Может не показаться, что на диске много активности, но обычно это происходит.

Это легко доказать, а также работает, чтобы выйти из этого застревания, просто выбрав несколько небольших процессов (например, блокнот) и «чисто» и «терпеливо» заканчивая их. Это начинает уменьшать заклинивший эффект автострады. А затем вы закрываете одну большую память, и все возвращается в работоспособное состояние. Наблюдение за активностью диска в это время часто показывает, что происходит очень мало.

Почему я предлагаю сначала закрыть приложения меньшего размера. Удаляя сначала приложения меньшего размера, вы освобождаете виртуальную память с минимальной активностью диска и быстро отключаете компьютер. Если вы попытаетесь закрыть большое приложение, например, Firefox или Chrome, все они будут расширены. Это связано с тем, что большинство последних приложений имеют фоновые процессы, которые не исчезнут в течение долгого времени, потому что фоновые процессы также застревают, попадая в файл подкачки и выходя из него. Что еще хуже, они также оказываются с более низким приоритетом, им требуется еще больше времени для завершения их бизнеса, и весь объем виртуальной памяти, запрашиваемый приложением, должен ждать освобождения, пока все фоновые процессы и потоки не будут выполнены.

Еще одна вещь, которую я заметил из опыта, заключается в том, что браузеры являются одними из худших, когда дело доходит до закрытия быстро и чисто. Даже офисные приложения закрываются более чисто и быстро.

Есть моменты, которые требуют терпения, но когда дело доходит до веб-браузеров, не тратьте свое время. Лучше просто уничтожить их. Они справляются с этим прекрасно. Я всегда "убиваю -9 хром". Но перезапуск с несколькими сотнями вкладок (1200) требует некоторой работы. Dan D. 10 лет назад 0
Сценарий, который я имею в виду, заключается в том, что при наличии достаточного объема памяти и минимального дискового ввода-вывода одной лишь высокой загрузки ЦП иногда бывает достаточно, чтобы сделать графический интерфейс ОС практически непригодным для использования. Насколько я понимаю, независимо от того, сколько процессорного времени приложение * хочет * использовать, ОС может / должна / резервировать часть для себя, поэтому, пока нет конкуренции за другие ресурсы, графический интерфейс должен оставаться отзывчивым. 10 лет назад 0
Операционная система @JonofAllTrades может и действительно резервирует часть. Однако если вы испытываете крайнюю медлительность только из-за высокой загрузки процессора, то у вас, мой друг, скорее всего, проблема с драйвером видеокарты. Возможно, драйвер написан так, что ему нужно перезванивать в ОС вместо того, чтобы просто рисовать экран. Одним простым тестом может быть попытка временно отключить поддержку Aero (и, возможно, даже темы), чтобы определить, в чем реальная проблема. Кстати, отзывчивая мышь не означает, что в противном случае ОС не занята. Большая часть обработки мышью / kbd выполняется в драйверах, которые всегда получают временные интервалы. LMSingh 10 лет назад 0
@DanD. Вы прорвались через все известные мне границы с 1200 вкладками !! Вот Это Да! В XP я вижу, что окна начинают портиться после того, как в IE было около 23 вкладок. В Win 7 я увеличил до 60 в Chrome и еще 45 в FF одновременно (в то время как запущено много других приложений), и затем все становится нестабильным. Угадай, мне придется выяснить, как прорваться через пару сотен первым! LMSingh 10 лет назад 0

Похожие вопросы