Ответы пользователя по тегу Системное программирование
  • Какие книги прочитать чтобы написать свою операционную систему?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    Ну для начала следует разобраться в загрузчике.
    Ставишь виртуалку и делаешь образ, который может загрузиться, что-то вывести на экран и выполнить какую-то манипуляцию (попробуй реализовать текстовое или графическое меню).

    Для этого почитай как работает современный bios и как устроены стандартные разделы дисков, чтобы сделать свой загрузчик и разместить его в первом кластере/блоке.
    Сейчас актуально и MBR и GPT.
    А вот BIOS уже потихоньку заменяется на UEFI.
    https://habr.com/ru/articles/327572/

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

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    software engineer
    Это зависит от ОС и зависит от типа программы.
    Программы могут быть разные, исполняемые файлы могут быть разного типа.

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

    Для виндовс, почитай про PE формат - это основной формат исполняемых (.com был в ДОС, там было очень просто но он уже не используется)
    https://en.wikipedia.org/wiki/Portable_Executable

    Вот еще хорошая статья
    https://medium.com/@db2crush/process-of-loading-pr...
    Ответ написан
    Комментировать
  • Как оценить потерю дискового пространства вследствие кластерного выделения?

    saboteur_kiev
    @saboteur_kiev Куратор тега C++
    software engineer
    Код на С++ для этого писать специально никто не будет.
    Подозреваю, что просто дали задания в школе/институте.
    Ну так почитай спецификацию FAT16 системы. Она просто устроена.
    Процент всегда будет зависеть от количества файлов, их размера и размера кластера. Просто берешь и считаешь руками. Как смог посчитать руками/в экселе - садишься и пишешь код на С++
    Ответ написан
    Комментировать
  • Как выяснить, какому из файлов выделен данный кластер, и вывести имя этого файла?

    saboteur_kiev
    @saboteur_kiev Куратор тега Windows
    software engineer
    Да вобщем-то у кластера нигде не написано какому файлу/директории он принадлежит.

    Читайте спецификацию файловой системы.
    В directory entry можно найти только первый кластер файла/директории
    в таблице FAT можно найти последовательность кластеров.

    Следовательно вам нужно:
    1) пробежаться по всей FAT, найти цепочку кластеров, которой принадлежит ваш кластер (он может быть также и единственным в цепочке, или вообще быть свободным)
    2) Пробежаться по всему дереву каталогов и найти какой файл/директория начинается с первого кластера в найденной вами цепочке.

    Работы много
    Ответ написан
  • Как внедрить в ядро ОС на Си C++?

    saboteur_kiev
    @saboteur_kiev Куратор тега C++
    software engineer
    C++ это язык программирования. Его поддержки ни в каком ядре нет.

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

    А С++ поддерживается в первую очередь компилятором, который к ядру никакого отношения не имеет.

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

    Итого, прежде чем "подключать С++ к ядру", следует уточнить как работает архитектура ОС и задать правильный вопрос
    Ответ написан
    7 комментариев
  • Различия между Embedded и системным программированием, разработкой ОС?

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    software engineer
    ebmedded разработка имеется ввиду разработка чего-либо на различные электронные устройства. Обычно связана с разработкой в условиях ограниченных ресурсов, либо с нестандартными устройствами.

    Системное программрование - разработка ОС, системных программ и драйверов.
    ОС - это большой конгломерат программ. Можно разрабатывать powershell, можно ядро, можно BSOD отладчик, а можно проводник, calc.exe или сапер. Все это входит в ОС
    Ответ написан
    5 комментариев
  • Какие есть сферы в системном программировании?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    Относится.
    Но вот зачем такие вещи спрашивать?

    Если вы настолько не разбираетесь в ИТ, что не понимаете сферы, то какой смысл этим интересоваться?
    Если интересуетесь, то просто изучайте что-нибудь, в процессе все это узнаете.

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

    saboteur_kiev
    @saboteur_kiev Куратор тега Программирование
    software engineer
    Направления разные, но не слишком далекое.
    Системное программирование обычно относится к разработке операционной системы и всего вокруг нее.
    В микроконтроллерах тоже могут быть свои "операционные системы" - прошивки.

    Но обе области слишком велики, чтобы быть одним целым. Торвальдс вон всю жизнь считай кусочек одной операционки разрабатывает.
    Ответ написан
    2 комментария
  • Что нужно для Системного Программирования?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    Полезно, но не обязательно.
    Системное программирование, как ни странно обслуживает системы. В основном операционные.

    Если взять любую операционную систему, в ней огромное количество кода и отдельных компонентов, начиная от ядра, драйверов устройств, виртуальных драйверов (например драйвер файловой системы), так и программ типа ping, netstat, и даже notepad.exe

    p.s. Слишком много теоретических вопросов, слишком мало нет практических. Начинайте уже не читать а писать код.
    Ответ написан
    Комментировать
  • Какие ресурсы изучать для системного программирования?

    saboteur_kiev
    @saboteur_kiev Куратор тега IT-образование
    software engineer
    системное программирование под какую платформу?
    Читай все по архитектуре ОС, для начала хотя бы системные вызовы.

    Если под вин - читай MSDN
    Ответ написан
    Комментировать
  • Как правильно вывести хешированный пароль?

    saboteur_kiev
    @saboteur_kiev Куратор тега bash
    software engineer
    GPASS=$(pwgen -cns -1 12)
    GHASH=$(echo -n "$GPASS"|md5sum|cut -d " " -f1)
    Ответ написан
    1 комментарий
  • Что значит незащищенность кода на платформе win32?

    saboteur_kiev
    @saboteur_kiev Куратор тега Windows
    software engineer
    Возможно имеется ввиду реализация winapi еще во временя линейки win9x, когда защищенной памяти как таковой не было. Там да, была уязвимость ОС, когда любая программа могла оперировать с системными ресурсами и памятью.
    В линейке NT каждый процесс и его область памяти защищен.
    Ответ написан
    Комментировать
  • C помощью каких функций можно узнать информацию о системе?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    Для Linux можно просто прочитать содержимое файлов /proc/cpuinfo и /proc/meminfo
    Ответ написан
    Комментировать
  • Какие различия программирования под UNIX и Linux?

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    software engineer
    что я прочитаю книгу по системному программированию в UNIX и смогу после этого программировать в Linux без изменений?


    Конечно нет. чтобы программировать в Линукс нужно не просто прочитать книгу по системному программированию, а научиться программировать. На практике.
    А тогда будет неважно на чем будете программировать.
    Ответ написан
    Комментировать
  • Запрет точек в имени файлов, реально ли?

    saboteur_kiev
    @saboteur_kiev Куратор тега Системное администрирование
    software engineer
    Есть и другие варианты
    name.family-CA.docx
    17.05.2017-report.docx

    Чем вам мешают точки? нормальный обычный символ. Какие проблемы с перемещенеим?

    Update:
    Похоже, что проблема возникает не из-за точек, а при перемещении на Synology , на котором по дефолту ограничение на длину пути меньше, чем в windows.
    Ответ написан
  • Что лучше для новичка в программировании C или C++?

    saboteur_kiev
    @saboteur_kiev Куратор тега C++
    software engineer
    Ассемблер - для новичка нужен не он, а базовое понимание что такое машинные коды, чтобы иметь представление чем отличаются платформы на аппаратном уровне. Будет полезно понимание регистров и разрядности. Понимать размерность и архитектуру памяти.

    Учить Си - сейчас не нужно. Во-первых на чистом С вам, как новичку, писать не придется, а как опытному программисту - выучите потом.

    Учить С++ - полезно, чтобы вы могли написать что-то. Популярный язык для embedded.

    Но еще важнее для системного программиста - технологии.
    Возьмите ардуино и сделайте свое устройство, например простейшую управляемую розетку. Чтобы работала по usb, затем добавьте по wifi, придумайте веб-морду с API, вот уже и системно-запрограммированный готовый продукт, а вы будет знакомы с технологиями.
    Ответ написан
    1 комментарий
  • Есть ли книжка, или какой другой ресурс, в которой описывается СИ максимально подробно?

    saboteur_kiev
    @saboteur_kiev Куратор тега Программирование
    software engineer
    На уровне процессора все работает не на Си, а на машинных кодах, на ассемблере, поэтому если вы хотите нюансы - изучаете ассемблер, а затем изучаете работу компилятора Си, чтобы смотреть как и во что он компилирует ваш код.
    В зависимости от версии компилятора, от платформы, от опций оптимизации компилятора, результат может быть разный.
    Ответ написан
    5 комментариев
  • Как убрать возможность у пользователя закрывать программу?

    saboteur_kiev
    @saboteur_kiev Куратор тега Системное администрирование
    software engineer
    С административными правами, пользователь может убить практически любой процесс.
    Сделайте пользователя без административных прав, и он не сможет убивать чужие процессы.
    Можно вообще зарезать пользователю права, огородив его от возможностей устанавливать посторонний софт или запускать неразрешенные вещи. Но не администратору.
    Ответ написан
    5 комментариев
  • Стоит ли учить ассемблер для глубокого понимания архитектуры компьютера?

    saboteur_kiev
    @saboteur_kiev Куратор тега Программирование
    software engineer
    Учить ассемблер глубоко необязательно.
    Будет достаточно, если вы на ассемблере сможете написать Hello World, и что-нить не намного сложнее, но главное что поймете принцип работы машинного кода.

    То есть вам нужно почитать на досуге, и понять что такое инструкция, что такое регистр, что такое битность (размер инструкций), что такое такт.
    Ответ написан
    Комментировать