|
83 / 1 / 0
Регистрация: 08.11.2017
Сообщений: 146
|
|
Теория новичка по теме создания ОС08.11.2020, 12:26. Показов 2380. Ответов 17
Метки нет (Все метки)
Я в теории создания операционных систем ничего не знаю, есть несколько вопросов, чтобы хотя бы понять,
стоит ли этим заниматься и насколько это сложно.. (заранее спасибо). На персональном компьютере (не ноут, а обычный ящик-системник + отдельно монитор) - установлен процессор x86-64 архитектуры (AMD Phenom X4 II 945 (3 ГГц)), и установлено 2 винчестера (HDD). На одном из HDD, установлена операционная система Windows 10, а на втором HDD - ничего не установлено, это просто доп. винчестер. И ничего там не записано, и даже никакая файловая система не установлена. Когда включается комп, управление передаётся BIOS, он определяет какое оборудование установлено, видит в частности, что есть 2 HDD. В BIOS - можно выбрать, какой из них использовать для загрузки ОС. Если выбрать 1-й ОС - будет загружаться ОС Windows 10. Я хочу понять, как написать свою микро-операционку на 2-й HDD. Почитал теорию, многие пишут, что надо что то там записать в нулевой сектор дискеты, или разбираться с виртуализацией, и т.д. Дисковода давно нет, дискет нету, а разбираться с глючным VirtualBox не хотелось бы. Если есть готовый 2-й HDD, пусть и без файловой системы, есть же возможность средствами exe-файла Windows , (записать туда в нулевой сектор или куда надо) - некий первичный загрузчик своей микро-операционной системы? Аналогично, как Setup Windows, если надо поставить вторую операционку, запускается же, из уже установленной Windows, что то пишет на другой дису так, что после перезагрузки, BIOS видит, что с другого диска тоже можно загрузиться, а дальше это уже по сути, мини-операционная система, только после загрузки, она устанавливает настоящую итоговую Windows. 1) Значит, насколько я это понимаю, мой exe-файл, должен уметь во-первых, писать на 2-й HDD, что то в нужный (нулевой?) загрузочный сектор, так чтобы позже после выключения-включения компьютера, BIOS поверил в существование там некой операционной системы, и передал ей управление. 2) Как это сделать? Писать что то в нулевые секторы, и не на дискету, а на обычный винчестер HDD , притом что там даже файловая система никакая не установлена? 3) Сам мой exe-файл, пусть будет компилироваться ассемблером MASM, это программа, работающая в ОС Windows, и это файл на диске с файловой системой NTFS, будет состоять как бы, из 3-х частей. 1-я часть - сама программа, скомпилированная MASM, и работающая до перезагрузки компьютера, её цель - и записать загрузчик нашей микро - операционной системы на 2-й HDD, 2-я часть - собственно сам загрузчик, (видимо тоже скомпилированная MASM?) подпрограмма, в набор неких байт, она не будет выполняться непосредственно (после старта нашего exe-файла), но будет выполняться после перезагрузки, т.е. когда BIOS увидит что на 2-м HDD присутствует некая ОС, и можно будет загрузиться с этого, 2-го HDD, изменив приоритет загрузки с 1-го HDD на 2-й - в настройках BIOS. 3-я часть - возможно понадобиться, как сама микро-ОС, может быть так, что 2-й части будет недостаточно, т.к. лимитирован по размеру загрузочный сектор 2-го HDD. Получается, это тоже некий набор байт, который будет скомпилирован MASM, непосредственно выполняться не будет, а будет выполняться после перезагрузки как наша ОС. 4) Сама ОС, пусть будет совсем примитивной, переведет процессор в защищенный режим, оттуда выведет на экран "Hello OS" , будет иметь только один обработчик прерываний - от нажатия на клавиатуру, и если нажата клавиша "E" - выходит из защищенного режима, т.е. делает рестарт компьютера, и после рестарта опять управление в BIOS, опять выбор откуда загружаться и т.д. 5) Насколько трудно это сделать? Если изучать мануалы месяцами, то хотелось бы, хотя бы уже после того, как получен был бы, такой вот казалось бы, примитивный рабочий вариант.. Может есть похожая уже созданная программа. Чтобы всё просто - открыл увидел код. Скомпилировал в MASM. Запустил в Windows 10, exe-файл. Программа видит 2-й HDD, где не установлено ничего. Пишет туда загрузчик примитивной ОС. Вышел, в BIOS выбрал - грузиться с другого диска, и увидел нашу "Hello OS" с заходом в защищенный режим, и выходом из него. Если есть такой рабочий вариант, подскажите, а то сразу что то сложное новичков может отпугнуть. Спасибо.
0
|
|
| 08.11.2020, 12:26 | |
|
Ответы с готовыми решениями:
17
C++/C# (теория для новичка) Задачи по теме: теория групп Нужна теория по теме тип пересчета (перечисления) |
|
Модератор
|
|
| 08.11.2020, 17:14 | |
|
Если Windows 10 грузится, то можно в меню её загрузчика добавить запуск своего UEFI-экзешника (если Windows грузится в режиме UEFI ), или "секторов" из файла, если система работает в устаревшем режиме BIOS.
Если есть минимальная поддержка EFI, можно попробовать её включить и с её помощью запустить свой bootx64.efiДля начала нужно выяснить в msinfo32.exe в каком режиме BIOS запускается Windows 10.
0
|
|
|
Asm/C++/Delphi/Py/PHP/VBA
|
||||
| 13.11.2020, 21:28 | ||||
|
В целом, для самообразования довольно полезная штука, если хочется разобраться в архитектуре процессора (и не только) и прочих низкоуровневых вещах. В бородатом 2002 году делал прогу, которая прописывает в MBR загрузчик. Этот загрузчик читает boot-сектор дискеты, если нажата определённая клавиша (Ctrl, например – это настраивается), иначе оригинальный MBR (сохранённый, насколько я помню, в первом свободном секторе после MBR). Потом передаёт управление туда. Но это всё под DOS. Исходник с комментами, можете глянуть прикреплённый файл. А вообще, по теме загрузчиков на форуме достаточно тем. А также много тем по защищённому режиму (вероятно, в подразделе "DOS"). Пользуйтесь поиском. Также можете глянуть OSDev Wiki или погуглить ещё на эту тему. Просто создать программу, перезаписывающую MBR, а также загрузчик, который переходит в защищённый режим и выводит "Hello OS" – это несложно (если знать что и как делать). Думаю, за несколько дней сможете разобраться. Современные компьютеры снабжены UEFI – разновидностью BIOS, который может работать не только в Legacy Mode (т.е. грузить систему с MBR), но и в своём основном режиме, когда загрузчик расположен в файле формата PE EXE на диске с файловой системой FAT32. Примеры (для FASM) тоже прикрепляю. Ещё, кстати, можете погуглить по теме GRUB. Вероятно, это тоже интересно вам будет. Успехов!
2
|
||||
|
83 / 1 / 0
Регистрация: 08.11.2017
Сообщений: 146
|
||
| 14.11.2020, 11:23 [ТС] | ||
|
Jin X
Спасибо, Т.е. если я запущу exe, то потом BIOS увидит что на нём тоже есть ОС , и можно будет загрузиться с этого другого винчестера HDD, просто изменив приоритет загрузочных дисков в BIOS ? PS Хочу уточнить, чтобы не сломать потом ничего. (А то запущу exe, что нибудь не то сделаю, и потом вообще не загружусь)
0
|
||
|
Asm/C++/Delphi/Py/PHP/VBA
|
|
| 14.11.2020, 19:43 | |
|
SergeyYN, да, прога записывает содержимое файла в первый физический сектор (и при необходимости делает бэкап оригинала). При это прога проверяет файл на размер и наличие подписи.
BIOS сможет загрузиться с HDD, если: а) выставить нужный приоритет (либо указать диск в меню загрузки), б) UEFI-BIOS (если он таков) будет работать в режиме Legacy BIOS или в комбинированном (UEFI/Legacy), в) загрузчик будет иметь верную сигнатуру (последние байты = 0x55,0xAA). Возможно, потребуется ещё что-то, зависит от BIOS'а. У меня, к примеру, при отсутствии Partition Table (или ошибке в нём) BIOS может принять диск за Floppy и использовать первый сектор как Boot-сектор FDD, а не MBR (обычно это USB-HDD/FDD, правда, а не хард). В проге, собственно, реализована такая проверка тоже ( [x] Check partition table).Кстати говоря, вы можете разметить HDD и перезаписать только загрузочную часть с сигнатурой ("boostrap code & sign"), программа это позволяет сделать. В этом случае Partition Table в на HDD будет сохранён, перезапишется только код загрузчика (и сигнатура – последние 2 байта). Главное, не поставить по запаре опцию "clear partition table" ![]() И ещё: чтобы видеть жёсткие диски в списке, не забудьте поставить галочку "Allow all disk drive types", иначе будете видеть только флешки. Вообще, можете на флешках, кстати, и потренироваться. Это безопаснее. Хотя, если вы не выберете случайно не тот диск, ничего страшного не будет. Но я перед экспериментами рекомендую сделать бэкап MBR с загрузочного диска (это можно сделать без замены – просто убрать галочку с "Replace", оставить только "Backup"). А также скачать спасительный WinPE 10-8 Sergei Strelec (x86/x64/Native x86) и записать Rufus'ом на флешку (хотя там в комплекте вроде есть прога для записи) + эту прогу с сохранённым бэкапом туда скопировать. Такую штуку желательно всегда иметь на отдельной флешке на случай краха системы. В целом, прога должна быть интуитивно понятной. Читайте надписи внимательно и всё будет ок. Там есть пара кнопок с вопросиками ( ?), которые открывают подсказки по опциям. Самое худшее, что вы сможете сделать – это уничтожить загрузочный MBR с первого HDD. Но если будет спасительная флешка (WinPE и бэкап), всё легко восстановите. А если будете экспериментировать с USB, то всё ещё проще (галочка "Allow all disk drive types" по умолчанию отключена).Добавлено через 3 минуты p.s. Исправил ссылку на WinPE.
1
|
|
|
Модератор
|
|
| 14.11.2020, 19:55 | |
|
SergeyYN, загрузочные сектора - это из эпохи дискет и более ранней. Размер физического "сектора" на современных носителях - десятки и сотни килобайт. А встроенное ПО современных компьютеров может быть намного больше, чем операционные системы, которые когда-то загружались с дискет. Фактически мини-ОС, которая умеет работать с файловой системой и запускать программы из этой файловой системы (в т.ч. другие ОС и загрузчики), записывается изготовителем компьютера в энергонезависимую память устройства.
А программа инициализации ОС, автономная утилита или напрямую загружаемый супервизор ОС - это не образ сектора, а обычная программа, написанная на языке высокого уровня: Запуск кода на железе Установить такую "ОС" можно копированием файла программы в проводнике в папку с именем, известным встроенному ПО.
0
|
|
|
Asm/C++/Delphi/Py/PHP/VBA
|
||
| 14.11.2020, 22:56 | ||
![]() В современных HDD (2011 года и младше) – всё-таки 4 Кб, но программист на низком уровне видит их как 512-байтовые из-за эмуляции (int 13h и прочее) – это что касается 512e, а вот что происходит с 4Kn при работе с int 13h, к примеру, я не знаю. Но было бы интересно узнать, кстати! Вероятно, они просто не определяются в режиме Legacy BIOS, иначе могут возникнуть большие проблемы. Под первым физическим сектором я имел в виду эмулируемый 512-байтный физический сектор (в 512e, либо физический в 512n), т.е. по сути логический ![]() Если же речь про SSD, то там вместо секторов страницы от 2 до 16 (32?) Кб, но они обычно видны всё равно как обычные 512-байтные сектора (как в 512n-дисках).
0
|
||
| 14.11.2020, 23:19 | |
|
Не по теме: Если страница 16 KB, то блок из 8 страниц уже 128KB. Интерфейс позволяет читать и записывать постранично, но фактически перезаписаться может целый блок.
0
|
|
|
Asm/C++/Delphi/Py/PHP/VBA
|
|
| 15.11.2020, 10:12 | |
|
politoto, про запись согласен (и то если кэширование не сработает; а доступ к конкретным физическим страницам как таковой недоступен из-за системы выравнивания износа). Но читать-то страницами можно
![]() Мне, кстати, интересно, где (в какой памяти) хранится карта соответствия логических страниц (или блоков) физическим? Это в плане работы выравнивания износа.
0
|
|
|
Эксперт Hardware
|
||||||
| 18.11.2020, 06:54 | ||||||
|
Если уж FS вводит в заблуждение, то реальный размер сектора всегда можно запросить и у самого контролёра диска, через
DeviceIoControl() с кодом IOCTL_DISK_GET_DRIVE_GEOMETRY. Здесь идёт запрос именно к драйверу, а он берёт данные не из воздуха, а запрашивает их у контролёра, в ПЗУ которого и хранится заводская геометрия. В этом случае файловая система и логика остаётся уже в стороне.
0
|
||||||
|
Asm/C++/Delphi/Py/PHP/VBA
|
||||||
| 18.11.2020, 18:05 | ||||||
|
R71MT, эта фича показывает только логический (эмулируемый) размер сектора.
Есть более чёткая фича: IOCTL_STORAGE_QUERY_PROPERTY. Вот нашёл в инете (работает):
1
|
||||||
|
Эксперт Hardware
|
|||||||
| 18.11.2020, 19:17 | |||||||
|
https://docs.microsoft.com/en-... descriptor
0
|
|||||||
| 18.11.2020, 19:17 | |
|
Помогаю со студенческими работами здесь
18
Вопрос по теме Dynamic-Link Library: Теория + Практика Теория создания Теория создания плагинов.
Теория и практика создания QA-систем Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
|
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс.
Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
|
Программный отбор значений справочника
Maks 21.03.2026
Установка программного отбора значений справочника "Сотрудники" из модуля формы документа.
В качестве фильтра для отбора служит предопределенное значение перечислений.
Процедура. . .
|
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
|
|
Оттенки серого
Argus19 18.03.2026
Оттенки серого
Нашёл в интернете 3 прекрасных модуля:
Модуль класса открытия диалога открытия/ сохранения файла на Win32 API;
Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
|
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога
Финальные проекты на Си и на C++:
finish-rectangles-sdl3-c. zip
finish-rectangles-sdl3-cpp. zip
|
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие.
Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
|
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ВВЕДЕНИЕ
Выполняя задание на управление насосной группой заполнения резервуара,. . .
|