ОС на C
Заранее благодарю
как это можно осуществить
Как написать ОС?? ;D
Какой компилятор больше нравится - такой и используй. Я рекомендую gcc.
Все знают что LInux написан на Сях, как это можно осуществить, какой компилятор юзать???
Заранее благодарю
ты хочешь написать Линукс? :D
Написать свою операционку?!?
Задавая такие вопросы? - Ха - ха...
Все знают что LInux написан на Сях, как это можно осуществить, какой компилятор юзать???
Заранее благодарю
Клёво. Если ты нашёл уже нужный компилер то считай что пол дела сделано :D
Все знают что LInux написан на Сях, как это можно осуществить, какой компилятор юзать???
Заранее благодарю
Если хочешь написать ось на С - ях от начала и до конца, сначала напиши свой компилятор =). Если хочешь всетаки воспользоваться уже готовым компиллером, то тебе надо найти такой, с которым поставляются исходники start-up кода. Правишь исходники, выкидываешь от туда все, что связано с вызовом функций DOS, компилишь их, и пишешь ось.
И не забудь поиграться с опциями компиллера (не подключать стандартные библиотеки)
Исходники есть по крайней мере в Borland C++ 3.1, и в Watcom (OpenWatcom) C/C++. На счет других компиллеров не проверял.
ЗЫ: Только первичный загрузчик тебе все равно придется писать на Ассемблере...
Если хочешь написать ось на С - ях от начала и до конца, сначала напиши свой компилятор =).
А перед этим собери свой компьютер, но для этого создай пару миллиардов транзисторов, что не обойдется без знания химии... :D :D
Если хочешь всетаки воспользоваться уже готовым компиллером, то тебе надо найти такой, с которым поставляются исходники start-up кода.
Или просто посмотри опции любого линкера на предмет определения стартовой точки, например, для VC++ это /ENTRY
А перед этим собери свой компьютер, но для этого создай пару миллиардов транзисторов, что не обойдется без знания химии... :D :D
=)))
Для начало надо найти кремниевое месторождение, и развернуть там рудник.
Или просто посмотри опции любого линкера на предмет определения стартовой точки, например, для VC++ это /ENTRY
Даже если найти эти опции, start-up код все равно попытается вызвать пару-тройку системных функций.
ЗЫ: VC++ компилит под windows.
Даже если найти эти опции, start-up код все равно попытается вызвать пару-тройку системных функций.
Кто тебе это сказал?
Ну отключи start-up теми же опциями.
ЗЫ: VC++ компилит под windows.
А это кто тебе сказал?
И что значит "компилит под windows" ?
- Почему люди не летают?
- По воздуху!
А компилировать "под ДОС" или "под Виндовс" это глупость. Можна только компилировать в машинный код.
Кто тебе это сказал?
Ну отключи start-up теми же опциями.
Я не имел в виду конкретно vcpp. Может там
и есть такая опция, в Watcom - e например такой
опции нет.
И что значит "компилит под windows" ?
Ну, если писать на vcpp 32-битный модуль для OC,
тагда да. А если надо будет написать модуль под
какую нибудь экзотическую модель памяти, то будет облом. Хотя может в vcpp и на этот случай предусмотрены какие-нить опции?
"компилит под windows" - создает код,
заточенный под windows, под модель памяти
windows, в том же старт-апе вызывает системные
функции windows.
-------------------------------------
Про JIT, помоему фантастика. Есть ссылка?
Насколько мне известно(после прочтения всяких книжек) Вижуал С вообще компилирует не в машинный код а в промежуточный язык. А потом этот код уже выполняется специальными JIT-трансляторами.(если я ничего не напутал....)
Неверно. Компиляторы С (во всяком случае большинство ныне существующих) создают объектные файлы, обычно COFF-формата.
Я не имел в виду конкретно vcpp. Может там
и есть такая опция, в Watcom - e например такой
опции нет.
Да ну?
А как же опции NODEFAULTLIBS и START ?
Special object module records that specify default libraries are placed in object files generated
by Watcom compilers.
The format of the "START" option is as follows.
OPTION START=symbol_name
where description:
symbol_name specifies the name of the procedure where execution begins.
For the Netware 386 executable format, the default name of the start procedure is "_Prelude".
"компилит под windows" - создает код,
заточенный под windows, под модель памяти
windows, в том же старт-апе вызывает системные
функции windows.
Компилятор создает код "заточенный" под определенный процессор, а не ОС.
Остальное - дело дефолтных библиотек, подключаемых линкером.
Неверно. Компиляторы С (во всяком случае большинство ныне существующих) создают объектные файлы, обычно COFF-формата.
Хм... У меня в руках книга "Visual C++ .NET Библия пользователя" - Том Арчер. Стр 1112:
"Возможно кого-то удивит тот факт, что в результате компиляции приложений .NET на платформе Windows получается не стандартный исполняемый файл в формате переносимых исполняемых файлов(PE - Portable Executable format files), а некоторый код, внешне напоминающий ассемблер. Это исходный код для промежуточного языка от Microsoft (IL или MSIL - Microsoft Intermediate Language)..."
И еще на той же странице:
" Как можно заметить на рис.41.2, процесс между компиляцией исходного кода и моментом, когда среда выполнения .NET распознает его и корректно отработает, состоит из нескольких этапов. Ниже представлено краткое описание этих этапов:
1. При помощи одного из языков програмирования среды .NET (Visual C++,C#,Visual Basic и т. д.) создается исходный код.
2. Исходный код компилируется при помощи соответствующего компилятора .NET.
3. Компилятор .NET формирует код MSIL и декларацию(manifest), размещая их в предназначеной только для чтения части файла *.exe. Этот файл имеет стандартный заголовок исполняемых файлов, поэтому Windows опознает его как приложение и загрузит.
4. Пока не произошло ничего необычного, однако следует отметить один важный момент: когда компилятор формирует код MSIL, он импортирует также из соответствующей библиотеки DLL среды выполнения .NET(mscoree.dll)функцию по имени _CorExeMain.
5. При выполнении приложений операционная система загружает исполняемый файл PE, а также все связанные с ним библиотеки DLL. Сюда входит и библиотека mscoree.dll, которая експортирует функцию _CorExeMain.
6. Затем система загрузки приложений Windows переходит к точке входа внутри исполняемого файла, созданого компилятором .NET. Это - стандартный подход приложений Windows. Однако, поскольку операционная система Windows не в состоянии выполнить код MSIL, эта точка входа является всего лишь командой перехода на функцию _CorExeMain.
7. Функция _CorExeMain начинает выполнять код MSIL, размещенный в исполняемом файле. Однако, в связи с тем, что код MSIL нельзя выполнить непосредственно(поскольку это неисполняемый код), среда выполнения компилирует его при помощи оперативного (just-in-time) компилятора (также известен под названием JITter, или JIT-компилятор) в команды процессора. Как упоминалось ранее, оперативная компиляция выполняется только при первом вызове методов программы. Откомпилированый исполняемый код сохраняется в памяти вашего компьютера и подвергается перекомпиляции только в том случае, если в исходный код внесены какие-то изменения."
Фу-у-у... Задолбался по клаве стучать...
Хм... У меня в руках книга "Visual C++ .NET Библия пользователя" - Том Арчер. Стр 1112:
"Возможно кого-то удивит тот факт, что в результате компиляции приложений .NET на платформе Windows получается не стандартный исполняемый файл в формате переносимых исполняемых файлов(PE - Portable Executable format files), а некоторый код, внешне напоминающий ассемблер. Это исходный код для промежуточного языка от Microsoft (IL или MSIL - Microsoft Intermediate Language)..."
И еще на той же странице:
" Как можно заметить на рис.41.2, процесс между компиляцией исходного кода и моментом, когда среда выполнения .NET распознает его и корректно отработает, состоит из нескольких этапов. Ниже представлено краткое описание этих этапов:
1. При помощи одного из языков програмирования среды .NET (Visual C++,C#,Visual Basic и т. д.) создается исходный код.
2. Исходный код компилируется при помощи соответствующего компилятора .NET.
3. Компилятор .NET формирует код MSIL и декларацию(manifest), размещая их в предназначеной только для чтения части файла *.exe. Этот файл имеет стандартный заголовок исполняемых файлов, поэтому Windows опознает его как приложение и загрузит.
4. Пока не произошло ничего необычного, однако следует отметить один важный момент: когда компилятор формирует код MSIL, он импортирует также из соответствующей библиотеки DLL среды выполнения .NET(mscoree.dll)функцию по имени _CorExeMain.
5. При выполнении приложений операционная система загружает исполняемый файл PE, а также все связанные с ним библиотеки DLL. Сюда входит и библиотека mscoree.dll, которая експортирует функцию _CorExeMain.
6. Затем система загрузки приложений Windows переходит к точке входа внутри исполняемого файла, созданого компилятором .NET. Это - стандартный подход приложений Windows. Однако, поскольку операционная система Windows не в состоянии выполнить код MSIL, эта точка входа является всего лишь командой перехода на функцию _CorExeMain.
7. Функция _CorExeMain начинает выполнять код MSIL, размещенный в исполняемом файле. Однако, в связи с тем, что код MSIL нельзя выполнить непосредственно(поскольку это неисполняемый код), среда выполнения компилирует его при помощи оперативного (just-in-time) компилятора (также известен под названием JITter, или JIT-компилятор) в команды процессора. Как упоминалось ранее, оперативная компиляция выполняется только при первом вызове методов программы. Откомпилированый исполняемый код сохраняется в памяти вашего компьютера и подвергается перекомпиляции только в том случае, если в исходный код внесены какие-то изменения."
Фу-у-у... Задолбался по клаве стучать...
Ключевое слово ".NET" :)
C/С++ не имеет к .NET никакого отношения.
Да ну?
А как же опции NODEFAULTLIBS и START ?
- Опаньки! И в правду, есть =)) А я то и не знал.
Ну, буду теперь знать.
Компилятор создает код "заточенный" под определенный процессор, а не ОС.
Остальное - дело дефолтных библиотек, подключаемых линкером.
- А как же модели памяти? VC++ можно настроить на компиляцию под любую модель памяти?
- А как же модели памяти? VC++ можно настроить на компиляцию под любую модель памяти?
Что именно ты подразумеваешь под "моделью памяти"?
Tiny, small, medium, compact, large, huge, flat имеют отношение к компилятору и процессору, а не к ОС.
Что же касается разбивки адресного пространства на разделы, файл подкачки и т.п. архитектурные особенности ОС, то компилятору до этого нет дела, это ведение соотв. библиотек.
Ключевое слово ".NET" :)
C/С++ не имеет к .NET никакого отношения.
Седьмой имеет самое прямое отношение.
ЗЫ. На шестом я почти никогда и не програмил...
2Zenhipster
Код получается практически одинаковый под любую модель памяти. Он может отличаться, только для 32-разрядной и 16-разрядной модели памяти, но различия там очень маленькие и интуитивно понятные к тому же они присутствуют из сображений совместимости с более ранними верссиями процов.
Седьмой имеет самое прямое отношение.
ЗЫ. На шестом я почти никогда и не програмил...
Не путай компилятор и IDE.
Компилятор языка С++ не имеет никакого отношения к .NET даже в седьмой версии студии.
Седьмой имеет самое прямое отношение.
ЗЫ. На шестом я почти никогда и не програмил...
2Zenhipster
Код получается практически одинаковый под любую модель памяти. Он может отличаться, только для 32-разрядной и 16-разрядной модели памяти, но различия там очень маленькие и интуитивно понятные к тому же они присутствуют из сображений совместимости с более ранними верссиями процов.
Ага, только в одном случае адреса 16-битные, в другом 32-битные, в третьем линейная адресация с лимитом сегментов 4Гб, в четвертом для доступа к памяти используется селектор:смещение.
А еще страничная адресация.
Ага, только в одном случае адреса 16-битные, в другом 32-битные, в третьем линейная адресация с лимитом сегментов 4Гб, в четвертом для доступа к памяти используется селектор:смещение.
А еще страничная адресация.
Но к ОС это не иммет отношения.
Засилие дот нета и так называемого веб программинга. Мало кто уже и в моделях памяти и генерации кода шарит.:{
Ага, только в одном случае адреса 16-битные, в другом 32-битные, в третьем линейная адресация с лимитом сегментов 4Гб, в четвертом для доступа к памяти используется селектор:смещение.
А еще страничная адресация.
Да, но вот только это все ложится на плечи програмиста, а не компилятора.... А если таких разлчий нет, то и компилятор выдает один и тот же код под Windows, Linux и другие ОСи...