OSDev

для всех
Текущее время: 23 май 2018, 17:39

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 6 ] 
Автор Сообщение
СообщениеДобавлено: 24 ноя 2008, 14:29 
Подскажите пожалуйста, в чем каша в моей голове (написано как бы для совсем нуба, хотя и сам не очень, так что на тон просьба не обращать внимания):
Цитата:
Вообще, ОС состоит из четырех компонентов:
- загрузчик
- ядро
- драйвера
- API

1. Загрузчик.
Самая маленькая часть. Он должен прочитать ядро в память и передать по адресу начала от загруженного файла управление (прочитал в память - пошел на адрес в оперативе, а там уже пошел код ядра который только что загрузился)
2. Ядро.
Самая тяжкая часть. Когда оно получило управление, оно должно перейти в защищенный режим, и сделать следующее:
Есть такая вещь, как GDT (Global Descriptors Table, глобальная таблица дескрипторов, описателей) - там описываются все процессы, которые сейчас существуют в памяти. Ядро ответственно за ведение этого своеобразного листка. Структуру описывать не буду в деталях, я думаю общая суть понятна - имя, привилегии, адрес в памяти, точнее смещение - специальный вид адреса (не заморачивайся - считай что адрес в памяти), некоторые данные о стеке (чсто такое - ниже). Плюс штук 10 специфичных моментов.
Каждому процессу выделяется LDT- (G->L - Local). там процесс хозяин и может делать хочет
Еще есть IDT (Inteput, прерывание). Это таблица в которой описывается какие системные функции есть и адрес, по которому нужно прыгнуть если такую функцию вызвали:
int 0X55h ; Int - прерывание (читай - функция), 55 - номер функции, префиксы - это заморочки самомго языка ассемблер
Дык вот комп на самом деле когда такое встретит (а команды ассемблера полностью отображают команды процессора, каждой команде соответствует точный эквивалент на машинном языке)он смотрит IDT и видит - ага, на 55ое поставили вот такой адрес. Туда он нас и кинет
Теперь о стеке. Это относится с многозадачности. Стек - это специальная верхушка в памяти, куда можно че нить засунуть и че нить вытащить оттуда. В порядке очереди - засунули 5, 4, 3, 2, 1 - вытащили в порядке 1, 2, 3, 4, 5. Вот такая хитрая штука. Так вот многозадачность делается именно так - в проце есть такие переменные - регистрам зовутся. Так вот все данные регистров одной проги сохраняются, адрес по которому мы выполняли команду сохраняется, все это пихается в стек. И переходим на код совсем другой проги. Она обработала что ей надо - и из стека все вернули обратно. Хороший принцип, мне нравится.
Теперь почему в нормальных ОСях не блокируют проги работу дров к примеру.Потому что дрова можно поселить и в 0 круг (а там ты деаешь все что хочешь - прям как root в линухе), там же где ядро, а еси кинуть в 3- это слегка изврат. но способы защиты есть даже здесь.

Просьба сильно не ругаться :)

--
maximYCH


Вернуться к началу
  
 
 Заголовок сообщения: Re: Разгребите пожалуйста кашу
СообщениеДобавлено: 24 ноя 2008, 15:35 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1196
Ну либо сильно, либо никак.

Очень примитивно и поверхностно. Автар явно сам не ориентируется в этой теме.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re^2: Разгребите пожалуйста кашу
СообщениеДобавлено: 24 ноя 2008, 17:39 
Вот я и прошу помочь разобраться. Детали просьба опустить на мою совесть, а вот есть ли что что принципиально неправильно?


Вернуться к началу
  
 
 Заголовок сообщения: Re: Разгребите пожалуйста кашу
СообщениеДобавлено: 24 ноя 2008, 18:00 

Зарегистрирован: 22 май 2007, 15:29
Сообщения: 290
Цитата:
Он [загрузчик] должен прочитать ядро в память и передать по адресу начала от загруженного файла управление


Не обязательно, это один из вариантов.

Цитата:
Есть такая вещь, как GDT (Global Descriptors Table, глобальная таблица дескрипторов, описателей) - там описываются все процессы, которые сейчас существуют в памяти.


GDT не описывает процессы. GDT описывает сегменты. Одним из видов сегмента является TSS, который описывает задачу (task) при аппаратной многозадачности.

Цитата:
Структуру описывать не буду в деталях, я думаю общая суть понятна - имя, привилегии, адрес в памяти, точнее смещение - специальный вид адреса (не заморачивайся - считай что адрес в памяти), некоторые данные о стеке (чсто такое - ниже).



Имени там нет, а выделенное курсивом -- какой-то бред.

Цитата:
Каждому процессу выделяется LDT- (G->L - Local). там процесс хозяин и может делать хочет


LDT используется довольно редко, и тем более она не обязательна.

Цитата:
Еще есть IDT (Inteput, прерывание). Это таблица в которой описывается какие системные функции есть и адрес, по которому нужно прыгнуть если такую функцию вызвали


[*]Interrupt Descriptor Table.
[*]Не "системные функции", а прерывания. "системные функции" -- это только один из видов.

безграмотную писанину про ассемблер комментировать лень.

Цитата:
Теперь о стеке. Это относится с многозадачности. Стек - это специальная верхушка в памяти, куда можно че нить засунуть и че нить вытащить оттуда. В порядке очереди - засунули 5, 4, 3, 2, 1 - вытащили в порядке 1, 2, 3, 4, 5. Вот такая хитрая штука. Так вот многозадачность делается именно так - в проце есть такие переменные - регистрам зовутся. Так вот все данные регистров одной проги сохраняются, адрес по которому мы выполняли команду сохраняется, все это пихается в стек. И переходим на код совсем другой проги. Она обработала что ей надо - и из стека все вернули обратно. Хороший принцип, мне нравится.


И смешалась в кучу программная многозадачность с аппаратной. В случае программной контекст действительно сохраняется на стеке. В случае аппаратной -- в TSS. Но стек -- более общее понятие и нужен далеко не только для многозадачности.

Цитата:
Теперь почему в нормальных ОСях не блокируют проги работу дров к примеру.Потому что дрова можно поселить и в 0 круг (а там ты деаешь все что хочешь - прям как root в линухе), там же где ядро, а еси кинуть в 3- это слегка изврат. но способы защиты есть даже здесь.


root в линуксе не имеет всех прав, которые имеют драйвера нулевого кольца.
Конец не осилил, бредятина.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re^3: Разгребите пожалуйста кашу
СообщениеДобавлено: 24 ноя 2008, 19:05 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1196
Цитата:
Вот я и прошу помочь разобраться. Детали просьба опустить на мою совесть, а вот есть ли что что принципиально неправильно?
То что написано после заголовка ""Ядро"", к ядру по сути отношения не имеет - так несколько случайно подхваченных где-то фактов по архитекруте x86/amd64. Конечно лябая ОС работает на какой-то конкретной аппаратной платформе, а часто и не на одной, но ОС - это значительно более сложная программа, чем представляет себе автар, в которую заложена огромная экспериментально-теоретическая база.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re^4: Разгребите пожалуйста кашу
СообщениеДобавлено: 24 ноя 2008, 20:06 
grindars, plathform-64, спасибо


Вернуться к началу
  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB