Чому сучасні переважні багатозадачні ОС висять під час завантаження процесора?


5

Це питання відкритого типу, з багатьма можливими відповідями, але, можливо, є одна велика річ, яку я не помічаю. Якщо ні, можливо, це питання має бути вікі спільноти.


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

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

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

Я бачив це багато разів, коли в мене було достатньо фізичної пам’яті та без важкого використання жорсткого диска. Схоже, використання процесора є головним послідовним елементом, коли ОС прагне.

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


1
Навантаження інтерфейсу повинна бути незначною порівняно з процесами, які працюють протягом певного часу, тому підвищення пріоритету ОС не повинно мати істотного впливу на тривалий процес. Поміркуйте, чи не хочете ви скористатися смужкою прогресу або встановити програму на 50 мілісекунд раніше? Я підозрюю, що більшість людей віддають перевагу чуйності, хоча користувачі SU можуть бути виняткові.

3
Навантаження користувальницького інтерфейсу не є незначною, оскільки воно вимагає зміни до коду, який запускає інтерфейс, що вимагає контекстних комутаторів, видуває кеші процесора тощо.
Девід Шварц

1
@DavidSchwartz, і саме тому люди засмучуються, коли система висить.
Synetech

1
@Synetech: Саме цей тривалий процесор, який триває процесор, не повинен робити ОС чи інші додатки майже неприпустимо повільними. Якщо це так, ОС навряд чи заслуговує на те, щоб називатися "багатозадачним".

1
@DavidSchwartz: Я не думаю, що в дизайні ОС є свідоме рішення, щоб GUI висів під час тривалих процесорних завдань. Я підозрюю, що ми просто звикли до цього, і мені цікаво, чи є вагомі причини, що так і повинно бути.

Відповіді:


5

Єдині речі, які справді можуть змусити одну із "сучасних багатозадачних ОС" по-справжньому висіти:

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

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

Швидше за все оболонка не реагує. У Windows це так explorer.exe. Ви можете спробувати наступне:

  • альтернативна оболонка Windows (Litestep тощо)
  • вбийте всі Explor.exe через taskmgr.exe, потім запустіть cmd.exeі виконайте свої речі за допомогою командного рядка. Або запустити меншу програму, розроблену для запуску інших програм.

explorer.exeє однією з тих сильно компонентних програм Windows, до яких може підключитися багато речей. Тож подивіться, як все без нього.


Мене цікавлять не тільки відверті вішання, але й випадки, коли графічний інтерфейс сильно сповільнений, достатньо, щоб використання комп’ютера засмутило. Використання альтернативної оболонки - цікава ідея, хоча, мабуть, не практична для більшості користувачів (хтось пам’ятає альтернативні інтерфейси користувача для Windows 3?).

Якби тільки Microsoft був так само зацікавлений ... Звичайно, можливо, враховуючи зростання iOS та мобільних платформ, можливо, це є можливою причиною для Metro ...
LawrenceC

3

Спробуйте Linux. Якщо ви фактично компілюєте ядро, ви можете вказати фрагмент часу. Крім того, ви насправді можете побачити ефект виплат. Час відрізка 1000us краще, якщо ви будуєте сервер, на якому (мабуть) не буде турбуватися інтерфейс користувача (але все одно це буде передумовою багатозадачність ОС). З іншого боку, 100us призведе до надзвичайно чуйної системи. Більшість дистрибутивів мають 100 у своїй робочій ОС, а це означає, що навіть якщо мій процесор на 100% доторкнувся до всіх ядер, мій інтерфейс все ще реагує (ви можете спробувати це).


2

Що стосується Windows, то Windows 7 робить набагато кращу роботу, ніж XP, коли мова йде про подібні речі, тому я не погоджуюся з вашим твердженням про "всі версії Windows". Але навіть із XP, коли ви використовуєте клієнтську версію ОС, Windows надасть додатковий пріоритет додатку переднього плану (за замовчуванням). Незважаючи на те, яка версія ОС, якщо декілька процесів затримуються в очікуванні одного і того ж єдиного спільного ресурсу (може бути I / O), то вони будуть вести себе безвідповідально.

Ще один спосіб переглянути цю проблему, якщо explorer.exe зайнятий очікуванням спільного ресурсу (включаючи час процесора), то сам менеджер робочого столу / вікон буде вести себе невідповідно. Так само і для будь-яких додатків, які прямо чи опосередковано чекають звільнення Explor.exe.


Краще, ніж попередні версії, звичайно. Але я все ще можу надійно скоротити свою машину (Phenom dual 2.8, 4 Гб) до сканування шляхом перерахунку великої робочої книги Excel, тим самим прив’язуючи обидва ядра, але використовуючи мало пам’яті чи жорсткого диска та не взаємодіючи з жодними драйверами.

@JonofAllTrades - Як уже згадували інші, Excel може виконувати надмірні контекстні комутатори (тим самим сповільнюючи всю систему) або надто часто виводячи з ладу кеш-лінії (також уповільнюючи всю систему). Можливо, що Excel можна було оптимізувати під цей конкретний сценарій, але це не вірогідно. Якщо вас не хвилює швидкість обчислення, тоді ви можете встановити спорідненість процесора лише до одного ядра для Excel (диспетчер завдань -> клацніть правою кнопкою миші Excel.exe -> Встановити афінність), і це дасть усім іншим ядрам решта системи і повинні зробити речі більш чуйними.
Кріс О

1

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

У більшості випадків ОС не зациклюється на роботі процесора, вона зачекана на очікуванні деякого ресурсу вводу / виводу. Це особливо очевидно, коли у вас закінчується фізична пам'ять і починаєте заходити у файл сторінки (хоча зауважте, що ОС може розмістити пам’ять у файлі сторінки у вільний час, навіть якщо доступна достатня кількість фізичної оперативної пам’яті). Windows зазвичай щодо цього досить розумний, але це "цілком можливо" зламати.

Якщо це дійсно CPU, це, швидше за все, пов'язано з жадібним драйвером (переважна більшість з яких не написано Microsoft). Драйвери в режимі ядра звільнені від попереднього багатозадачності (як із затримки, так і з точки зору надійності), тому якщо драйвер виконує другий довгий цикл на процесорі, вам не пощастить, його не буде випущено.

Прекрасним та простим інструментом для перегляду цього є процес Explorer (від SysInternals), який показує вам час ядра ЦП (тобто, яка частина роботи процесора на ядрі виконується в ядрі, на відміну від користувача самі програми). Windows 7 і пізніші версії також включають це у свій диспетчер завдань (це червона лінія у графіках використання ЦП).

Загалом, переважна багатозадачність не врятує дизайнерів ОС від необхідності йти на компроміси. Завжди завжди коштує все, і планування завдань дійсно дуже складне (зараз моя ОС перебуває в жанрі понад 2000 потоків - це досить багато, і я насправді не роблю "нічого"). Чи було б краще приділити потокам менший час, і витратити більше часу на зміну контексту? Чи було б краще приділяти їм довші часи, жертвуючи затримкою?

Отже, перевірте, що роблять жорсткі диски. Перевірте, як використовується ваша пам'ять. Перевірте час ядра. Це, швидше за все, покаже вам, чому Windows втрачає відповідальність під час великої роботи. Деякі з них можна виправити (звільнення пам'яті, обмеження пам’яті-порушника, вибір афінності процесора вручну ...), деякі вирішуються просто шляхом постійного оновлення драйверів (графічні драйвери були досить помітні для проблем, які вони викликали, яка, ймовірно, зіграла свою роль в Windows, переносячи їх з режиму ядра в режим користувача в останніх версіях).

Також, будучи предметом графічного процесора, сучасні Windows використовують прискорення графічного процесора для надання графічного інтерфейсу (насправді, до точки, як це зробила і Windows XP). Якщо ваша програма суттєво оподатковує GPU, це також може призвести до повільної чутливості Windows, особливо в Aero. Оскільки графічні процесори все частіше використовуються як "гіпер" процесори GP, це може бути суттєвим навіть поза іграми і подібними.

Іншим головним правопорушником є ​​погано написана багатопотокова програма. Убити кешування пам’яті досить просто, якщо ви робите нерозумні речі, а оперативна пам’ять надзвичайно повільна в порівнянні з самим процесором, тому без ефективного кешування процесор стає дуже-дуже повільним (хоча він взагалі чекає весь час). Це ще складніше для багатоядерних процесорів (та багатопроцесорних систем), оскільки для забезпечення узгодженості багато операцій з багатопотоковими операціями потребують недійсного кешованого даних (так що один процесор не отримує доступу до "старого" значення змінна в пам'яті зі свого кешу / регістрів). Всі ці речі неймовірно швидкі, але ... Процесори швидші. Набагато швидше. Що, звичайно, також представляє проблеми різних постачальників процесорів, які по-різному поводяться з одними і тими самими речами, повністю відокремленими від значно вищого рівня ОС.сильно паралельні, вони більше не виконують одну інструкцію за іншою.

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

І тепер більшість Windows насправді працює як додатки в режимі користувача. І вони також взаємодіють із запущеними програмами - якщо я попрошу explorer.exeзробити щось для мене, він поки що нічого не може зробити. Якщо я надішлю мільярд віконних повідомлень у вікно, це залишить слід.

Там так багато відбувається, весь час ... гарантії дуже важкі. Зауважте, як швидше стають речі, як тільки на екрані "ctrl-alt-delete" насправді вмикається - раптом це ніби нічого не було :)


0

Зокрема, до вікон, які підходять до сканування .. Однією з найпоширеніших причин, яку я знаходжу, є те, коли багато процесів використовують достатню кількість віртуальної пам’яті, щоб почати примушувати багато міняти місцями. Можливо, не "здається", що активність на диску велика, проте це зазвичай відбувається.

Це легко довести, як і виходить з цього варення, просто вибравши невеликі процеси (наприклад, блокнот) і "чисто" та "терпляче" закінчуючи їх. Це починає зменшувати ефект заїдання автостради. І тоді ви закриваєте одну велику свиню для пам’яті, і все повертається до придатного стану. Спостереження за дисковою активністю за цей час часто показує, що відбувається дуже мало.

Чому я пропоную спершу закрити менші програми. Видаляючи спочатку менші додатки, ви звільняєте віртуальну пам’ять з мінімальною активністю диска та швидко відмикаєте машину. Якщо ви спробуєте закрити великий додаток, наприклад, Firefox або Chrome, усі вони продовжили час закриття. Це тому, що більшість останніх додатків мають фонові процеси, які не зникнуть протягом довгого часу, оскільки фонові процеси також застрягли, переходячи на тимчасовий та вихідний файл із файлу swap. Що ще гірше, вони також мають нижчий пріоритет, їм потрібно ще довше, щоб закінчити свій бізнес, і повну кількість віртуальної пам’яті, яку вимагає додаток, потрібно чекати, щоб випустити, доки не будуть виконані всі фонові процеси та потоки.

Ще одна річ, яку я помітив із досвіду, - це те, що браузери є одними з найгірших, коли справа доходить до швидкого та чистого закриття. Навіть офісні програми закриваються більш чисто і швидко.


Бувають випадки, які вимагають терпіння, але коли мова йде про веб-браузери, не витрачайте час. Краще просто їх припинити (вбити). Вони справляються із цим штрафом. Я завжди kill -9 chrome. Але перезапуск декількома сотнями вкладок (1200) потребує певної роботи.
Дан Д.

Я маю на увазі сценарій, коли є достатня кількість пам’яті та мінімальне введення / виведення диска - одне лише високе використання процесора, іноді достатньо, щоб зробити графічний інтерфейс ОС майже непридатним. Я розумію, що незалежно від того, скільки часу процесор хоче використовувати додаток , ОС може / повинен / резервує шматок для себе, так що поки немає суперечок щодо інших ресурсів, графічний інтерфейс повинен залишатися чуйним.

@JonofAllTrades ОС може і зарезервувати шматок. Однак якщо у вас спостерігається надзвичайна повільність при дуже великому використанні процесора, то, мій друг, швидше за все, у вас є проблема з драйвером відеокарти. Можливо, драйвер записаний таким чином, що йому потрібно передзвонити в ОС, а не просто обробляти картину екрана. Одним простим тестом може бути тимчасове вимкнення підтримки Aero (а можливо, навіть тем) тимчасово, щоб визначити, де справжня проблема. Миша, що реагує на BTW, не означає, що ОС не зайнята в іншому випадку. Значна частина обробки миші / kbd виконується в драйверах, які завжди отримують відрізки часу.
LMSingh

@DanD. ви пробили всі межі, які я знав, за допомогою 1200 вкладок !! Оце Так! У XP я бачив, що Windows починає псуватись після того, як у IE було близько 23 вкладок. IN Win 7 я одночасно піднімав приблизно 60 в хромі та ще 45 у FF (тоді як багато інших додатків працює), і тоді справи стають нестабільними. Здогадайтесь, мені доведеться придумати, як спочатку пробити пару сотень!
LMSingh
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.