Работа персонального компьютера шаг за шагом

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

  1. s3dworld

    s3dworld Сергей

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

    Меня зовут Сергей. Связаться со мной можно по следующим контактам:

    ICQ: 597-023-587
    Skype: s3dworld
    E-mail: s3dworld@yandex.ru

    Я решил создать эту тему по двум причинам:

    1. Чтобы помочь разобраться другим
    2. Чтобы самому лучше разобраться в материале

    Как мне уже заметили, нельзя всё сразу охватить. Поэтому я решил двигаться последовательно вникая максимально глубоко во все темы (не перепрыгивая ничего на своём пути). Тут я буду описывать то что я знаю, то, о чём я думаю. Буду спрашивать у Вас как правильно поступить. Планирую что данная тема будет очень большой и на основании её я потом создам FAQ. Лишний раз пересказывая то, что ты думаешь уже знаешь, поможет лучше освоить материал и взглянуть на многие вещи под другим углом.

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

    При включении компьютера процессор выполняет команды BIOS. Происходит тестирование оборудования, определяются объёмы оперативной и видеопамяти. Суть того что в этот момент происходит мне не ясна. Наверное чёткой картины нет, так как все компьютеры разные и BIOS'ы тоже бывают разные. Да и думаю что нет надобности понимать того, что происходит в этот момент.

    После всех диагностик BIOS пытается найти загрузчик операционной системы. Он опрашивает первые сектора всех носителей из списка загрузки. Сектор - это 512 байт информации. Если представить эти 512 байт в смещении в виде 16-ричных чисел, то сектор можно представить как диапазон от 0x0000 до 0x01FF. Так вот, если у сектора байт по смещению 0x01FE равен значению 0x55, а байт по смещению 0x01FF равен значению 0xAA, то такой сектор считается загрузочным и он копируется в память по адресу 0x0000:0x7C00, и управление передаётся на этот адрес. Ко всем 512 байтам можно будет обратиться по смещению от 0x0000:0x7C00 до 0x0000:0x7DFF (если перевести в 32-битный адрес, то получим от 0x00007C00 до 0x00007DFF).

    В этот момент процессор работает в режиме реальных адресов (R-Mode). В режиме реальных адресов для адресации используются сегментные регистры CS, DS, ES и SS (такие регистры как FS и GS были добавлены позже и могут быть не доступны на ранних моделях процессоров), и смещение. Все сегментные регистры имеют 16-битный размер (слово). Сегментный регистр CS используется совместно с регистром IP для указания на адрес следующей инструкции процессора. Сегментный регистр DS неявным образом используются для работы с данными. Сегментный регистр ES тоже неявным образом может использоваться для работы с данными, а явным образом можно использовать для своих дел. Если есть сегментные регистры FS и GS, то их можно использовать на своё усмотрение. Сегментный регистр SS используется совместно с регистром SP для указания вершины стека. Физический адрес, получаемый от взаимодействия сегментного регистра и смещения, рассчитывается по следующей формуле:

    Когда процессор начинает выполнять команды по адресу 0x0000:0x7C00 (если перевести в физический адрес, то получим 0x00007C00), в его сегментном регистре CS содержится значение 0x0000. Первым делом, что требуется программе, это настроить остальные сегментные регистры и указать вершину стека. Можно это сделать таким способом (синтаксис FASM):

    Код (Text):
    1. use16
    2. org 0x7C00
    3.  
    4. mov AX,CS
    5. mov DS,AX
    6. mov ES,AX
    7. mov FS,AX
    8. mov GS,AX
    9. mov SS,AX
    10. mov AX,0x7C00-4
    11. mov SP,AX
    Стоит ещё заметить, что в реальном режиме работы процессора можно использовать 32-битные инструкции, если же их сам процессор поддерживает.

    В общем в этот момент наша программа является полным владельцем компьютера. Перед нами открываются огромные возможности для фантазий. Но если разрабатывать операционную систему, то она должна содержаться в виде файлов, то есть должна иметься файловая система. Поэтому нам нужно проверить наш сектор на информацию о файловой системе. Обычно первые три байта загрузочного сектора содержат код прыжка. А за ними следуют данные описания файловой системы. Если мы определили файловую систему и умеем с ней работать, то видимо нам нужно считать сектор, где будет представлен каталог файлов. Там попытаться найти файл с названием загрузчика (например Boot.bin). Если файл не найден, то вывести сообщение и что-то сделать (зависнуть, передать управление BIOS или поругаться на того кто вставил дискету/диск/флешку). Если же файл найден, то отыскать где он находится на носителе и загрузить его по нужному нам адресу, например в 0x7E00. И если это чисто бинарные данные, то передать управление на начало этих данных. Если же это файл с описанием, то нужно считать заголовок и определить где точка входа, и туда передать управление.

    А вот уже этот Boot.bin должен проверить конфигурацию компьютера, подходит ли процессор для данной операционной системы или нет. Далее он должен определить объём и распределение оперативной памяти. Подготовить все необходимые системные структуры, перевести процессор в защищённый режим, загрузить ядро операционной системы в память и передать ей управление.

    Вот всё это я и буду делать и Вас информировать в данной теме. Надеюсь что кому-то это будет так же полезно, как и мне.
     
  2. Z3N

    Z3N New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2009
    Сообщения:
    812
    s3dworld
    Если хотите помочь разобраться другим - пишите статью с картинками и т.д.. А ещё лучше цикл статей.
     
  3. _sheva740

    _sheva740 New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2005
    Сообщения:
    1.539
    Адрес:
    Poland
    s3dworld
    Замечательно!
    От любого дела есть прок!
    Будем читать.
    Только имя свое к чему указывать?
     
  4. barmaley57

    barmaley57 New Member

    Публикаций:
    0
    Регистрация:
    10 авг 2009
    Сообщения:
    58
    s3dworld, код ОС Kolibri не смотрел?
     
  5. s3dworld

    s3dworld Сергей

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

    _sheva740
    Чтобы кто-то мог обратиться и я ему помог чем могу.

    barmaley57
    Нет, не смотрел. Не очень то я и люблю чужой код.
     
  6. barmaley57

    barmaley57 New Member

    Публикаций:
    0
    Регистрация:
    10 авг 2009
    Сообщения:
    58
    Не стоит забывать про релоки. Код помещенный по произвольному адресу, без дополнительной настройки работать не будет.
     
  7. barmaley57

    barmaley57 New Member

    Публикаций:
    0
    Регистрация:
    10 авг 2009
    Сообщения:
    58
    Зря ты так. Иногда лучше и проще посмотреть, как люди делали, чем биться в попытках изобретения велосипеда. Уж хуже от этого точно не будет :)
     
  8. s3dworld

    s3dworld Сергей

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

    Скачал исходники и посмотрел. Довольно таки заинтересовали меня драйвера))

    Надеюсь никто не обидится, если я буду в этой тебе только лишь писать о новостях, которые я сделал на этом сайте: http://dubrovkin.h18.ru/.

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

    Никто так не против и как вам оформление?
     
  9. tester3000

    tester3000 New Member

    Публикаций:
    0
    Регистрация:
    20 окт 2006
    Сообщения:
    140
    Я лично нет =) оформление сойдет ;) +1 читатель и еще сайты на агаве вроде долго не живут лучше бы на narod'e

    п.с. если можно и дальнейший код приводите на FASM'e
     
  10. bendme

    bendme New Member

    Публикаций:
    0
    Регистрация:
    10 мар 2009
    Сообщения:
    179
    Ппц, бред какую пишет. Файл то свой Boot.bin чем искать то будешь?
    Дед мороз чтоли тебе поддержку файловой системы сделает?
     
  11. s3dworld

    s3dworld Сергей

    Публикаций:
    0
    Регистрация:
    16 мар 2010
    Сообщения:
    387
    Адрес:
    Ртищево
    bendme
    А к чему такой наезд? Я же писал что загрузочный сектор должен определить файловую систему и если он её знает, то найти файл Boot.bin. Не внимательно ты читаешь!