Мне интересно узнать: каковы наиболее распространенные технические причины (с точки зрения программирования операционной системы) сбоя операционной системы (не ограничиваясь сбоями Windows)? Я ищу ответ не вроде «открыто слишком много приложений», а того, что конкретно происходит, когда открыто слишком много приложений, что вызывает сбой.





Нет, ты далеко. Обычно приложение не может сделать ничего, что могло бы вызвать сбой ОС. Сбои ОС обычно вызваны ошибками в драйверах устройств и аппаратными сбоями.
Ошибки в драйверах вызывают сбои ОС. Только сама ОС и драйверы способны нанести вред системе.
К вашим предложениям:
Никакая ОС не имеет проблем, если приложение обращается к той же памяти, что и ОС. Либо память доступна, либо нет. Если приложение пытается получить доступ к памяти, чего не должно, ЦП генерирует ошибку сегментации. ОС передает это приложению, и проблема решается. (в 99% случаев приложение вылетает после этого, но это не вина ОС).
Вы предполагаете, что более медленные программы более безопасны. Это не правда. ОС не обязательно знать, что именно делает ваша программа.
Дэн, спасибо, что указали на это. Я отредактировал сообщение.
Одна проблема - два разных источника, пытающихся получить доступ к закрытой области. Заставить все мьютексы, мониторы и блокировки работать на 100% нетривиально.
Я голосую за это, потому что взаимоблокировки и блокировки находятся очень частая причина сбоя операционной системы.
Я считаю
Современная операционная система не позволит простому приложению вывести ее из строя.
Хороший список, однако «конец ресурсов» не должен вызывать сбой, если нет плохого драйвера или плохого ядра. Хороший код должен корректно обрабатывать все сбои выделения ресурсов. Однако верно, что это довольно распространенный тип ошибки драйвера.
Я думал о "бомбах вилки" и полной корневой файловой системе
В современной ОС код приложения и код ОС запускаются в разных адресных пространствах. Код приложения не может вызвать сбой операционной системы. Глянь сюда:
http://en.wikipedia.org/wiki/Ring_(computer_security)
Наиболее частым считыванием сбоя является код, который действует как часть ОС и мешает другому коду, действующему как часть ОС. Частая причина - плохо написанные драйверы устройств, которые находятся в адресном пространстве ОС.
Реже сбои вызваны аппаратными сбоями.
Если взять Vista в качестве примера - драйверы ... NVidia в частности http://arstechnica.com/news.ars/post/20080325-vista-capable-lawsuit-paints-picture-of-buggy-nvidia-drivers.html. Распределение памяти определяет ОС, а не приложения. Ну это теория.
Сбой ОС также может быть вызван из-за сбоя некоторых секторов на жестком диске, это связано с тем, что все ОС находятся на основном диске на жестком диске.
Любой Сбой ОС может возникнуть по одной из двух основных причин:
Проблемы, связанные с питанием: Неправильное функционирование источника питания системы может привести к немедленному отключению системы.
Перегрев ОЗУ: Перегрев ОЗУ может привести к повреждению данных в ней. Это может привести к определенному сбою, когда перезагрузка является обязательной.
Неправильный разгон: вызывает перегрев. Некоторые компоненты оборудования чувствительны к нагреванию. Когда перегрев происходит автоматически, система отключается.
Плохие сектора на жестком диске: Жесткий диск разделен на секторы, в которых хранятся данные. Некоторые сектора становятся плохими. Причины: а. Длительное использование - много операций записи и чтения. б. Производственный дефект. Если секторы на жестком диске, где хранится важная системная информация, становятся поврежденными, тогда эти файлы трудно загрузить, что приводит к сбою.
Главное заблуждение: сбой приложения в вашей системе не всегда приводит к сбою системы. Обычно с ОС "ничего" не происходит. Он просто отправляет вам отчет, в котором говорится о том, что приложение разбилось.
1. «Ошибка сегментации» (или GPF в среде Windows) - это термин, который вы ищете, когда приложение пытается получить доступ к памяти, к которой оно не имеет доступа. «Ошибка страницы» относится к случаю, когда осуществляется доступ к разделу памяти, но он был выгружен в виртуальную память.