Я СОЗДАЛ СВОЮ ОПЕРАЦИОННУЮ СИСТЕМУ И ТЫ ТОЖЕ СМОЖЕШЬ

Расшифровка видео

0:00
Да ребят в этом видео мы не занимаемся
0:02
хернёй А реально пишем свою операционную
0:04
систему большая часть всего что я буду
0:06
рассказывать основана на статье моего
0:07
подписчика под никнеймом мяу
0:09
опубликованный в его канале wik Linux
0:11
советую вам ознакомиться все ссылки в
0:12
описании не обманывайте себя и не
0:14
думайте что в один ролик на
0:18
ютубере на наша ось будет максимально
0:21
просто но затронем всю базу того как
0:23
работает основная программа на вашем
0:24
компьютере начнём со снов а снов и
0:26
разберём процессы от нажатия кнопки
0:28
питания до загрузки оси вот по этой
0:30
схеме сначала происходит пост Нет не
0:32
Великий и нет не тот который запрос мы
0:34
тут наукой занимаемся а не веб
0:36
девелопментом пост – Это тест на
0:37
работоспособность железа перед запуском
0:39
потом загружается Bios который на самом
0:41
деле WiFi он загружается из материнки в
0:43
оперативку нужен он чтобы все твои
0:45
железки работали вместе связывают все
0:46
порты и обеспечивают в компе систему
0:48
ввода-вывода Наверное поэтому он так и
0:50
называется но на одном бисе Танчики не
0:52
запустишь на госуслуги не зайдёшь Для
0:54
этого нам нужна ось а для её запуска на
0:56
твоём компе BIOS ищет на носителях
0:58
загрузочную сигнатуру если она есть то с
1:00
этого носителя первые 512 байт
1:02
загрузится в оперативку и BIOS отдаст
1:04
этому коду управление стой Какие байты
1:06
какое управление Что значит загрузят Да
1:09
я понимаю что всю жизнь имея дело с
1:10
абстракция внутри операционно сложно
1:12
вникнуть в то как колдуны учёные
1:14
заставили кусок камня показывать
1:15
картинки и сдавать звуки и это как
1:17
обычно да что ж такое приводит меня
1:19
к ассемблеру Помните я три видео тому
1:21
назад расписался за то как работают
1:23
Циферки и почему компьютер делает то что
1:25
делает когда ты даёшь ему правильный
1:26
набор чисел от нуля до 255 в Рим виде
1:30
Если нет то посмотрите Я старался короче
1:32
по сути что в плате твоей материнки что
1:34
на носители у тебя просто набор байтов и
1:36
если прям Точнее то битов транзисторов
1:39
которые либо ноль либо один и восемь
1:41
таких образует это самое число от нуля
1:43
до 255 и каждый набор чисел если
1:45
скормить процессору может быть воспринят
1:47
как набор команд А команды эти могут не
1:49
только считать Циферки но и переносить
1:51
память туда-сюда что и происходит
1:52
большую часть времени работат твоего ПК
1:54
и для чего в первую очередь нам и нужен
1:56
загрузчик Что такое сигнатура короче
1:58
Представь что BIOS снит всю аппаратуру
2:00
твоего ПК а к этому ПК в порт включена
2:02
флешка на которой лежит твоя винда так
2:04
вот для того чтобы эта флешка стала
2:05
твоим загрузчиком BIOS должен найти на
2:07
ней два байта 55 аа по адресу 01 Fe если
2:10
находит то выгружает в оперативку 512
2:12
первых байт которые потом отдаёт проц
2:14
чтобы он делал всё дальше сам Почему
2:16
именно такая сигнатура так решили при
2:18
разработке биоса и нас это мало волнует
2:20
на самом низком уровне это работает так
2:21
А теперь давайте навали в небольшой слой
2:23
абстракции я расскажу вам вот такую
2:25
штуку когда работаешь ассемблера нужно
2:27
понимать что у твоего компа есть
2:28
несколько режимов работы а именно режим
2:30
реальных данных и защищённый режим
2:32
реальный режим сейчас нужен компу во
2:33
время запуска и первое что он делает в
2:35
нём – это переключение в защищённый
2:36
потому что подразумевается Что именно в
2:38
нём OS и будет работать максимальный
2:39
адресуемых объём памяти в реальном
2:41
режиме составляет 1 Мб для сравнения то
2:43
видео которое вы сейчас смотрите весит в
2:45
1.000 раз больше а работает это так
2:47
потому что максимальный размер смещения
2:49

16 бит или же 64 КБ но умные дяди
2:52
придумали сегментные регистры
2:53
относительно которых происходит это
2:55
самое смещение они расширяют возможную
2:57
длину адресации до 20 бит или же до 1 Мб
3:00
причём из этого мегабайта первый
3:01
килобайт зарезервирован под таблицу
3:03
векторов прерываний необходимый для
3:04
реализации этих самых аппаратных
3:06
прерываний функции выполняемых не ядром
3:08
операционки А самим железом всё это туда
3:10
внесено создателями этого самого железа
3:12
защищённый режим даёт нам многие
3:14
особенности которые без высшего
3:15
технического образования усвоить будет
3:17
трудно но я постараюсь объяснить всё так
3:19
чтобы у вас осталось хоть какое-то
3:20
понимание первое и самое важное – это
3:21
виртуальное адресное пространство
3:23
виртуальное оно потому что программы в
3:25
защищённом режиме могут оперировать
3:26
несуществующими физически ячейками
3:28
памяти и соответственно это самое
3:30
виртуальное пространство может превышать
3:31
реальный объём памяти и достигает 64 ТБ
3:34
для сравнения то видео которое вы сейчас
3:36
смотрите весит в 1.000 раз меньше
3:38
Возможно это благодаря сегментированное
3:39
модели и страничной трансляции у
3:41
сегментов в этом режиме существуют ещё и
3:43
дескрипторы структуры хранящие
3:45
информацию о них содержатся они в двух
3:46
таблицах глобальной и локальной которые
3:48
создаются и заполняются в момент
3:50
переключения системы из реального режима
3:52
адресация же строится из селектра
3:53
сегмента и смещения селектор
3:55
представляет из себя ссылку на этот
3:57
самый дескриптор и исходя из информации
3:59
про сегмент из дескриптора и переданного
4:01
смещения процессор и вычисляет линейный
4:03
адрес страничная же трансляция позволяет
4:05
разделять хранящуюся память на страницы
4:07
что позволяет выделять пользовательским
4:09
программам место где они могут делать
4:11
свои дела Не передавая им возможность
4:12
залезать на ядро операционки помимо
4:14
всего этого в защищённом режиме
4:15
процессор способен на многозадачность по
4:17
факту просто переключаясь между средами
4:19
выполнения имитируя параллельность Ну
4:21
вроде всё переду Нил Остаётся только
4:22
скопировать в оперативку ядро нашей оси
4:24
и переключить режим теперь наконец-то
4:26
можно поговорить про ядро на уровне ядра
4:29
всё намного проще бо тут можно работать
4:31
не только с перебрасывание циферов из
4:32
одного носителя в другой Единственное
4:34
чем по сути занимается ядро операционки
4:35

это обработка прерываний то есть
4:37
выполнение каких-то действий тогда когда
4:39
программе это потребуется ядро обладает
4:40
высшими привилегиями поэтому всё
4:42
стороннее по выполняет большую часть
4:43
действий Не само а вызывает код этого
4:45
самого ядра для работы базовый таск лист
4:47
при написании ядра такой обеспечить
4:49
систему ввода-вывода настроить графику
4:51
прописать базовые команды и дать
4:52
возможность работать с устройствами
4:53
записи и чтения данных в идеале было бы
4:55
ещё настроить работу с сетью но меня и
4:57
на эти три пункта не хватит Остаётся
4:58
только понять что ка драйвера для меня
5:00
честно звучит как Волшебная штука
5:02
которую я на свою видеокарту обновляю
5:03
раз в месяц Чтобы в компьютер поиграть
5:05
Но на самом деле драйвер – это такая
5:07
программа которая даёт другим программам
5:08
возможность потрогать физическую
5:10
аппаратуру и чем лучше драйвер тем
5:11
эффективнее он раскрывает возможности
5:13
железа Давайте начнём с графики наиболее
5:15
используемый текстовый режим – это 80x
5:17
25 то есть 80 символов в ширину и 25
5:19
строк в высоту дальше на экране будет
5:21
код из простенькое самодельной
5:22
операционки поверх которого я попытаюсь
5:24
что-то разъяснить основная функция этого
5:26
кода помнить где и что находится мы
5:27
находимся в разрешении 80 на 25 и как
5:30
раз это загоняет вас в огромные рамки
5:31
ибо в защищённом режиме мы не можем
5:33
перейти в режим графики без танци с
5:34
бубном код выше предназначен для работы
5:36
с видео памятью отображения текста на
5:37
экране в текстовом режиме который
5:39
использует прямой доступ к памяти для
5:40
управления содержимом экрана видеопамять
5:42
начинается по адресу b800 что типично
5:45
для текстового режима видеокарты VGA в
5:47
драйвере VGA есть попул функций которые
5:49
является прямо обязательным функции
5:50
portb read и Port by Wi используются для
5:52
чтения и записи порты ввода-вывода а
5:54
функции Get cursor position и Set cursor
5:56
position предназначены для получения
5:58
установки позиции курсора на экране
5:59
Также важно в текстовом режиме иметь
6:01
функцию очистки экрана перекрутка
6:02
содержимого печать символов и текста
6:04
переход на следующую строку удаление
6:06
символов позиции и так далее сейчас
6:07
перед вами реализация самых базовых
6:09
функций текстового режима графики
6:11
Давайте теперь поговорим о функциях
6:12
ввода-вывода Для этого нам потребуется
6:14
драйвер клавиатуры тут мы просто слушаем
6:16
порты клавиатуры и производим запись в
6:17
строку памяти которую позже мы сможем
6:19
считать А значит приравнять её к типу
6:21
данных Чар обычной строке код Там
6:22
намного больше и бы расписан массивом
6:24
каждый символ клавиатуры чтобы можно
6:25
было вывести из байт кода порта нужный
6:27
нам символ Но вот и основной код ядра на
6:30
си тут отображён конект библиотек а
6:32
также баннера ске ртом Почему бы не
6:34
нарисовать Красный Череп Ну а конечная
6:35
остановка основной цикл внутри которого
6:37
мы будем слушать клавиатуру переводить
6:39
строку в переменную Далее по нажатию
6:40
Enter читать её в зависимости от
6:42
набранного текста будет выполняться
6:43
какая-либо функция на этом скриншоте
6:45
показан весь функционал нашей
6:46
операционной системы Да он пока скудный
6:48
но для примера его хватает Отлично
6:49
Теперь всё это осталось собрать и
6:51
запустить на машине например на старом
6:52
ноуте сборка происходит через нас Мы
6:54
компилятор gcc получаем на выходе образ
6:56
который уже можно записать на флешку но
6:58
пока приложу пару скринов с вирту машины
7:00
Теперь мы с тобой на базовом уровне
7:01
понимаем какие-то сложные вещи из
7:03
устройства операционно советую тебе
7:04
прочитать оригинальную статью а также
7:06
подписаться на бусте ведь платные
7:07
подписчики увидели это видео раньше
7:08
остальных Смотри это видео следующем

Поделиться: