Подтвердить что ты не робот

Для ядра/ОС есть C еще это?

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

4b9b3361

Ответ 1

Я думаю, что можно с уверенностью сказать, что низкоуровневые части операционных систем (например, ядро) будут по-прежнему записываться на C из-за его скорости. Как уже упоминалось в другом месте, вам нужно знать ассемблер для определенных частей ядра (что-то должно загружать ядро ​​в память). Но вы можете работать с ядром с небольшим или отсутствием знаний об уровне сборки. Хорошим примером может служить реализация файловой системы.

Не беспокойтесь о том, на каком языке реализована операционная система. Важным является то, как используются операционные системы и что можно сделать для их улучшения. Хорошим примером является то, что Unix впервые вышел. Файловая система имела inodes на передней панели диска и данные в оставшемся пространстве. Это не очень хорошо, поскольку вы искали разные части диска для всех файлов. Затем была создана Berkeley Fast File System, чтобы создать файловую систему на диске. Это означает наличие inodes вблизи их соответствующих данных. Я оставляю много деталей, но, надеюсь, это иллюстрирует, что более важно подумать о том, как можно улучшить операционную систему, а не на каком языке она будет запрограммирована.

Некоторые последние тенденции в операционных системах - это виртуализация и распределенные вычисления (см. документ Google на MapReduce). Файловые системы, безопасность, планирование (особенно с многоядерными процессорами) и т.д. Постоянно представляют интерес, хотя эти проблемы не новы.

Вот некоторые ресурсы, если вы хотите узнать больше о развитии ядра:

  • Linux Kernel Newbies - ресурс для тех, кто хочет начать работу над модификацией ядра Linux.
  • источник xv6 - порт x86 версии Unix 6. Используется MIT для обучения классу операционных систем. Простой и простой в расширении (подробнее).
  • Карта ядра Linux - цепочка вызовов системных вызовов в Linux. Полезно в визуализации того, что делает системный вызов.

Итог: начните знакомство с ядром и прочитайте статьи о том, что пишут исследователи (USENIX для этого полезно). Это знание гораздо более ценно, чем изучение нового языка, поскольку большинство понятий с одного языка легко переносятся на другой, если произойдет сдвиг в написании операционных систем. Надеюсь, это поможет!

Ответ 2

Среди толпы исследователей есть большой интерес к использованию языковых технологий, гарантирующих, что ядро ​​не может плохо себя вести. Многие люди упомянули проект Singularity, который в настоящее время имеет (заслуженно) высокий профиль. Почему особенность интересна?

  • Язык включает в себя модель конечного состояния для правильного использования замков. Компилятор может моделировать проверку кода против модели, чтобы убедиться, что тупик не выполняется.

  • Сторонним драйверам предоставляется ограниченный интерфейс к системе. Проверка, выполненная компилятором, гарантирует, что плохой драйвер не может вынуть систему. Самое худшее, что он может сделать, это выбить собственное устройство.

  • Singularity использует технологию компилятора, а не технологию OS/MMU, чтобы изолировать один "процесс" от другого. Внезапно разворачивая новый "процесс" (действительно новый вид домена защиты), это дешевая цена, и эта дешевизна позволяет создавать новые проекты.

Сингулярность - это только последний из длинного списка проектов, которые использовали технологию языка и компилятора для решения проблем ОС. Одним из моих фаворитов был Вашингтонский университет SPIN kernel, который позволил приложениям безопасно расширять ядро ​​и был написан в Modula-3.

Эта область исследований по-прежнему широко открыта, и пока еще не известно, какой набор функций языка или компилятора является "сладким пятном" для решения проблем ОС. Поэтому, чтобы ответить на ваш вопрос:

  • В современных производственных системах C все еще "это".

  • Для операционных систем будущего C почти наверняка не "это", мы знаем, что можно сделать намного лучше, но точная природа нового "этого" по-прежнему широко распространена, открытый вопрос.

Ответ 3

Коди не хотел беспокоиться об этом, поэтому я передаю это от его имени.: -P Для некоторых примеров ОС, написанных на управляемых языках, в отличие от C или сборки, смотрите:

Конечно, Коди также не хотел упоминать об этом:

Ответ 4

C в значительной степени это, с достаточным количеством ассемблера. Важные темы для работы ядра ОС:

  • Принципы кэширования и управления кешем
  • Виртуальная память, управление TLB
  • ЦП и архитектура системы
  • Иерархии хранения
  • Параллельные методы программирования (взаимное исключение, блокировка,...)
  • Алгоритмы и структуры данных

Ответ 5

Фактически, в ядре современной ОС для кода на С++ довольно много места. Я просто посмотрел, и в ядре ядра ядра Win7 имеется довольно много кода на С++. Обратите внимание, что многие подсистемы остаются в простом C. Есть несколько причин для этого

  • C - это исходный язык ОС на базе NT
  • C очень, очень хорошо понимается ключевыми людьми.
  • Хорошо написанный C может быть самым прямым кодом для отладки - особенно в режиме ядра.

Таким образом, многие команды и люди нашли хорошо написанный С++ эффективным инструментом для работы с ОС.

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

Как указывали другие, любая работа с ядром всегда потребует некоторого бита языка ассемблера.

Ответ 6

Microsoft находится в процессе перезаписи некоторых из Windows в .NET, однако я сомневаюсь, что большая часть ядра будет затронута.

Однако есть проекты вроде Cosmos (http://www.gocosmos.org/index.en.aspx), которые дают нам надежду.

Ответ 7

Нет, это не "это". Ядра, как правило, написаны на C с небольшим количеством ассемблера, который посыпается. Но ОС написана на всех языках. Но даже там С++ можно использовать без особых проблем. Так может много других языков. Linux написан фанатиками C, которые боятся и ненавидят все остальное, что является их проблемой. Windows написана в большом сочетании C и С++ и, вероятно, с некоторыми битами старого кода Pascal. И в эти дни также растут куски .NET. OS X использует Objective-C для большей части кода ОС.

Те же рекомендации применяются, как и во всех других областях программирования:

  • Знай свои вещи
  • Не ограничивайте себя одним True Language.

Ядро - единственная область, где применяются несколько "специальных" правил. Но ядро ​​крошечное. Подавляющее большинство ОС может быть написано на любом языке.

Вам обязательно нужно знать C, да, но просто знать, что C нигде не достаточно.

Ответ 8

Возможно, вы захотите посмотреть проект Singularity от Microsoft (также на Wikipedia):

Singularity - экспериментальная операционная система, созданная Microsoft Research с 2003 года. Она предназначена как высоконадежная ОС, в которой все ядра, драйверы устройств и приложения написаны в управляемом коде.

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

Ответ 9

Я думаю, что это довольно безопасная ставка, что серьезная (не экспериментальная) разработка ОС останется в C (и сборке) в обозримом будущем.

Доказательство, которое я представляю, - это Ада. Он может восприниматься как "чистый металл" как C, обеспечивает лучший контроль над размещением данных и имеет более безопасное поведение по умолчанию для почти всего (например: проверка границ массива). С точки зрения разработчика ОС он либо равен, либо превосходит C по любому техническому параметру, который вы можете придумать. Он доступен уже более 20 лет (хорошо... по разумным ценам, возможно, только 15).

Итак, если люди искали технически превосходный язык для C, вы должны видеть OSes по всему месту, написанному в Ada, а не так? То, что я на самом деле вижу, - это одна серьезная ОС, реализованная в Ada. Он больше не поддерживается в пользу повторной реализации в C.

Барьеры на других языках в разработке ОС не являются и никогда не были техническими. Я не вижу, чтобы C нетехнические выгоды уходили в ближайшее время, и никто не собирается их преодолевать, просто создавая лучший язык.

Ответ 10

Определенно! Вы также должны изучить, по крайней мере, одну ассемблерную/аппаратную архитектуру.

Ответ 11

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

  • язык C и
  • Сборка

AFAIK, некоторые части загрузочного загрузчика будут записаны в сборке, а затем и C. Существует множество доступных для понимания операционных систем с открытым исходным кодом, таких как, например, последние TOPPERS. Попытайтесь изучить его.

Я думаю, что в качестве разработчика OS-ядра вы будете больше беспокоиться о способах эффективного доступа к базовому оборудованию (например, процессору и памяти), а не выбору язык. Бьюсь об заклад, большую часть времени мы будем соблазняться использовать сборку

Ответ 12

Вы обязательно должны свободно говорить на C.

Как указывали другие, нет никакой причины, что операционная система должна быть написана на C, и многое можно получить, используя более сложные языки. Но если вы собираетесь работать в операционных системах в реальном мире (т.е. Не в академических кругах или в исследовательской лаборатории), есть несколько реалий, с которыми вам нужно жить:

  • Существующие операционные системы огромны, часто много миллионов строк кода и записаны в C или C-производных, таких как Objective-C или С++.
  • Новые операционные системы занимают сотни инженерных лет (и многие календарные годы) для достижения и сопоставления функциональности и надежности существующих операционных систем.

В результате мне трудно понять, как и когда мир уйдет от ядер операционной системы на основе C. Да, это технически возможно. Но стоимость может быть слишком высокой. Во всяком случае, эта тенденция, похоже, связана с консолидацией небольшого числа семейств ОС - Windows, Linux и BSD - все на основе C.

Было бы интересно узнать, какие исследования были сделаны или какие инструменты и методы могут быть доступны для развития существующей базы кода (например, Linux) на лучший язык. Я думаю, что это будет гораздо более жизнеспособным подходом, чем заставить мир принять совершенно новую ОС.

Ответ 13

Я провел обширное программирование как в Windows NT, так и в Linux. И я могу заверить вас, что до тех пор, пока эти 2 ОС около C будут использоваться в ядре. Я думаю, что это множество причин, но самый простой ответ - время. Как и предыдущие плакаты, количество времени, которое потребуется для перезаписи ядра на другом языке, не стоит. И это не просто портирование кода. Ядро потребует серьезных изменений конструкции. Лично я считаю, что C - самый подходящий язык для ядра. Возможность управлять открытой памятью и динамически распределять и освобождать свою собственную память имеет решающее значение, когда вы работаете в ядре. Особенно, если вы работаете с постраничной памятью. Размер стека, который вы выделяете в режиме ядра, также обычно меньше пользовательского режима, поэтому эффективность памяти имеет решающее значение. C также позволяет программистам создавать красивые структуры данных, которые не содержат всех раздутых служебных данных, которыми владеют управляемые языки. По-моему, структура также может использоваться так же эффективно, как и объект, но опять же без всех раздутых накладных расходов. Управляемые языки также должны "управляться". В Ядре у вас нет ничего, что бы очистить ваши беспорядки. Не поймите меня неправильно, я люблю С#, и я думаю, что .NET framework красив, но если вы находитесь в ядре C, это будет и будет продолжаться.

Ответ 14

С++ поддерживается для разработки режима ядра в Windows, но вы не можете легко использовать исключения и RTTI. Я считаю, что нет оснований писать код в C сегодня, так как накладные расходы С++ незначительны (любая инфраструктура трассировки/отладки будет намного дороже, чем дополнительная развязка для вызова виртуальных функций). На самом деле большая часть Windows DDK реализует объектно-ориентированные шаблоны с C, что просто неудобно по сравнению с С++.

Если вы решите использовать С++ для разработки режима ядра, вам необходимо переопределить новый оператор, чтобы выбрать, следует ли выделять класс в доступной для страниц или не подлежащей записи памяти. Некоторые приятные макросы могут пригодиться там.

Ответ 15

ну, в сообществе osdev C обычно называется языком высокого уровня. И тем более "низкоуровневый" язык будет сборкой (вы вынуждены использовать ASM в начале вашего ядра, поэтому вам нужно использовать ASM, но вам не нужно использовать C).

Ответ 16

Я указываю язык программирования Oberon и операционная система Oberon от автора языка Паскаля, Niklaus Wirth. В проекте Niklaus Wirth также есть сайт fan.

Если я правильно понимаю Андрей Николаевич Терехов, у Ada есть преимущество в том, что проверки доступа к памяти могут быть перенесены с процессорного оборудования на уровень компилятора, что уменьшает количество логических вентилей в CPU, что, в свою очередь, выгодно с точки зрения энергопотребления. Чем меньше логических решений требует процессор, тем больше ядер может быть создано из того же количества логических вентилей. С этой точки зрения процессоры, которые специально адаптированы к языку, где компилятор заменяет части оборудования, имеют фундаментальное преимущество с точки зрения количества операций на ватт.

Ответ 17

Слишком часто вы можете услышать некоторые сообщения: C-язык - это синоним скорости и Ada, а не. Это неправда. Ada добавляет некоторые проверки, которые замедляют выполнение. Это правда, но для цели отладки или безопасности. Поэтому они могут быть удалены по конфигурации во время компиляции. Таким образом, вы можете генерировать программы ADa без накладных расходов. С другой стороны, обратите внимание, что компилятор gnu переводит Ada и C в один и тот же промежуточный код. В результате вы получаете тот же исполняемый код в конце. Я читал здесь, что Ada не может использоваться для разработки драйверов. Это ложь. Ada имеет ту же способность, что и язык C. Более того, это позволяет избежать многих ошибок. Вы можете видеть, что существует операционная система реального времени MarteOS, полностью написанная в Ada.

Основной смысл, почему Ada не используется для программирования ядра ОС, заключается в том, что язык C - это язык, используемый для Unix. Это стандарт POSIX, который системный вызов API выражается с помощью прототипов C. Все фрагменты ОС уже написаны на C. И, язык C представляет собой 17% программного обеспечения, разработанных в мире.

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