Чи вбивство процес все ще вважається поганим для управління пам’яттю?


18

Тому я маю невелику дискусію зі своїм начальником щодо управління пам’яттю.

Мені сказали, що вбивство процесу не дозволяє йому розміщувати пам'ять. Це все ще так, чи це було років тому?

Тут ми говоримо і про Windows, і для OS X.


4
Дійсне питання; голосувати за повторне відкриття. ОП попросила конкретну інформацію про поведінку ОС (2 ОС у даному випадку), а не спекуляції чи дискусії.
JRobert

Нічого собі, ніколи не думав, що це питання так швидко приверне таку увагу .. :) Але так, це в основному питання "так / ні, тому що .."
Джефф

Відповіді:


7

Минуло давно, як я дізнався цей матеріал, але ось іде.

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

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

Дуже спекулятивний:

Якщо .NET працює як віртуальна машина з більш ніж однією програмою .NET на одній VM, то .NET може утримувати пам'ять, яка ще не є GCd, поки вона не запустить GC, і Windows подумає, що .NET є використання більше, ніж є насправді. (І якщо MS був дуже гладкий, то Windows могла б сказати .NET GC у жорстких ситуаціях з пам'яттю, але в цьому майже немає сенсу, тому що для цього потрібен простір для обміну дисками.)

Якби .NET працював таким чином, ОС все одно вважатиме це одним із процесів для цілей ОС, який несе відповідальність за рішення, що зберігати і що викидати, і зазвичай не проблема Windows розказувати процес, який йому потрібен почати розмову пам'яті. У цей момент можливо, що MS створить спеціальний API тільки для .NET, щоб процеси .NET виглядали як процеси Windows, за винятком того, що вони не є, тому люди можуть подумати, що пам'ять процесів не стає розселеною. Це, справді; це просто те, що ви дивитесь на неправильний процес.

Я недостатньо знаю про .NET, щоб сказати, що він насправді працює таким чином; Java VM звичайно ні.

Кінець спекуляціям.

EDIT: Наскільки це стосується вбивства процесу, поганого для управління пам'яттю, що вимагає виділення декількох процесів з одного пулу (тобто вони більше схожі на потоки, ніж на реальні процеси), і щоб пам'ять не звільнялася після цього процесу вбитий. Це майже вимагало б спільної багатозадачності, оскільки віртуальна пам'ять і переважна багатозадачність, наскільки мені відомо, зазвичай реалізуються разом (ВМ, що дозволяє ізолювати процеси один від одного і не дозволяти їм перешкоджати пам’яті один одного). Наявність віртуальної пам’яті робить тривіальним очищення після процесу на рівні ОС; ви просто перемістіть усі сторінки з пулу процесу до безкоштовного пулу.


Відмінна відповідь; все ще розміщено моє, оскільки ви були лише на кілька секунд попереду. :)
Саймон Ріхтер

8

Немає проблем у моєму досвіді, вбивай геть.

Наприклад, якщо у вас є 4 Гб оперативної пам’яті, 3 Гб якої використовується грою, і ви вбиваєте ігровий процес, ви можете перезапустити гру без проблем, і у неї знову буде 3 Гб оперативної пам’яті.


погодьтеся, це звучить правильно, що "очищення" було б не в змозі, але я не бачив, щоб це було проблемою, як заявив Sirex. У NT ці процеси повинні були бути відокремленими, але навіть у win98 це, здається, не було проблемою. Якби ти міг його вбити, більша частина відійшла б. За логікою, можна спробувати змусити систему її закрити або спершу важко закрити, а потім змусити її насправді бути вбитою як останній шанс, який їй дають.
Psycogeek

8

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

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

Існують спеціальні ресурси, які переживають процес, що їх створив, наприклад, можна створити стійкі іменовані розподіли спільної пам'яті, які можна використовувати в міжпроцесорному спілкуванні. Вони рідко використовуються саме тому, що ОС не може визначити, чи потрібні вони.

В інших операційних системах іноді немає чіткого поділу процесів; це покладає тягар очищення на окремі програми.

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


5

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

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