4613

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

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

#comment_197875078

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

65.3K постов41.8K подписчик

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

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



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

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

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

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

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

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

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

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

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

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

jmp

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

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

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

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества

Недвижимость и ремонт

Теги

Популярные авторы

Сообщества