Какой C++ я должен был бы учиться делать своим собственным ядром ОС? [закрытый]

Ваш код довольно , он не изменяет .

Как правило, не используйте NS... классы в Swift, если есть собственный эквивалент, и словарь JSON всегда является типом значения ([String:Any]).

Я рекомендую добавить перечисление Error, сделать так, чтобы функция могла выдать , декодировать сериализованный токен с помощью Decodable и вернуть экземпляр Token в случае успеха

[110 ]

Рекомендуется сохранить метку параметра в объявлении метода

enum TokenError : Error {
    case invalidJWTFormat, invalidBase64EncodedData
}

func decode(token: String) throws -> Token {
    let components = token.components(separatedBy: ".")
    guard components.count == 3 else { throw TokenError.invalidJWTFormat }
    var decodedString = components[1]
        .replacingOccurrences(of: "-", with: "+")
        .replacingOccurrences(of: "_", with: "/")

    while decodedString.utf16.count % 4 != 0 { 
        decodedString += "=" 
    }
    guard let decodedData = Data(base64Encoded: decodedString) else { throw TokenError.invalidBase64EncodedData }
    return try JSONDecoder().decode(Token.self, from: decodedData)
}

и вызывать его

do {
   let userID = try decode(token: "eyJ0eXAi.....").data.user.id
} catch { print(error) }
9
задан Erick Robertson 4 January 2012 в 13:15
поделиться

14 ответов

8
ответ дан 4 December 2019 в 06:14
поделиться

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

0
ответ дан 4 December 2019 в 06:14
поделиться

Единственная ОС любого значительного размера, о котором я знаю, это было запрограммировано в C++ вниз к "чистому металлу", операционная система AS/400 ОС/400 (после v3r6).

Нет ничего особенного, что препятствует тому, чтобы Вы делали любую ОС в C++ - особенно, когда Вы вспоминаете, что ванилью C является "почти" допустимый C++ так или иначе. То, что становится интересным, делает new/delete на самых низких уровнях, потому что Вы не должны гарантировать утечки и такой. Это приводит к потребности повторно реализовать new функции.

Я помог сделать v3r6, но это были приблизительно 13 лет, и я не помню волосатые детали. Я не знаю ни о каких публикациях по нему, но если Вам действительно интересно, попытайтесь писать Marshall Cline по http://www.parashift.com.

(Augh. "удалите" "бесплатный" недостаток.)

0
ответ дан 4 December 2019 в 06:14
поделиться

Я не рекомендовал бы использовать C++ при создании монолитного ядра, период. Однако при рассмотрении дизайна микроядра Вы могли бы записать серверы (сети, консоль, фс, vfs, и т.д.) в C++, в то время как хранение самого ядра, трудного с C/, встраивает asm.

С другой стороны, если Ваше просто движение для x86, это не имеет значения так же.

Каковы цели дизайна Вашей ОС?

0
ответ дан 4 December 2019 в 06:14
поделиться

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

Удачи!

0
ответ дан 4 December 2019 в 06:14
поделиться

Newos является хорошим ядром C++. Так eCos и L4. Newos является микроядром бывшим разработчиком BeOS. L4 является также микроядром, известным его невероятно быстрой передачей сообщений. И eCos является монолитным ядром.

1
ответ дан 4 December 2019 в 06:14
поделиться

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

1
ответ дан 4 December 2019 в 06:14
поделиться

Существует только один вид, который должен помочь сузить его. Запустите путем изучения руководств архитектуры ЦП, Intel доступны бесплатно. Получение документации для BIOS будет твердой частью.

5
ответ дан 4 December 2019 в 06:14
поделиться

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

Хорошие ресурсы:

2
ответ дан 4 December 2019 в 06:14
поделиться

Я рекомендую посмотреть на Wiki OSDev. Это - фантастический источник информации относительно программирования ОС на многих языках, включая C++.

А именно, посмотрите этот раздел, который говорит Вам примерно все необходимое для начинаний с ядром C++ с помощью gcc.

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

6
ответ дан 4 December 2019 в 06:14
поделиться

проверьте nanoos, проект ОС в C++!

В ответе на Ваш вопрос:

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

Затем это должно пойти вне взаимодействия с аппаратными средствами и обеспечения использования пользователю.

Для этого возвратитесь еще раз и посмотрите то, что предпринимается в nanoos как начальная точка (для потребностей изучения C++ того, что создание ОС в C++ повлекло бы за собой),

Функции нашли в nanoos:

  • Время выполнения C++

  • 32-разрядный Диспетчер памяти защищенного режима

  • Обнаружение ЦП, обнаружение Памяти и обнаружение жесткого диска с интерфейсом IDE

  • Чтение жесткого диска с интерфейсом IDE

В основном, для записи Операционной системы просто проверьте то, что должна сделать ОС (или что это),

Если бы я должен был записать ОС, прежде даже рассмотреть язык, то я попытался бы понять, какова ОС, это - замечательная книга: Разработка и реализация Операционных систем.

alt text

Имейте чтение.Удачи

5
ответ дан 4 December 2019 в 06:14
поделиться

У меня есть друг, который записал ядро ОС в C++:

http://sourceforge.net/projects/ekp/

Таким образом, это определенно возможно. (В некоторых комментариях выше говорится, что это невозможно. Неправильно.)

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

7
ответ дан 4 December 2019 в 06:14
поделиться

Учитывая Ваш выбор сегодня нет абсолютно никакой причины "сделать" ОС. Выучите язык действительно хорошо и станьте действительно довольными Windows или изменением Linux. C или C++ является большим учиться.

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

6
ответ дан 4 December 2019 в 06:14
поделиться

Для многих технических причин Linux не программируется ни на каком языке помимо C. По различным политическим причинам немногими другими os'es является запрограммированный C++.

Если Вы хотите узнать о программировании ядер, операционная система Minix / микроядро явно разработана для изучения дизайна операционной системы. Это является маленьким и минимальным. Это также программируется в C.

1
ответ дан 4 December 2019 в 06:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: