Вопрос про то, как пишут ОС

Тема в разделе "LANGS.C", создана пользователем Antolflash, 19 янв 2010.

  1. Antolflash

    Antolflash New Member

    Публикаций:
    0
    Регистрация:
    14 дек 2008
    Сообщения:
    167
    Предположим, что захотел кто-то ОС написать (не я). Одно дело редактировать MBR в ассемблере, ставить проги-заглушки, чтоб при загрузки они выводили на экран что-то, что пихается в буфер видеопамяти, всё это пишется на асме. А вот как пишут что-то низкоуровневое на C??? Всякие C Run-Time Library на чём написанны? Каким образом только используя синтаксис C/C++ и какой-нибудь компилятор и линковщик, чтоб в итоге всё переводить в бинарник, можно написать что-то низкоуровневое? Тобишь как только используя C написать что-то, что можно просто пихнуть в первый сектор диска, и чтоб что-то вывелось на экран? Простите за глупый вопрос, но я вот лично не представляю как без ассемблера и\или asm вставок написать подобное. И где можно почитать про адресацию памяти в ОС? А то даже в хороших книгах по WINAPI пишут про то, как кодить на WINAPI, а не то, каким образом работает, так сказать, системная "ширма" (ну или чёрный ящик) выделения памяти, работа с экраном и т.д.
     
  2. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    дык на С и асме и написаны. базовые вещи - на асме, остальное на С. еще более остальное - на С++. все как и должно быть
    винапи вам в разборках с осью не поможет. винапи это очень высокоуровневый рантайм, сам сидящий на куче других рантаймов

    а для понимания как и что пишется/работает ось, есть ряд книг. некоторые из них писаны прямо по исходникам доступной в инете опенсорсной оси. это и классические "современные" и ряд других, некоторые из которых были отебуккены тут в секции буков
     
  3. Antolflash

    Antolflash New Member

    Публикаций:
    0
    Регистрация:
    14 дек 2008
    Сообщения:
    167
    Т.е. чисто теоритически обойтись только компилятором C и линковщиком в бинарник невозможно, как ни крути, все библиотеки по управлению памятью (её выделение и освобождение), прямой вывод в видеобуфер, обработка скан-кодов клавиш, всё это написано только на асме. Т.е. при разработки любой ОС сначала придётся кодить на асме всё что связанно с памятью, вводом/выводом, чтением диска, а только потом, когда всё это будет загнано в форм-фатор (то бишь в интерфейс) процедур и функций, можно делать из этого свою библиотеку, и только после этого начинается процесс кодинья на C, так?
     
  4. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Писать бутсектор на си - плохая идея :) Да и в любом случае потребуются асм-вставки.
    Ну что-то вроде того, да. Точнее на асме пишется все самое необходимое как правило, остальное пишется на Си. Управлять памятью, диском и пр. можно и из сей. Нужен лишь ассемблерный интерфейс работы с портами, структурами PDE/PTE (записывать cr3/cr0 надо же как-то).
     
  5. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    http://wasm.ru/forum/viewtopic.php?id=32954

    ну и сорцы, сорцы. у п9 и миникса сорцы маленькие. есть, вероятно, и минифорки линя. лучше 10 раз самому посмотреть, чем 1000 раз спросить или оо - предполагать/угадывать
     
  6. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    таненбаума повторить забыл

    (вобщето писать почти на чем угодно можно. пишут оси и на #, и на жабе, и еще на чем. видел форк доса на пасе итд)
     
  7. Antolflash

    Antolflash New Member

    Публикаций:
    0
    Регистрация:
    14 дек 2008
    Сообщения:
    167
    Спасибо, просто пока нет времени, готовлюсь к экзамену по C++, а вопросы по асму уяснить хочется.
     
  8. reversecode

    reversecode Guest

    Публикаций:
    0
    в TrueCrypt бутлоадер на С
    )))
     
  9. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    именно бутсектор или же код, запускаемый бутсектором? даже если и сам бутсектор, то я не говорил, что нельзя, я сказал, что плохая идея.
     
  10. reversecode

    reversecode Guest

    Публикаций:
    0
    нет
    сама MBR конечно же на asm
    тяжело на C будет выровнять по данным
     
  11. iamlamer

    iamlamer New Member

    Публикаций:
    0
    Регистрация:
    20 июн 2005
    Сообщения:
    273
    Адрес:
    Russia
    На C--, наверное, и бутсектор получиццо.
     
  12. reversecode

    reversecode Guest

    Публикаций:
    0
    неполучиться
    там нужно четко выдержать что бы выполняемый код занял от $ и до $
    только на asm можно четко выдержать db

    но дальнейший лоадер можно уже и на C
    благо дело за MBR еще дофига свободного места
     
  13. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    блин, зачем писать бутсектор и лоадер? толку с того, что в вашем личном аж 3 команды будут уникальны и больше нигде не встречаться. о главном думайте, а не о шаблонном бутлоадере
     
  14. defaultplayer

    defaultplayer New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2006
    Сообщения:
    214
    кстати виндовый ntldr состоит из двух файлов - 16 битного startup.com и полноценной PE-шки osloader.exe, так вот часть startup.com написана на Си, а Си компилер генерит small модель и если конвертнуть в tiny ссылки к данным будут невалидными, поэтому используют еще асм модуль для рантайм фиксапа DS SS, ну и для других вещей, но невозможность генерить tiny модель Сишным компилером это основная причина. Это в исходниках NT4 в коментариях написано.
     
  15. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    мб часть osloader.exe?
     
  16. cupuyc

    cupuyc New Member

    Публикаций:
    0
    Регистрация:
    2 апр 2009
    Сообщения:
    763
    имхо, максимум что нужно от асма - специфические процессорные комманды + доступ к управляющим регистрам. всё это в сумме не больше нескольких десятков килобайт кода. всё остальное возможно написать хоть на Си, хоть на Си++. вот, кстати, интересная мысль - чисто плюсная ось. вместо таблиц экспорта - таблицы виртуальных функций (по типу COM) - тут даже преимущество будет в скорости работы. вместо миллиона разрозенных функций всё собрано в ком объектах. красота, имхо.
     
  17. defaultplayer

    defaultplayer New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2006
    Сообщения:
    214
    Great
    я имел ввиду что одна часть startup.com написана на Си а другая его часть на Асме, а osloader.exe да, полностью на Си
     
  18. Ox8BFF55

    Ox8BFF55 New Member

    Публикаций:
    0
    Регистрация:
    11 июл 2009
    Сообщения:
    181
    К стати , ради интреса, в студии моно писать ОС (разумеется та часть которая на "С" )?
    Ну Или в WDK?
     
  19. Ox8BFF55

    Ox8BFF55 New Member

    Публикаций:
    0
    Регистрация:
    11 июл 2009
    Сообщения:
    181
    П.С. В Линуксе 4,000 ассемблерных строк из 40,000, чисто для статистики...
     
  20. InsidE

    InsidE Member

    Публикаций:
    0
    Регистрация:
    28 май 2009
    Сообщения:
    357
    Адрес:
    Over the hills and far away...
    WDK = Windows Driver Kit,какое отнопение к осе пиастельсву это имеет хз,а в студии ось писать можно