Форум программистов, компьютерный форум, киберфорум
Наши страницы
JIuXOMAHT
Войти
Регистрация
Восстановить пароль
Рейтинг: 5.00. Голосов: 1.

ОС на ассемблере. Полуношный проэкт. часть 1.

Запись от JIuXOMAHT размещена 04.09.2015 в 20:30

Философская...
Задание: выжать максимум производительности и функциональности из определенной аппаратуры для определенных задач.
Определенная аппаратура: процессор AMD Sempron 3300+ (Palermo (Venice-128), DH-E6)
матплата Epox EP-8KDA7I
озу DDR Patriot Memory PSD1G400
Hynix HYMD264 646D8R-D43
Определенная задача: высокоскоростной рендер данных заданной точности.

Как я оказался у данной аппаратуры и с данной задачей - долгая и скучная история о том, как таял парк хороших машинок с каждым рождением ребенков у знакомых и родственников; о том, как кто-то тратил время на воздух, и долго шел к своей

мечте... Это неважно. Нам нужен результат, и мы его получим.
Исходя из производителя процессора, можно уже догадаться об одном из подводных камней нашего задания : подавляющее большинство кода из доступных в сети примеров предоставлены для архитектуры Intel ,- так что можно забыть про быдлокодинг,

и придется задумываться уже над каждой строчкой. Отправной точкой для наших изысканий стоит считать литературу от производителя, и такая ,слава богу, есть. Архитектура AMD64 (описательные тома 24592, 24593, 24594, 26568, 26569) плюс

больше конкретики для моего семейства в томе 26094 "BIOS and Kernel Developer's Guide for AMD Athlon TM 64 and AMD Opteron TM Processors"(в нем же указаны ссылки на еще более дополнительные писюльки), в совместительстве с технологией

Hypertransport 1.03 (просто надо иметь это в виду). Поковыряв первый том 24592, можно обнаружить ряд полезных качеств, скрытых в моем безнадежно устаревшем камешке : это 8 дополнительных регистров общего назначения, 8 дополнительных

регистров на функции SSE, единая несегментная адресация (за некоторым исключением), так называемая flat-модель памяти. Ой, да я забыл сказать, что все это доступно лишь только в long-mode, и максимальная отдача от этих плюшек будет лишь

в 64-битном режиме. Смело откинув бредовую идею о совместимости со старыми приложениями, я решил ,что весь код ,который будет исполняться в рамках моей системы, будет 64-битным.

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;-Почему вы решили именно писать ОС с нуля?;;;;;;;;;;;;;;;;;;;
;-Слишком много ненужной и постоянно устаревающей информации.;
;Написание ОС своими руками - это определенный хэнд-мэйд.;;;;;
;Системное программирование вообще открывает все заложенные в;
;голову белые пятна, своего рода, экзамен.;;;;;;;;;;;;;;;;;;;;
;Да и разрешая простые задачи, мы учимся формировать более;;;;
;сложные, это важно для саморазвития;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Итак, перед тем как полностью описать философию будущей 64-битной ОС для моего компьютера, нужно разобраться с самым главным, что должна делать любая ОС - загружаться. Ошибки, вылеты и прочее неважно - это необходимые атрибуты работы

удачной ОС. Ибо все это возможно лишь в том случае, если она загрузилась. Если глянем во всякие интернеты или в том 26094, в главу "Инициализация процессора", то комплекс происходящих мер после кнопки POWER вольно-тезисно раскладывается

так:

1. BOOTSTRAP:
#RESET => инициализация ядра (ноды) №0 процессора => инициализация Hypertransport в real-mode=> инициализация всех когерентностей на шине Hypertransport => инициализация всех некогерентностей на шине Hypertransport =>снятие сигнала

#RESET => AP инициализация остальных ядер (нод) процессора => BIOS.

2. BIOS:
Загрузка микропрограммы БИОС в память по адресу FFFF:0 с передачей управления => запуск POST => инициализация всех остальных железяк => распределение значений CMOS => поиск на указанных к загрузке устройств нулевого сектора с особой

сигнатурой 55ААh на конце => Загрузка кода с этого сектора в память по адресу 0000:7C00 => передача управления по тому же адресу => ЗАГРУЗЧИК (real-mode).

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;-Почему вы решили использовать именно ассемблер для этой цели?;;;;;;;
;-Говорить о преимуществах кодинга в том или ином ЯП, сравнивая лишь;;
;синтаксис и количество уже созданных библиотек - это своеобразная;;;;
;форма нацизма. В поисках преимуществ нужно опираться в первую;;;;;;;;
;очередь на развитие компилятора/интерпретатора. Особенно это;;;;;;;;;
;касается такого неокрепшего ума, как мой. Поэтому я выбрал FASM.;;;;;
;Говоря о ЯП более высокого уровня, нужно всегда учитывать опыт;;;;;;;
;других программистов, который заключен как в синтаксисе, так и в;;;;;
;работе определенной версии компилятора при решении различных типовых;
;задач. Ваш выбор - принимать этот опыт или нет. Я его отверг из-за;;;
;маниакальных соображений. Поэтому ассемблер: просто и глупо.;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

3. ЗАГРУЗЧИК (real-mode)....

И вот тут уже и начинается наша ОС. Ну право же: винда начинается с MBR, линька с GPT, хотя загрузчиков куча, эти наиболее на слуху. Вообще, можно все тело ОС уместить на всю нулевую головку,то есть занять еще последующие 63 секторов,

что даст нам около 32 килобайт общего безумия, и нам не нужно будет заморачиваться на файловую систему в первое время. Однако, в таком случае нам будет необходимо как-то напрямую редактировать эту область памяти. Прямых утилит,

портирующих код из ассемблера в сектора пока нет, поэтому на данном этапе воспользуемся сторонними способами редактирования дисков. Да, именно, с диска и будет проводиться загрузка нашей ОС. Только не с механического бедолаги , а флешки

- очень удобно, и я не один так считаю, наверное.

Ну вот, наше ТЗ начинает по-тихоньку формулироваться более конкректно:
Допустим, есть флешка FLASH. На нулевой сектор в первые 508 байт сторонним способом должен быть нанесен особый 16-битный код, поддерживающий real-mode, который быстренько переведет нашу систему в 64 бит и передаст управление 64-битному

коду, который начнется уже с 513 байта, и уже его дальнейшие манипуляции. Если нам не удастся "успеть" сделать такой подвиг в первые 508 байт, придется его отодвинуть в последующие после нулевого сектора. Теперь вопрос: допустим, нам это

удалось и 64 разрядная система ждет такой же 64-разрядной команды. Что дальше? Да, настало время пофилософить...

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;-Почему вы решили, что данные бредни "ОС на АСМ" интересны нам?;
;-Во-1х, я одинокий человек, и нуждаюсь хоть каком-то внимании.;
;Во-2х, я знаю, что это не 1-я и не последняя такая попытка.;;;;;
;Продемонстрированный мною опыт может быть полезен для тех, кто;;
;этим интересуется либо в рамках работы, либо саморазвития, ибо;;
;подводных камней в разработке высокопроизводительного ПО, пусть;
;встроенных решений или чисто для фана, на пути окажется немало,;
;а дети х86 архитектуры - так вообще лучшее место для отработки;;
;навыков поиска решений в, казалось, безвыходных ситуациях.;;;;;;
;В-3х, это, надеюсь, станет неплохим наглядным пособием по;;;;;;;
;анализу аппаратных возможностей и деликатному их использованию.;
;Так, люди смогут даже на другой архитектуре, создать некое;;;;;;
;подобие моей ОС, если она им так понравилась, без лишних;;;;;;;;
;скачиваний и последующего ругания разработчика, своими руками.;;
;В-4х, понятие совместимости весьма расплывчатое, ведь всегда;;;;
;можно поддерживать стандарт не только предложенными средствами.;
;Поэтому, если я отказываюсь от совместимости на уровне кода,;;;;
;это еще не значит, что я делаю абсолютно закрытую от мира ОС...;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

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

писать много кода, он для этого не предназначен, вернее сказать - человека жалко, себя, точнее сказать. Поэтому о высоком уровне абстракции и распухованном АПИ, который еще отдельно и придумывать не из пальца надо, можно забыть.

Однозадачная DOS уже более похожа на необходимый идеал, но не совсем... Получается даже не операционная система, а некая эфимерная среда исполнения приложений в рамках аппаратного АПИ. Иными словами, мы создаем приложение, которое

оформляет как надо процессор и что-нибудь еще, а затем по указанию программиста или кода, запускает следующее ничем не связанное приложение, которое может впоследствии вызвать другое ничем не связанное приложение, и должно работать в

рамках некоторых правил, чтобы наш карточный домик не развалился.
Итак, правила: допустим, весь код приложения отображается в памяти непрерывным куском от НАЧАЛО-АДРЕС до КОНЕЦ-АДРЕС. Необходимо его минимально рабочее ядро разместить внутри уже новой программы так, чтобы все было, и нам за это ниче не

было. Вот и он - первый подводный камень, который будем решать сначала алгоритмически а потом и программно.
[продолжение следует]...
Размещено в Без категории
Просмотров 507 Комментарии 2
Всего комментариев 2
Комментарии
  1. Старый комментарий
    ОС на ассемблере? Действительно, интересно. А на каком языке написана MS-DOS?
    Запись от Дмитрий2008 размещена 01.10.2015 в 20:30 Дмитрий2008 вне форума
  2. Старый комментарий
    Аватар для turbanoff
    MS-DOS тоже на ассемблере
    https://github.com/Pana/MS-DOS/tree/master/v20source
    Запись от turbanoff размещена 16.11.2015 в 15:21 turbanoff вне форума
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru