С задачей вызова неуправляемого кода из управляемого мы сталкиваемся довольно часто, и эта задача имеет простое решение в виде одного атрибута [DllImport] и небольшого набора дополнительных правил, которые хорошо изложены в MSDN. Обратная же задача встречается гораздо реже. В данной статье мы и рассмотрим небольшой пример, как это можно сделать. Его не стоит рассматривать как исчерпывающий, скорее лишь, как направление хода мыслей и концепцию. Итак, начнем.
Читать полностью »
Рубрика «системное программирование» - 41
Вызов управляемого кода из неуправляемого
2017-08-14 в 13:14, admin, рубрики: C#, c++, cli, msdn, Блог компании ICL Services, неуправляемый код, Программирование, разработка под windows, системное программированиеLinux Kernel Extension for Databases
2017-08-09 в 13:37, admin, рубрики: linux kernel, александр крижановский, базы данных, Блог компании Конференции Олега Бунина (Онтико), высокая производительность, Программирование, системное программирование
Александр Крижановский ( krizhanovsky )
Сегодня буду рассказывать про внутренности базы данных, про внутренности ОС и о том, что происходит на стыке. Когда я говорю про базу данных, я имею в виду в основном ввод/вывод, управление памятью и обработку транзакций. Это совершенно не про SQL, не про индексы, не про блокировки и т.д. Только ввод/вывод, управление памятью и транзакции.
В тех местах, когда я буду упоминать про базы данных, я буду ссылаться на InnoDB, которая мне наиболее знакома.
Если мы посмотрим на движок транзакционной базы, мы увидим примерно такую же картинку. У нас есть буфер pool, в нем живут странички индекса, странички данных. Все эти странички выводятся через транзакционный лог, когда они изменились, проходит это все через планировщик ввода/вывода и в ту, и в другую сторону. Планировщик ввода/вывода, когда он считывает что-то с диска, он делает read ahead. Все это проходит через файловую систему, но это дальше, на диске.
Читать полностью »
Что происходит на стыке базы данных и операционной системы?
2017-08-09 в 13:37, admin, рубрики: linux kernel, александр крижановский, базы данных, Блог компании Конференции Олега Бунина (Онтико), высокая производительность, Программирование, системное программирование
Александр Крижановский ( krizhanovsky )
По материалам доклада "Linux Kernel Extension for Databases" на HighLoad++ 2016.
Сегодня буду рассказывать про внутренности базы данных, про внутренности ОС и о том, что происходит на стыке. Когда я говорю про базу данных, я имею в виду в основном ввод/вывод, управление памятью и обработку транзакций. Это совершенно не про SQL, не про индексы, не про блокировки и т.д. Только ввод/вывод, управление памятью и транзакции.
Читать полностью »
Двухфакторная аутентификация в Check Point Security Gateway
2017-08-09 в 11:46, admin, рубрики: check point, Check Point Endpoint Security, Check Point Security Gateway, JaCarta, JaCarta Management System, JaCarta PKI, jms, PKI, Token Logon, vpn, Аладдин Р.Д., аутентификация, Блог компании Аладдин Р.Д., вакансия, инженер, информационная безопасность, криптография, пресейл-инженер, системное программирование, смарт-картаВ этом посте мы расскажем о том, как настроить двухфакторную аутентификацию в Check Point Security Gateway с использованием электронных ключей на примере JaCarta PKI российского разработчика решений по информационной безопасности.
О том, что удалённый доступ к ресурсам организации несёт пользу, но и создаёт ряд проблем для IT-департамента, говорится везде очень много. Мы также считаем это важной темой. Поэтому решили посвятить этому следующий пост.
Возможность корректной идентификации пользователей, запрашивающих доступ к информационной системе, достигается за счёт использования комплексных решений контроля доступа.
Читать полностью »
CDC+MSC USB Composite Device на STM32 HAL
2017-08-06 в 20:48, admin, рубрики: CDC, composite device, MSc, stm32, stm32 cube, stm32 hal, stm32f103, usb, программирование микроконтроллеров, системное программирование
Мне хотелось бы верить, что хотя бы половина читателей может расшифровать хотя бы половину названия статьи :) Кто не в курсе — поясню. Мое устройство должно реализовывать сразу две USB функции:
- Mass Storage Device (он же Mass Storage Class — MSC). Я хочу, чтобы мой девайс прикидывался обычной флешкой и отдавал файлики с данными, которые лежат на SD карте.
- Другая функция это виртуальный COM порт (он же в терминологии USB называется Communication Device Class — CDC). Через этот канал у меня идет всякий дебажный вывод, который удобно смотреть обычным терминалом.
В большинстве примеров по работе с USB реализуется только один тип устройства — флешка, мышка, кастомное HID устройство или виртуальный COM порт. А вот найти вменяемое объяснение как реализовать хотя бы две функции одновременно оказалось не так просто. В своей статье я хотел бы восполнить этот пробел.
Я буду описывать создание композитного USB устройства на базе микроконтроллера STM32, но сам подход будет также применим и для других микроконтроллеров. В статье я детально разберу каждый из классов по отдельности, так и принцип построения композитных устройств. Но обо все по порядку.
Итак, поехали!
Читать полностью »
Как JVM аллоцирует объекты?
2017-08-01 в 8:23, admin, рубрики: compilers, hotspot, java, jvm, system programming, virtual machine, системное программирование, что вообще происходит Как JVM создает новые объекты? Что именно происходит, когда вы пишете new Object()
?
На конференциях периодически рассказывают, что для аллокации объектов используются TLAB'ы (thread-local allocation buffer): области памяти, выделенные эксклюзивно каждому потоку, создание объектов в которых очень быстрое за счет отсутствия синхронизации.
Но как правильно подобрать размер TLAB'а? Что делать, если нужно выделить 10% от размера TLAB'а, а свободно только 9%? Может ли объект быть аллоцирован вне TLAB'а? Когда (если) обнуляется выделенная память?
Задавшись этими вопросами и не найдя всех ответов, я решил написать статью, чтобы исправить ситуацию.
Перед прочтением полезно вспомнить как работает какой-нибудь сборщик мусора (например, прочитав этот цикл статей).
Настройка аутентификации в Citrix XenDesktop 7.x c использованием смарт-карт JaCarta PKI
2017-07-28 в 6:51, admin, рубрики: citrix, citrix xendesktop, JaCarta, JaCarta PKI, vdi, Аладдин Р.Д., аутентификация, Блог компании Аладдин Р.Д., информационная безопасность, криптография, системное программирование, смарт-картаНастоящая статья описывает процесс настройки двухфакторной аутентификации с использованием смарт-карт JaCarta PKI разработки компании «Аладдин Р.Д.» в виртуальной среде Citrix XenDesktop версии 7.x.
Читать полностью »
Колибри для Фантома
2017-07-25 в 10:32, admin, рубрики: колибри, операционные системы, системное программирование, фантом, фантом ос, фантомосКраткое содержание: разработка модуля совместимости с ОС Колибри внутри модуля совместимости с ОС Юникс внутри ОС Фантомь)
Внутри ОС Фантом есть маленький простенький Юникс. POSIX подсистема. В принципе необязательная для работы самого Фантома и довольно неполная — Unix Quake под ней собрать удалось, а, например, апач не соберётся почти наверняка. Тем не менее — она есть.
Чтобы продолжить, надо понимать, что такое ОС Колибри. Колибри — обрусевший западный проект микро-операционки на ассемблере. Собственно, это описание довольно полно. Над Колибри работают фанаты программирования на ассемблере x86, она, соответственно, непереносима и, к сожалению, очень плохо спроектирована. Очень — это катастрофически. Для понимания масштаба бедствия — нет никакого общего механизма определения успешности или ошибочности системного вызова. Для некоторых определить несупех просто невозможно, некоторые вызовы возвращают свой личный набор кодов ошибок, некоторые — какой-то другой.
Почему же, тем не менее, любопытно реализовать слой совместимости с этой ОС? Тому несколько причин:
- Она очень компактна. Забегая вперёд — первую программу для Колибри в Фантоме удалось запустить через четыре часа работы.
- Этот мини-проект стал драйвером развития некоторых нативных подсистем Фантома,
в частности — оконной. - Главное — всё состояние процесса Колибри, известное ядру, укладывается в небольшую структуру. Многие (почти все!) вызовы — stateless, то есть не опираются о какое-либо знание,
хранимое в ядре. Это идеальный кандидат на реализацию персистентных (переживающих перезапуск ОС) бинарных (не написанных на байткод-языке) процессов в Фантоме.
Поднимаем Linux на MIPSfpga и ПЛИС Altera
2017-07-22 в 21:56, admin, рубрики: C, fpga, mips, MIPS microAptiv UP, MIPSfpga, SoC, Verilog, Анализ и проектирование систем, программирование микроконтроллеров, системное программирование
Предоставленная Imagination Technologies документация на MIPSfpga очень хорошо и подробно описывает развертывание Linux. Но используемая при этом система на кристалле построена с помощью Xilinx-специфических периферийных модулей. Потому ее повторение на отладочной плате с ПЛИС Altera в исходном виде представляется невозможным. Решением является система на кристалле MIPSfpga-plus с ее платформонезависимой периферией. О том, как запустить на ней Linux, читайте в этой статье.
Быстрое восстановление данных. Схема бабочки для регенерирующих кодов
2017-07-20 в 8:40, admin, рубрики: butterfly, Алгоритмы, Блог компании RAIDIX, высокая производительность, кодирование, математика, регенерирующие коды, системное программирование, системы хранения данных, СХД
Для кодов, описанных в предыдущей статье про восстановление данных, предполагалась постановка задачи, при которой минимизируется количество дисков, необходимых при операции восстановления. В [2] обсуждается применение сетевого кодирования к задачам хранения данных, получившее значительное внимание исследователей в последние годы. Здесь рассматривается не оптимизация количества дисков, необходимых для восстановления данных, а минимизация возникающего при этом сетевого трафика.
Предположим, что система хранения состоит из n узлов. Рассмотрим файл, состоящий из B символов поля GF(q), который кодируется в nα символов над GF(q) и распределяется по узлам, так, что каждый узел хранит α символов. Код построен таким образом, что данные могут быть целиком восстановлены по информации с k узлов. При этом для восстановления данных одного узла достаточно получить β ≤ α информации с d узлов [1,2], см. рис. 1. Величина γ = dβ называется диапазоном восстановления (repair bandwidth).
Читать полностью »