Операционная система ( ОС ) — это системное программное обеспечение , которое управляет аппаратными и программными ресурсами компьютера и предоставляет общие службы для компьютерных программ .
Операционные системы с разделением времени планируют задачи для эффективного использования системы и могут также включать программное обеспечение для учета затрат на процессорное время , запоминающие устройства , периферийные устройства и другие ресурсы.
Для аппаратных функций, таких как ввод и вывод и распределение памяти , операционная система действует как посредник между программами и компьютерным оборудованием, [1] [2] хотя код приложения обычно выполняется непосредственно оборудованием и часто делает системные вызовы к функции ОС или прерывается ею. Операционные системы встречаются на многих устройствах, содержащих компьютер — от сотовых телефонов и игровых консолей до веб-серверов и суперкомпьютеров .
На рынке персональных компьютеров по состоянию на сентябрь 2024 года [обновлять]Microsoft Windows занимает доминирующую долю рынка около 73%. MacOS от Apple Inc. находится на втором месте (15%), Linux — на третьем месте (5%), а ChromeOS — на четвертом месте (2%). [3] В мобильном секторе (включая смартфоны и планшеты ) по состоянию на сентябрь 2023 года доля Android[обновлять] составляет 68,92% , за ней следуют iOS и iPadOS от Apple с 30,42% и другие операционные системы с 0,66%. [4] Дистрибутивы Linux доминируют в секторах серверов и суперкомпьютеров. Другие специализированные классы операционных систем (операционные системы специального назначения), [5] [6], такие как встроенные и системы реального времени, существуют для многих приложений. Существуют также операционные системы, ориентированные на безопасность . Некоторые операционные системы имеют низкие системные требования (например, облегченный дистрибутив Linux ). Другие могут иметь более высокие системные требования.
Некоторые операционные системы требуют установки или могут быть предустановлены на приобретенных компьютерах ( OEM -установка), тогда как другие могут запускаться непосредственно с носителя (например, Live CD ) или флэш-памяти (например, USB- накопителя).
Операционная система — это сложная система, [7], но ее называют « слоем программного обеспечения , которое управляет ресурсами компьютера для его пользователей и их приложений ». [8] Операционные системы включают в себя программное обеспечение, которое всегда запущено, называемое ядром , но может включать и другое программное обеспечение. [7] [9] Два других типа программ, которые могут работать на компьютере, — это системные программы , которые связаны с операционной системой, но могут не быть частью ядра, и приложения — все остальное программное обеспечение. [9]
Операционная система выполняет три основные задачи: [10]
В многопроцессорных системах несколько ЦП совместно используют память. Многокомпьютерный или кластерный компьютер имеет несколько ЦП, каждый из которых имеет свою собственную память . Многокомпьютерные системы были разработаны, потому что большие многопроцессорные системы сложно проектировать и они слишком дороги; [18] они универсальны в облачных вычислениях из-за размера необходимой машины. [19] Различным ЦП часто необходимо отправлять и получать сообщения друг другу; [20] чтобы обеспечить хорошую производительность, операционные системы для этих машин должны минимизировать это копирование пакетов . [21] Более новые системы часто являются многоочередными — разделяя группы пользователей на отдельные очереди — чтобы уменьшить необходимость в копировании пакетов и поддерживать больше одновременных пользователей. [22] Другой метод — удаленный прямой доступ к памяти , который позволяет каждому ЦП получать доступ к памяти, принадлежащей другим ЦП. [20] Многокомпьютерные операционные системы часто поддерживают удаленные вызовы процедур , когда ЦП может вызывать процедуру на другом ЦП, [23] или распределенную общую память , в которой операционная система использует виртуализацию для создания общей памяти, которая физически не существует. [24]
Распределенная система — это группа отдельных сетевых компьютеров, каждый из которых может иметь собственную операционную систему и файловую систему. В отличие от мультикомпьютеров, они могут быть разбросаны по всему миру. [25] Промежуточное программное обеспечение , дополнительный программный слой между операционной системой и приложениями, часто используется для улучшения согласованности. Хотя оно функционирует аналогично операционной системе, это не настоящая операционная система. [26]
Встроенные операционные системы предназначены для использования во встроенных компьютерных системах , независимо от того, являются ли они объектами Интернета вещей или не подключены к сети. Встроенные системы включают в себя множество бытовых приборов. Отличительным фактором является то, что они не загружают установленное пользователем программное обеспечение. Следовательно, им не нужна защита между различными приложениями, что позволяет использовать более простые конструкции. Очень маленькие операционные системы могут работать менее чем в 10 килобайтах , [27] а самые маленькие предназначены для смарт-карт . [28] Примерами являются Embedded Linux , QNX , VxWorks и сверхмалые системы RIOT и TinyOS . [29]
Операционная система реального времени — это операционная система, которая гарантирует обработку событий или данных в определенный момент времени. Системы жесткого реального времени требуют точного времени и распространены в производстве , авионике , военной промышленности и других подобных областях. [29] В системах мягкого реального времени случайные пропущенные события являются приемлемыми; эта категория часто включает аудио- или мультимедийные системы, а также смартфоны. [29] Для того чтобы системы жесткого реального времени были достаточно точными в своем времени, они часто представляют собой просто библиотеку без какой-либо защиты между приложениями, такими как eCos . [29]
Гипервизор — это операционная система, которая запускает виртуальную машину . Виртуальная машина не знает, что она является приложением, и работает так, как будто у нее есть собственное оборудование. [15] [30] Виртуальные машины можно приостанавливать, сохранять и возобновлять, что делает их полезными для исследования, разработки и отладки операционных систем. [ 31 ] Они также повышают переносимость, позволяя запускать приложения на компьютере, даже если они несовместимы с базовой операционной системой. [15]
Библиотечная операционная система (libOS) — это система, в которой службы, предоставляемые типичной операционной системой, такие как сетевые функции, предоставляются в форме библиотек и объединяются с помощью единого кода приложения и конфигурации для построения универсального ядра : [33] специализированного (из библиотек извлекаются и связываются вместе [34] только абсолютно необходимые фрагменты кода ) образа машины с единым адресным пространством , который можно развернуть в облачных или встроенных средах.
Код операционной системы и код приложения не выполняются в отдельных доменах защиты (работает только одно приложение, по крайней мере концептуально, поэтому нет необходимости предотвращать помехи между приложениями), а доступ к службам ОС осуществляется через простые библиотечные вызовы (потенциально встраивая их на основе пороговых значений компилятора), без обычных накладных расходов на переключение контекста , [35] аналогично встроенным и работающим в реальном времени ОС. Обратите внимание, что эти накладные расходы не являются незначительными: к прямым затратам на переключение режимов необходимо добавить косвенное загрязнение важных структур процессора (таких как кэши ЦП , конвейер инструкций и т. д.), что влияет как на производительность пользовательского режима, так и на производительность режима ядра. [36]
Первые компьютеры в конце 1940-х и 1950-х годах программировались напрямую либо с помощью коммутационных панелей , либо с помощью машинного кода, вводимого на носителях, таких как перфокарты , без языков программирования или операционных систем. [37] После появления транзистора в середине 1950-х годов начали создаваться мэйнфреймы . Им по-прежнему требовались профессиональные операторы [37], которые вручную делали бы то, что делала бы современная операционная система, например, планирование программ для запуска, [38] но мэйнфреймы по-прежнему имели элементарные операционные системы, такие как Fortran Monitor System (FMS) и IBSYS . [39] В 1960-х годах IBM представила первую серию совместимых компьютеров ( System/360 ). Все они работали под управлением одной и той же операционной системы — OS/360 — которая состояла из миллионов строк языка ассемблера , содержащих тысячи ошибок . OS/360 также была первой популярной операционной системой, поддерживающей многопрограммирование , так что ЦП мог использоваться для одной задачи, пока другая ждала ввода/вывода (I/O). Хранение нескольких задач в памяти требовало разбиения памяти и защиты от доступа одной задачи к памяти, выделенной для другой. [40]
Примерно в то же время телетайпы начали использоваться в качестве терминалов , чтобы несколько пользователей могли одновременно получать доступ к компьютеру. Операционная система MULTICS была предназначена для того, чтобы сотни пользователей могли получать доступ к большому компьютеру. Несмотря на ее ограниченное принятие, ее можно считать предшественником облачных вычислений . Операционная система UNIX возникла как развитие MULTICS для одного пользователя. [41] Поскольку исходный код UNIX был доступен, он стал основой других, несовместимых операционных систем, из которых наиболее успешными были System V от AT&T и Berkeley Software Distribution (BSD) Калифорнийского университета . [ 42] Чтобы повысить совместимость, IEEE выпустил стандарт POSIX для интерфейсов прикладного программирования операционных систем (API), который поддерживается большинством систем UNIX. MINIX была урезанной версией UNIX, разработанной в 1987 году для образовательных целей, которая вдохновила на коммерчески доступное, свободное программное обеспечение Linux . С 2008 года MINIX используется в контроллерах большинства микросхем Intel , в то время как Linux широко распространен в центрах обработки данных и смартфонах Android . [43]
Изобретение крупномасштабной интеграции позволило производить персональные компьютеры (первоначально называвшиеся микрокомпьютерами ) примерно с 1980 года. [44] Около пяти лет CP/M (Control Program for Microcomputers) была самой популярной операционной системой для микрокомпьютеров. [45] Позже IBM купила DOS (Disk Operating System) у Microsoft . После модификаций, запрошенных IBM, полученная система была названа MS-DOS (MicroSoft Disk Operating System) и широко использовалась на микрокомпьютерах IBM. Более поздние версии увеличили свою сложность, отчасти заимствуя функции из UNIX. [45]
Macintosh от Apple был первым популярным компьютером, использовавшим графический пользовательский интерфейс (GUI). GUI оказался гораздо более удобным для пользователя, чем текстовый интерфейс командной строки, который использовали более ранние операционные системы. После успеха Macintosh, MS-DOS была обновлена с помощью наложения GUI под названием Windows . Позже Windows была переписана как автономная операционная система, заимствуя так много функций из другой ( VAX VMS ), что была выплачена крупная юридическая компенсация . [46] В двадцать первом веке Windows продолжает быть популярной на персональных компьютерах, но имеет меньшую долю рынка серверов. Операционные системы UNIX, особенно Linux, являются наиболее популярными на корпоративных системах и серверах, но также используются на мобильных устройствах и многих других компьютерных системах. [47]
На мобильных устройствах Symbian OS была поначалу доминирующей, будучи узурпированной BlackBerry OS (представлена в 2002 году) и iOS для iPhone (с 2007 года). Позже, операционная система Android с открытым исходным кодом (представлена в 2008 году) с ядром Linux и библиотекой C ( Bionic ), частично основанной на коде BSD, стала наиболее популярной. [48]
Компоненты операционной системы предназначены для обеспечения согласованной работы различных частей компьютера. Все пользовательское программное обеспечение должно взаимодействовать с операционной системой для доступа к оборудованию.
Ядро — это часть операционной системы, которая обеспечивает защиту между различными приложениями и пользователями. Эта защита является ключом к повышению надежности, сохраняя ошибки изолированными для одной программы, а также безопасности, ограничивая возможности вредоносного ПО и защищая личные данные, и гарантируя, что одна программа не сможет монополизировать ресурсы компьютера. [49] Большинство операционных систем имеют два режима работы: [50] в пользовательском режиме оборудование проверяет, что программное обеспечение выполняет только допустимые инструкции, тогда как ядро имеет неограниченные полномочия и не подлежит этим проверкам. [51] Ядро также управляет памятью для других процессов и контролирует доступ к устройствам ввода/вывода . [52]
Операционная система предоставляет интерфейс между прикладной программой и аппаратным обеспечением компьютера, так что прикладная программа может взаимодействовать с оборудованием, только подчиняясь правилам и процедурам, запрограммированным в операционной системе. Операционная система также является набором служб, которые упрощают разработку и выполнение прикладных программ. Выполнение прикладной программы обычно включает создание процесса ядром операционной системы , которое выделяет пространство памяти и другие ресурсы, устанавливает приоритет для процесса в многозадачных системах, загружает двоичный код программы в память и инициирует выполнение прикладной программы, которая затем взаимодействует с пользователем и с аппаратными устройствами. Однако в некоторых системах приложение может запросить, чтобы операционная система выполнила другое приложение в том же процессе, либо как подпрограмму, либо в отдельном потоке, например, средства LINK и ATTACH OS/360 и последующих версий .
Прерывание (также известное как abort , exception , fault , signal , [53] или trap ) [54] обеспечивает эффективный способ реагирования большинства операционных систем на окружающую среду. Прерывания заставляют центральный процессор (ЦП) переключать поток управления с текущей работающей программы на обработчик прерываний , также известный как процедура обслуживания прерываний (ISR). [55] [56] Процедура обслуживания прерываний может заставить центральный процессор (ЦП) переключаться в контекстном режиме . [57] [a] Подробности того, как компьютер обрабатывает прерывание, различаются в зависимости от архитектуры, а подробности того, как ведут себя процедуры обслуживания прерываний, различаются в зависимости от операционной системы. [58] Однако несколько функций прерываний являются общими. [58] Архитектура и операционная система должны: [58]
Программное прерывание — это сообщение процессу о том, что произошло событие. [53] Это контрастирует с аппаратным прерыванием , которое является сообщением центральному процессору (ЦП) о том, что произошло событие. [59] Программные прерывания похожи на аппаратные прерывания — происходит изменение в направлении от текущего выполняющегося процесса. [60] Аналогично, как аппаратные, так и программные прерывания выполняют процедуру обслуживания прерывания .
Программные прерывания могут быть обычными событиями. Ожидается, что возникнет временной срез , поэтому ядру придется выполнить переключение контекста . [61] Компьютерная программа может установить таймер, который сработает через несколько секунд, в случае, если слишком много данных заставят алгоритм выполняться слишком долго. [62]
Программные прерывания могут быть ошибочными состояниями, такими как неправильно сформированная машинная инструкция . [62] Однако наиболее распространенными ошибочными состояниями являются деление на ноль и доступ к неверному адресу памяти . [62]
Пользователи могут отправлять сообщения ядру, чтобы изменить поведение текущего запущенного процесса. [62] Например, в среде командной строки нажатие символа прерывания (обычно Control-C ) может завершить текущий запущенный процесс. [62]
Для генерации программных прерываний для процессоров x86 доступна инструкция языка ассемблера INT . [63] Синтаксис: , где — номер смещения (в шестнадцатеричном формате) для таблицы векторов прерываний .INT X
X
Для генерации программных прерываний в операционных системах типа Unix kill(pid,signum)
системный вызов отправит сигнал другому процессу. [64] pid
— идентификатор процесса -получателя. signum
— номер сигнала (в мнемоническом формате) [b], который должен быть отправлен. (Такое грубое название kill
было выбрано, поскольку ранние реализации только завершали процесс.) [65]
В операционных системах типа Unix сигналы информируют процессы о возникновении асинхронных событий. [64] Для асинхронной связи требуются прерывания. [66] Одна из причин, по которой процессу необходимо асинхронно взаимодействовать с другим процессом, — это решение вариации классической проблемы чтения/записи . [67] Писатель получает канал от оболочки для отправки своего вывода в поток ввода читателя. [68] Синтаксис командной строки следующий alpha | bravo
: . alpha
будет записывать в канал, когда его вычисления будут готовы, а затем перейдет в режим ожидания в очереди. [69] bravo
затем будет перемещен в очередь готовности и вскоре начнет читать из своего потока ввода. [70] Ядро будет генерировать программные прерывания для координации конвейеризации. [70]
Сигналы можно разделить на 7 категорий. [64] Категории следующие:
Устройства ввода-вывода (I/O) работают медленнее, чем ЦП. Поэтому, если ЦП придется ждать завершения каждого ввода-вывода, это замедлит работу компьютера. Вместо этого компьютер может реализовать прерывания для завершения ввода-вывода, избегая необходимости опроса или активного ожидания. [71]
Некоторые компьютеры требуют прерывания для каждого символа или слова, что требует значительного количества процессорного времени. Прямой доступ к памяти (DMA) — это архитектурная особенность, позволяющая устройствам обходить процессор и получать доступ к основной памяти напрямую. [72] (Отдельно от архитектуры, устройство может выполнять прямой доступ к памяти [c] к основной памяти и из нее либо напрямую, либо через шину.) [73] [d]
Когда пользователь компьютера нажимает клавишу на клавиатуре, символ обычно немедленно появляется на экране. Аналогично, когда пользователь перемещает мышь , курсор немедленно перемещается по экрану. Каждое нажатие клавиши и движение мыши генерирует прерывание, называемое Interrupt-driven I/O . Interrupt-driven I/O происходит, когда процесс вызывает прерывание для каждого переданного символа [73] или слова [74] .
Такие устройства, как жесткие диски , твердотельные накопители и накопители на магнитной ленте , могут передавать данные с достаточно высокой скоростью, так что прерывание работы ЦП для каждого переданного байта или слова и передача ЦП байта или слова между устройством и памятью потребовали бы слишком много времени ЦП. Вместо этого данные передаются между устройством и памятью независимо от ЦП с помощью оборудования, такого как канал или контроллер прямого доступа к памяти ; прерывание доставляется только тогда, когда все данные переданы. [75]
Если компьютерная программа выполняет системный вызов для выполнения операции записи блочного ввода-вывода , то системный вызов может выполнить следующие инструкции:
Пока идет запись, операционная система будет переключаться на другие процессы как обычно. Когда устройство закончит запись, оно прервет текущий запущенный процесс, выдав запрос на прерывание . Устройство также поместит целое число на шину данных. [79] Приняв запрос на прерывание, операционная система:
Когда временной интервал процесса записи истек, операционная система: [80]
Теперь, когда счетчик программ сброшен, прерванный процесс возобновит свой временной интервал. [58]
Среди прочего, ядро многопрограммной операционной системы должно отвечать за управление всей системной памятью, которая в данный момент используется программами. Это гарантирует, что программа не будет мешать памяти, которая уже используется другой программой. Поскольку программы работают в режиме разделения времени, каждая программа должна иметь независимый доступ к памяти.
Кооперативное управление памятью, используемое многими ранними операционными системами, предполагает, что все программы добровольно используют диспетчер памяти ядра и не превышают выделенную им память. Эта система управления памятью почти никогда больше не встречается, поскольку программы часто содержат ошибки, которые могут привести к превышению ими выделенной им памяти. Если программа дает сбой, это может привести к тому, что память, используемая одной или несколькими другими программами, будет затронута или перезаписана. Вредоносные программы или вирусы могут намеренно изменять память другой программы или могут влиять на работу самой операционной системы. При кооперативном управлении памятью достаточно одной неправильно работающей программы, чтобы привести к сбою системы.
Защита памяти позволяет ядру ограничивать доступ процесса к памяти компьютера. Существуют различные методы защиты памяти, включая сегментацию памяти и подкачку страниц . Все методы требуют определенного уровня аппаратной поддержки (например, MMU 80286 ), которая существует не во всех компьютерах.
И при сегментации, и при подкачке определенные регистры защищенного режима указывают ЦП, к какому адресу памяти он должен разрешить доступ работающей программе. Попытки доступа к другим адресам вызывают прерывание, которое заставляет ЦП повторно войти в режим супервизора , передавая управление ядру . Это называется нарушением сегментации или Seg-V для краткости, и поскольку такой операции трудно присвоить значимый результат, и поскольку это обычно является признаком неправильно работающей программы, ядро обычно прибегает к завершению нарушающей программы и сообщает об ошибке.
Версии Windows 3.1 через ME имели некоторый уровень защиты памяти, но программы могли легко обойти необходимость его использования. Возникала общая ошибка защиты , указывающая на нарушение сегментации; однако система все равно часто вылетала.
Использование адресации виртуальной памяти (такой как подкачка страниц или сегментация) означает, что ядро может выбирать, какую память каждая программа может использовать в любой момент времени, что позволяет операционной системе использовать одни и те же области памяти для нескольких задач.
Если программа пытается получить доступ к памяти, которая не является доступной [e] памятью, но тем не менее была выделена для нее, ядро прерывается ошибкой страницы .
. Этот тип прерывания обычно являетсяКогда ядро обнаруживает ошибку страницы, оно обычно корректирует диапазон виртуальной памяти программы, которая ее вызвала, предоставляя ей доступ к запрошенной памяти. Это дает ядру дискреционную власть над тем, где хранится память конкретного приложения, или даже над тем, была ли она уже выделена.
В современных операционных системах память, к которой обращаются реже, может временно храниться на диске или другом носителе, чтобы сделать это пространство доступным для использования другими программами. Это называется подкачкой , поскольку область памяти может использоваться несколькими программами, и то, что содержит эта область памяти, может быть подкачано или заменено по требованию.
Виртуальная память создает у программиста или пользователя ощущение, что в компьютере гораздо больше оперативной памяти, чем есть на самом деле. [81]
Параллелизм относится к способности операционной системы выполнять несколько задач одновременно. [82] Практически все современные операционные системы поддерживают параллелизм. [83]
Потоки позволяют разделить работу процесса на несколько частей, которые могут выполняться одновременно. [84] Количество потоков не ограничено количеством доступных процессоров. Если потоков больше, чем процессоров, ядро операционной системы планирует, приостанавливает и возобновляет потоки, контролируя, когда каждый поток запускается и сколько процессорного времени он получает. [85] Во время переключения контекста работающий поток приостанавливается, его состояние сохраняется в блоке управления потоком и стеке, и туда загружается состояние нового потока. [86] Исторически во многих системах поток мог выполняться до тех пор, пока он не уступит управление ( кооперативная многозадачность ). Поскольку эта модель может позволить одному потоку монополизировать процессор, большинство операционных систем теперь могут прерывать поток ( вытесняющая многозадачность ). [87]
Потоки имеют свой собственный идентификатор потока, счетчик программ (PC), набор регистров и стек , но совместно используют код, данные кучи и другие ресурсы с другими потоками того же процесса. [88] [89] Таким образом, на создание потока требуется меньше накладных расходов, чем на создание нового процесса. [90] В системах с одним процессором параллелизм заключается в переключении между процессами. Многие компьютеры имеют несколько процессоров. [91] Параллелизм с несколькими потоками, работающими на разных процессорах, может ускорить программу в зависимости от того, какая ее часть может выполняться одновременно. [92]
Постоянные запоминающие устройства, используемые в компьютерах двадцать первого века, в отличие от энергозависимой динамической памяти с произвольным доступом (DRAM), по-прежнему доступны после сбоя или отключения питания . Постоянное ( энергонезависимое ) хранилище намного дешевле за байт, но требует на несколько порядков больше времени для доступа, чтения и записи. [93] [94] Две основные технологии — это жесткий диск, состоящий из магнитных дисков , и флэш-память ( твердотельный накопитель , который хранит данные в электрических цепях). Последний дороже, но быстрее и долговечнее. [95] [96]
Файловые системы — это абстракция, используемая операционной системой для упрощения доступа к постоянному хранилищу. Они предоставляют понятные человеку имена файлов и другие метаданные , повышают производительность за счет амортизации доступа, предотвращают доступ нескольких потоков к одному и тому же разделу памяти и включают контрольные суммы для определения повреждения . [97] Файловые системы состоят из файлов (именованных наборов данных произвольного размера) и каталогов (также называемых папками), в которых перечислены понятные человеку имена файлов и другие каталоги. [98] Абсолютный путь к файлу начинается с корневого каталога и содержит список подкаталогов, разделенных знаками препинания, в то время как относительный путь определяет местоположение файла из каталога. [99] [100]
Системные вызовы (которые иногда обертываются библиотеками) позволяют приложениям создавать, удалять, открывать и закрывать файлы, а также связывать их, читать и записывать в них. Все эти операции выполняются операционной системой от имени приложения. [101] Усилия операционной системы по сокращению задержек включают сохранение недавно запрошенных блоков памяти в кэше и предварительную выборку данных, которые приложение не запрашивало, но которые могут понадобиться в дальнейшем. [102] Драйверы устройств — это программное обеспечение, специфичное для каждого устройства ввода-вывода (I/O), которое позволяет операционной системе работать без изменений на различном оборудовании. [103] [104]
Другим компонентом файловых систем является словарь , который сопоставляет имя файла и метаданные с блоком данных , где хранится его содержимое. [105] Большинство файловых систем используют каталоги для преобразования имен файлов в номера файлов. Чтобы найти номер блока, операционная система использует индекс (часто реализованный в виде дерева ). [106] Отдельно существует карта свободного пространства для отслеживания свободных блоков, обычно реализованная в виде битовой карты . [106] Хотя любой свободный блок может быть использован для хранения нового файла, многие операционные системы пытаются группировать файлы в одном каталоге, чтобы максимизировать производительность, или периодически реорганизовывать файлы, чтобы уменьшить фрагментацию . [107]
Поддержание надежности данных в условиях сбоя компьютера или отказа оборудования является еще одной проблемой. [108] Протоколы записи файлов разработаны с использованием атомарных операций, чтобы не оставлять постоянное хранилище в частично записанном, несогласованном состоянии в случае сбоя в любой момент во время записи. [109] Повреждение данных устраняется избыточным хранилищем (например, RAID — избыточный массив недорогих дисков ) [110] [111] и контрольными суммами для обнаружения повреждения данных. Благодаря нескольким слоям контрольных сумм и резервным копиям файла система может восстанавливаться после нескольких сбоев оборудования. Фоновые процессы часто используются для обнаружения и восстановления после повреждения данных. [111]
Безопасность означает защиту пользователей от других пользователей того же компьютера, а также от тех, кто ищет удаленный доступ к нему по сети. [112] Безопасность операционных систем основана на достижении триады ЦРУ : конфиденциальность (неавторизованные пользователи не могут получить доступ к данным), целостность (неавторизованные пользователи не могут изменять данные) и доступность (гарантия того, что система остается доступной для авторизованных пользователей даже в случае атаки типа «отказ в обслуживании» ). [113] Как и в случае с другими компьютерными системами, изоляция доменов безопасности — в случае операционных систем, ядра, процессов и виртуальных машин — является ключом к достижению безопасности. [114] Другие способы повышения безопасности включают простоту для минимизации поверхности атаки , блокировку доступа к ресурсам по умолчанию, проверку всех запросов на авторизацию, принцип наименьших полномочий (предоставление минимальных привилегий, необходимых для выполнения задачи), разделение привилегий и сокращение общих данных. [115]
Некоторые операционные системы более безопасны, чем другие. Те, у которых нет изоляции между ядром и приложениями, наименее безопасны, в то время как те, у которых монолитное ядро , как у большинства операционных систем общего назначения, все еще уязвимы, если какая-либо часть ядра скомпрометирована. Более безопасная конструкция включает микроядра , которые разделяют привилегии ядра на множество отдельных доменов безопасности и уменьшают последствия одного нарушения ядра. [116] Unikernels — это еще один подход, который повышает безопасность за счет минимизации ядра и разделения других функциональных возможностей операционной системы по приложениям. [116]
Большинство операционных систем написаны на C или C++ , что создает потенциальные уязвимости для эксплуатации. Несмотря на попытки защититься от них, уязвимости вызваны атаками переполнения буфера , которые становятся возможными из-за отсутствия проверки границ . [117] Уязвимости оборудования, некоторые из которых вызваны оптимизацией ЦП , также могут быть использованы для взлома операционной системы. [118] Известны случаи, когда программисты операционных систем намеренно внедряли уязвимости, такие как бэкдоры . [119]
Безопасность операционных систем затрудняется их растущей сложностью и, как следствие, неизбежностью ошибок. [120] Поскольку формальная проверка операционных систем может быть невозможна, разработчики используют укрепление операционных систем для снижения уязвимостей, [121] например, рандомизацию адресного пространства , целостность потока управления , [122] ограничения доступа , [123] и другие методы. [124] Нет никаких ограничений на то, кто может вносить код в операционные системы с открытым исходным кодом; такие операционные системы имеют прозрачную историю изменений и распределенные структуры управления. [125] Разработчики с открытым исходным кодом стремятся работать совместно, чтобы находить и устранять уязвимости безопасности, используя проверку кода и проверку типов для удаления вредоносного кода. [126] [127] Эндрю С. Таненбаум советует публиковать исходный код всех операционных систем, утверждая, что это не позволяет разработчикам доверять секретности и, таким образом, полагаться на ненадежную практику безопасности через неизвестность . [128]
Пользовательский интерфейс ( UI) необходим для поддержки взаимодействия человека с компьютером. Два наиболее распространенных типа пользовательского интерфейса для любого компьютера:
Для персональных компьютеров, включая смартфоны и планшетные компьютеры , а также для рабочих станций , пользовательский ввод обычно осуществляется с помощью комбинации клавиатуры , мыши и трекпада или сенсорного экрана , которые все подключены к операционной системе с помощью специализированного программного обеспечения. [129] Пользователи персональных компьютеров, которые не являются разработчиками программного обеспечения или кодерами, часто предпочитают графические интерфейсы как для ввода, так и для вывода; графические интерфейсы поддерживаются большинством персональных компьютеров. [130] Программное обеспечение для поддержки графических интерфейсов сложнее, чем командная строка для ввода и вывода в виде простого текста. Программисты часто предпочитают вывод в виде простого текста, и его легко поддерживать. [131]
Любительскую операционную систему можно классифицировать как систему, код которой не был напрямую получен из существующей операционной системы и имеет мало пользователей и активных разработчиков. [132]
В некоторых случаях любительская разработка направлена на поддержку " домашнего " вычислительного устройства, например, простого одноплатного компьютера на базе микропроцессора 6502. Или разработка может быть для архитектуры, которая уже широко используется. Разработка операционной системы может исходить из совершенно новых концепций или может начинаться с моделирования существующей операционной системы. В любом случае любитель является своим собственным разработчиком или может взаимодействовать с небольшой и иногда неструктурированной группой людей, имеющих схожие интересы.
Примерами любительских операционных систем являются Syllable и TempleOS .
Если приложение написано для использования в определенной операционной системе и переносится на другую ОС, функциональность, требуемая этим приложением, может быть реализована в этой ОС по-другому (имена функций, значение аргументов и т. д.), что потребует адаптации, изменения или иного обслуживания приложения .
Этих расходов на поддержку разнообразия операционных систем можно избежать, если вместо этого писать приложения для таких программных платформ, как Java или Qt . Эти абстракции уже понесли расходы на адаптацию к конкретным операционным системам и их системным библиотекам .
Другой подход заключается в принятии стандартов поставщиками операционных систем. Например, POSIX и уровни абстракции ОС обеспечивают общности, которые снижают затраты на портирование.
На рынке персональных компьютеров по состоянию на сентябрь 2023 года [обновлять]Microsoft Windows имеет самую высокую долю рынка , около 68%. MacOS от Apple Inc. находится на втором месте (20%), а разновидности Linux , включая ChromeOS , в совокупности занимают третье место (7%). [3] В мобильном секторе (включая смартфоны и планшеты ) по состоянию на сентябрь 2023 года [обновлять]доля Android составляет 68,92%, за ней следуют iOS и iPadOS от Apple с 30,42% и другие операционные системы с 0,66%. [4]
Linux — это свободное программное обеспечение, распространяемое по лицензии GNU General Public License (GPL), что означает, что все его производные юридически обязаны раскрывать свой исходный код . [133] Linux был разработан программистами для их собственного использования, что подчеркивает простоту и последовательность с небольшим количеством базовых элементов, которые можно комбинировать практически неограниченным количеством способов, и позволяет избежать избыточности. [134]
Его конструкция похожа на другие системы UNIX, не использующие микроядро . [135] Он написан на языке C [136] и использует синтаксис UNIX System V , но также поддерживает синтаксис BSD . Linux поддерживает стандартные сетевые функции UNIX, а также полный набор инструментов UNIX, поддерживая при этом нескольких пользователей и применяя вытесняющую многозадачность . Изначально с минималистским дизайном, Linux представляет собой гибкую систему, которая может работать с оперативной памятью объемом менее 16 МБ , но по-прежнему используется в больших многопроцессорных системах. [135] Подобно другим системам UNIX, дистрибутивы Linux состоят из ядра , системных библиотек и системных утилит . [137] Linux имеет графический пользовательский интерфейс (GUI) с рабочим столом, значками папок и файлов, а также возможностью доступа к операционной системе через командную строку . [138]
Android — это частично открытая операционная система, тесно связанная с Linux, которая стала наиболее широко используемой операционной системой среди пользователей из-за своей популярности на смартфонах и, в меньшей степени, во встроенных системах, которым требуется графический интерфейс, таких как « умные часы , автомобильные приборные панели , спинки сидений самолетов, медицинские приборы и бытовая техника ». [139] В отличие от Linux, большая часть Android написана на Java и использует объектно-ориентированное проектирование . [140]
Windows — это проприетарная операционная система, которая широко используется на настольных компьютерах, ноутбуках, планшетах, телефонах, рабочих станциях , корпоративных серверах и консолях Xbox . [142] Операционная система была разработана для «безопасности, надежности, совместимости, высокой производительности, расширяемости, портативности и международной поддержки» — позже энергоэффективность и поддержка динамических устройств также стали приоритетами. [143]
Windows Executive работает через объекты режима ядра для важных структур данных, таких как процессы, потоки и разделы (объекты памяти, например файлы). [144] Операционная система поддерживает подкачку по требованию виртуальной памяти , что ускоряет ввод-вывод для многих приложений. Драйверы устройств ввода-вывода используют модель драйверов Windows . [144] Файловая система NTFS имеет главную таблицу, и каждый файл представлен в виде записи с метаданными . [145] Планирование включает в себя вытесняющую многозадачность . [146] Windows имеет множество функций безопасности; [147] особенно важными являются использование списков контроля доступа и уровней целостности . Каждый процесс имеет токен аутентификации, а каждому объекту дается дескриптор безопасности. В более поздних выпусках было добавлено еще больше функций безопасности. [145]
Синхронная реализация системных вызовов отрицательно влияет на производительность системно-интенсивных рабочих нагрузок, как с точки зрения
прямых
затрат на переключение режимов, так и, что более интересно, с точки зрения
косвенного
загрязнения важных структур процессора, которое влияет как на производительность пользовательского режима, так и на производительность режима ядра. Мотивирующий пример, который количественно оценивает влияние загрязнения системных вызовов на производительность приложения, можно увидеть на рисунке 1. Он отображает инструкции пользовательского режима на циклы (циклы ядра и инструкции игнорируются) одного из тестов SPEC CPU 2006 (Xalan) непосредственно до и после
системного вызова. Из-за системного вызова происходит значительное падение количества инструкций за цикл (IPC), и требуется до 14 000 циклов выполнения, прежде чем IPC этого приложения вернется к предыдущему уровню. Как мы покажем, это снижение производительности в основном вызвано помехами, вызванными ядром на ключевых структурах процессора.
pwrite
Сигнал — это уведомление процесса о том, что произошло событие. Сигналы иногда описываются как программные прерывания.
Концепция прерывания — это то, что с годами расширилось в своих масштабах. Семейство 80x86 только добавило путаницы вокруг прерываний, введя инструкцию int (программное прерывание). Действительно, разные производители использовали такие термины, как исключения, сбои, аварийные завершения, ловушки и прерывания, для описания явлений, обсуждаемых в этой главе. К сожалению, нет четкого консенсуса относительно точного значения этих терминов. Разные авторы принимают разные термины для собственного использования.
Как и ловушка, прерывание останавливает запущенную программу и передает управление обработчику прерываний, который выполняет соответствующее действие. После завершения обработчик прерываний возвращает управление прерванной программе.
Когда происходит прерывание (или ловушка), оборудование передает управление операционной системе. Сначала операционная система сохраняет состояние ЦП, сохраняя регистры и счетчик программ. Затем она определяет, какой тип прерывания произошел. Для каждого типа прерывания отдельные сегменты кода в операционной системе определяют, какое действие следует предпринять.
Переключение ЦП на другой процесс требует сохранения состояния старого процесса и загрузки сохраненного состояния для нового процесса. Эта задача известна как переключение контекста.
обеспечение может в любой момент инициировать прерывание, отправив сигнал процессору, обычно через системную шину.
Сигналы аналогичны аппаратным прерываниям в том, что они прерывают нормальный поток выполнения программы; в большинстве случаев невозможно точно предсказать, когда поступит сигнал.
Среди типов событий, которые заставляют ядро генерировать сигнал для процесса, есть следующие: Произошло программное событие. Например, ... превышен лимит времени ЦП процесса[.]
{{cite journal}}
: CS1 maint: DOI неактивен по состоянию на ноябрь 2024 г. ( ссылка )