Категория > Новости > Ликбез по macOS. Разбираем в подробностях, как устроена macOS - «Новости»

Ликбез по macOS. Разбираем в подробностях, как устроена macOS - «Новости»


1-11-2022, 00:00. Автор: Waller
эму­лятор Apple II пря­мо в бра­узе­ре.

Компь­ютер Apple Macintosh, вышед­ший на рынок в 1984 году, разитель­но отли­чал­ся от этих машин. Его опе­раци­онная сис­тема сра­зу вклю­чала в себя гра­фичес­кий поль­зователь­ский интерфейс с под­дер­жкой мыши. Окон­ный интерфейс по тем вре­менам счи­тал­ся уди­витель­ной новин­кой — до это­го его не было ни у одно­го серий­но про­изво­димо­го компь­юте­ра (Windows 1.0 появил­ся через два года пос­ле Macintosh и мно­гое у него поза­имс­тво­вал).


Од­на из пер­вых вер­сий MacOS

Клас­сичес­кая Mac OS активно раз­вивалась до 1996 года, а пос­ледний ее релиз вышел в 2001 году. И если для кон­ца вось­мидеся­тых она счи­талась передо­вой, то в девянос­тые ее архи­тек­тура с уста­рев­шей моделью раз­деления памяти пос­тепен­но ста­ла прег­радой для раз­вития Apple. В качес­тве экс­трен­ной меры руководс­тво ком­пании решило при­обрести стар­тап NeXT, осно­ван­ный ранее вытес­ненным из Apple Сти­вом Джоб­сом.


Mac OS 9 — пос­ледний боль­шой релиз «клас­сики»

Глав­ной раз­работ­кой NeXT была гра­фичес­кая опе­раци­онная сис­тема NeXTSTEP, в осно­ве которой — Unix-образное ядро и окру­жение, прод­винутый гра­фичес­кий дви­жок и набор объ­ектно ори­енти­рован­ных фрей­мвор­ков. Пос­ледний поз­волял раз­работ­чикам лег­ко соз­давать окон­ные при­ложе­ния на прод­винутом по тем вре­менам язы­ке Objective-C. На компь­юте­рах NeXT, к при­меру, был соз­дан про­тотип пер­вого веб‑бра­узе­ра.


NeXTSTEP

Пос­ле того как коман­да раз­работ­чиков NeXT переш­ла в Apple, сов­мес­тны­ми уси­лиями была соз­дана новая сис­тема — Mac OS X. Поз­днее ее пере­име­нова­ли в OS X, а затем в macOS (отдел мар­кетин­га в Apple никог­да не сидит сло­жа руки). Тех­ничес­ки Mac OS X осно­вана на NeXTSTEP, одна­ко ее интерфейс мно­гое почер­пнул из клас­сичес­кой Mac OS.


MacOS X 10.1 Cheetah

В переход­ный пери­од «макин­тоши» под­держи­вали как клас­сичес­кую Mac OS, так и Mac OS X. С 2002 года все компь­юте­ры Apple ста­ли выходить с пре­дус­танов­ленной Mac OS X, а Mac OS 9 еще нес­коль­ко лет мож­но было запус­кать в режиме сов­мести­мос­ти.


 

Ядро XNU


В осно­ве macOS, как и в осно­ве любой дру­гой ОС, лежит ядро. Оно отве­чает за выделе­ние про­цес­сорно­го вре­мени, управле­ние опе­ратив­ной памятью и кешем, вза­имо­дей­стви­ем с устрой­ства­ми и сетью. В то же вре­мя оно обра­баты­вает сис­темные вызовы при­ложе­ний и обес­печива­ет вза­имо­дей­ствие про­цес­сов.


Сов­ремен­ная macOS работа­ет на ядре XNU, которое приш­ло из NeXTSTEP. За осно­ву его кода в свое вре­мя был взят про­ект Match — ответ­вле­ние от ядра FreeBSD.


XNU озна­чает X is Not Unix, «X — не Unix». Эта рас­шифров­ка — дав­но уте­ряв­ший акту­аль­ность прог­раммист­ский юмор: macOS все же по боль­шому сче­ту счи­тает­ся одной из раз­новид­ностей Unix. Одна­ко XNU не име­ет бинар­ной сов­мести­мос­ти с FreeBSD, то есть прог­раммы для FreeBSD в macOS нель­зя запус­тить без изме­нений и переком­пиляции.


Яд­ро XNU — гиб­ридное. Это зна­чит, что в отли­чие от мик­роядер оно может быть допол­нено рас­ширени­ями, но при этом не явля­ется монолит­ным, как ядро Linux, где все фун­кции соб­раны в один гигант­ский бинар­ный файл.


До macOS 10.15 основным спо­собом рас­ширения ядра были модули kext. Пос­коль­ку «кек­сты» работа­ют в прос­транс­тве ядра, сбои в них могут при­водить к нес­табиль­ной работе компь­юте­ра. К тому же они откры­вали боль­шие воз­можнос­ти для недоб­росовес­тных раз­работ­чиков.


Сей­час «кек­сты» счи­тают­ся уста­рев­шим методом, и со вре­менем он будет отклю­чен. Вмес­то это­го в Apple пред­лага­ют раз­работ­чикам исполь­зовать фрей­мвор­ки DriverKit и SystemExtension, которые поз­воля­ют соз­давать драй­веры и рас­ширения, работа­ющие в прос­транс­тве поль­зовате­ля.


Ликбез по macOS. Разбираем в подробностях, как устроена macOS - «Новости»
Ар­хитек­тура macOS 

Darwin


Опе­раци­онная сис­тема — это не толь­ко ядро. Вмес­те с Match в NeXTSTEP, а затем и в Mac OS X переко­чевал набор биб­лиотек и исполня­емых фай­лов, которые вмес­те с XNU обес­печива­ют под­дер­жку POSIX — Portable Operating System Interface, «пор­тиру­емо­го интерфей­са опе­раци­онной сис­темы». Это стан­дарт, которо­му в той или иной мере соот­ветс­тву­ют все Unix-образные опе­раци­онные сис­темы и который обес­печива­ет низ­коуров­невую сов­мести­мость меж­ду ними.


В macOS этот слой называ­ется Darwin и по сути пред­став­ляет собой самос­тоятель­ную опе­раци­онную сис­тему. Сюда не вхо­дят гра­фичес­кая сре­да и биб­лиоте­ки, нуж­ные для работы окон­ных при­ложе­ний, но вхо­дят ядро, драй­веры, сетевой стек, набор сис­темных и поль­зователь­ских ути­лит коман­дной стро­ки, а так­же сис­тема запус­ка служб и при­ложе­ний launchd.


При желании Darwin мож­но уста­новить как самос­тоятель­ную минима­лис­тичную ОС с тек­сто­вым интер­пре­тато­ром команд. Код Darwin с самого начала был открыт, одна­ко со вре­менем в нем появи­лось мно­жес­тво зак­рытых ком­понен­тов, вклю­чая спе­цифич­ные для «маков» драй­веры.


Пос­ледние вер­сии Darwin уже было невоз­можно соб­рать и зас­тавить работать без средств, дос­тупных толь­ко прог­раммис­там Apple. Получи­лось, что пуб­ликация исходни­ков в таком виде ста­ла не нуж­на ни Apple, ни сооб­щес­тву, и ее прос­то прек­ратили. Код XNU тем вре­менем по‑преж­нему дос­тупен на GitHub и про­дол­жает обновлять­ся.


Сей­час силами сооб­щес­тва под­держи­вает­ся про­ект PureDarwin — по‑нас­тояще­му откры­тая реали­зация Darwin.



info


Дол­гое вре­мя сре­ди прод­винутых маково­дов был популя­рен набор ути­лит MacPorts, так­же осно­ван­ный на Darwin, но допол­ненный и рас­ширен­ный сов­ремен­ными вер­сиями прог­рамм для Linux. MacPorts про­дол­жают под­держи­вать, одна­ко сей­час его поч­ти пол­ностью вытес­нил пакет­ный менед­жер brew.



 

Графическая система


Гра­фичес­кий слой в macOS обыч­но называ­ют Quartz, хотя под­разуме­вает­ся под этим набор биб­лиотек Core Graphics. Две его важ­ней­шие час­ти — это Quartz 2D и Quartz Compositor.


 

Quartz 2D


Quartz 2D отве­чает за все, что свя­зано с дву­мер­ной гра­фикой. В его основные задачи вхо­дит отри­сов­ка тек­ста и прев­ращение гра­фичес­ких при­мити­вов, опи­сан­ных в фор­мате PostScript, в рас­тро­вые изоб­ражения, которые затем переда­ются в Quartz Compositor.



Перейти обратно к новости