Начало начал: Включение компьютера

Тема в разделе "WASM.BEGINNERS", создана пользователем s3dworld, 30 май 2010.

  1. s3dworld

    s3dworld Сергей

    Публикаций:
    0
    Регистрация:
    16 мар 2010
    Сообщения:
    387
    Адрес:
    Ртищево
    Всем доброго вечера!

    Хотелось бы мне чисто для удовлетворения своих желаний написать что-то типа примитивной операционной системы, которая будет бесполезной. Однако я получу неоценимый опыт.

    При включении компьютера, выполняется код (не помню по какому адресу), собственно выполняется код BIOS'а на тестирование системы. Следом программа пытается прочесть с любого для неё доступного устройства первые 512 байт информации (флоппи-дискета, CD-дисковод, DVD-дисковод, USB-флешка). После прочтения он загружает эти 512 байт в память и передаёт туда управление.

    Пускай есть код, который переводит процессор в 32-битный режим и выводит на экран какое-то сообщение. Этот код записан в первых 512 байтах на флоппи-дискетке или на USB-флешке.

    При включении компьютера, процессора начинает работать в реальном режиме, где доступно 16 бит адресации, то есть 65536 байт (8192 килобайт, либо 8 мегабайт).

    Так в какую же область памяти процессор скопирует код с устройства (флоппи-дискетка, USB-флешка)? Прямо в самое начало 0x0000 или в какое-то конкретное место? Можно ли как-нибудь указать процессору с какого именно диапазона ему вставлять в памяти код?

    Вот код скопирован в память, как обычно бывает, загрузчик считывает с устройства ещё сколько нужно секторов и они идут следом за первыми 512 байтами обязательно или их как-то можно в любом месте из 65536 байт разместить и потом передать туда управление?

    Вот пускай всё что нужно скопировано и лежит в памяти. Коду передано управление. Код выполняет перевод процессора в защищённый 32-битный режим. При этом откроется 32-битная адресация и размер памяти может быть уже 4294967296 байт (4194304 килобайт, 4096 мегабайта, либо 4 гигабайта). Так уже в защищённом режиме, если по какому адресу будет находится начало выполняемого кода? То есть оно будет лежать по тому же адресу что и было в реальном режиме, оно стирается или процессор копирует в какой-то адрес все инструкции?

    Теперь мы в защищённом режиме, глобальные таблицы дескрипторов, прерываний и прочего...всё это мы можем размещать в любом месте памяти и не обязательно подряд же? А как указать чтобы этот код лежал по такому адресу, а другой код по такому? Я имею ввиду чтобы я сам выбирал какие участки памяти чем забивать, а не подряд идти.

    Буду ждать Ваших ответов...
     
  2. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    s3dworld
    что сочкуеш? на сайте трудно посмотреть статьи и исходники, и поиск по форуму конечно
     
  3. s3dworld

    s3dworld Сергей

    Публикаций:
    0
    Регистрация:
    16 мар 2010
    Сообщения:
    387
    Адрес:
    Ртищево
    wsd
    Что за выражения? За словами следите.

    Смотрел я по поиску, но так нигде и не нашёл ответы на свои вопросы.
     
  4. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.561
    Адрес:
    Russia
    s3dworld
    Найдите книгу Таненбаум. Современные операционные системы. Начните с нее. А потом уже сюда за вопросами. Потому как задавая вопрос:
    Сразу говорит о вашем незнании теории и матчасти.
    Ну а если по существу - этим всем заведует биос. В нем вся информация о том с чего грузить, откуда и с каких адресов. Он для вас будет стартом. А дальше уже зависит от вас. Если вы перепишете биос, то возможно ваш биос сможет указать на другую область памяти где выполнять код загрузки. Но зачем? Есть стандарты, их надо придерживаться.
    И вообще про загрузчики тут много чего есть на форуме, а так же про ОС и не только.
    Это говорит о вашем незнании защищенного режима в принцыпе. В таблице дескрипторов описаны положения сегментов памяти различного назначения. Меняйте их как хотите. Если у вас страничная модель памяти, вы можете таблицы располагать где и как хотите, хоть в верхних хоть в нижних адресах ОП. Просто в CR3 грузите адрес вашей PDE и все.
    Адрес PDE задаете сами как хотите. Можете хоть 0 адрес , при этом настроив таблицу трансляции адресов например на 0х10000 адрес. И при обращении 0 будет транслироваться в 0х10000.
    Тока такие извращения ни к чему - это все равно что себе спицы в 1 место засовывать, потом замучаетесь.
     
  5. s3dworld

    s3dworld Сергей

    Публикаций:
    0
    Регистрация:
    16 мар 2010
    Сообщения:
    387
    Адрес:
    Ртищево
    TermoSINteZ
    Я имел ввиду не извращаться с памятью, а вот хотел просто узнать, все таблицы служебные где должны храниться? То есть в самом начале памяти или где угодно сам располагаю?

    Вот скажем у меня будет код:

    Код (Text):
    1. mov EAX,0x22446688
    Предположим это и есть вся моя программа. Так как же я смогу эту команду разместить, скажем по адресу FFAA0012 и передать туда управление?
     
  6. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    товарищ s3dworld
    в Ваш адрес не было вылито ничего обидного или не цензурного, а дан дельный совет.
    если у Вас повышенная нежность - это Ваши проблемы.
    а Ваш запощенный вопрос смахивает на просьбу "почитать книжку в слух",
    так что это Вам за словами следить надо.
     
  7. SII

    SII Воин против дзена

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    s3dworld
    Прежде чем писать даже примитивную ось, стоит всё же научиться просто программировать на ассемблере. Иначе ничего Вы сделать не сможете: потонете в море информации. А заодно и подучить теорию. Например, сия Ваша фраза:

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

    А вот эта фраза:

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

    Пы.Сы. Написал без всякого наезда, а лишь для того, чтобы обратить Ваше внимание на совершеннейшее несоответствие Ваших нынешних знаний с задачей, которую Вы себе сейчас поставили.
     
  8. s3dworld

    s3dworld Сергей

    Публикаций:
    0
    Регистрация:
    16 мар 2010
    Сообщения:
    387
    Адрес:
    Ртищево
    wsd
    Что за сочкуешь?! Здорово когда просишь помощи у опытных людей (так как я в этом деле полный НОЛЬ), и тут тебе говорят:
    А вот материться не стоит. Вам первое предупреждение. Второе закончится в банановой стране....
     
  9. s3dworld

    s3dworld Сергей

    Публикаций:
    0
    Регистрация:
    16 мар 2010
    Сообщения:
    387
    Адрес:
    Ртищево
    SII
    Не хочу сказать что я полный ноль в ассемблере, писал программы. Самое крупное моё достижение - это написал операционно-независимую игру Змейка. Там был мой алгоритм рисования линий, управление от клавиатуры. Разрешение 1024x768. Работа была в реальном режиме В общем всё просто.

    А вот на счёт познаний в работе самого компьютера (да и в процессоре тоже), то тут спорить не буду - знаю мало.

    Грандиозное ничего писать не хочу. Просто для себя хотел бы сделать что-то типа без страничной адресации, один сектор памяти и на код, и на данные. И примитивный GUI. Чтобы при запуске у меня окно какое-то появилось. Да вот и всё.
     
  10. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    s3dworld
    это не обидное слово, я тоже бывает сочкую, но не за счёт других.
    ты можеш открыть главную страницу сайта и найти там цикл статей "процессор в защищённом режиме"?
    и также другии статьи и исходники.
    нужно брать на себя посильные задачи и планомерно двигаться вперёд.
     
  11. s3dworld

    s3dworld Сергей

    Публикаций:
    0
    Регистрация:
    16 мар 2010
    Сообщения:
    387
    Адрес:
    Ртищево
    Извиняюсь что сошёл с катушек.

    wsd
    Читал я те статьи, и если честно, то там всё плохо описано (по крайней мере что-то понимаю, а что-то вообще нет). К тому же ошибки бывают. Написал автору на почту...так и не ответил.
     
  12. SII

    SII Воин против дзена

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    s3dworld
    А откуда тогда:

    Конечно, 8192 Кбайт = 8 Мбайтам, но 65536 байт = 64 Кбайтам, а никак не 8192. Кроме того, в реальном режиме адресуется 1 Мбайт, а не 64 Кбайта. Так что с пониманием принципов формирования физического адреса у Вас имеются проблемы...

    Вообще-то не операционно-независимая, а системно-независимая (system-independent, если по-буржуйски). Ну а кто рисовал точки и отслеживал нажания на клавиши? Ваша программа или BIOS? Это две оччень большие разницы (хотя б потому, что функции BIOS можно использовать, абсолютно не понимая, как та же клава общается с компутером, а вот сделать полностью свою обработку без понимания этих вещей уже проблематично -- разве что украсть у кого-то готовый код и использовать его, не понимая принципов его работы).

    В памяти секторов нет, секторы есть на дисках. Разницы между кодом и данными никакой нет ни для диска, ни для памяти, ни даже для процессора: он это выясняет по ходу дела (должен исполнить команду по какому-то адресу -- значит, рассматривает информацию, размещённую по этому адресу, как код команды; встретил команду, считывающую данные из какого-то места памяти -- рассматривает информацию по этому адресу как данные). А "примитивный ГУИ" -- это не просто чтобы окно появилось. Нужна ещё куча всего, чтобы это можно было назвать гуем, пускай и примитивным; вывод статической картинки на экран -- это ещё не гуй.
     
  13. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.561
    Адрес:
    Russia
    s3dworld
    На ассемблере? Покажите плиз.

    Почитайте теорию пожалуйста. Вы наверно хотели сказать сегмент?

    АДД:
    Это уже ближе к делу. Пишите сюда, что вы не поняли из статей и про какие ошибки вы говорите. Мы поможем.
     
  14. s3dworld

    s3dworld Сергей

    Публикаций:
    0
    Регистрация:
    16 мар 2010
    Сообщения:
    387
    Адрес:
    Ртищево
    SII
    Извиняюсь, ошибся в расчётах. 2 в 16 степени = 65536 байт (64 килобайт). Да, всё через BIOS делал.

    TermoSINteZ
    Да, сегмент.

    Кода у меня того давно нет. Я всё что делаю никогда не сохраняю. Не знаю, привык так. делаю для опыта, а не для того чтобы что-то показывать. Не правильно это, нужно изменить политику.
     
  15. Ustus

    Ustus New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2005
    Сообщения:
    834
    Адрес:
    Харьков
    s3dworld
    Мной по молодости лучше всего воспринимались азы защищенного режима в исполнении Фроловых.
    (Александр Фролов, Григорий Фролов "Защищенный режим процессоров Intel 80286/80386/80486")
    Ссылко не размещаю, ибо варез :)
    Там изложено очень примитивно, и может где-то даже устарело, но доходчиво. Хотя такой литературу - моря.
     
  16. SII

    SII Воин против дзена

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    Ну, прежде чем браться за защищённый, надо хорошо разобраться с реальным, тем более что при написании чего-то более-менее продвинутого придётся прыгать из реального в защищённый и обратно...
     
  17. s3dworld

    s3dworld Сергей

    Публикаций:
    0
    Регистрация:
    16 мар 2010
    Сообщения:
    387
    Адрес:
    Ртищево
    Вообще, как мне кажется, мне можно обойтись и просто реальным режимом. Так как вряд ли я смогу написать что-то, что будет использовать так много физической памяти.

    Просто пиксели лучше рисовать будет не через функции BIOS'а, а в прямую в видео-память.

    Но всё же хочется уметь работать во всю мощь процессора.
     
  18. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.561
    Адрес:
    Russia
    s3dworld
    Это вам не надо.
    Правильно. Научитесь работать напрямую с видеопамятью. Это будет ваше первое задание.

    Ну а потом уже сделайте менеджер окон и обработку мыши (хотя можно без мыши, стрелочками на клаве хотя бы для начала).
     
  19. s3dworld

    s3dworld Сергей

    Публикаций:
    0
    Регистрация:
    16 мар 2010
    Сообщения:
    387
    Адрес:
    Ртищево
    Помню была у меня книжка Кулакова для таких случаев. Была ещё одна книжка, где учат через функции DOS'а, BIOS'а и через порты. Какие есть ещё хорошие?
     
  20. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.561
    Адрес:
    Russia
    Читайте Кулакова. Вам хватит инфы там на год вперед.