Взаимодействие программ с ОС

Взаимодействие программ с ОС Комментарии на Пикабу, Скриншот, Программа, Windows, Цикл, Длиннопост, Мат

#comment_197875078

Скриншоты комментов

56.3K поста40.1K подписчиков

Добавить пост

Правила сообщества

В сообществе можно размещать ЛЮБЫЕ скрины (комментов) с любого сайта!!



ПРИКРЕПИТЬ ССЫЛКУ НА КОМЕНТ ЕСЛИ ОН С Пикабу желательно, но не обязательно!!!

Если скрин не с пикабу, а со стороннего сайта( Твиттер,. Вк, Одноклассники и т.д.) то ссылка не обязательна.

Для сообщества подходит любой скрин, набранный на клавиатуре, даже если это не диалог (под вид Твита) Так же подходит скрин с картинкой и хотя бы одним комментарием под ним, с любого источника.

Вы смотрите срез комментариев. Показать все
2
Автор поста оценил этот комментарий
Ахахах, вхоржал с поста и неграмотности автора комментария. Теперь объясняю на пальцах. Существует такой шаблон проектирования программ как Наблюдатель (подробнее на вики). Его суть в том, что создаются две сущности: источник и подписчик. Задача источника: оповестить подписчиков о наступлении некоторого события.
Допустим, вот у нас операционная система. Её ядро обрабатывает очередь ВСЕХ происходящих событий, в т. ч. от оборудования. Приложения сами по себе в цикле не отслеживают такие события — API ОС скрывает их от них через слой абстракций. Получается такая схема: приложение запускается и сообщает ОС, о каких событиях оно хотело бы получать информацию: нажатие кнопки, поступление сетевого пакета, завершение работы и т. д. Тысячи их. ОС ведёт список подписчиков для каждого события: допустим, вы вводите текст на сайте. Нажатия клавиш обрабатывает драйвер клавиатуры, но приложению, как правило, это не интересно — оно ждёт события изменения значения в поле. Когда это событие наступит, получатель в лице приложения получит уведомление со всеми (или нет, зависит от контекста) необходимыми данными. Другими словами, бесконечный цикл всего один, и выполняется он на уровне ядра ОС.
Что происходит дальше? Приложение получило сообщение и запускает процесс его обработки. Вот тут начинается самое интересное. Всё зависит от качества кода конкретной программы. Если её писал дегенерат — скорее всего, там действительно ещё один бесконечный цикл, который пытается имитировать собой ОС. Вот только ядра Windows, Linux, FreeBSD и других ОС пишут профессионалы, которые знают тысячи нюансов в работе процессоров, памяти и периферийных устройств, а васяну как обычно похуй. И его программа начинает в бесконечном цикле грузить на 100% все ядра процессора и жрать память как не в себя. Программа как говорят «зависает». При этом у ОС есть вполне себе документированные и стандартизированные способы проверить как программа себя чувствует — отправить ей сообщение типа «Эй, ты как там?». Нормально спроектированный софт отвечает что-то вроде «Норм, работаю прост» или «Что-то мне херово», а плохой делает вид что не слышал. Тогда ОС пытается такие процессы привести в чувство более брутальными методами. Если и это не получается, то происходит анализ того, как программа влияет на собственно ОС и другие программы. Если она по дороге портит данные и лезет переписывать загруженное в память ядро или драйверы, то пользователь наблюдает BSOD или Kernel panic. Тут основная проблема в недостатках архитектуры Фон Неймана, предложившего использовать одну и ту же память и для кода, и для данных, и не делать между ними различия. Ну а если никакого криминала, то ОС просто убивает процесс. Некоторые программы могут даже событие своего принудительного завершения отслеживать и нормально обрабатывать, например, сохранять последние правки пользователя на диск или закрывать открытые файлы. Ну а что, такое же событие как и все остальные. Почему нет?
раскрыть ветку (5)
1
Автор поста оценил этот комментарий

"Другими словами, бесконечный цикл всего один, и выполняется он на уровне ядра ОС".

Не знаю как в unix, но в windows ОС отправляет все сообщения в приложение, а приложение через get(peek)Message в бесконечном цикле извлекает их и обрабатывает (winapi hello world).
То что вы описали - это уже следующий уровень абстракции (winforms, mfc).

Автор поста оценил этот комментарий

Всё зависит от качества кода конкретной программы. Если её писал дегенерат — скорее всего, там действительно ещё один бесконечный цикл, который пытается имитировать собой ОС.

Ок, а как следует сделать так, что бы без цикла приложение не завершилось раньше времени?

раскрыть ветку (3)
1
Автор поста оценил этот комментарий
GoTo?)
раскрыть ветку (1)
Автор поста оценил этот комментарий

jmp

Автор поста оценил этот комментарий

Судя по логике автора выше все авторы демонов - не хорошие люди. Авторы обработчиков очередей - тоже. И так далее.

Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку