Яка різниця між багатопрограмуванням та багатозадачністю


10

Мені важко чітко розмежовувати багатопрограмування та багатозадачність.

Моє основне джерело - Вікіпедія , але, здається, стаття WP трохи не вступає в протиріччя з менш поважними джерелами (як, наприклад, мій професор коледжу).

Під час читання WP багатопрограмування є рудиментарним способом збільшення пропускної здатності процесора шляхом переключення контексту, коли процес чекає вводу / виводу.

Багатопрограмування не дає жодних гарантій того, що програма буде працювати своєчасно. Дійсно, сама перша програма може дуже добре працювати годинами, не потребуючи доступу до периферії.

Кооперативний обмін часом , синонім кооперативного багатозадачності , є вдосконаленням багатопрограмування (яке не є синонімом). Контекстні комутатори процесора регулярно створюють враження одночасного виконання, але процеси все одно потребують результатів - і погано розроблені програми можуть голодувати решту системи.

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

  1. Чи правильний цей огляд? Якщо ні, це не тому, що WP неправильний або тому, що я прочитав WP неправильно?
  2. Чому деякі джерела, схоже, пов'язують багатопрограмування та багатозадачність?

1
"з деякими менш авторитетними джерелами (як, наприклад, мій професор коледжу)" - о, дорогий. Я сподіваюся, що він є більш авторитетним, ніж Вікіпедія, в якій багато наполовину вмісту в CS.
Рафаель

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

2
@Raphael, ти можеш зробити всьому світу прихильність, випікаючи їх до досконалості.
фонбранд

1
@vonbrand Я спробував, але, на жаль, є достатньо напівпечених експертів, щоб протистояти таким спробам.
Рафаель

@Raphael, і натовп теж не з’являється тут?
vonbrand

Відповіді:


9

Вони більш-менш синонімічні. Мультипрограмування більше застосовується, коли задіяний один процесор, який переходить з процесу на інший, процеси, які одночасно залишаються в пам'яті. Поруч з’явилися теми, і більше не було перемикання між програмами ...

Процесори, особливо лінія Intel, мали механізми справжнього багатозадачності (переривання таймера, привілейовані інструкції), щонайменше, 80286. M68000, який використовувався в першому Mac, був процесором з повноцінною багатозадачністю. Це не останній розвиток в архітектурі. Зауважте, що вперше загальнодоступні системи замінили користувачеві програми на та вимкнення, і таким чином насправді не було багатопрограмування в сенсі мати декілька програм у пам'яті одночасно.

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

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

На особистих машинах не було великого стимулу запускати кілька програм одночасно, принаймні спочатку (один користувач перед сильно обмеженою машиною не дуже сподівався). По мірі того, як машини зростали, спосіб обійти це, дозволяючи декілька програм одночасно, не сильно змінюючи операційну системубув "кооперативним багатозадачністю", оскільки кожна програма повинна періодично поступатися операційній системі для вибору іншої для запуску. Оскільки програма, яка робить це, перебуває під повним контролем, вона може вибрати для цього, коли інші нічого не можуть зіпсувати. Потрібно сказати, що програма, що «забуває» виконати свій обов'язок поступатися, отримує цікаве підвищення продуктивності ... Ранні системи Mac працювали таким чином, і з вищезгаданих причин це не тривало занадто довго. Для вбудованих систем, що не мають або лише рудиментарної операційної системи, і чітко керованого набору програм, що працюють, це, безумовно, прихильний варіант.


Стаття WP, мабуть, передбачає, що мультипрограмуванню не вистачає віртуальної пам'яті, на відміну від багатозадачності (системи). Історично це може бути правдою, але чи є визначення ортогональним?
didierc

1
У нас в 70-х роках був багатопрограмований IBM S / 370, і він точно не мав віртуальної пам’яті (я, мабуть, пам’ятаю, у нього був диск, який використовувався лише для розкручування). Віртуальна пам'ять дозволяє мати ще більше програм у обмеженій оперативній пам’яті (оскільки ви тримаєте під рукою лише «найчастіше використовувані» частини), ще краще використання цього способу. Так що так, я вважаю це абсолютно незалежним; але на практиці сьогодні ви не знайдете одне без іншого. За винятком, можливо, вашого Wi-Fi роутера або мобільного телефону ...
vonbrand

Добре. Я теж так думав, насправді. Вбудованим системам дійсно часто не вистачає належного захисту пам’яті, я це знав. Тим не менш, з добре поведеними програмами це не повинно бути проблемою. Це, звичайно, залежить від постачальників програми.
didierc

@didierc ортогональний? ти маєш на увазі взаємовиключне право?
jsj

2

Різниця між багатозадачністю та багатопрограмуванням? Багатозадачність - це логічне розширення мультипрограмування. Класично в середовищі для програмування більше, ніж один користувач поділяє процесор і процесор швидко переходить від одного користувача до іншого, забезпечуючи повну прозорість один від одного. У багатозадачності користувач підміняється програмами, тобто більш ніж одна програма розділяє процесор і процесор швидко переходить з однієї програми на іншу. Насправді програмне забезпечення, що знаходиться на диску, - це програма. Коли він внесений в оперативну пам’ять для виконання, він відомий як процес або завдання, а коли він знаходиться всередині процесора і виконує виконання, називається потоком. Таким чином, багатопрограмінг - це в основному для багато користувачів, а багатозадачність - для одного користувача з декількома програмами. Оскільки більшість сучасних ОС підтримує і те, і інше, вони часто написані без змін.


0

Є багато відмінностей між багатозадачністю та багатопрограмуванням.

Багатозадачність виконує більше, ніж одне завдання одночасно. Наприклад, ви слухаєте пісню, друкуєте папір і одночасно набираєте MS-Word.

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.