Выпуск материнских плат на чипсетах Intel шестой серии (P67 и его братьях) принес на массовый рынок ПК новый вариант BIOS — UEFI. В этой статье мы поговорим об устройстве файлов UEFI Capsule и Intel Flash Image.
Структура EFI Firmware Volume и полезные в хозяйстве патчи будут описаны во второй части.
Читать полностью »
Рубрика «системное программирование» - 70
Устройство файла UEFI BIOS, часть первая: UEFI Capsule и Intel Flash Image
2013-07-05 в 20:33, admin, рубрики: intel, UEFI, операционные системы, системное программирование, Системные платы, метки: intel, UEFIПишу игрушечную ОС (о реализации sleep)
2013-06-02 в 20:15, admin, рубрики: diy или сделай сам, sleep, системное программирование, метки: sleep
Очередной пост для блога, посвященного работе над игрушечной ОС. В прошлый раз я писал про необходимость в простеньком драйвере AHCI (SATA). Прежде чем начать двигаться в этом направлении, я решил набросать инфраструктуру драйверов: общий интерфейс драйвера + уточнённый интерфейс драйвера устройства хранения. Формулирование этих интерфейсов выявила проблему, на которую я ранее не обращал внимания — проблему портируемости.
Не зависящий от платформы код (например, большая часть планировщика, вспомогательный код типа kprintf, ...) у меня перемешивается с кодом, заточенным только под x86_64 (системные таблицы дескрипторов, APIC, прерывания, ...). Хотя ничего не мешало мне сформулировать интерфейс драйвера, жёстко привязанного к x86_64 (в частности, свободно оперировать PCI-адресами), мне стало ясно, что без чёткого отделения кода, специфичного для конкретной платформы, от общего портируемого кода я буду лишь усугублять ситуацию. Итак, я принял решение перебрать всё написанное, отделив общий код (в корне src/) от кода, специфичного для платформы (в src/x86_64/). Этим я и занимался последние две недели.
Читать полностью »
Пишу игрушечную ОС (о реализации мьютекса)
2013-05-13 в 19:04, admin, рубрики: diy или сделай сам, Mutex, пул, системное программирование, спинлок, метки: mutex, пул, спинлок
Продолжаю блог о разработке игрушечной ОС (предыдущие посты: раз, два, три). Сделав паузу в кодировании (майские праздники, всё-таки), продолжаю работу. Только что набросал сканирование PCI-шины. Эта штука понадобится для работы с SATA-контроллером: следующее, что хочу сделать — это простенький драйвер диска. Он позволит поэкспериментировать с проецированием постоянной памяти на адресное пространство (своппинг, доведённый до логического конца). А пока хотел бы описать реализацию мьютекса.
Читать полностью »
Пишу игрушечную ОС (доступнее о планировщике)
2013-04-22 в 23:13, admin, рубрики: diy или сделай сам, прерывание, системное программирование, спинлок, таймер, метки: прерывание, спинлок, таймер
Отсутствие комментариев к двум моим предыдущим постам, несмотря на большое число лайков, привели меня к выводу, что подавляющее большинство ничего не поняли. Просто, будучи давно погружённым в тему, я проявил невнимательность к своему читателю. Моя вина, буду исправляться. Итак, поговорим о планировании доступным языком.
Итак, что такое планировщик? Планировщик — это часть ОС, реализующая многозадачность. Число процессоров, обычно, намного меньше числа выполняемых задач. Поэтому на каждый процессор приходится несколько задач. В силу своей последовательной природы процессор не может выполнять эти задачи одновременно — и он поочерёдно переключается с одной задачи на другую.
По способу переключения между задачами планировщики делятся на кооперативные и вытесняющие. При кооперативном планировании ответственность за переключение задач несут сами задачи. Т.е. задача сама решает, когда можно уступить место следующей. В отличие от кооперативных, вытесняющие планировщики самостоятельно принимают решение о смене задачи. Легко понять, что второй метод планирования в общем случае является более предпочтительным для ОС в силу своей предсказуемости и надёжности.
Далее задачи будем называть потоками. Изначально задачи были однопоточными, поэтому поток выполнения всегда соответствовал задаче. В настоящее время это уже не так, поэтому задача логически разделилась на два родственных понятия: процесс, как контейнер ресурсов, и поток, как независимая последовательность исполнения кода.
Читать полностью »
Разработка Shell Extensions для Windows Explorer
2013-04-22 в 10:12, admin, рубрики: системное программированиеДля повышения удобства разрабатываемых продуктов, мы стараемся обеспечить максимальный уровень интеграции функционала в операционную систему, чтобы пользователю было удобно использовать весь потенциал приложения. В этой статье будут рассмотрены теоретические и практические аспекты разработки Shell Extensions, компонентов позволяющих интегрироваться в оболочку операционной системы Windows. В качестве примера рассмотрим расширение списка контекстного меню для файлов, а так же проведем обзор уже существующих решений в этой области.
Пишу игрушечную ОС (о планировщике)
2013-04-20 в 23:42, admin, рубрики: diy или сделай сам, параллельное программирование, планирование, прерывание, системное программирование, метки: планирование, прерывание
Продолжаю вести блог о разработке игрушечной ОС.
В прошлом посте я писал о том, как добиться возможности реализовывать на C обработчики прерываний. Теперь, пользуясь написанными ранее макросами, можно реализовать простой SMP-планировщик. Он будет предоставлять минимально возможный функционал, на базе которого в будущем нужно будет возводить различные надстройки, в частности, примитивы синхронизации (например, мьютекс). Опять же, красивая модульная структура не способствует высокой производительности, но красота, как известно, спасёт мир, так что отдадим ей предпочтение.
Итак, попробуем сформулировать требования к нашему планировщику. Нам нужна возможность создать поток, указать для него стек, маску разрешённых логических процессоров (affinity), базовый приоритет и функцию выполнения. Далее, поток можно запустить, приостановить, продолжить его выполнение и, наконец, завершить.
Кроме того, было бы здорово, если бы планировщик не занимался выделением памяти, а мог принимать и возвращать память, выделенную под поток кем-то другим. С одной стороны, это бы обеспечило гибкость произвольного кеширования памяти потоков. С другой – дало бы уникальную возможность сохранять поток во внешней памяти (например, на жёстком диске) с последующей его загрузкой и запуском с прерванного места.
Читать полностью »
Технологично подменяем библиотеку
2013-04-20 в 11:52, admin, рубрики: linux, Блог компании Нордавинд, отладка, системное программирование, метки: linux, отладкаЗдравствуйте, уважаемые читатели!
В данном коротком посте хотелось бы поделиться опытом о том, как мы решали задачу подмены библиотеки libpthread. Такая потребность возникла у нас в ходе создания инструмента формирования модели переходов многопоточной программы, о которой мы уже рассказывали в одном из предыдущих постов — habrahabr.ru/company/nordavind/blog/176541/. Технология получилась достаточно универсальной, поэтому спешим ей поделиться с читателим. Надеемся, кому-нибудь пригодится для решения собственных задач.
Итак, начнем с описания задачи, которую решали мы. Для исследования программы на предмет наличия в ней потенциальных ситуаций взаимных блокировок нам необходимо было построить модель программы с точки зрения последовательности обращений к различным средствам синхронизации из различных потоков. Логичным и очевидным решением является «перехват» обращений к средствам синхронизации, которые в нашей системе происходили исключительно через стандартную библиотеку libpthread. Т.е. фактически, решение состоит в подмене библиотеки libpthread на некую нашу библиотеку libpthreadWrapper, которая реализует все функции, которые реализованы в оригинальной библиотеке. При этом в интересующих нас функциях (pthread_mutex_lock, pthread_mutex_unlock, pthread_cond_signal, и др.) добавляется некоторый код, который уведомляет какого-то внешнего listener-а о вызове и параметрах вызова. Реализация всех неинтересующих нас функций оригинальной библиотеки в libpthreadWrapper представляет собой просто вызов соответствующей функции из libpthread.Читать полностью »
Портирование Genode OS Framework на новую аппаратную платформу
2013-04-19 в 9:02, admin, рубрики: fiasco.oc, genode, микроядра, операционные системы, системное программирование, метки: fiasco.oc, genode, микроядраПоследнее время все больше компаний проявляет интерес к микроядерным операционным системам. Эти системы из разряда академических начинают переходить в разряд ОС для применения в реальных продуктах. Например, представленная недавно платформа Samsung Knox построенна с использованием OKL4 Microvisor. Весьма вероятно, что таких решений гораздо больше, но не все производители афишируют используемые технологии, так как на данный момент микроядерные системы, в основном, применяются в сфере информационной безопасности.
Краткая история микроядерных ОС и описание наиболее известных проектов недавно были описаны моим коллегой sartakov в статье "Микроядра и FOSDEM'13". Я хочу рассказать более подробно о Genode OS Framework и процессе портирования его на новую аппаратную платформу на базе процессора архитектуры ARM. В качестве ядра для Genode использовал Fiasco.OC.
Мастер-класс «Освоение Архитектуры ПО». Базовый курс для подготовки к международной сертификации iSAQB
2013-04-17 в 11:35, admin, рубрики: agile, Анализ и проектирование систем, архитектура по, качество по, конференция, Программирование, семинар, сертификаты, сертификация, система управления проектами, системное программирование, эксперты, метки: agile, архитектура по, качество по, конференция, мастер класс, семинар, сертификаты, сертификация, система управления проектами, системное программирование, эксперты4-6 июня 2013 года в Москве международный эксперт д-р Питер Хрущка проведет 3-х дневный мастер-класс «Освоение Архитектуры ПО». Данный мастер-класс является базовым курсом для подготовки к международной сертификации iSAQB.
Справка:
Доктор Питер Хрущка – учредитель Atlantic Systems Guild, международной известной группы экспертов (www.systemsguild.com), в которую входят Том ДеМарко и Тим Листер. Входит в редакционный совет IT журналов, в том числе учредитель и член Международного Совета по Разработке Требований (IREB) и Международного Совета по Квалификации Архитектуры Программного обеспечения (ISAQB). Основатель Agile-сообщества в Германии. Один из разработчиков шаблона архитектурной документации систем ARC42. Первопроходец в области инструментов моделирования для структурных и объектно-ориентированных методологий. Частый спикер на IT конференциях, консультант, среди его клиентов многие компании из списка Fortune 500. Автор многочисленных статей и 9 книг по программной инженерии и человеческому фактору, в том числе соавтор знаменитой «Балдеющие от адреналина и зомбированные шаблонами».
Во время практических занятий вы познакомитесь с важными инструментами и получите необходимые для современного архитектора навыки. Среди ключевых тем мастер-класса: построение блок-схем и рабочего цикла, эффективный дизайн и сквозные проблемы, документация, методы оценки и метрики. Подробнее с программой мастер-класса вы можете познакомиться на сайте
Мастер-класс предназначен для всех, кто чувствует себя ответственным за структуру ИТ-системы: в основном, архитекторов программного обеспечения, технических IT-менеджеров, дизайнеров, программистов и сотрудников управления качеством. Кроме того, руководители проекта узнают обоснования проектных решений. Таким образом, они получают возможность оптимизировать структуру команды разработчиков.
Дополнительная информация и регистрация на сайте careerlab.ru/education/guru-academy/hruschka/sem1/
Разработка MiniFilter драйвера
2013-04-15 в 11:37, admin, рубрики: драйверы, Песочница, системное программирование, файловая система, метки: драйверы, системное программирование, файловая системаДовелось мне как-то на работе столкнуться с задачей управления доступа и перенаправления запросов к файловой системе в рамках определенных процессов. Реализовать необходимо было простое, легко конфигурируемое решение.
Решил разрабатывать MiniFilter драйвер, конфигурируемый при помощи текстового файла.
Рассмотрим, что из себя в общем виде представляет MiniFilter:
Фильтрация осуществляется через так называемый Filter Manager, который поставляется с операционной системой Windows, активируется только при загрузке мини фильтров. Filter Manager подключается напрямую к стеку файловой системы. Мини фильтры регистрируются на обработку данных по операциям ввода/вывода при помощи функционала Filter Manager, получая, таким образом, косвенный доступ к файловой системе. После регистрации и запуска мини фильтр получает набор данных по операциям ввода/вывода, которые были указаны при конфигурировании, при необходимости может вносить изменения в эти данные, таким образом влияя на работу файловой системы.