Что такое системное программирование
Евдокимов А.А., Майстренко Н.В., Майстренко А.В.
1. ВВЕДЕНИЕ
История появления и развития операционных систем богата вехами и событиями. Она получила начало в те дни, когда операционная система (ОС) представлялась в виде одной специальной программы и заменяла оператора, и доходит до наших дней, где современная многозадачная операционная система — сложный многофункциональный набор программ, поддерживающий широкий спектр современного аппаратного обеспечения.
Операционная система связывает программное обеспечение с аппаратным обеспечением и именно поэтому является основой для функционирования остальных программ.
Сегодня разработчик программного обеспечения не должен думать о том, как программа будет взаимодействовать с процессором, памятью и устройствами ввода-вывода. Все заботы об этом берет на себя операционная система. Более того, если возникает необходимость в решении специфических задач, таких как создание и управление процессами и потоками, управление элементами файловых систем и т.п., то ОС предоставляет разработчику все необходимые инструменты, реализованные в виде различных библиотек системных функций.
Существуют две точки зрения, с помощью которых можно рассматривать и исследовать операционные системы. Первая из них заключается в представлении ОС как менеджера ресурсов, который должен эффективно управлять различными составляющими системы. Вторая точка зрения на ОС представляет их в качестве расширенных машин, основной задачей операционных систем при этом будет являться предоставление пользователям некоторого набора абстракций, которые будут более удобны в использовании и понимании, чем их физические представители в реальном компьютере. Понятия процессов, адресных пространств, файлов входят в число данных абстракций.
При проектировании и разработке операционных систем для них могут задавать различные структуры. Самыми распространенными структурами операционных систем являются: представление системы в виде целого и неделимого объекта — «монолита», представление системы в виде некоторого множества взаимосвязанных уровней, представление системы с использованием клиент-серверной архитектуры, представление системы в виде виртуальной машины, в виде микроядра или экзоядра.
В основе любой операционной системы находится набор системных вызовов. Системные вызовы используются операционной системой для выполнения всех своих функций, например, таких, как управление жизненным циклом процессов и потоков, работой файловой системы, памятью системы, вводом-выводом данных, безопасностью и т.д. Кроме того, часть системных вызовов доступна для каждого разработчика, что позволяет ему использовать возможности операционной системы при проектировании работы собственных приложений, а также возможность дополнять существующий набор системного программного обеспечения новой функциональностью.
В разделе «Программирование в Windows» рассматриваются уровни программирования в последних версиях операционной системы Windows; описывается набор основных системных вызовов Win32 API, доступных разработчикам; рассматривается организация и назначение системного реестра; подробно описывается структура операционной системы Windows; рассматривается вопрос реализации диспетчера объектов; рассматриваются подсистемы и службы пользовательского режима. Кроме этого, рассмотрен также вопрос загрузки операционной системы Windows.
Раздел «Процессы и потоки» посвящен центральным понятиям операционных систем процессам и потокам, вопросам их реализации, взаимодействия и синхронизации. Здесь же рассмотрены основные алгоритмы планирования процессов в различных системах.
В разделе «Управление памятью» рассматривается понятие адресного пространства, вопросы организации и управления оперативной памятью, понятие виртуальной памяти и основные алгоритмы замещения страниц. Рассмотрена также реализация сегментации в памяти операционных систем.
Раздел «Файловые системы» посвящен вопросам структуры, реализации и организации управления файловых систем. В данном разделе рассматриваются также вопросы производительности файловых систем, резервного копирования и дефрагментации дискового пространства.
Системное программирование
Информация должна быть проверяема, иначе она может быть поставлена под сомнение и удалена.
Вы можете отредактировать эту статью, добавив ссылки на авторитетные источники.
Эта отметка установлена 14 мая 2011.
Системное программирование (или программирование систем) — подраздел программирования, заключающийся в работе над системным программным обеспечением.
Определение «системное» подчеркивает тот факт, что результаты этого вида программирования существенно меняют свойства и возможности вычислительной системы. В то же время бесспорным остаётся тот факт, что в определенной степени этот результат имеет место при применении любых программ, выполняемых в вычислительной системе. Поэтому между программированием «системным» и «несистемным» (прикладным программированием») нет четкой границы.
Вычислительная система имеет иерархическую структуру, которую можно представить в виде набора вложенных слоев, на внешнем из которых находятся прикладные программы, а на самом внутреннем — аппаратура компьютера. Условная степень системности нарастает при программировании, затрагивающем все более внутренние уровни системы.
Одной из основных отличительных черт системного программирования по сравнению с прикладным заключается в том, что результатом последнего является выпуск программ для взаимодействия с пользователем (например, текстовый процессор). В то время как результатом системного программирования является выпуск программ для взаимодействия с аппаратным обеспечением (например, дефрагментация жёсткого диска), что подразумевает сильную зависимость таких программ от аппаратной части. В частности выделим следующее:
- программист должен учитывать специфику аппаратной части и другие, часто уникальные, свойства системы в которой функционирует программа, использовать эти свойства, например, применяя специально оптимизированный для данной архитектуры алгоритм;
- часто используется низкоуровневый язык программирования или такой диалект языка программирования, который
- позволяет функционирование в окружении с ограниченным набором системных ресурсов,
- работает максимально эффективно и имеет минимальное запаздывание по времени завершения,
- имеет маленькую библиотеку времени выполнения (RTL) или не имеет её вообще,
- позволяет прямое управление (прямой доступ) к памяти и управляющей логике,
- позволяет делать ассемблерные вставки в код;
Подводя итог, можно утверждать, что СИСТЕМНЫМ следует называть подраздел программирования как вида инженерной деятельности, в котором программист использует специфические и часто уникальные свойства и возможности ВНУТРЕННИХ УРОВНЕЙ вычислительной системы.
Системное программирование отличается от прикладного, что обычно приводит к специализации программиста в одном из них.
Часто, для системного программирования доступен ограниченный набор средств. Использование автоматической сборки мусора довольно редкое явление и отладка обычно сложна. Библиотека времени выполнения, при её наличии, часто менее способная и совершает меньшее количество проверок. В связи с этими ограничениями обычно применяют при мониторинге и записи данных — операционные системы.
- Парадигмы программирования
Wikimedia Foundation . 2010 .
Системное программирование
Систе́мное программи́рование, раздел программирования , в котором сочетаются исследования новых архитектур, алгоритмов , структур данных и др. и деятельность по проектированию , разработке , тестированию и сопровождению (поддержке) системного программного обеспечения (системного ПО), т. е. для создания новых информационных технологий .
Системное ПО является фундаментом, на котором базируется всё программное обеспечение (ПО) компьютеров . Различают системное ПО машинно-зависимое (предназначено для использования в семействах компьютеров с одной и той же системой команд) и переносимое, которое используется на компьютерах с разной архитектурой . Системное ПО применяют для управления ПО компьютеров и сетевыми коммуникациями, а также для поддержки выполнения прикладных программ. К системному ПО относятся операционные системы (ОС), программные средства организации компьютерных сетей и управления ими, системы управления базами данных (СУБД), средства промежуточного ПО (предоставляют выделенному классу приложений набор услуг, напрямую не предоставляемых ОС), инструментальные средства разработки и анализа программ , поддержки информационной безопасности и др. При разработке системного ПО используются методы программной инженерии; особое внимание уделяется качеству кода (включает минимизацию числа ошибок, простоту понимания и сопровождения, хорошую документированность и т. п.), надёжности и безопасности программ.
Системное программирование появилось в 1950-х гг., когда были созданы первые ОС, ассемблеры и компиляторы для мейнфреймов. Важным этапом стало появление системного ПО, создаваемого некоммерческими сообществами системных программистов и распространяемого вместе с текстами программ (ОС FreeBSD и Linux , СУБД PostgreSQL и MySQL и др.), что позволило многочисленным пользователям освободиться от зависимости от производителей коммерческого системного ПО.
Опубликовано 4 июля 2022 г. в 12:07 (GMT+3). Последнее обновление 4 июля 2022 г. в 12:07 (GMT+3). Обратная связь
Разработка программного обеспечения
Обработка данных
Современные технологии
ИнформацияОбласти знаний: Системное программирование Область знания: Информационные технологии
- Научно-образовательный портал «Большая российская энциклопедия»
Свидетельство о регистрации СМИ ЭЛ № ФС77-84198,
выдано Федеральной службой по надзору в сфере связи, информационных технологий и массовых коммуникаций (Роскомнадзор) 15 ноября 2022 года.
ISSN: 2949-2076 - Учредитель: Автономная некоммерческая организация «Национальный научно-образовательный центр «Большая российская энциклопедия»
Главный редактор: Кравец С. Л.
Телефон редакции: +7 (495) 917 90 00
Эл. почта редакции: secretar@greatbook.ru
- © АНО БРЭ, 2022 — 2023. Все права защищены.
- Условия использования информации. Вся информация, размещенная на данном портале, предназначена только для использования в личных целях и не подлежит дальнейшему воспроизведению.
Медиаконтент (иллюстрации, фотографии, видео, аудиоматериалы, карты, скан образы) может быть использован только с разрешения правообладателей. - Условия использования информации. Вся информация, размещенная на данном портале, предназначена только для использования в личных целях и не подлежит дальнейшему воспроизведению.
Медиаконтент (иллюстрации, фотографии, видео, аудиоматериалы, карты, скан образы) может быть использован только с разрешения правообладателей.
Системное программирование *
Что такое операционная система и зачем она нужна?
Уровень сложности Средний
Время на прочтение 25 мин
Количество просмотров 5.3KДобро пожаловать в наше увлекательное путешествие в мир операционных систем. В этом уроке мы глубже погрузимся в суть понятия «операционная система» и рассмотрим, почему она является неотъемлемой частью каждого компьютера, ноутбука или смартфона.
Всего голосов 20: ↑11 и ↓9 +2
Добавить в закладки 75Новости
все подряд лучшие
abondarev 27 ноя в 17:09Перенос вашего проекта под Embox на новую плату STM32
Уровень сложности Средний
Время на прочтение 15 мин
Количество просмотров 1.6KВ этой статье я хочу показать, насколько в Embox легко перенести существующий проект на новую платформу. За основу возьмем уже описанный ранее демонстрационный проект с ModBus и расскажем, как портировать наш проект на новую плату на примере STM32 NUCLEO-F2207ZG.
В статье про ModBus уже было показано, как важны для уменьшения “времени выхода на рынок” (time-to-market), переносимость ПО и удобство разработки и отладки. А теперь предположим, что мы хотим сделать новую версию нашего устройства на новой аппаратной платформе, более дешевой, менее энергопотребляющей или просто доступной на рынке.
Всего голосов 7: ↑6 и ↓1 +5
Добавить в закладки 14
RustLangRu 20 ноя в 13:01Rust 1.74.0: конфигурация проверки в Cargo, авторизация для приватных реестров, проекции возвращаемых типов
Уровень сложности Простой
Время на прочтение 4 мин
Количество просмотров 1.8KКоманда Rust рада сообщить о новой версии языка — 1.74.0. Rust — это язык программирования, позволяющий каждому создавать надёжное и эффективное программное обеспечение.
Если у вас есть предыдущая версия Rust, установленная через rustup , то для обновления до версии 1.74.0 вам достаточно выполнить команду:
rustup update stable
Если у вас ещё не установлен rustup , вы можете установить его с соответствующей страницы нашего веб-сайта, а также посмотреть подробные примечания к выпуску на GitHub.
Если вы хотите помочь нам протестировать будущие выпуски, вы можете использовать beta ( rustup default beta ) или nightly ( rustup default nightly ) канал. Пожалуйста, сообщайте обо всех встреченных вами ошибках.
Всего голосов 17: ↑15 и ↓2 +13
Добавить в закладки 4
aabzel 16 ноя в 02:12Диспетчер Задач для Микроконтроллера
Уровень сложности Простой
Время на прочтение 7 мин
Количество просмотров 8.4KВ программировании микроконтроллеров часто нужно написать простые тестировочные прошивки. При этом надо некоторые функции вызывать чаще, а некоторые реже. Для этого, конечно, можно запустить FreeRTOS, однако тогда этот код не будет переносим на другие RTOS например Zephyr RTOS или TI-RTOS. Поэтому надо держать наготове какой-нибудь простенький NoRTOS планировщик.
В этот тексте я представил основные идеи алгоритма такого кооперативного планировщика.
Всего голосов 25: ↑23 и ↓2 +21
Добавить в закладки 92Истории
maisvendoo 16 ноя в 01:54
Запуск ОСРВ Embox на Banana Pi M1
Уровень сложности Средний
Время на прочтение 7 мин
Количество просмотров 2.5KОб этой операционной системе я узнал на данном ресурсе, из многочисленных публикаций её разработчиков. Для тех кто не в курсе — это отечественная операционная система реального времени для встраиваемых устройств с открытым исходным кодом. Её официальный репозиторий расположен тут. Возникло желание опробовать этот проект в деле. Благодаря документации к проекту на виртуальной машине qemu удалось запустить конфигурации для разных платформ. Однако, виртуальная машина — это не для настоящих джедаев).
Тщательно изучив список поддерживаемых одноплатников, остановил свой выбор на Banana Pi M1 с ARM-процессором Allwinner A20. Плата была заказана на Aliexpress, и когда она прибыла, настало время экспериментов. Но всё, как и ожидалось, оказалось не так просто.
Всего голосов 18: ↑17 и ↓1 +16
Добавить в закладки 18
ph_piter 14 ноя в 18:19Книга «BPF: профессиональная оценка производительности»
Время на прочтение 19 мин
Количество просмотров 1.4KПривет, Хаброжители!
Инструменты оценки производительности на основе BPF дают беспрецедентную возможность анализа систем и приложений. Вы сможете улучшить производительность, устранить проблемы в коде, повысить безопасность и сократить расходы. Книга «BPF: профессиональная оценка производительности» — ваш незаменимый гайд по применению этих инструментов.
Брендан Грегг — эксперт и пионер проекта BPF — представляет более 150 готовых инструментов анализа и отладки, рекомендации по их применению, а также пошаговые инструкции по разработке ваших собственных инструментов. Вы узнаете, как анализировать процессоры, память, дисковый ввод/вывод, файловую систему, сети, языки программирования, приложения, контейнеры, гипервизоры, безопасность и ядро. Вы сможете выработать глубокое понимание того, как улучшить буквально любую Linux-систему или приложение.
Всего голосов 10: ↑10 и ↓0 +10
Добавить в закладки 13
davidbadd 7 ноя в 18:36Cotea: программный контроль исполнения Ansible
Время на прочтение 11 мин
Количество просмотров 5.1KЯ Давид Бадалян, работаю в Исследовательском центре доверенного искуственного интеллекта ИСП РАН. В статье я хочу поговорить об Ansible – одной из самых популярных систем по автоматизации развёртывания.
Стоит запустить Ansible программно, и он становится черным ящиком – нет никакого контроля над его выполнением, нет информации о тасках. Эту проблему мы обнаружили, разрабатывая оркестратор Michman для сервисов уровня PaaS. В результате мы создали cotea и gocotea: инструменты для программного исполнения Ansible-плейбуков из языков Python и Go.
Про cotea, её архитектуру и кейсы применения я расскажу подробно под катом. Если вы DevOps-инженер и хотите узнать, как можно гибко использовать Ansible – статья точно для вас.
Всего голосов 12: ↑12 и ↓0 +12
Добавить в закладки 45
PatientZero 27 окт в 16:14Мнение три года спустя: стоил ли того переход с JavaScript на Rust?
Уровень сложности Средний
Время на прочтение 7 мин
Количество просмотров 36KНесколько лет назад я отказался от всего и полностью сосредоточился на WebAssembly. В то время Rust имел наилучшую поддержку компиляции в WebAssembly, а самые полнофункциональные среды исполнения WebAssembly были основаны на Rust. Rust был лучшим из вариантов. С места в карьер я нетерпеливо начал разбираться, чем же вызван такой ажиотаж.
С тех пор мы с потрясающими разработчиками создали Wick, — фреймворк приложений и среду исполнения, использующие в качестве системы основного модуля WebAssembly.
Спустя три года, выполнив несколько развёртываний в продакшен, написав электронную книгу и выпустив примерно сто пакетов на crates.io, я решил, что настало время поделиться своими мыслями о Rust.
Всего голосов 55: ↑54 и ↓1 +53
Добавить в закладки 83
ru_vds 25 окт в 16:00Как Rust меняет мышление разработчика
Уровень сложности Простой
Время на прочтение 9 мин
Количество просмотров 44KЯ страшно ненавижу C++. Обычно я люблю программирование, но каждый проект, с которым я имел дело на C++, ощущался как монотонная рутина. В январе 2023 года я пошёл по пути изучения Rust, поэтому теперь могу сказать, что знаю язык системного программирования, который действительно люблю использовать.
Первый стабильный релиз Rust появился в 2015 году, и каждый год, начиная с 2016, он признаётся в Stack Overflow’s Annual Developer Survey самым любимым языком (в 2023 году эта категория называется «обожаемый»). Почему же разработчики, ощутившие вкус Rust, не могут отказаться от его использования? Похоже, в мире прогремевших наследников C/C++ репутация растёт только у Rust. Как же этот язык, появившийся на сцене меньше десятка лет назад, стал настолько популярным?
Ржавый красный краб Феррис по версии Midjourney
Кривая обучения оказалась крутой. Я нашёл многое, что мне нравится в Rust, но постоянно попадал в его ловушки. Однако в конечном счёте именно препятствия и проблемы, с которыми столкнулся, я научился любить больше всего.
Я начну историю с разговора о том, что легко полюбить — со среды Rust, управления пакетами и документации. Затем я расскажу о системе типов и типажах (trait). Далее я поведаю о тех возможностях тестирования и test driven development, которые становятся возможными благодаря Rust. Наконец, мы обсудим самую запутанную и сбивающую с толку часть — одержимость Rust тем, кто какой переменной владеет.
Всего голосов 113: ↑101 и ↓12 +89
Добавить в закладки 188
ser-mk 25 окт в 11:08Готовим драйвера МК для проброса периферии
Уровень сложности Сложный
Время на прочтение 12 мин
Количество просмотров 2.5KВ предыдущей статье рассматривался принцип, как можно прокинуть периферию микроконтроллера (UART, I2C, CAN bus etc) в обычную ПК программу, так как если бы она входила в состав нашего компьютера и висела на обшей шине с памятью. В той публикации рассматривается теория и инструменты, которые позволяют это сделать. В этой части мы рассмотрим, как на практике осуществляется подготовка кода драйверов к инструментизации ADIN LLVM pass и последующей сборке в отдельную динамическую библиотеку, которую вы можете использовать в своих проектах
Всего голосов 16: ↑15 и ↓1 +14
Добавить в закладки 58
ser-mk 25 окт в 10:57Хардварный проброс
Уровень сложности Сложный
Время на прочтение 9 мин
Количество просмотров 6.1KОказывается пробрасывать можно не только сетевые порты, а еще и регистры периферии микроконтроллера(МК). Идея та же самая — открыть периферию для использования вне микроконтроллера. В случае проброса периферии, внешними клиентами будут выступать программы на ПК, и для них мы будем давать доступ к внутренним регистрам микроконтроллера. Для программ это будет выглядеть так, как будто регистры периферии находятся в адресном пространстве компьютера(ПК). Все равно, что эти самые регистры периферии висели бы на одной шине с памятью и другими устройствами ввода-вывода
Всего голосов 24: ↑24 и ↓0 +24
Добавить в закладки 68
ru_vds 18 окт в 12:00Старые кодовые базы как классическая литература
Уровень сложности Простой
Время на прочтение 6 мин
Количество просмотров 8.7K
РетроспективаСохранившиеся фрагменты греческих папирусов, источник
В языке и литературе работает известный принцип начитанности: чем больше человек читает хороших книг, тем больше у него словарный запас, шире кругозор. Развивается понятийный аппарат, сама собой улучшается грамотность без всяких учебников.
Применим ли этот принцип в обучении программированию?
Всего голосов 61: ↑61 и ↓0 +61
Добавить в закладки 101
kaneki_li 15 окт в 11:43Sun Netra X1 и опыт в его администрировании
Уровень сложности Простой
Время на прочтение 9 мин
Количество просмотров 2.7KПриветствую читателей! В мои руки попал интересный экземпляр – сервер Netra X1 компании Sun Microsystems. Привлёк данный аппарат архитектурой Sparc, которой я раньше мало где встречал. Аппарат конечно старый, но работает безупречно. Тут родилась идея установки BBS и операционной системы Debian. Так сказать «Готовый музейный экспонат».
Всего голосов 7: ↑7 и ↓0 +7
Добавить в закладки 9Ближайшие события
Дата 25 сентября – 30 ноября
Место ОнлайнДата 30 ноября
Время 17:30 – 00:00
Место МоскваДата 1 декабря
Время 12:30
Место Москва • ОнлайнДата 4 декабря
Время 20:00
Место ОнлайнДата 5 – 6 декабря
Время 9:00 – 23:59
Место Москва • Белград • ОнлайнДата 9 – 11 декабря
Время 10:00 – 17:00
Место МоскваДата 18 – 20 декабря
Время 10:00 – 17:00
Место МоскваДата 19 – 20 января
Время 10:00 – 18:00
Место Москва
Влево Вправо
Albert_Wesker 12 окт в 11:01Сборка мусора: как это делается в системном программировании
Уровень сложности Средний
Время на прочтение 9 мин
Количество просмотров 7.5KДавайте поговорим об одной из наиболее критичных по производительности программ, которой вы пользуетесь ежедневно: о вашей операционной системе. Поскольку при каждом разгоне железа вы получаете дополнительную вычислительную мощность, операционная система никогда за этим не поспевает. Поэтому постоянно доводится читать о том, как разработчики ядра и драйверов выжимают последнее из своего кода.
Кроме того, операционные системы должны быть рассчитаны на массовую конкурентность. Дело не только в том, что наша операционная система отвечает за планирование всех процессов и потоков пользовательского пространства, но и в том, что в ядре хватает собственных потоков, а также обработчиков прерываний, нужных для взаимодействия с железом. Требуется минимизировать время, которое тратится на ожидание, так как, опять же, при любой задержке вы воруете время ваших пользователей.
Объединим две эти цели – и обнаружим, сколько же существует странных и магических методов для неблокирующего совместного использования данных в разных потоках. Давайте поговорим об одном из этих методов – «чтение-копирование-запись» (RCU).
Всего голосов 38: ↑35 и ↓3 +32
Добавить в закладки 77
Apoheliy 12 окт в 03:58Замешиваем файлы в тэги. Часть 3
Уровень сложности Средний
Время на прочтение 9 мин
Количество просмотров 1.5KПродолжаем создавать модуль ядра в Линукс на примере виртуальной файловой системы.
Часть 3: Inode, Lookup
Что в результате получилось можно увидеть по ссылкам: демо-видео, код.
Всего голосов 7: ↑6 и ↓1 +5
Добавить в закладки 20
alizar 9 окт в 12:00Оскар Толедо: потомственный волшебник
Уровень сложности Простой
Время на прочтение 7 мин
Количество просмотров 9.2K
РетроспективаСемья Толедо (пригород Мехико) и разнообразная техника их кустарного производства, в том числе компьютер, 1980 год
Оскар Толедо — пятикратный победитель программистского конкурса IOCCC, (Международный конкурс обфусцированного кода на С). Он интересен не только сам по себе, но ещё в контексте своей семьи. Это уникальные люди, которые скромно живут в пригороде Мехико и вообще не стремятся к известности. 25 лет назад они написали свою ОС, браузер и кучу софта для него.
Оскар Толедо — просто продолжатель семейного дела, которое началось примерно в 70-е годы прошлого века.
Всего голосов 66: ↑64 и ↓2 +62
Добавить в закладки 57
RustLangRu 6 окт в 20:43Rust 1.73.0: новый формат сообщений о панике, изменение в работе с локальными данными потока
Уровень сложности Простой
Время на прочтение 3 мин
Количество просмотров 3.9KКоманда Rust рада сообщить о новой версии языка — 1.73.0. Rust — это язык программирования, позволяющий каждому создавать надёжное и эффективное программное обеспечение.
Если у вас есть предыдущая версия Rust, установленная через rustup , то для обновления до версии 1.73.0 вам достаточно выполнить команду:
rustup update stable
Если у вас ещё не установлен rustup , вы можете установить его с соответствующей страницы нашего веб-сайта, а также посмотреть подробные примечания к выпуску на GitHub.
Если вы хотите помочь нам протестировать будущие выпуски, вы можете использовать beta ( rustup default beta ) или nightly ( rustup default nightly ) канал. Пожалуйста, сообщайте обо всех встреченных вами ошибках.
Всего голосов 21: ↑20 и ↓1 +19
Добавить в закладки 20
x6x4 6 окт в 12:30Вглубь std::unordered_map: магические числа
Уровень сложности Простой
Время на прочтение 3 мин
Количество просмотров 6KВсе любители кодокопания заканчивают либо хорошо, либо плохо. Мне повезло. Поэтому я решила написать свою первую статью на хабре.
Эта статья о том, каким странным бывает легаси — и куда же всё-таки копать, чтобы понять, что происходит. stdlibc++ опровергает даже стандартные математические понятия. Как хорошо, что это хотя бы опенсорс.
Всего голосов 22: ↑20 и ↓2 +18
Добавить в закладки 34
artyomsoft 3 окт в 12:00Протоколы семейства TCP/IP. Теория и практика
Уровень сложности Средний
Время на прочтение 23 мин
Количество просмотров 55KВ сети можно найти огромное количество материала о том, как функционируют сети на базе стека протоколов TCP/IP, а также как писать компьютерные программы с сетевыми возможностями. При рассмотрении компьютерных сетей часто углубляются в описание физических основ и структур данных, передаваемых по сети, а при рассмотрении сетевого программирования основное внимание уделяют интернет-сокетам.
Но при изучении и исследовании хочется большего, например, поэкспериментировать с пакетами сетевых протоколов. Многие сетевые протоколы реализованы в ядре операционной системы, и что-либо изменить может оказаться сложной задачей, так как это требует навыков в написании драйверов для операционной системы. Но использование специализированных библиотек позволяет работать с протоколами на низком уровне из пространства пользователя.
В ходе работы над статьёй я написал небольшое приложение, которое послужит отправной точкой для понимания компьютерных сетей и семейства протоколов TCP/IP. С приложением можно экспериментировать, получая дополнительные знания.
Приложение — простое и понятное и, надеюсь, упростит изучение материалов статьи. Ведь именно радость первой победы даёт мотивацию, достаточную для того, чтобы потратить гораздо больше времени на изучение темы.
В статье изложены наиболее важные с моей точки зрения понятия, которые должен знать любой программист, хоть как-то сталкивающийся с компьютерными сетями. Так что без теоретических сведений не обошлось.