Обновить
128K+

Операционные системы

Без них как-то неудобно, ощущения не те

100,66
Рейтинг
Сначала показывать
Порог рейтинга
Уровень сложности

Написание ядра ОС с нуля. Часть 1

Уровень сложностиСложный
Время на прочтение7 мин
Охват и читатели5.7K

Когда я только знакомился с OSDev, я очень долго искал соответствующие материалы. Находил и на YouTube, и на Habr, и просто какие‑то англоязычные сайты (тогда я не сильно знал английский). Но почти все что я находил было либо незаконченным, либо недостаточно понятным и полным.

В этой статье я постараюсь рассказать все так, как ожидал я это от других.

Читать далее

Новости

Я что‑то нажала и картинка пропала: как сделать скриншот и неужели кнопки Print Screen может быть недостаточно?

Уровень сложностиПростой
Время на прочтение5 мин
Охват и читатели7.1K

Я представляю, насколько поверхностным может казаться такой текст на Хабре, но по личному опыту могу сказать: огромное количество суперпрофессиональных, талантливых IT-бизнесменов, программистов и даже дизайнеров, не знают, как снимать скриншоты, и мучаются, пользуясь неподходящими инструментами.

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

Не стесняйтесь его читать.

Далее

Эволюция планировщиков ядра Linux — от O(1) до CFS и EEVDF

Уровень сложностиСредний
Время на прочтение9 мин
Охват и читатели8.4K

Планировщик процессов — одна из важнейших подсистем ядра Linux. Именно он определяет, какой поток получит процессорное время в каждый конкретный момент. Несмотря на многоядерность современных компьютеров, количество одновременно выполняемых задач практически всегда значительно превышает доступные вычислительные ресурсы. Поэтому ядру необходимо постоянно принимать решения о распределении процессорного времени между задачами.

Привет! Я Никита, разработчик системного ПО в Selectel. В этой статье рассмотрим эволюцию трех наиболее известных планировщиков Linux: O(1), CFS (Completely Fair Scheduler) и EEVDF (Earliest Eligible Virtual Deadline First).

Читать далее

Stapler: текстовый «рецепт» сборки и управление пакетами в ОС «Альт»

Время на прочтение3 мин
Охват и читатели5.3K

Stapler: текстовый «рецепт» сборки и управление пакетами в ОС «Альт»

Во время установки «Альт Рабочей станции» 11.2 можно загрузить инструмент, позволяющий использовать приложения из различных источников, включая сторонние репозитории. Его также можно установить в других ОС «Альт» на платформе p11. Речь идет о Stapler.

Читать далее

Пишем терабайты видео на диск в Go и не даем ОС сожрать всю память

Уровень сложностиСредний
Время на прочтение4 мин
Охват и читатели63K

Выкатили мы первый релиз в прод (100 камер), обрадовали клиентов, начали работать. Прошел где-то час, полетели алерты. Залезаю на сервак, смотрю htop – а там свободно 100 метров ОЗУ. Пу-пу-пу-пу. Нужно внести уточнение что боевой сервер имел 32 гига озу. Ожидаемое поведение было то что процессор отдыхает, сетевуха переваривает трафик, озу 250-300 МБ, диски нагружены не сильно. Так что, когда видишь такие цифры в htop, начинаешь винить себя и свои кривые руки, написавшие это "Г". Но все же решили пойти в Гугл, чатгпт и тому подобное. Благо, ответ нашелся быстро, и посыпать голову пеплом перестали.

Код оказался не вообще не причем, память сожрал сам Линукс. Если когда-нибудь вы писали тонны данных на диск, я думаю вы уже поняли в чем дело. Есть такой «невидимый враг» как страничный кэш (Page Cache). Вот именно он и был корнем этой проблемы.

Как работает страничный кеш и что с ним делать?

Когда ваша функция, которая должна писать данные на диск пишет данные, на самом деле она не пишет их на диск. Она пишет их в ОЗУ. Логика ядра Линукса проста и банальна, и она направленна на ускорение «отзывчивости» системы, всю суть можно объяснить так: «О, только что записали сотню гигабайт данных, наверное, скоро понадобится эти данные прочитать. Оставлю-ка я их в кеше, пользователь будет рад что так быстро смог их прочитать.» И так гигабайт за гигабайтом, пока в сервере не кончится физическая память.

Типичное решение проблемы – пишем скрипт, который раз в час делает echo 3 > /proc/sys/vm/drop_caches. Ну а кто-то просто забивает и позволяет системе убивать случайные процессы через OOM Killer. Но мы же пишем отказоустойчивую штуку. Нам такое не подходит. Задача объяснить ядру ОС, что наши fMP4 сегменты видеоархива — это write-only мусор на небольшое количество времени (т.к если клиент не хочет долго хранить записи, то архив чистится, а если хочет – мы отправляем архив после N времени хранения в S3, а локальную копию тоже чистим). Так что все должно работать по принципу – записал и забыл.

Читать далее

64 байта и одна константа: разбор переключения контекста в ядре на Rust

Уровень сложностиСложный
Время на прочтение7 мин
Охват и читатели10K

В прошлый раз я писал про потерянное пробуждение и получил в комментариях справедливое замечание, что примитив там классический. Так и есть. Сегодня про место, где классики меньше: как в моём ядре устроено переключение контекста, и почему ассемблер там знает смещение поля в структуре Rust.

Это неприятная связь. Ассемблеру нужен байтовый доступ к сохранённым регистрам, а раскладку структуры определяет компилятор. Если эти двое разойдутся во мнениях, вы не получите ошибку компиляции. Вы получите ядро, которое пишет регистры мимо и падает где-то далеко от места ошибки.

Читать далее

Родитель засыпал навсегда: чего Rust не делает за вас в ядре ОС

Уровень сложностиСложный
Время на прочтение5 мин
Охват и читатели8K

Я пишу ядро операционной системы на Rust. Не потому что собираюсь заменить Linux, а потому что мне интересно, что получится, если закладывать безопасность в архитектуру с нуля, а не встраивать в готовое.

Довольно быстро выяснилась вещь, о которой в разговорах про Rust в системном программировании говорят реже, чем стоило бы. Язык закрывает один класс ошибок и оставляет другой нетронутым. И второй класс ловится куда хуже первого.

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

Читать далее

Ubuntu Touch 24.04-2.0: что в свежем релизе мобильной Linux-системы

Время на прочтение6 мин
Охват и читатели13K

Несмотря на то что Canonical закрыла Ubuntu Touch почти девять лет назад, мобильная Linux-система продолжает развиваться силами фонда UBports и сообщества. Проект регулярно получает обновления и постепенно расширяет список поддерживаемых устройств. Новый релиз Ubuntu Touch 24.04-2.0 — очередной шаг в развитии ветки 24.04. Основные изменения затронули браузер, работу с современными дисплеями и ряд повседневных функций, которыми пользователи пользуются каждый день. Давайте разберемся, что получилось у разработчиков.

Читать далее

Как я год проработал на Arch Linux, сдался и вернулся на скучную Ubuntu для реальной работы

Время на прочтение6 мин
Охват и читатели32K

Весь мой путь в Linux начался в студенческие годы, в момент, когда я получил предложение о работе от своего преподавателя в универе. Оказалось, что помимо преподавательской работы он также трудился в IT-компании, которая на тот момент искала интернов.

Собеседование заняло 10 минут, без единого вопроса про системы хранения или задачи с кодом. Мы просто поздоровались, технический директор Павел выдал мне доступы и объяснил суть: за полгода мне нужно пройти три модуля, по два месяца на каждый, удаленно с возможностью работать из офиса — путь от «понять, как устроено ядро» до «написать драйвер под реальное железо и собрать прошивку под FPGA».

Я дважды стирал себе диск, ради стажировки купил трехкилограммовый ноутбук за $50, потом воевал с Arch ради одной проприетарной программы — и в итоге вернулся туда же, откуда начинал, на Ubuntu. Это не история моего поражения (как некоторым хотелось бы), а притча об осознании. Осознании чего?

Читать далее

От boot-кода до shell: несколько месяцев разработки ОС на Rust с ИИ-агентами

Уровень сложностиСредний
Время на прочтение15 мин
Охват и читатели9K

Как разработать собственную ОС в одиночку, если заниматься проектом можно только в свободное время? Рассказываю, как ИИ помог мне пройти путь от изучения AArch64 до работающего ядра с вытесняющим планировщиком, userspace, ELF-программами и shell — и почему ответственность инженера при этом никуда не исчезает.

Читать далее

Клавиатура Vibe-кодера на Zephyr RTOS и двухъядерном микроконтроллере STM32WB55

Уровень сложностиПростой
Время на прочтение7 мин
Охват и читатели11K

В статье приведен мой опыт знакомства с Zephyr RTOS на примере создания беспроводной клавиатуры с тремя кнопками (Enter, Copy, Paste). Затронуты ключевые аспекты: настройка BLE-стека и HID-сервиса, управление энергопотреблением (STOP2, параметры соединения, программный сон), работа с Devicetree (overlay и правки dtsi), отладка через RTT, а также типичные проблемы (прошивка CPU2, EXTI-конфликты, требования HID к шифрованию). Проект полностью воспроизводим и содержит ссылки на полный исходный код и готовую прошивку.

Читать далее

Проект NextBSD ожил спустя десять лет. Что это за ОС и зачем ее возрождают?

Время на прочтение6 мин
Охват и читатели14K

Проект NextBSD, который многие уже успели забыть, неожиданно получил вторую жизнь. Его идея — объединить ядро FreeBSD с открытыми системными компонентами Darwin, такими как launchd, Mach IPC, Grand Central Dispatch и другими технологиями, которые сегодня лежат в основе macOS. Первая попытка была предпринята почти десять лет назад, но безуспешно. Сейчас разработку начали заново, используя современную кодовую базу FreeBSD и накопленный за это время опыт.

На первый взгляд, идея выглядит странно: зачем переносить системный слой одной операционной системы поверх ядра другой, если обе давно развиваются своими путями? Однако у разработчиков есть вполне практичная цель. Они не пытаются создать «бесплатную macOS», а хотят сделать FreeBSD более современной платформой, сохранив ее совместимость и сильные стороны. Разберемся, что именно уже удалось реализовать, зачем это вообще нужно и насколько жизнеспособным может оказаться такой подход.

Читать далее

Прибытие IBM PC, часть 1

Уровень сложностиПростой
Время на прочтение20 мин
Охват и читатели13K

В начале 1980-х годов рынок персональных компьютеров представлял собой шумный базар, изобилующий разнообразием. У каждого отдельного типа персонального компьютера — от Atari, Radio Shack, Apple, Commodore, Texas Instruments и многих других — была своя собственная субкультура, состоящая из клубов и журналов, наполненных сторонниками, готовыми воспевать превосходство выбранных ими машин. [1]

Хотя значительная клика мелких производителей, таких как North Star и Vector Graphic, поддерживала стандарт аппаратного обеспечения, совместимый с Altair (процессор, совместимый с 8080, и шина S-100), а также операционную систему CP/M Гэри Килдалла, их доля рынка была далека от монопольной. Стандарты в области графики, звука и подключения периферийных устройств различались ещё сильнее. Большинство микрокомпьютеров использовали процессоры, совместимые с Intel 8080 или MOS Technology 6502, но язык программирования BASIC был единственным практически универсальным «лингва франка», часто предустановленным в микросхемах постоянной памяти (ПЗУ) компьютера и обычно поставляемым компанией Microsoft.

Читать далее

Ближайшие события

Гениальная ОС, которую никто не помнит (с нескучными обоями)

Уровень сложностиПростой
Время на прочтение8 мин
Охват и читатели53K

Продукт, опережающий свое время и терпящий из-за этого фиаско, далеко не редкость для мира технологий. Именно таким когда-то была одна неординарная, гениальная в своей странности и очень красивая операционная система, увидевшая свет в начале 90-х…

Читать далее

Операционная Система на C без знаний C

Уровень сложностиСредний
Время на прочтение11 мин
Охват и читатели14K

Всем привет! Давно не писал статей и вот наконец решил вернуться.

Эта статья будет не столько о написании собственной операционной системы, сколько о личных переживаниях, которые, возможно, знакомы и вам. Может быть, она повлияет на ваше отношение к обучению и поможет не совершить тех же ошибок, которые совершил я.

Читать далее

Хронология развития Linux

Время на прочтение15 мин
Охват и читатели9.6K

«Привет всем, кто использует Minix!

Я разрабатываю (бесплатную) операционную систему (просто как хобби, она не будет такой масштабной и профессиональной, как GNU) для клонов AT на базе процессоров 386 (486). Работа над ней ведётся с апреля, и проект уже начинает обретать очертания. Я был бы рад услышать любые отзывы о том, что вам нравится или не нравится в Minix, так как моя ОС в чём‑то напоминает её (у неё такая же физическая структура файловой системы (по практическим соображениям) и так далее)...»  — Линус Торвальдс, 25 августа 1992 г.

Читать далее

wiiMac: запускаем Mac OS X на Nintendo Wii

Время на прочтение8 мин
Охват и читатели12K

Парадоксально, но факт: классическая консоль Nintendo Wii ближе к старым Mac, чем может показаться. Внутри процессор IBM Broadway с архитектурой PowerPС 750 подобные чипы использовались в iMac G3 и iBook G3. Эти компьютеры работали под управлением ранних версий MacOS X, что упрощает задачу — не надо ничего эмулировать. Код ОС будет выполняться процессором нативно, без лишних абстракций.

Однако есть и ряд сложностей: все же Wii не является Macintosh, а следовательно, большая часть компонентов взаимодействуют иначе. У консоли другой загрузчик, видеоподсистема и периферия. Так что запуск на ней MacOS X — задача со звездочкой. Поэтому наливайте себе холодный чай, доставайте фрукты и добро пожаловать под кат.

Читать далее

Почему Windows Vista не такая плохая как кажется?

Уровень сложностиПростой
Время на прочтение6 мин
Охват и читатели8K

В этой статье мы вспомним, почему Vista была не такая плохая как кажется, разберём её сервис-паки, историю и какие глобальные изменения ввела имено Vista

Читать далее

ОС Нейтрино: адаптивная технология прикладного профилирования реального времени

Уровень сложностиСредний
Время на прочтение8 мин
Охват и читатели5.9K

Куда уходит процессорное время? Этот вопрос встает перед разработчиком встраиваемой системы как при поиске узких мест, так и при разборе ситуаций, когда система укладывается в сроки на стенде и перестает укладываться на объекте.

В статье расскажем, почему инструменты построены вокруг системной трассы ядра и как они связаны с планировщиком потоков, а затем пройдем весь путь от сборки инструментированной программы до готовых отчетов.

Читать далее

Как настроить Radioberry на актуальной версии Raspberry Pi OS

Время на прочтение8 мин
Охват и читатели15K

Мы привыкли видеть Raspberry Pi в виде основы для различных SDR-приемников, декодеров и панорамирующих адаптеров. А вот полноценные КВ-трансиверы на базе RPI встретить сложно. Проект Radioberry — одно из редких приятных исключений. Эта маленькая плата превращает «малинку» в настоящую SDR-станцию со своим интерфейсом и возможностью как принимать, так и передавать в КВ-диапазоне.

До недавнего времени настройка была простой, но после обновления Raspberry Pi OS старые инструкции почти утратили актуальность: плата больше не определялась в системе. Один мой знакомый радиолюбитель даже решил, что она вышла из строя, и попросил меня о диагностике.

Читать дальше
1
23 ...