Multics (Multiplexed Information and Computing Service) — одна з перших операційних систем з поділом часу виконання програм (time-sharing operating system).
Розробка операційної системи Multics була розпочата в 1964 році. Спочатку в цьому проекті були зайняті Массачусетський технологічний інститут (MIT), а також компанії General Electric (GE) і Bell Labs. Компанія Bell Labs вийшла з проекту в 1969 році, а в 1970 році комп'ютерний бізнес компанії General Electric (разом з Multics) відійшов до компанії Honeywell, яка продала його BULL (). Multics був задуманий компанією General Electric як комерційний продукт, і став таким вже під керівництвом компанії Honeywell, хоча так ніколи і не знайшов успіху на комп'ютерному ринку.
Як би там не було, система Multics значно вплинула на комп'ютерну індустрію завдяки багатьом новаторським і цінним ідеям, закладеним у неї. Хоча система і піддавалася численним глузуванням з боку критиків, вона все ж показала, що закладені в неї концепції мають право на довгострокове життя у світі операційних систем.
Система Multics мала безліч характерних особливостей, що забезпечували її безвідмовність і високу продуктивність. Наприклад, додатково до підтримки модульності програмного забезпечення, система також була орієнтована на модульну підтримку використовуваних в її роботі електронних пристроїв, що дозволило нарощувати обчислювальні можливості системи простою заміною її модулів: центрального процесора, пам'яті, дискового простору, і т. д. Окремі для кожного користувача списки доступу до файлів забезпечили досить гнучкий механізм колективного використання інформації в системі, що гарантувало також забезпечення повної конфіденційності інформації, що зберігається та використовується користувачами. Також система Multics мала низку стандартних механізмів, які давали можливість інженерам аналізувати обчислювальні потужності системи, а також набір механізмів, що забезпечували оптимізацію роботи самої операційної системи.
Інноваційні ідеї
Multics була однією з перших операційних систем, що реалізувала плоску модель зберігання даних, чітко розділяла концепції файлів (званих в системі Multics сегментами) і пам'яті обчислювальних процесів. Пам'ять обчислювальних процесів складалася із сегментів, кожен з яких володів своїм адресним простором. Для читання чи запису в сегменти обчислювальний процес використовував інструкції центрального процесора системи, а операційна система забезпечувала збереження змінених даних на пристрої зовнішньої пам'яті комп'ютера.
Таким чином, в Multics була спроектована і реалізована повністю централізована файлова система, в якій файли, фізично розташовані на різних фізичних пристроях зовнішньої пам'яті, логічно об'єднуються в один централізований архів або деревоподібну ієрархічну структуру, проміжними вузлами якої є іменовані директорії (або каталоги), а в листі містяться файли.
У Multics була також спроектована і реалізована велика сегментно-сторінкова віртуальна пам'ять, яка дозволила використовувати відображення файлів в сегменти віртуальної пам'яті. Іншими словами, при відкритті файлу у віртуальній пам'яті відповідного процесу утворювався сегмент, до якого повністю відображався файл, розташований у зовнішній пам'яті (слід зазначити, що у файловій системі Multics на базовому рівні підтримувалися файли зі сторінковою структурою. Складніші організації були надбудовою). Подальша робота з файлом відбувалася на основі загального механізму управління віртуальною пам'яттю.
Однією з головних незручностей такого підходу (що з'явився в основному через відмінності електронних архітектур обчислювальних машин, на яких система працювала), було обмеження розміру сегмента до 256*1024 32-бітних слів, що дорівнює 1 мегабайту. Тому для роботи з файлами, більшими за розміром, ніж встановлений ліміт, мав використовуватися додатковий код у виконуваних програмах. Самі файли, за розміром більші, ніж 256*1024 32-бітних слів, представлялися системою у вигляді ряду з'єднаних воєдино сегментів.
Слід також сказати, що до появи великих баз даних і графічних даних величезних обсягів дане обмеження за розміром файлів порушувалося вкрай рідко.
В системі Multics була вперше реалізована і інша інноваційна ідея — динамічне зв'язування (dynamic linking) виконуваної програми з бібліотеками коду. Завдяки динамічному зв'язуванні виконуваний процес міг запитувати у системи про підключення додаткових сегментів до власного адресного простору, а саме сегментів, що містять корисний код для виконуваної програми.
Таким чином програми змогли автоматично використовувати зовнішні бібліотеки коду, що зберігаються в окремих сегментах, створюючи при цьому динамічні зв'язку з функціями, збереженими в цих бібліотеках. Динамічний зв'язок із зовнішнім виконуваним кодом створювався лише один раз, під час першого виклику функції з бібліотеки, і надалі міг бути використаний повторно. Оскільки кожному користувачеві в системі відповідали окремі процеси, то різні зовнішні бібліотеки можуть бути залученими до однієї і тієї ж програми, залежно від потреб користувача.
Важливим було і те, що з правильним налаштуванням системи безпеки в Multics код з одного сегмента міг отримувати доступ до структур даних, розташованих в зовсім іншому процесі. Для такої взаємодії між призначеними для користувача і окремими daemon-процесами процес користувача повинен був динамічно підключити сегмент коду, асоційований з цим процесом і викликати методи які там знаходяться. Код, що знаходиться в підключеному сегменті, міг напряму працювати з використовуваними в демона структурами даних. Коли викликаний код з підключеного сегмента закінчував роботу, виконання поверталося в користувацький процес через звичайну процедуру повернення з викликаного методу.
Варто зауважити, що дві наведені вище ідеї так досі і не були реалізовані в повній мірі на сьогоднішніх найпоширеніших операційних системах, незважаючи на великий розвиток комп'ютерної техніки, що почався в 60-х роках; хоча в своїй нинішній реалізації ці ідеї формують те, що ми називаємо динамічним зв'язуванням (dynamic linking) в комп'ютерних системах.
Окремо варто згадати про те, що система Multics підтримувала досить агресивну переконфігурацію всієї системи «на ходу», дозволяючи підключати, відключати та настроювати центральні процесори, блоки пам'яті, жорсткі диски та інші пристрої, не зупиняючи при цьому всю систему. Наприклад в MIT під час профілактики системи Multics було звичайною практикою розділяти систему — яка була мультипроцесорною — на дві, поступово конфігуруючи комп'ютерні пристрої для створення двох незалежних одна від одної систем. Одна з систем продовжувала обслуговувати всіх підключених користувачів, а інша дозволяла проводити профілактику, встановлення нових пристроїв або оновлення програмного забезпечення. Коли всі необхідні заходи завершувалися, систему знову збирали в єдине ціле без всяких перезавантажень.
Як уже було згадано, система Multics могла працювати на багатопроцесорних комп'ютерах, по суті будучи однією з найперших мультипроцесорних операційних систем.
Multics була також однією з перших систем, в якій велика увага приділялася безпеці взаємодії між програмами та користувачами. Більше того, Multics, можливо, була найпершою операційною системою, задуманою спочатку і реалізованої як безпечна, попри те, що ранні версії системи Multics все-таки неодноразово зламувалися хакерами. Зломи системи призводили до доопрацюванням системи безпеки, які в кінцевому рахунку визначили широко поширені підходи до архітектури безпеки в операційних системах, і зробили саму систему Multics безпечнішою. Як тільки в систему було встановлено електронне обладнання другого покоління з вбудованою підтримкою привілеїв користувачів (визначають права користувача на доступ до даних і програм), зломи системи Multics стали дуже рідкісним явищем.
Додатково до того, що в Multics однією з перших була реалізована ієрархічна файлова система, імена файлів могли бути практично довільної довжини і містити будь-які символи. Файл або директорія могли мати кілька імен (коротке і довге); також були доступні для використання символьні посилання (symlink) між директоріями.
Також в Multics був вперше реалізований (тепер вже стандартний) підхід використання стеків для кожного обчислювального процесу в ядрі системи, з окремим стеком для кожного рівня безпеки навколо ядра.
Multics також стала однією з перших операційних систем, написаних мовою високого рівняPL/I (найпершою такою системою була Burroughs MCP для комп'ютерів серії B5000, що використовувала діалект АЛГОЛу).
Історія проекту
Спочатку Multics була розроблена для 36-бітових мейнфреймів GE-645, а пізніше - і для машин серії Honeywell 6180.
Компанія Bell Labs вийшла з проекту в 1969-му році. Кілька людей, які розробляли систему Multics в цій компанії, перейшли до створення системи UNIX. Пізніше створена система UNIX показала зовнішню схожість з системою Multics, у тому числі в назвах використовуваних команд. Однак, філософія дизайну UNIX була зовсім іншою, орієнтованої на створення системи якомога менших розмірів, і настільки простою, наскільки це буде можливо, в чому і була її основна відмінність від системи Multics.
Назва «UNIX» (спочатку «Unics») було утворено від «Multics». Буква U в назві UNIX означала «Uniplexed» («односкладова») на противагу слову «Multiplexed» («комплексна»), що лежав в основі назви системи Multics, для того, щоб підкреслити спробу творців UNIX-а відійти від складнощів системи Multics для вироблення простішого і працездатного підходу.
Компанія Honeywell викупила комп'ютерний підрозділ компанії GE і продовжувала розробку системи Multics до 1985 року. Близько 80 багатомільйонних установок було поставлено в університетські, індустріальні та державні обчислювальні центри.
Також на початку 80-х у Франції в декількох університетах були встановлені комп'ютери із системою Multics.
Після того як компанія Honeywell припинила підтримку системи Multics, користувачі мігрували на інші системи, у тому числі і на системи UNIX.
Остання машина з Multics була зупинена 31 жовтня2000-го року в канадському Міністерстві Оборони.
У 2007 році початковий код і документація Multics були передані компанією BULL Массачусетському технологічному інституту і опубліковані на сайті MIT.
Додаткові зауваження
Дивно, що ядро системи Multics, що знаходилося постійно в пам'яті комп'ютера і в ті далекі роки часто висміювали за свій розмір і складність, займало всього 135 Кілобайт коду.
Перші комп'ютери GE-645 мали пам'ять розміром 512 * 1024 32-х бітних слів (або 2 Мегабайта за сьогоднішніми мірками), тому ядро системи займало не так вже й багато місця.
Варто також зауважити, що вся операційна система, включаючи складний компілятор мови PL/I, призначені для користувача команди і додаткові бібліотеки, складалася з приблизно півтора тисяч вихідних файлів, кожен з яких містив приблизно по 200 рядків коду. У скомпільованому вигляді весь цей код займав близько 4,5 Мегабайт, що було величезним розміром на ті часи.
Компілятори Multics в основному оптимізували код за розміром, а не за ефективністю використання центрального процесора, що було обґрунтовано прагненням до економії пам'яті у багатьох користувачів.