Извините за мой запутанный вопрос. Я ищу несколько указателей.
До сих пор я работал в основном с Java и Python на уровне приложений, и у меня есть только смутное представление об операционных системах и оборудовании. Я хочу понять гораздо больше о более низких уровнях вычислительной техники, но это становится действительно подавляющим. В университете я изучал микропрограммирование, то есть как процессоры запрограммированы для реализации кодов ASM. До сих пор я всегда думал, что не сделаю больше, если узнаю больше о «низком уровне».
У меня один вопрос: как вообще возможно, что оборудование почти полностью скрыто от разработчика? Точно ли сказать, что операционная система является программным уровнем для аппаратного обеспечения? Один небольшой пример: в программировании я никогда не сталкивался с необходимостью понять, что такое L2 или L3 Cache. Для типичной среды бизнес-приложений почти никогда не нужно понимать ассемблер и более низкие уровни вычислений, потому что в настоящее время существует технологический стек практически для всего. Я предполагаю, что весь смысл этих более низких уровней состоит в том, чтобы предоставить интерфейс более высоким уровням. С другой стороны, мне интересно, как сильно могут влиять нижние уровни, например, вся эта графическая вычислительная штука.
Итак, с другой стороны, существует теоретическая отрасль информатики, которая работает над абстрактными компьютерными моделями. Тем не менее, я также редко сталкивался с ситуациями, когда мне было полезно размышлять о категориях моделей сложности, проверке доказательств и т. Д. Я вроде знаю, что существует класс сложности, называемый NP, и что их практически невозможно решить за большое количество N. То, что я пропускаю, является ссылкой для структуры, чтобы думать об этих вещах. Мне кажется, что есть разные виды лагерей, которые редко общаются.
Последние несколько недель я читал о проблемах безопасности. Здесь, так или иначе, большая часть различных слоев объединяется. Атаки и эксплойты почти всегда происходят на более низком уровне, поэтому в этом случае необходимо изучить детали уровней OSI, внутреннюю работу ОС и т. Д.