OSDev

для всех
Текущее время: 29 апр 2024, 00:31

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 27 ]  На страницу 1, 2, 3  След.
Автор Сообщение
СообщениеДобавлено: 25 фев 2012, 23:42 

Зарегистрирован: 25 фев 2012, 23:27
Сообщения: 8
Привет всем.
Я совершенно начинающий. Хоть и промучался уже 3 недели над теорией,но мало что понял - учусь заочно и препода не могу выловить ... кажется он не очень любит возиться с этим ... Но суть не в этом ...

Ситуация такая: хочу написать ядро будущей ОС (сначала ядро)... для начала просто создание/открытие/редактирование файла.
Т. е. вот так будет: пользователь включает ПК , появляется командная строка где он указывает что он хочет - создать/открыть/редактировать текстовый файл.

Проблема.
Вот напишу на Си я программку которая это будет делать (нужно будет получать адреса ... наверное вставки с АСМа надо будут ... адрес нового файла где-то в таблице будет сохраняться и т. д. ... ну вобщем прорвемся как-то ...) ... А что мне дальше с этим кодом делать? Ведь у процессора нет компилятора с языка Си!

Искал в интернете, но ничего путного не могу найти ... Подскажите. где можно об этом прочесть? или как в гугле задавать такой запрос?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 26 фев 2012, 00:33 

Зарегистрирован: 31 окт 2011, 18:20
Сообщения: 230
Вообще си (и любой другой язык программирования) компилируется один раз в машинный код и потом уже юзается на железе.
Я как-то раз писал код "загрузочных танчиков" на си (асм загрузчик, асм вывод на экран, си танчики). Пришлось извращаться: писал, компилировал, вырезал заголовок EXE, сшивал с ассемблерной частью, не юзал абсолютных адресов. Больше опыта компилирования си под голое железо у сообщества опенсорцников (теги для поиска - GCC, GNU + OSDev). Я с этим делом (написанием операционки на си) завязал уже давно.
А вот по поводу ПРОСТО создание, открытие, редактирование файла - я б так уверен не был. Нужно написать создание файла, открытие файла (для этого надо разобраться хотя бы с FAT и ATA), написать консоль (вывод на экран, ввод с клавиатуры). Не стоит забывать, что никаких "стандартных" функций в ОСДеве нет (прерывания биоса не в счет; если юзать защищенный режим - то и их не будет). Я не пугаю, я просто предупреждаю.;)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 26 фев 2012, 04:34 

Зарегистрирован: 28 окт 2007, 18:33
Сообщения: 1418
Ввод-вывод -- это вообще самое сложное, что только есть в ОС. И, если делать по-человечески, то "для начала просто создание/открытие/редактирование файла" превратится в написание 80% кода ядра системы.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 26 фев 2012, 11:54 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1126
Перефразирую PCU. Аааа, что делать? Куда бежать?

Пока по вашему описанию ваша ОС будет напоминать DOS.
Вопрос в том будет она защищённая или нет?

Остальное я не понял.
Про компилятор отвечу так, каждый разбирается со своим компилятором разбирается сам. Часть ответов можно найти на OSdev.org
Обычно требуется получить чистый бинарник, то есть без привязки к каой-то ОС. В принципе это может быть BIN, COM, EXE-MZ, EXE-PE или ELF. Это зависит от ваших предпочтений и возможностей компилятора.

Все остальные ответы на вопросы можно найти в библиотека системного программиста.
http://xammep2007.narod.ru/lib/bsp/index.html
Для ваших нужд подойдёт изучение 1-6 тома

То что ввод-вывод это 80% я оцениваю скромнее от 50% до 75%.
На самом деле сложно нет, начните с изучения FAT. Теория без практике деньги на ветер. Разбиваете задачу на маленькие задачи и решаете пишете для них программы. Как только вы это поймёте так трудности пропадут, правда запастись терпением придётся. А после, когда дело к защите пойдёт надо будет сделать обзор того что есть в других ФС и чего нет в FAT.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 26 фев 2012, 14:11 

Зарегистрирован: 25 фев 2012, 23:27
Сообщения: 8
Bargest писал(а):
Вообще си (и любой другой язык программирования) компилируется один раз в машинный код и потом уже юзается на железе.


Вот такое я и хочу сделать - как можно больше сделать на Си, скомпилировать и записать на дискету ...
Только вот с gcc совершенно не знаком ... работаю на VC++2010 EE

pavia писал(а):
Перефразирую PCU. Аааа, что делать? Куда бежать?
Пока по вашему описанию ваша ОС будет напоминать DOS.
Вопрос в том будет она защищённая или нет?


Благодарю за ссылки. Кстати, БСП сейчас второй том изучаю.

Нет, защищенной не будет - для начала хочу увидеть что заработает то, что я сделаю. Сейчас задача - сделать как можно проще, но чтоб работало. А если на диплом буду делать, то уже подумаю чтобы серьезнее сделать , чем сейчас.
Да, ДОС, поскольку именно на ее примере я строю понимание работы ОС.

pavia писал(а):
Остальное я не понял.
Про компилятор отвечу так, каждый разбирается со своим компилятором разбирается сам. Часть ответов можно найти на OSdev.org
Обычно требуется получить чистый бинарник, то есть без привязки к каой-то ОС. В принципе это может быть BIN, COM, EXE-MZ, EXE-PE или ELF. Это зависит от ваших предпочтений и возможностей компилятора.


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

Ну вот например, хочу я сделать чтобы когда моя операционка заработает было вот так:
1.Выводится приглашение "Введите действие с файлом" .
2.Я ввожу "OPEN".
3.Выводится "Введите требуемый файл".
4.Ввожу файл (имя).
5. ОС находит и открывает требуемый файл.

Так вот , напишу я это вот так на Си:
Код:
printf ("");
scanf("%s", id_instr);
printf("");
scanf("%s", id_file);

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


И что будет если я так напишу часть ядра? Переведет оно его в бинарник ... будет ли оно также работать как если я сейчас сделаю "приложение DOS" и запущу? или какая будет разница?

Написание ОС процесс творческий, потому то, что я сделаю может и не будет улаживаться в стандарты. Главное что оно будет делать ТО, под ЧТО оно заточено. И главное что я пойму как работает все это ... хоть и пока мисть на примитивном уровне.

Вобще вот мое видение на текущий момент:
1. Делаю ядро только для работы с файлом - открытие/редактирование/создание. По возможности хочу сделать на Си, но как писал выше не понимаю что можно, а что нельзя ....
2. Так и не понял нужно консоль делать или компилятор с Си сделает консоль из scanf и printf. Если нужно , то делаю консоль.
3. Реализовываю файловую систему... еще не придумал какую , но принципы вроде понимаю - несколько взаимосвязанных таблиц с нужной информацией.
4. Реализовываю интерфейсы: консоль(если отдельно будет. ввод и вывод происходит именно сюда)+ядро(обрабатывает команду введенную в консоли и результат на консоль)+файловая система(предоставляет ядру нужную информацию). Собираю это все и записываю на дискету.

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

А вобще хочу заметить - ох и не легкое это дело для начинающего ... а ведь с примитивщиной разбираюсь ... но интересно оно как!


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 26 фев 2012, 14:44 

Зарегистрирован: 31 окт 2011, 18:20
Сообщения: 230
Цитата:
может функциями какими-то нельзя пользоваться

Именно. Никакими нельзя. printf, scanf, fopen - всё это надо писать. Так что приведенный код работать не будет.
Скомпилироваться-то оно скомпилируется, но работать не будет, т.к. нет API функций, к которым обращаются printf и scanf, и нет той системы, для которой эти функции созданы. Если писать "под дос" - то printf и scanf будут использовать прерывания доса, которых в новосипеченной ОС, разумеется, не будет.
Если надо что-то действительно простое - то ИМХО надо начинать с вывода строки на экран через видеопамять по адресу 0B800h (или через прерывание биоса int 10h) и ввода с клавиатуры через чтение порта контроллера клавы (или через прерывание биоса int 16h для Real-Mode системы).


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 26 фев 2012, 15:16 

Зарегистрирован: 28 окт 2007, 18:33
Сообщения: 1418
PCU, похоже, Вы не очень понимаете, где проходит граница между прикладной программой и ОС. Проистекает эта беда что у Вас, что у многих других из-за того, что сейчас программированием занимаются исключительно на языках высокого уровня, где сам язык и его библиотека полностью скрывают взаимодействие прикладной программы с системой. Например, Вы вызываете библиотечные функции printf и scanf, которые реализованы в библиотеке используемого Вами компилятора языка Си. Вот если посмотреть на исходники этих функций из библиотеки, то выяснится, что в конце концов они вызовут уже системные функции -- что-нибудь вроде ReadFile и WriteFile. Заметьте, что системные функции могут сильно отличаться между различными ОС, однако printf и scanf снаружи (для использующего их программиста) остаются одними и теми же. Именно благодаря этому программу, написанную на языке высокого уровня, можно перенести на любую ОС: достаточно лишь переписать библиотеку компилятора, которая, собственно, и взаимодействует с системой.

В Вашем случае надо не только написать саму ОС, но написать ещё и свою библиотеку языка Си под используемый Вами компилятор. Его самого можно, естественно, использовать и дальше, просто придётся программы для Вашей системы писать в другой системе. Это, однако, совершенно нормальный процесс, обычно так и делают. Что же касается компилятора, то работайте и дальше с микрософтовским, раз с ним умеете: по качеству кода он намного лучше GCC, да плюс удобная среда разработки, ну а разбираться с библиотекой придётся по-любому независимо от того, какой именно компилятор используется.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 26 фев 2012, 16:33 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1126
Цитата:
Вот такое я и хочу сделать - как можно больше сделать на Си, скомпилировать и записать на дискету ...
Только вот с gcc совершенно не знаком ... работаю на VC++2010 EE

Зачем тебе дискетка? Они устарели и найти их не просто. Тем более вы говорили про эмулятор вам достаточно образа диска. Тем более и на флэшку потом записать сможете.
gcc и VC++ компилируют только 32 битный код, так что либо вам придется осваивать другой инструмент либо защищенный режим.
Под 16 бит компилируют: Borlant C++ 3.0 (BC++3.0), OpenWatcom, Microsoft QuickC (или Visual C++ 1.0), borland pascal 7.0(с 1 по 7 версию)
Под 32 бита компилируют: gcc, BC++5.0, OpenWatcom, VC++, Delphi 3 (с 3 по 7), FreePascal.


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

На C/С++ можно написать все или почти всё исключение только несколько системных команд которые вам могут понадобиться(int, out, in итд). Функциями можешь пользоваться только теме которые ты сам написал. То есть пока ты не сделаешь свой аналог prinf scanf ты ими пользоваться не сможешь. Выделение памяти в куче тоже самуму делать надо будет.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 26 фев 2012, 18:34 

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1088
Откуда: Балаково
Могу посоветовать только почитать книжку Эндрю Таненбаум "Операционные системы. Разработка и реализация"
http://allelectronics.3dn.ru/load/5-1-0-4
Если отсюда не получится взять, то поищи в интернете.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 26 фев 2012, 18:51 

Зарегистрирован: 25 фев 2012, 23:27
Сообщения: 8
Благодарю всех. Прояснилось в голове.

Пожалуй и вправду стОит просто вывести сообщение на экран ... а для этого чтоб сработала собственноручная printf.

Да, на диске буду делать, действительно.

Наверное скачаю Quick C , как-раз много есть в книгах Фроловых про него.

На счет Танненбаума , то у меня мнение что имеет смысл вначале своими руками что-то простенькое сделать, а потом начинать эту книгу юзать. Ну чтобы лучше понимать о чем там идет речь.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 27 ]  На страницу 1, 2, 3  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 32


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB