> man operating_systems
Центр информации по операционным системам :: Форумы :: Операционные системы :: Другие ОС
 
<< Предыдущая тема | Следующая тема >>
Реально ли сделать простую ОСь своими руками?
Переход на страницу  1 2 3 ... 11 [12] 13
Модераторы: Roman I Khimov, Wanderer, Dron
Автор Добавил
alman
Вторник 14.12.2010 22:28

ID пользователя #753
Зарегистрирован: Суббота 28.10.2006 01:21
Местонахождение: планета Земля
Сообщений: 95
Если всё рассказывать досконально, то получится книга. Могу только вкратце.
Между контроллером клавиатурой и приложением - операционная система. Собственно говоря то, чему посвящён сайт.

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

Драйвер, поймав событие, анализирует регистры устройства и решает, почему устройство сгенерировало прерывание.
Например, нажатие на клавиатуру.

Драйвер читает регистры (или память) устройства и размещает их (упрощённо говоря) в оперативной памяти. Затем драйвер посылает сообщение системе, о том, что есть данные. Существуют различные алгоритмы реализации.
Я расскажу как это работает в Хамелеоне.

В директории /dev есть файл vty0. Это устройство под названием консоль. Устройство, которому приходят прерывания от клавиатуры. Как уже знаем, все сканкоды нажатых клавиш уже лежат где-то в памяти, о которой знает драйвер vty0.

Любая программа, в том числе шелл, ничего не знают о клавиатуре. Они лишь знают о стандартных потоках ввода и вывода. Система при инициализации назначает стандартный поток ввода устройству /dev/vty0. Когда программа читает стандартный поток ввода, получается что она читает файл /dev/vty0. Т.е. запросы на чтение от приложения приходят в сервис файловой системы, которая перенаправляет запрос в драйвер. Драйвер анализирует запрос, а затем преобразует сканкоды нажатых клавиш в коды ASCII и возвращает ответ. Таким образом шелл получает коды нажатых клавиш.

Это описание я очень сильно упростил и упустил множество подробностей. Приблизительно таким образом работает любая операционная система.
Наверх
Сайт
prog8
Среда 15.12.2010 07:02
ID пользователя #1343
Зарегистрирован: Пятница 26.03.2010 07:27
Сообщений: 27
Еще раз спасибо. Хоть я прямо сейчас системой не занимаюсь, но появление собеседника для меня большая удача, так что пользуюсь моментом
alman написал(а) ...
Приблизительно таким образом работает любая операционная система.
Да-да. И моя os8 в том числе. У меня в данный момент проблема не с общей концепцией, которая понятна, а с политиками/механизмами разграничения доступа к ресурсам вообще, а особенно к памяти. Пройдемся по узловым моментам:
а) прерывание, которое ловит операционная система;
б) система решает какому драйверу послать событие;
в) драйвер, поймав событие, анализирует регистры устройства [...] и размещает их в оперативной памяти;
г) драйвер посылает сообщение системе, о том, что есть данные.
Добавлю от себя:
д) система помещает данные в виртуальный файл;
е) система уведомляет приложение о появлении данных в его входном потоке;
ж) приложение читает данные.
Вроде все? Однако, концепция строгого разделения доступа предполагает следующие уточнения:
д) система помещает данные в виртуальный файл, сообщая драйверу, что данные прочитаны;
е) драйвер освобождает свой буфер;
ж) система уведомляет приложение о появлении данных в его входном потоке;
з) приложение читает данные, одновременно сообщая системе, что данные прочитаны;
и) система освобождает буфер виртуального файла.
Примерно так я намерен реализовывать взаймодействие. Но хотелось бы уточнить механизмы уведомления субъектами друг друга - сообщения, события, что-то еще? То, что описано вами, характерно для микроядра; экзоядро немного отличается в этом плане - оно активно не участвует во взаимодействии субъектов, а лишь "следит за порядком", и если что-то не так, карает нарушителя. Многие функции (как, например, чтение из файлового объекта), вынесены с уровня ядра на уровень библиотеки, выполняемой в контексте приложений. То же и с доставкой сообщений, контролем событий.
Я думал над этим достаточно плотно, и почти все уже придумал, но ключевой момент для меня - устройство драйвера.
1. Драйвер - что это? Приложение (простое или привилегированное) или лишь библиотека?
2. Как драйвер общается с устройством, которое обслуживает? Как читает регистры? Понятно, что через интерфейс, но как?
3. Если драйвер - приложение, как он взаимодействует с другими приложениями?
4. Если драйвер - библиотека, как тогда поддерживаются виртуальные файлы?
Если у вас есть соображения по этому поводу, буду очень признателен.

Да, очень рад активизации работы над "Хамелеоном". Завидую белой завистью. (Но обращение на сайт Медведева, по-моему, наивняк, извините. Там (в Сколково, и вообще Т-А-М) серьезные люди пилят серьезные бабки, наши потуги для них...)
Наверх
DarkHobbit
Понедельник 07.03.2011 02:04
ID пользователя #1551
Зарегистрирован: Понедельник 07.03.2011 01:50
Сообщений: 4
Я думаю, что эта тема будет вечной. И это хорошо, ведь человеку свойственно пытаться творить что-то своё, даже если оно не будет лучшим.
Хороший тест себя на вшивость - это чтение исходников ядер таких систем как Linux и FreeBSD. Если Вы их разобрали, решили, что всё это легко и понятно, и Вы напишете лучше - мой респект. Вперёди с песней.
Но как правило, для самоотрезвления достаточно бывает почитать исходники linux 0.01 (всего 60 кб), которые, к счастью, до сих пор можно скачать с kernel.org:
ftp://ftp.kernel.org/pub/linux/kernel/Historic/
Мне, по крайней мере, для снятия зуда в последний раз хватило.
Наверх
prog8
Понедельник 07.03.2011 06:09
ID пользователя #1343
Зарегистрирован: Пятница 26.03.2010 07:27
Сообщений: 27
Вы, видимо, не совсем поняли суть вопроса. Никакого "зуда" нет, есть техзадание, которое надо выполнять. И оно, несомненно, будет выполнено. (А написать ядро "лучше линукса" - вообще не проблема, ибо оно ужасно.)
Наверх
ossadchy
Понедельник 07.03.2011 19:01
ID пользователя #941
Зарегистрирован: Среда 10.10.2007 22:55
Местонахождение: Украина, Николаевская обл., г. Первомайск
Сообщений: 181
prog8, Аргументируйте пожалуйста свое высказывание. Чем плохо ядро Linux?
Наверх
Сайт
DarkHobbit
Понедельник 07.03.2011 22:53
ID пользователя #1551
Зарегистрирован: Понедельник 07.03.2011 01:50
Сообщений: 4
> Вы, видимо, не совсем поняли суть вопроса. Никакого "зуда" нет, есть техзадание, которое надо выполнять.
Я вообще-то про всю эту тему (которая уж 5 лет назад появилась), а не про персонально Ваш в неё вклад.
> А написать ядро "лучше линукса" - вообще не проблема, ибо оно ужасно.
С категоричной формулировкой "не проблема" я бы поостерёгся.

[ Редактирование Понедельник 07.03.2011 22:57 ]
Наверх
prog8
Вторник 08.03.2011 06:41
ID пользователя #1343
Зарегистрирован: Пятница 26.03.2010 07:27
Сообщений: 27
Ладно, лучше-хуже понятия относительные и субъективные. Главный недостаток ядра линукса (как я считаю) - его размер - огромный, необозримый. Ну а главное достоинство (по-моему, перекрывающее все его недостатки) - ОНО РАБОТАЕТ. Не хочу вступать в религиозные войны. И в очередной раз изучать очередное ядро, только чтобы выудить оттуда на свет божий очередные плюхи - тоже не буду. Предпочитаю "остаться балаболом". )

Хотя, хорошая технология, однако. Хочешь привлечь внимание к своей теме - напиши "линукс - говно", и люди к тебе "потянутся". ))) Пользуйтесь.
Наверх
DarkHobbit
Вторник 08.03.2011 10:21
ID пользователя #1551
Зарегистрирован: Понедельник 07.03.2011 01:50
Сообщений: 4
> Хотя, хорошая технология, однако. Хочешь привлечь внимание к своей теме - напиши "линукс - говно", и люди к тебе "потянутся". ))) Пользуйтесь.
Вот собственно это я и имел в виду ) Потом всё же подумал и вторую часть своего поста сократил. Ну а насчёт достоинств и недостатков - да, оно действительно работает. И да, оно действительно уж очень большое. Но мне кажется, что эта судьба постигнет любое ядро, которое выйдет за пределы исследовательской лаборатории.
Хотя возможно, появится когда-нибудь "ядерный программный комплекс", который основан на микроядре, достаточно компактен и при этом написан не на ассемблере. Может, Hurd допилят (мечтать не вредно).
Наверх
Dron
Среда 09.03.2011 16:56


ID пользователя #13
Зарегистрирован: Понедельник 05.07.2004 11:16
Местонахождение: Москва
Сообщений: 651
Если не рассматривать драйвера - то ядро Linux - крайне миниатюрно.

Если рассматривать Hurd вместе с драйверами - то монстр получится не менее впечатляющий.

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

Андрей Валяев
Наверх
Сайт
prog8
Четверг 10.03.2011 05:56
ID пользователя #1343
Зарегистрирован: Пятница 26.03.2010 07:27
Сообщений: 27
А драйвера в Hurd работают в пространстве ядра (и с привилегиями ядра) или нет?
Наверх
Переход на страницу  1 2 3 ... 11 [12] 13  

Перейти:     Наверх

Транслировать сообщения этой темы: rss 0.92 Транслировать сообщения этой темы: rss 2.0 Транслировать сообщения этой темы: RDF
Powered by e107 Forum System

© OSRC.info, 2004-2010.
Авторские права на любые материалы, авторы которых явно указаны, принадлежат их авторам. По вопросам публикации таких материалов обращайтесь к авторам.
Авторские права на любые другие материалы принадлежат OSRC.info.
Сайт является помещением библиотеки. Копирование, сохранение на жестком диске или иной способ сохранения произведений осуществляются пользователями на свой риск.
При использовании материалов сайта ссылка на OSRC.info обязательна.