Создание сервера для онлайн ММО игр на PHP ч.13 — Event-driven паттерн, JSON-RPC и почему не сервисная (SOA) архитектура / Хабр
webrobotУровень сложности Средний
Время на прочтение 4 мин
Количество просмотров 2.3KPHP *Программирование *Проектирование и рефакторинг *Разработка игр *Алгоритмы *
Роадмэп
В процессе разработки разработчик часто реализовывает функционал, который кажется ему логичным даже не задумываясь как этот архитектурный стиль называется. При этом читая про паттерны и шаблоны проектирования архитектуры в научной литературе информация может показаться сложной, а названия трудно запоминающиеся.
В этой статье я без привязки к коду объясню простым языком и в картинках как можно применять в разработке архитектуры авторитарного сервера для онлайн игр шаблон проектирования Event-driven.
Оригинальное изображение схемы архитектурыВзято с сайта https://www. altexsoft.com/blog/event-driven-architecture-pub-sub/
А теперь окунемся в теорию этого шаблона на Википедии в русском и английском варианте убедиться что все сделано правильно:
Генераторы событий (агент, продюсер) — они у нас есть и это игровые события (команды, которые могут отправлять игроки и генерировать NPC — например движение и атака на языках программирования LUA, JavaScript и PHP). На данный момент пренебрегая размером пакета я использую пакеты с командами стиля JSON-RPC.
Сверимся с ВикипедиейМеханизм обработки событий (подписчик) — Это не обязательно должен быть сервис (приложение которое может быть расположено в т.ч. на другой физической машине). В проекте о котором ведется серия статей не основан на сервисной архитектуре
Почему?Если обратится к Википедии одним из главных принципов сервисной архитектуры является независимость от того на каком языке написан сервисы — они могут вызваться через какой-то общепринятый канал взаимодействия (например HTTP запросы в микро сервисной архитектуре через REST API методы).
Этот подход хорошо зарекомендовал себя в WEB разработке, но для ММО игрового сервера может быть в ряде случаем медленным, сложным в реализации и поддержке, но не всегда.В частности приложения для создания игровых карт может работать как сервис, написано на любом языке программирования, находится на отдельной физической машине — обращение к приложению из вне для получения сетки карты и ее графики происходит по HTTP в момент авторизации игрока на сервисе авторизации — который так же может «жить» отдельно.
Можно видеть и в данных случаях — это WEB приложения и HTTP обмен. Что же касается главных приложений: WebSocket и Игрового сервера (выполняющий расчеты разных механик и команд игроков) — то они тесно связаны языком программирования который обеспечивает им быстрый обмен данных между собой на скорости 1 600 000 запросов в одну сторону, хотя кроме обмена данными другой жёсткой связи нет (т.к. они работают параллельно в разных протоках как разные процессы со своим кодом и набором библиотек).
Однако возможно сделать их и в виде независимых сервисов (и писать каждый, в том числе на разных языках программирования), но для этого понадобиться реализовать обмен между этими сервисами, где самым быстрым протоколом будет обмен данными через общую память (Shared Memory), но эти два сервиса будут должны находится на одной физической машине для использования такого обмена.
Согласно официальному описанию ее эталонной архитектуры допускается что системы на основе сервисов (SOA) могут не быть масштабированы (хотя стремление к этому является целью). Многие разработчики считают иначе (что сервисы обязательно должны быть автономны и способны к масштабированию) выдавая цели SOA за обязательное требование к ним.
Если допускаются сервисы на основе модели SOA которые можно масштабировать — есть и те сервисы на основе SOA которые нельзя масштабировать
Можно использовать и корутину (как например есть в Unity или файберы в PHP) как работающий асинхронно в текущем процессе обработчик событий, и отдельный процесс работающий на той же машине и отдельный поток (thread)
В любом случае подразумевается что это процесс работает в бесконечном цикле (в языке PHP можно комбинировать это с тиками и сигналами) или ставится на паузу и ждет поступления команд.
Такой подход можно реализовать используя сокеты (в т.ч. на базе TCP) или прерывания (в PHP это можно реализовать через библиотеку Event что пришла на замену устаревшей Libevent, EV и наконец Swoole которой я отдаю предпочтения за счет того что у нее есть свои библиотеки для создания сервера, корутины для асинхронного выполнения запросов в БД и записи в фаилы и channel как те о которых я писал в статье про обмен данными между потоками, но для обмена данных между корутинами).
В нашем случае обработчик — это Игровой сервер о котором я писал в предыдущей статье работающий в отдельном потоке thread использующий прерывания для выполнения накопившихся событий в текущем, как я его называю, кадре сервера.
Сверимся с Википедиейпервым делом — обработчик событий
может, но не обязательно сделать его как сервис
Канал событий (брокер) — в Википедии явно не указано наличие брокера сообщений и его отсутствие не означает что архитектуру нельзя будет назвать Event-driven, однако в высоко нагруженных системах без брокера ваше приложение будет работать медленно если Механизм обработки событий будет и принимать данные от Генератора событий и эти события выполнять в одном потоке.
Каналы событий можно использовать разные (если вы читали мои статьи я часто называю это шиной данных), необходима гарантированная доставка данных (UDP не рассматриваем), а так же понимание нужна ли нам масштабируемость. Вот пару вариантов шины обмена данных
Сокеты (PHP предоставляет для этого довольно обширный функционал)
Протокол TCP (в т.ч. и его WebSocket протокол который можно создать в PHP на базе функций по работе с сокетами)
Shared Memory (PHP предоставляет лишь базовые инструменты в библиотеке Shmop и отдельными функциями при работе с Семафорами)
HTTP
Каналы (channel) обмена данными между сопроцессами (корутинами) или потоками (процессами) о которых было написано выше .
В нашем случае брокером выступает Websocket сервер
Последующее действие, управляемое событиями
— как опять же нам сообщает русскоязычная версия Википедии этот пункт не является обязательным (как например не на все события игровой сервер обязан что-то возвращать — например когда стало нельзя пройти в координаты из команды игрока).После пакетной обработки игровым сервером текущих событий цикла (я его называю кадром сервера) он возвращает все изменения агентам (игрокам).
Подписывайтесь на мой профиль если вы хотите узнать о выходе новых статей, так же я публикую видео о процессе разработки данного стартапа на Youtube.
Буду благодарен за лайк к статье.
Теги:- php
- event-driven
- разработка игр
- mmo
- mmorpg
- шаблон проектирования
- PHP
- Программирование
- Проектирование и рефакторинг
- Разработка игр
- Алгоритмы
Всего голосов 10: ↑9 и ↓1 +8
Комментарии 2
Стрельцов Михаил @webrobot
IT архитектор, PHP developer, разработчик игр
PostaАрт c Ренатой Пиотровски: архитектор Сергей Чобан — о формуле идеального мегаполиса, важности архитектурного рисунка и балансе творчества и рутины в профессии
Новым героем серии бесед Ренаты Пиотровски с людьми искусства и архитектуры, преобразовывающими пространство вокруг, стал Сергей Энверович Чобан — знаменитый архитектор, проектировавший башню «Федерация» и Центр Зотов в Москве, «Дом Бенуа» в Санкт-Петербурге, Пакгаузы в Нижнем Новгороде, кинотеатр «Кубикс», отель NHow и множество других зданий в Берлине. Поговорили о том, почему нельзя сносить старое, как строить новое — и как оставаться влюбленным в свою профессию, продолжая каждый день учиться новому даже у студентов.
Рената Пиотровски: Сергей Энверович, вы архитектор мирового уровня. Насколько в работе своего бюро вы вовлечены в решение не только финансовых, но и творческих вопросов, учитывая, насколько много у вас проектов? Успеваете ли все проконтролировать и защитить свою творческую сущность — или вас сейчас больше поглощают корпоративные задачи?
Сергей Чобан: Безусловно, работа в моем берлинском офисе «Чобан Фосс» связана с комплексом задач. Но я не готов утверждать, что творческие и так называемые организационные задачи так уж сильно друг от друга отличаются, что граница очень четкая. Организовать весь процесс, принимая участие в том числе и в проектировании, и в процессе реализации, — это и есть путь, который должен пройти архитектор, чтобы построить здание, которое он задумал. Если работа художника, тоже требуя каких-то организационных усилий, все же остается в целом довольно зацикленным на собственных возможностях процессом, то в реализацию архитектурных проектов всегда вовлечено огромное количество людей. Это вопрос взаимодействия и «внутренней» команды архитектурного бюро, и «внешней» команды, участвующей в строительстве объекта, это комплексный процесс, и ты просто не можешь не быть вовлечен в него полностью, если хочешь реализовать свою задумку. Так что я не вижу противоречия между творческими и организационными задачами, это просто звенья одной цепи.
А какой этап в работе над проектом вам доставляет наибольшую радость?
Все этапы доставляют то радость, то огорчение, потому что каждый этап — это часто взаимные поиски компромиссов с заказчиками, строителями и так далее. Нет, реализация архитектурного проекта — это не процесс непрерывной радости. (Улыбается.) Но это очень креативный процесс, это такая творческая синусоида со своими наивысшими и низшими точками. Главное, чтобы на выходе получился результат, который удовлетворит всех участников.
Как вы пришли в профессию архитектора? Ваш отец — физик-теоретик, мама — инженер, дедушка — профессор политехнического института…
Я пришел в профессию архитектора из рисования. Я учился в средней художественной школе имени Бориса Васильевича Иогансона при Академии художеств Советского Союза — этот художественный лицей готовил и продолжает готовить абитуриентов для художественных вузов. То есть ориентация на художественные вузы происходит довольно рано. А живя в тогдашнем Ленинграде, трудно было не погрузиться в атмосферу такого «построенного мира» — сложного, интересного, архитектурного. И в какой-то момент я решил, что меня влечет этот мир необычных пространств, композиций, домов, ансамблей. В общем, я как-то угадал, что мне, условно говоря, нравится рисовать дома — и начал двигаться в этом направлении. В итоге поступил на архитектурный факультет Института Репина в Ленинграде.
В Википедии вы значитесь как немецкий архитектор русского происхождения. Насколько разные традиции у немецкой и российской архитектурных школ?
В Германии очень сильная школа рабочей документации: когда я приехал в Германию в начале 90-х, я был поражен точностью и последовательностью в реализации проектных идей, большой степенью приближения и детальностью чертежей по отношению к изначальной идее — пусть даже самой простой. Эта фундаментальная точность рабочей документации — большой плюс немецкой школы, потому что рабочая документация является основой успешной реализации любого проекта в натуре. И то, что она очень последовательно выходит из проектного чертежа, из концепции, означает, что ты всегда думаешь на шаг вперед. В то же время порой немецкую школу обвиняют в некоторой сухости, но современная архитектура в принципе использует другой словарный запас (с точки зрения орнаментов, деталей и так далее), чем полтора-два века назад.
В России самая известная ваша работа — башня «Федерация» комплекса «Москва-Сити». Какое значение этот проект имеет для вас?
Я в России реализовал множество проектов, но началось все именно с «Федерации»: выиграв в конкурсе, я понял, что этот проект станет для меня в некотором смысле ключевым — и что он не будет единственным, который я реализую в России. Это был гигантский проект, который воплотить в жизнь удалось не полностью, однако он все равно для меня — большой успех и удача, это амбициозное здание высотой 375 метров — важная веха для меня.
Насколько сложно строить в мегаполисе, где перемешаны стили, эпохи, где нужно проявлять новаторство и одновременно сохранять историю?
Мегаполис мегаполису рознь. Где-то сильно развито ансамблевое градостроительное мышление, когда ты не можешь превышать высоты соседних зданий, когда ты должен в большей степени ориентироваться на то, что происходит вокруг тебя, а есть мегаполисы, в которых можно позволить себе большую степень свободы, большую раскованность, большую контрастность по отношению к окружению. Например, есть города, которые могут достаточно активно развивать свою небесную линию — та же Москва. А вот Санкт-Петербург или Берлин гораздо в меньшей степени могут себе представить развитие этой небесной линии и держатся за то, что уже есть. Москва в этом смысле очень динамично развивающийся город — и башня «Федерация» как раз соответствовала общим градостроительным задачам.
Хочу вернуться в 2003 год: вместе с Андреем Гозаком и Ириной Коккинаки к выставке, проходившей в Германии, вы издали книгу «Чертежный архив Москвы», посвященную тому, как современная Москва «проступала» и вырастала из купеческого города. А какая бы была Москва сегодня, если бы тогда все задуманные архитектурные идеи были реализованы?
Да, выставка прошла в Берлине, а затем и в Москве в Музее архитектуры… Если бы все планы воплотились в жизнь, появилась бы масса интересных зданий. Например, если брать территорию вокруг Страстного монастыря, вокруг Пушкинской площади: печально, что были снесены знаковые церковные постройки, в том числе Страстной монастырь. С другой стороны, например, на узловых точках Бульварного кольца были запроектированы горизонтальные небоскребы Эля Лисицкого или же здание «Ленинградской правды», на конкурсе для которого были интересные проекты и у Мельникова, и у братьев Весниных, и у Ивана Леонидова, и они были сделаны раньше, чем возникло здание «Известий» Бархина. Все эти здания, будучи вкупе реализованными, могли бы создать еще более сложный и плотный ансамбль на узлах Бульварного кольца, у Никитских ворот или на пересечении Тверской и Бульварного. Лично я за то, чтобы создавать новые архитектурные проекты — но не за счет сноса. Например, идея построить Наркомат тяжелой промышленности на месте ГУМа (и вообще все попытки сделать новые здания на месте ГУМа, который, слава богу, был сохранен) я воспринимаю с отторжением, даже если предлагались яркие идеи «замены». Я за то, чтобы отдельные страницы истории не вырывались, за то, чтобы просто писались новые, чтобы город превращался в правдивую летопись. Идешь по городу — и «читаешь» его историю страница за страницей.
Кстати, вы также соавтор книги «30:70. Архитектура как баланс сил» — речь про баланс техничных, модных зданий и рядовых застроек. В каких европейских городах этот баланс сегодня наиболее соблюден?
Книга была написана в середине 2010-х — но процесс развития мегаполисов происходит очень стремительно, и я готов признать, что сегодня это соображение, связанное с регламентаций, с регуляцией внутри города, уже в какой-то степени не актуально. Сейчас мы наблюдаем более хаотичное развитие в большом количестве мировых мегаполисов, чем я пытался описать вместе с Владимиром Седовым. В этой книге я исходил из достаточно идеалистического представления о том, что город можно спланировать в каких-то своих частях, выделить отдельные территории для знаковых построек, которых должно быть не более 20–30 %, а оставшуюся территорию превратить в обрамление бриллианта. То есть бриллиантом является иконическое здание, а кольцом является эта фоновая архитектура, которая выполняется из более простых форм, но с большим количеством деталей, орнаментов, интересных элементов. У этой фоновой архитектуры — довольно «спокойная» высота, а вот отдельные иконы воспринимаются как формы, скульптурные элементы — и используют все возможности того современного языка архитектуры, который сегодня не является прямолинейным, а включает в себя большое количество пластических находок.
Но стало понятно, что и со стороны заказчиков, и со стороны владельцев участков постоянно возникает вопрос: если в одном месте возникло такое иконическое здание, почему рядом не может возникнуть другое? Тот принцип, который я описываю, был бы возможен только с учетом достаточно жесткой регуляции — а создать ее в современном мегаполисе довольно сложно.
Мне казалось, что наоборот сейчас регулирование более жесткое…
Ни в коем случае, сегодня градостроителям доступны гораздо большая спонтанность, хаотичность и, я бы сказал, свобода очень ситуативных решений, причем микроситуативных решений в разных точках становится все больше. Жесткая регламентация была возможна в Париже Османа второй половины XIX века, но сегодня это уже утопия.
Вы разрабатывали проект Дворца водных видов спорта к Универсиаде 2013 года в Казани и реконструировали московские «Лужники». Чем вам интересна работа над спортивными объектами?
Как архитектор ты всегда стремишься к разным типологиям: музейная типология, спортивная типология. Это просто объекты другой степени воздействия на человека. Когда ты проектируешь только жилые здания или только офисные здания — это один тип решений, а проектировка спортивных сооружений — это работа с пространством совершенно другого масштаба. На Стадионе водных видов спорта в Казани мы в то время применили клеёные деревянные конструкции, которые перекрыли пролет в 70 метров — десять лет назад это было абсолютно революционным решением, а сегодня уже во многих странах мира все больше строят из дерева — материала восстанавливаемого, который еще при своей жизни поглощает много парниковых газов. Можно сказать, мы на ранней стадии предугадали этот тренд.
Сегодня архитектор — это звезда, люди даже выбирают жилье, приходя на имя. При этом такая слава оборачивается тем, что архитектор в глазах обывателя становится ответственен за все. Вот недавно в Берлине лопнул аквариум, который вы спроектировали в 2004 году. Какие чувства вы испытали?
Этот аквариум — моя градостроительная идея, которая получила довольно яркое воплощение благодаря компании, которая специализировалась на проектировании и производстве таких аквариумов. Этот аквариум как архитектурное и даже в большей степени техническое явление получил огромную известность, объект просуществовал почти 20 лет, собирая сотни тысяч посетителей ежегодно. Безусловно, эта авария — это катастрофа. И счастье, что это произошло рано утром и не пострадали люди, однако пострадали рыбы (кораллы, кстати, там были искусственными). Это беда, так бывает, это часть профессии — видеть, как здания строятся и как иногда, к сожалению, уходят по не зависящим от тебя причинам.
Несмотря на огромное количество работы вы продолжаете активно рисовать. Что для вас рисунок? Способ сохранить впечатления? Отдых?
Это по-прежнему часть профессии. Я проверяю в рисунках какие-то свои пространственные идеи. Плюс это процесс постоянного обучения, очень хороший. Вот сейчас я был в Сан-Паулу, у меня там проходила выставка, и я три дня проводил занятия со студентами — это был очень интересный опыт совместного рисования. Ты учишься у натуры, у зданий, у тех пространственных ситуаций, которые уже существуют. Рисуя их, ты проверяешь какие-то реализованные идеи, насколько они «рисовальны»… Скажем, есть фотогеничность, а есть такая подверженность рисунку — насколько рисунок хорошо ложится на вот эту построенную форму. Это тоже очень важный показатель того, насколько здание интересное, насколько его можно схватить и сделать интересную композицию в рисунке. Так что для меня рисунок — это момент проверки и обучения.
А у студентов вы сами чему-то новому учитесь?
Я считаю, что в нашей профессии нет каких-то безусловно сложившихся подходов. Надо внимательно наблюдать за путями, которыми идут другие люди — именно они дают тебе какие-то альтернативные сценарии, которые ты сам, может быть, так для себя и не предполагал. Ты учишься у других постоянно. И в рисунке я, например, когда рисую вместе со студентами, стараюсь не оказывать давление, не навязывать своих идей, как надо делать, а как не надо, с какого ракурса смотреть, а с какого нет. Каждый студент выражает свой внутренний мир в рисунке, и эти пару дней в Сан-Паулу снова это подтвердили, результат нашей совместной работы был интересен не в каком-то своем перфекционизме или сверхсовершенстве, а именно в разнообразии, в том, что каждый максимально проявил себя. То есть ты даже можешь свое физическое состояние проверить по рисунку — насколько у тебя твердая рука, насколько ты быстро реагируешь, насколько быстро рисуешь. Это зеркало твоего физического состояния — и зеркало души.
Расскажите о вашем благотворительном Фонде архитектурного рисунка?
Благодаря Музею архитектурного рисунка в Берлине я стараюсь показывать людям — и близким к архитектуре, и далеким от нее, — как архитектура рождается. Ведь здания — это тоже наша жизнь. Например, в Берлине накал страстей вокруг появляющихся новых зданий всегда очень велик, порой очевидно непонимание, почему такое здание возникло, почему оно такое скучное или, наоборот, экзальтированное. И показать, как рождаются идеи, как они претворяются в жизнь, — это интересно.
Сейчас у нас идет выставка рисунков великого итальянского архитектора Альдо Росси, который своими рисунками выразил гораздо больше, чем даже своими построенными зданиями. И без его рисунков трудно эти здания понять, понять тенденции в современном мегаполисе. Например, в своих рисунках он показывает, насколько современный мегаполис стремится к некоторой коллажности, когда здания разных эпох накладываются друг на друга и превращаются в непрагматичную книгу архитектуры. И, кажется, даже журналисты вдруг увидели ключ к новому Берлину, менее скованному ограничениями, потому что в рисунках этот мир разнообразных зданий, наполненный контрастами и срезами разных эпох, особенно красив. Рисунок позволяет какие-то вещи понять на «нетяжелом», не слишком фундаментальном уровне. Это не книга, которую надо прочесть от корки до корки, это не построенное здание, в котором ничего уже изменить нельзя. А ведь понять, почему окружающая среда становится такой, а не другой — крайне важно для любого горожанина.
Что Википедия не может рассказать вам об архитектурных стилях
Справочник по архитектурным стилям : Современные архитектурные стили имеют свое значение, и график каждого архитектурного стиля отличается в зависимости от периода их эволюции с учетом политического и культурного фона. Жилые архитектурные стили имеют большое разнообразие и влияние в зависимости от их развития во всем мире, которые на самом деле представляют личный стиль жизни разных культур и людей.
Мы собираем различные типы архитектуры зданий, и вы можете легко преобразовать этот документ в формате pdf с архитектурными стилями для использования в будущем. Вам действительно нравится список популярных архитектурных стилей, а также топ-7 типов архитектурных стилей .
Когда вы будете просматривать эту последнюю коллекцию стилей дизайна, скажите мне, в каком архитектурном стиле мой дом? Американская колониальная архитектура и американские стили домов или стили домашнего интерьера имеют особую категорию и влияют на современные стили домов во всем мире. Каждый внешний вид дома говорит об их владельце.
Характеристики современной архитектуры : История современной архитектуры с современными архитектурными материалами играет главную роль. Лучшие образцы современной архитектуры в формате pdf доступны для скачивания. И современная архитектура ppt с постмодернистской архитектурой влияет на стили дизайна.
Различные архитектурные стили участвуют в эволюции домов современной архитектуры. Вы найдете интересную краткую историю архитектуры в потоке эволюции архитектуры и архитектурных паттернов против паттернов проектирования.
Вы также хотели бы изучить стили дизайна дома с изображениями типов домов в архитектурные периоды в Англии.
Хронология архитектуры Исторические периоды и стили зданий типов 1-5 являются вызовом и возвратом архитектурного стиля. График истории архитектуры в формате pdf и график истории архитектуры в формате ppt — лучшая коллекция для учебных целей. Лучшие типы архитектурных стилей в мире дают вашим типам архитектурного дизайна импульс и новые идеи. Кроме того, получение знаний о списке архитектурных движений в типах строительных конструкций и архитектурных стилях ppt даст вам большую высоту в изучении вашей архитектуры.
Проверьте теорию дизайна : теория дизайна, концепция дизайна в архитектуре, дизайн формы и функции, материальный смысл дизайна, элементы концепции дизайна, правило трех, элементы концепции, темы исследования архитектурного дизайна для диссертации.
Что Википедия не может рассказать вам об архитектурных стилях:
Здесь мы получили базовое, но важное определение различных видов
- Искусство и ремесла Архитектурные стили.
- Архитектурный стиль прерий.
- Ричардсоновский архитектурный стиль.
- Архитектурный стиль модерн.
- Федеральный архитектурный стиль.
- Архитектурный стиль ар-деко.
- Готический архитектурный стиль.
- Региональный архитектурный стиль района залива.
- Что такое бруталистская архитектура.
- Архитектурный стиль хайтек.
- Современные архитектурные стили.
- Деконструктивный архитектурный стиль.
- Стиль и особенности современной японской архитектуры.
- Современный архитектурный стиль.
- Архитектурный стиль неоэкспрессионизма.
- Стиль постмодернистской архитектуры.
- Экспрессионистский стиль современной архитектуры.
- Принципы органической архитектуры и характеристики.
- Архитектурный стиль индуистского храма.
- Дизайн дома в тосканском стиле.
Скоро будет больше,…. .
Архитектурные стили и их происхождение всегда важны в истории архитектуры . Архитектурные стили являются наиболее популярными и влиятельными вещами в зависимости от их региона, политических условий, эпохи, технологий, образования, происхождения и т. д.
Стили дизайна — это способ классификации архитектуры по особенностям дизайна, что приводит к такой терминологии, как «Готический» стиль. Ранее мы видели некоторые уроки и методы обучения Doing Design. Вы должны посетить эти коллективные мысли о том, как создавать производные проекты и изучить теорию дизайна.
Я просто поместил сюда эти общие справочники по теории дизайна, чтобы вы знали, потому что если мы пойдем изучать архитектурные стили и их историю. Я лично считаю, что на этом этапе вы также должны знать знание дизайна.
Процесс загрузки Arch — ArchWiki
Чтобы загрузить Arch Linux, необходимо настроить загрузчик с поддержкой Linux. Загрузчик отвечает за загрузку ядра и начального виртуального диска перед началом процесса загрузки. Процедура сильно отличается для систем BIOS и UEFI. Подробное описание приведено на этой или связанных страницах.
Типы прошивки
Прошивка — это самая первая программа, которая запускается при включении системы.
Совет: Слова BIOS и (U)EFI часто используются вместо прошивки
BIOS
BIOS или базовая система ввода-вывода в большинстве случаев хранится во флэш-памяти на самой материнской плате и не зависит от системное хранилище. Первоначально созданный для IBM PC для обработки аппаратной инициализации и процесса загрузки, с 2010 года он постепенно заменяется UEFI, который не имеет тех же технических ограничений.
UEFI
Унифицированный расширяемый интерфейс встроенного ПО поддерживает чтение как таблицы разделов, так и файловых систем. UEFI не запускает загрузочный код из основной загрузочной записи (MBR), существует она или нет, вместо этого загрузка зависит от загрузочных записей в NVRAM.
Спецификация UEFI предписывает поддержку файловых систем FAT12, FAT16 и FAT32 (см. спецификацию UEFI версии 2.10, раздел 13.3.1.1), но любой совместимый поставщик может дополнительно добавить поддержку дополнительных файловых систем; например, HFS+ или APFS в некоторых прошивках Apple. Реализации UEFI также поддерживают ISO-9.660 для оптических дисков.
UEFI запускает приложения EFI, например. загрузчики, менеджеры загрузки, оболочка UEFI и т. д. Эти приложения обычно хранятся в виде файлов в системном разделе EFI. Каждый поставщик может хранить свои файлы в системном разделе EFI в каталоге /EFI/ имя_вендора
. Приложения можно запустить, добавив загрузочную запись в NVRAM или из оболочки UEFI.
Спецификация UEFI поддерживает устаревшую загрузку BIOS с помощью модуля поддержки совместимости (CSM). Если CSM включен в UEFI, UEFI создаст загрузочные записи CSM для всех дисков. Если для загрузки выбрана загрузочная запись CSM, CSM UEFI попытается загрузиться с загрузочного кода MBR диска.
Примечание. Intel постепенно прекращает поддержку CSM, полагаться на эту функцию в будущем может быть невозможно. [1]
Инициализация системы
В BIOS
- Система включена, выполняется самотестирование при включении питания (POST).
- После POST BIOS инициализирует оборудование, необходимое для загрузки (диск, контроллеры клавиатуры и т. д.).
- BIOS запускает первые 440 байт (область кода начальной загрузки Master Boot Record) первого диска в порядке следования дисков BIOS.
- Первый этап загрузчика в загрузочном коде MBR затем запускает код второго этапа (если есть) из:
- следующие сектора диска после MBR, т. е. так называемый post-MBR-пробел (только в таблице разделов MBR),
- загрузочная запись тома раздела или диска без разделов (VBR),
- для GRUB на диске с разделами GPT — загрузочный раздел BIOS для GRUB (используется вместо промежутка после MBR, которого нет в GPT).
- Запущен реальный загрузчик.
- Затем загрузчик загружает операционную систему путем последовательной загрузки или прямой загрузки ядра операционной системы.
В UEFI
- Система включена, выполняется самотестирование при включении питания (POST).
- После POST UEFI инициализирует оборудование, необходимое для загрузки (диск, контроллеры клавиатуры и т. д.).
- Микропрограмма считывает загрузочные записи в NVRAM, чтобы определить, какое приложение EFI запускать и откуда (например, с какого диска и раздела).
- Загрузочная запись может быть просто диском. В этом случае микропрограмма ищет системный раздел EFI на этом диске и пытается найти приложение EFI в резервном пути загрузки
\EFI\BOOT\BOOTx64.EFI
(BOOTIA32.EFI
в системах с IA32 (32- бит) UEFI). Вот как работают загрузочные съемные носители UEFI.
- Загрузочная запись может быть просто диском. В этом случае микропрограмма ищет системный раздел EFI на этом диске и пытается найти приложение EFI в резервном пути загрузки
- Прошивка запускает приложение EFI.
- Это может быть загрузчик или само ядро Arch, использующее EFISTUB.
- Это может быть какое-то другое приложение EFI, например оболочка UEFI, или диспетчер загрузки, например systemd-boot или rEFInd.
Если включена безопасная загрузка, процесс загрузки будет проверять подлинность двоичного файла EFI по подписи.
Примечание. Некоторые системы UEFI могут загружаться только с резервного пути загрузки.
Мультизагрузка в UEFI
Поскольку каждая ОС или поставщик могут поддерживать свои собственные файлы в системном разделе EFI, не затрагивая другие, мультизагрузка с использованием UEFI — это просто запуск другого приложения EFI, соответствующего загрузчику конкретной операционной системы. . Это устраняет необходимость полагаться на механизмы загрузки цепочки одного загрузчика для загрузки другой ОС.
См. также Двойная загрузка с Windows.
Загрузчик
Загрузчик — это программа, запускаемая прошивкой (BIOS или UEFI). Он отвечает за загрузку ядра с нужными параметрами ядра и любыми внешними образами initramfs. В случае UEFI само ядро может быть запущено UEFI напрямую с помощью загрузочной заглушки EFI. Отдельный загрузчик или менеджер загрузки по-прежнему можно использовать для редактирования параметров ядра перед загрузкой.
Предупреждение: Загрузчик должен иметь доступ к ядру и образам initramfs, иначе система не загрузится. Таким образом, в типичной настройке он должен поддерживать доступ к /boot
. Это означает, что он должен поддерживать все, начиная с блочных устройств, стекированных блочных устройств (LVM, RAID, dm-crypt, LUKS и т. д.) и заканчивая файловой системой, в которой находятся ядра и образы initramfs. .Примечание. Загрузка обновлений микрокода требует корректировки конфигурации загрузчика. [2]
Сравнение функций
Примечание:- Поскольку GPT является частью спецификации UEFI, все загрузчики UEFI поддерживают диски GPT. GPT в системах BIOS возможен с использованием либо «гибридной загрузки» с гибридной MBR, либо нового протокола только для GPT. Однако этот протокол может вызвать проблемы с некоторыми реализациями BIOS; подробности см. в справочниках по удилищам.
- Шифрование, упомянутое в поддержке файловой системы, является шифрованием на уровне файловой системы и не имеет отношения к шифрованию на уровне блоков.
Имя | Прошивка | Таблица разделов | Мультизагрузочный | Файловые системы | Примечания | ||||||
---|---|---|---|---|---|---|---|---|---|---|---|
БИОС | UEFI | МБР | GPT | БТРФС | доб4 | РайзерFS | ВФАТ | XFS | |||
ЭФИСТУБ | – | Да | Да | Да | – | – | – | – | Унаследовано от прошивки 1 | – | Ядро является действительным исполняемым файлом EFI, который можно загрузить непосредственно из прошивки UEFI с помощью efibootmgr или другого загрузчика. |
Унифицированный образ ядра | – | Да | Да | Да | – | – | – | – | Унаследовано от прошивки 1 | – | systemd-stub(7), ядро, initramfs и командная строка ядра, упакованные в исполняемый файл EFI для загрузки непосредственно из прошивки UEFI или другого загрузчика. |
ГРУБ | Да | Да | Да | Да | Да | Да | Да | Да | Да | Да | В конфигурации BIOS/GPT требуется загрузочный раздел BIOS. Поддерживает RAID, LUKS1 и LVM (но не тома с тонкой инициализацией). |
Известняк | Да | Да | Да | Да | Да | № | Без шифрования | № | Да | Нет | |
REFInd | № | Да | Да | Да | Да 2 | Без шифрования | Без шифрования | Без функции уплотнения хвостовика | Унаследовано от прошивки 1 | Нет | Поддерживает автоматическое определение ядер и параметров без явной настройки и поддерживает быструю загрузку [3]. |
Сислинукс | Да | Лимитед | Да | Да | Частично | Без: тома для нескольких устройств, сжатие, шифрование | Без шифрования | № | Да | толькоMBR; без разреженных инодов | : Отсутствует поддержка некоторых функций файловой системы.[4] Не имеет драйверов файловой системы[5], может получить доступ только к файловой системе, в которой он был установлен. |
системная загрузка | № | Да | Установка только вручную | Да | Да 2 | Возможна боковая загрузка 3 | Возможна боковая загрузка 3 | Возможна боковая загрузка 3 | Унаследовано от прошивки 1 | Возможна боковая загрузка 3 | Не удается запустить двоичные файлы из разделов, отличных от ESP или раздела расширенного загрузчика (раздел XBOOTLDR). Поддерживает автоматическое обнаружение унифицированных образов ядра при их размещении в esp /EFI/Linux . |
GRUB Наследие | Да | Нет | Да | Нет | Да | № | № | Да | Да | XFS v4 только | Прекращено в пользу GRUB. |
ЛИЛО | Да | Нет | Да | Нет | Да | № | Без шифрования | Да | Да | Да | Прекращено из-за ограничений (например, с Btrfs, GPT, RAID). |
- Поддержка файловой системы унаследована от прошивки. Спецификация UEFI предписывает поддержку файловых систем FAT12, FAT16 и FAT32[6], но поставщики могут дополнительно добавить поддержку дополнительных файловых систем; например, прошивка компьютеров Apple Mac поддерживает файловую систему HFS+. Если прошивка предоставляет интерфейс для загрузки драйверов UEFI при запуске, то можно добавить поддержку дополнительных файловых систем путем загрузки (независимо приобретенных) драйверов файловой системы.
- Менеджер загрузки. Он может запускать только другие приложения EFI, например образы ядра Linux, созданные с помощью
CONFIG_EFI_STUB=y
и Windowsbootmgfw.efi
. - systemd-boot поддерживает загрузку драйверов файловой системы UEFI. Они предоставляются efifs и должны быть помещены в
esp /EFI/systemd/drivers/
.
См. также Википедию:Сравнение загрузчиков.
Ядро
Загрузчик загружает образ vmlinux, содержащий ядро.
Ядро функционирует на низком уровне ( kernelspace ), взаимодействуя между оборудованием машины и программами. Ядро сначала выполняет перечисление и инициализацию оборудования, прежде чем перейти к пользовательскому пространству. См. подробное объяснение в Википедии: Ядро (операционная система) и Википедии: Ядро Linux.
initramfs
Корневая файловая система по адресу /
начинается с пустой rootfs, которая является особым экземпляром ramfs или tmpfs. Это временная корневая файловая система, в которой находится initramfs ( init ial RAM f ile s система) изображения будут распакованы.
Целью initramfs является загрузка системы до момента, когда она может получить доступ к корневой файловой системе (подробности см. в FHS). Ему не обязательно содержать каждый модуль, который вы когда-либо захотите использовать; он должен иметь только модули, необходимые для корневого устройства, такие как IDE, SCSI, SATA или USB/FW (при загрузке с внешнего диска) и шифрование. Большинство модулей будут загружены udev позже, во время процесса инициализации.
Сначала ядро распаковывает встроенный initramfs во временный корень. Официальные ядра Arch Linux используют пустой архив для встроенных initramfs, который используется по умолчанию при сборке Linux. Затем ядро распаковывает внешние файлы initramfs, указанные в командной строке, переданной загрузчиком, перезаписывая любые файлы из встроенных файлов initramfs. Эти внешние образы initramfs могут быть сгенерированы с помощью mkinitcpio, dracut или booster, и это предпочтительный метод Arch для настройки на раннее пользовательское пространство .
Раннее пользовательское пространство
Этап раннего пользовательского пространства выполняется во время монтирования временной rootfs, работающей с файлами, предоставляемыми #initramfs.
Функция раннего пользовательского пространства настраивается, но обычно выполняет следующие действия:
- systemd-modules-load(8) загружает модули ядра, такие как любые модули блочных устройств, необходимые для монтирования настоящей корневой файловой системы.
- Обработать расшифровку реальной корневой файловой системы, если применимо.
- Загрузите модуль DRM, так как ранний KMS включен по умолчанию для модулей в дереве.
На заключительном этапе раннего пользовательского пространства настоящий корень монтируется по адресу /sysroot
, а затем переключается на него. Позднее пользовательское пространство начинается с выполнения программы инициализации из реальной корневой файловой системы.
Позднее пространство пользователя
Запуск позднего пространства пользователя выполняется процессом инициализации. Arch официально использует systemd, построенную на концепции модулей и сервисов, но описанная здесь функциональность во многом пересекается с другими системами инициализации.
getty
Процесс инициализации вызывает getty один раз для каждого виртуального терминала (обычно для шести из них). getty инициализирует каждый терминал и защищает его от несанкционированного доступа. Когда имя пользователя и пароль предоставлены, getty сравнивает их с /etc/passwd
и /etc/shadow
, а затем вызывает login(1).
Login
Программа login начинает сеанс для пользователя, устанавливая переменные среды и запуская оболочку пользователя на основе /etc/пароль
. Программа login отображает содержимое /etc/motd ( m essage o f t he d ay) после успешного входа в систему, непосредственно перед выполнением оболочки входа в систему. Это хорошее место для отображения ваших Условий обслуживания, чтобы напомнить пользователям о ваших местных правилах или обо всем, что вы хотите им сообщить.
Оболочка
После запуска оболочки пользователя она обычно запускает файл конфигурации среды выполнения, например bashrc, прежде чем отобразить запрос пользователю. Если учетная запись настроена на запуск X при входе в систему, файл конфигурации среды выполнения вызовет startx или xinit.