Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

В информатике , утечка ресурсов является конкретным типом ресурсов потребления в компьютерной программе , где программа не освобождает ресурсы , которые она приобрела. Это состояние обычно является результатом ошибки в программе. Типичные утечки ресурсов включают утечку памяти и утечку ручки , в частности , утечки дескриптора файла, хотя память часто рассматриваются отдельно от других ресурсов. [1]

Примеры ресурсов, доступных в ограниченном количестве для операционной системы, включают Интернет-сокеты , дескрипторы файлов , записи в таблице процессов и идентификаторы процессов (PID). Утечки ресурсов часто представляют собой незначительную проблему, вызывающую в лучшем случае незначительное замедление работы и устраняемую после завершения процессов. В других случаях утечки ресурсов могут быть серьезной проблемой, вызывая нехватку ресурсов и серьезное замедление или нестабильность системы, сбой процесса утечки, других процессов или даже системы. [2]Утечки ресурсов часто остаются незамеченными при небольшой нагрузке и коротком времени работы, и эти проблемы проявляются только при большой загрузке системы или системах, которые продолжают работать в течение длительного времени. [3]

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

Причины [ править ]

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

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

Предотвращение и смягчение последствий [ править ]

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

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

См. Также [ править ]

Ссылки [ править ]

  1. ^ Дейтель, Харви М .; Дейтель, Пол Дж. (2005), C # для программистов (2-е изд.), Prentice Hall Professional, стр. 443, ISBN 9780132465915.
  2. ^ Руссинович, Марк; Соломон, Давид; Ионеску, Алекс (2012), Внутреннее устройство Windows, часть 1 (6-е изд.), Pearson Education, стр. 279, ISBN 9780735671300.
  3. ^ Грегори, Кейт (1998), Использование Visual C ++ 6 , Que Publishing, стр. 590 , ISBN 9780789715395.