Архитектура \ Иерархия обьектов
<<Назад

Это не иерархия обьектов С++. Это просто способ увязать все обьекты в единую систему. Контейнер отвечает за создание и корректное удаление своих обьектов- потомков.
Корнем дерева является ядро. Оно владеет прямо или непосредственно всеми обьектами в системе. Многие из обьектов первого уровня вложенности требуют потдержки на уровне ядра. Например на приведённом рисунке это нужно как минимум для контейнера Tasks.


Так может выглядеть иерархия обьектов...

Итак...
Контейнер Tasks отвечает за приложения, выполняющиеся в данный момент- за создание и завершение процессов, а также, возможно, и за их планирование. Каждый процесс тоже является контейнером и включает в себя обьекты потоки. Достаточно скопировать какой- то обьект-приложение из какого- то файла на диске в \Tasks как он тут же начинает выполнятся! Всю работу по распознаванию форматов исполняемых вайлов Tasks берёт на себя. Более того, можно туда вставлять другие обьекты, которые, например, будут емулировать другую ОС или Java машину. Это нужно предусмотреть в механизме поиска обработчика обьекта. Удаление из контейнера Tasks автоматически приводит к завершению процесса и всех его потоков.
Контейнер Dev отвечает за интерфейс с устройствами. Может быть он также будет сам обрабатывать IRQ, но скорее всего IRQ будут приниматся ядром и уже потом передаватся в DEV.
Контейнеры файловых систем. Ну тут всё понятно. Интерфейс с примонтированными файловыми системами, учитывающий их специфику.

Поиск обработчика обьекта

Так как контейнер отвечает за создание и удаление всех других обьектов, расположенных ниже по дереву иерархии, необходимо ввести следующий механизм: при создании нового обьекта просматривается всё дерево от непосредственного контейнера- владельца по направлению к корню. Обьект создаёт тот первый же контейнер, который на это способен. Сначала запрос на создание приходит контейнеру- владельцу. Если он сам не может его обработать, то оно (сообщение) пересылается на один уровень выше- владельцу этого контейнера. И так до тех пор, пока ядро либо не обработает запрос, либо не выдаст ошибку "Неизвестный тип обьекта". При передаче запроса вверх по дереву передаётся и полный путь к создаваемому обьекту. Например, если приложение пытается создать обьект "Область памяти" в каком- то каталоге файловой системы, то контейнер файловой системы, не обработав его (хотя мог бы, если б захотел) передаст его ядру. Ядро же хоть и создаёт обьекты етого типа не здает как работать с диском. Отсюда ошибка. Однако для того, чтобы создать каталог или файл , не обязательно вкладывать лишней функциональности в контейнер "каталог". Этим может занятся контейнер файловой системы.

<<Назад