Главная страница
Навигация по странице:

  • ОПРЕДЕЛЕНИЯ КОМПОНЕНТОВ СИСТЕМЫ КОМПЬЮТЕРА

  • 1.3.3 Кластерные системы

  • 1.4 Операционная система

  • 1. Распределенная файловая система

  • 3. Система MapReduce

  • 1.4.1. Многозадачное программирование и многозадачность

  • 1.4.2. Работа в двухрежимном и многорежимном режимах

  • Глава 1. Введение. Концепция операционных систем


    Скачать 0.54 Mb.
    НазваниеКонцепция операционных систем
    Анкорdmaster
    Дата13.10.2022
    Размер0.54 Mb.
    Формат файлаdocx
    Имя файлаГлава 1. Введение.docx
    ТипДокументы
    #731212
    страница4 из 7
    1   2   3   4   5   6   7

    Рисунок 1.8 Симметричная многопроцессорная архитектура.

    Кроме того, один чип с несколькими ядрами потребляет значительно меньше энергии, чем несколько одноядерных чипов, что является важной проблемой как для мобильных устройств, так и для ноутбуков. На Рисунке 1.9 показано, как проектирование ядра с двумя процессорами выполняется в одном процессоре. Каждый из них имеет свой собственный регистр регистрации, а также имеет локальный кэш, часто известный как уровень 1 или L1, кеш, как правило, меньше и быстрее, чем общие кэши более высокого уровня. Помимо архитектурных соображений, таких как кеш, память и конфликты шин, многоядерный процессор с N ядрами представляется операционной системе N стандартными процессорами. Эта характеристика заставляет разработчиков операционных систем - и разработчиков приложений - эффективно использовать эти ядра обработки, и это вопрос, который мы исследуем в главе 4. Практически все современные операционные системы, включая Windows, macOS и Linux, а также мобильные системы Android и iOS, поддерживают многоядерные SMP-системы.



    Рис. 1.9. Двухъядерный дизайн с двумя ядрами на одном кристалле.

    Добавление дополнительных ЦП в многопроцессорную систему увеличит вычислительную мощность, однако, если принять во внимание более раннюю концепцию, то это очень хорошо, и как только мы добавляем слишком много ЦП, конкуренция за системную шину становится узким местом, и производительность начинает снижаться. Вместо этого альтернативный подход заключается в предоставлении каждому ЦП (или группе ЦП) собственной локальной памяти, доступ к которой осуществляется через небольшую быструю локальную шину. Процессоры соединены общим системным соединением (a shared system interconnect), так что все ЦП совместно используют одно физическое адресное пространство. Этот подход, известный как неравномерный доступ к памяти или non-uniform memory access - NUMA, показан на рисунке 1.10. Преимущество состоит в том, что, когда ЦП обращается к своей локальной памяти, он не только работает быстро, но и отсутствует конфликт по поводу соединения с системой. Таким образом, системы NUMA могут масштабироваться более эффективно, поэтому добавляется больше процессоров. Потенциальным недостатком системы NUMA является увеличенная задержка, когда ЦП должен получить доступ к удаленной памяти через системное соединение, что может привести к снижению производительности. Другими словами, например, CPU0 не может получить доступ к локальной памяти CPU3 так же быстро, как он может получить доступ к собственной локальной памяти, что снижает производительность. Операционные системы могут минимизировать этот штраф NUMA посредством тщательного планирования ЦП и управления памятью, как обсуждалось в Разделе 5.5.2 и Разделе 10.5.4. Поскольку системы NUMA могут масштабироваться для размещения большого числа процессоров, они становятся все более популярными как на серверах, так и на высокопроизводительных вычислительных системах. Наконец, блейд-серверы - это системы, в которых несколько процессорных плат, плата ввода-вывода и сетевых плат размещены в одном корпусе. Разница между этими и традиционными многопроцессорными системами заключается в том, что каждый блейд-процесс или плата загружаются независимо и работают под собственной операционной системой. Некоторые blade-серверы также являются многопроцессорными, что размывает линии между компьютерами. По сути, эти серверы состоят из нескольких независимых многопроцессорных систем.

    ОПРЕДЕЛЕНИЯ КОМПОНЕНТОВ СИСТЕМЫ КОМПЬЮТЕРА

    • ЦП - оборудование, которое выполняет инструкции.

    • Процессор - физический чип, который содержит один или несколько процессоров.

    • Core - базовая вычислительная единица CPU.

    • Multicore - включает несколько вычислительных ядер на одном и том же процессоре.

    • Многопроцессорный - включает несколько процессоров.

    Хотя практически все системы в настоящее время являются многоядерными, мы используем общий термин «ЦП», когда ссылаемся на одно вычислительное ядро компьютера с системой, а также многоядерный, когда конкретно ссылаемся на одно или несколько ядер на кэшах ЦП.

    1.3.3 Кластерные системы Другим типом многопроцессорных систем является кластерная система, которая объединяет несколько процессоров. Кластерные системы отличаются от многопроцессорных систем, описанных в разделе 1.3.2, тем, что они состоят из двух или более отдельных систем - или узлов - соединенных вместе, каждая из которых представляет собой единую систему. Такие системы считаются слабосвязанными. Следует отметить, что определение кластеризованного не является конкретным. Многие коммерческие пакеты и пакеты с открытым исходным кодом пытаются определить, что такое кластерная система и почему одна форма лучше другой. Общепринятое определение состоит в том, что кластерные компьютеры совместно используют хранилище и тесно связаны через локальную сеть (как описано в главе 19) или более быстрое соединение, такое как InfiniBand. Кластеризация обычно используется для предоставления сервиса высокой доступности, то есть сервиса, который будет продолжаться даже в случае сбоя одной или нескольких систем в кластере. Как правило, мы получаем высокую доступность, добавляя уровень избыточности в систему. Уровень кластерного программного обеспечения работает на узлах кластера. Каждый узел может контролировать один или несколько других устройств (через сеть). При сбое контролируемой машины, контролирующая машина может взять на себя ответственность за ее хранение и перезапустить приложения, которые выполнялись на отказавшей машине. Пользователи и клиенты приложений видят только кратковременное прерывание обслуживания. Высокая доступность обеспечивает повышенную надежность, что имеет решающее значение во многих приложениях. Возможность продолжения предоставления услуг пропорционально уровню выживания аппаратного обеспечения называется градиентной деградацией. Некоторые системы допускают постепенную деградацию и называются отказоустойчивыми, поскольку они могут испытывать сбой любого отдельного компонента и при этом продолжать работу. Отказоустойчивость требует механизма, позволяющего обнаруживать, диагностировать и, по возможности, исправлять сбой. Кластеризация может быть структурирована асимметрично или симметрично. При асимметричной кластеризации одна из машин находится в режиме ожидания, в то время как другие работают с приложениями. Хозяин бездействует, но ничего не контролирует активный сервер. Если этот сервер выходит из строя, хост с горячим резервированием становится активным сервером. В симметричной кластеризации два или более хоста запускают приложения и контролируют друг друга. Эта структура, очевидно, более эффективна, так как использует все доступное аппаратное обеспечение. Однако требуется, чтобы было доступно более одного приложения для запуска. Поскольку кластер состоит из нескольких компьютерных систем, соединенных через сеть, кластеры могут также использоваться для создания высокопроизводительных вычислительных сред. Такие системы могут значительно увеличить вычислительную мощность, чем один процессор, или даже системы SMP, потому что они могут запускаться одновременно на всех компьютерах в кластере. Однако приложение должно быть написано специально для использования кластера. Это включает в себя метод, известный как распараллеливание, который разделяет программу на отдельные компоненты, которые работают параллельно на отдельных ядрах компьютера или компьютерах в кластере. Как правило, эти приложения разрабатываются таким образом, чтобы после того, как каждый вычислительный узел решал свою часть проблемы, результаты всех узлов объединялись в окончательное решение. Другие формы кластеров включают в себя параллельные кластеры и кластеризацию по глобальной сети (WAN) (как описано в главе 19). Параллельные кластеры позволяют нескольким хостам получать доступ к одним и тем же данным в общем хранилище.

    Поскольку в большинстве операционных систем отсутствует поддержка одновременного доступа к данным несколькими хостами, параллельные кластеры обычно требуют использования специальных версий программного обеспечения и специальных выпусков приложений. Например, Oracle Real Application Cluster - это версия базы данных Oracle, которая была разработана для работы в параллельном кластере. Каждая машина работает под управлением Oracle, а уровень программного обеспечения отслеживает доступ к общему диску. Каждая машина имеет полный доступ к базе данных. Чтобы обеспечить этот общий доступ, система также должна обеспечивать контроль доступа и блокировку, чтобы избежать конфликтующих операций. Эта функция, широко известная как диспетчер распределенной блокировки (distributed lock manager, DLM), включена в некоторые кластерные технологии. Кластерные технологии быстро меняются. Некоторые кластерные продукты поддерживают тысячи систем в кластере, а также в кластерах, не разделенных милями. Многие из этих улучшений стали возможными благодаря сетям хранения (storage-area networks SAN), как описано в разделе 11.7.4, которые позволяют многим системам подключаться к пулу хранения. Если приложения и их данные хранятся в SAN, программное обеспечение кластера может назначить приложение для запуска на любом хосте, подключенном к SAN. Если хост выходит из строя, тогда любой другой хост может взять на себя управление. Кластер базы данных, десятки хостов, может объединить базу данных, значительно увеличив производительность и надежность. Рисунок 1.11 отображает общую структуру кластерной системы.

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

    Теперь, когда мы рассмотрели основную информацию об организации и архитектуре компьютерной системы, мы можем приступить к обсуждению работы операционной системы. Операционная система обеспечивает среду, в которой выполняются программы. Внутренне действующие системы различаются, поскольку они организованы по разным направлениям. Однако есть много общих черт, которые рассматриваются в этом разделе. Для запуска компьютера, например, когда он включен или перезагружен, ему необходимо запустить исходную программу. Как отмечалось ранее, эта первоначальная программа, или программа начальной загрузки, имеет тенденцию быть простой. Как правило, она хранится в аппаратном обеспечении компьютера в прошивке. Она инициализирует все аспекты системы, от регистров ЦП до контроллеров устройств и содержимого памяти.

    Программа начальной загрузки должна знать, как загрузить операционную систему и как запустить ее. Для достижения этой цели программа начальной загрузки должна найти ядро ​​операционной системы и загрузить его в память. Как только ядро ​​загружено и работает, оно может начать предоставлять сервисы системе и ее пользователям. Некоторые сервисы предоставляются вне ядра системными программами, которые загружаются в память во время загрузки, чтобы стать системными демонами, которые работают все время, пока работает ядро. В Linux первая системная программа называется «systemd» и запускает множество других демонов. Как только этот этап завершен, система полностью загружена, и система ожидает какого-либо события. Если процессы выполняются, нет устройств ввода-вывода, сервис, и некоторые из них отвечают, а работающая система будет тихо, ожидая, когда что-то произойдет. События почти всегда сигнализируют о возникновении прерывания. В Разделе 1.2.1 мы описали аппаратные прерывания. Другой формой прерывания является прерывание (исключение oran), которое является программно-генерируемым прерыванием, вызванным либо ошибкой (например, делением на ноль или недопустимым доступом к памяти), либо конкретным запросом пользовательской программы, являющейся операционной системой. Услуга будет выполняться путем выполнения специальной операции, называемой системным вызовом.

    HADOOP

    Hadoop - это программная среда с открытым исходным кодом, которая используется для распределенной обработки больших наборов данных (известных как большие данные) в кластерной системе, содержащей простые недорогие аппаратные компоненты. Hadoop предназначен для масштабирования от одной системы до кластера, содержащего тысячи вычислительных узлов. Задачи назначаются в кластер, и Hadoop устраивает связь между узлами для управления параллельными вычислениями, процессами и слияния результатов. Hadoop также обнаруживает сбои в узлах и управляет ими, обеспечивая эффективный и высоконадежный сервис распределенных вычислений. Hadoop состоит из следующих трех компонентов:

    1. Распределенная файловая система, которая управляет данными и файлами через распределенные вычислительные узлы.

    2. Инфраструктура YARN ((“Yet Another Resource Negotiator” – «все еще согласование ресурсов»), которая управляет ресурсами в кластере, а также планирует задачи на узлах в кластере.

    3. Система MapReduce, которая позволяет параллельную обработку данных между узлами в кластере.

    Hadoop предназначен для работы в системах Linux, а приложения Hadoop могут быть написаны с использованием нескольких языков программирования, включая языки сценариев, такие как PHP, Perl и Python. Java является популярным выбором для разработки приложений Hadoop, так как Hadoop имеет несколько библиотек Java, которые поддерживают MapReduce. Дополнительную информацию о MapReduce и Hadoop можно найти по адресу https://hadoop.apache.org/docs/r1.2.1/mapred tutorial.html и https://hadoop.apache.org.

    1.4.1. Многозадачное программирование и многозадачность. Одним из наиболее важных аспектов операционных систем является возможность запуска нескольких программ, так как одна программа не может, как правило, поддерживать либо ЦПУ, либо устройства ввода-вывода, постоянно занятые. Кроме того, пользователи обычно хотят запускать более одной программы одновременно. Мультипрограммирование увеличивает загрузку ЦП, а также удовлетворяет пользователей, организовывая программы так, чтобы ЦПУ всегда мог их выполнять. В многопрограммной системе исполняемая программа называется процессом. Идея заключается в следующем: операционная система хранит несколько процессов в памяти одновременно (рисунок 1.12). Операционная система выбирает и начинает выполнение одного из этих процессов. В конечном итоге процесс может дождаться выполнения некоторой задачи, такой как операция ввода-вывода. В немультипрограммированной системе процессор будет простаивать. В многопрограммной системе операционная система просто переключается и выполняет другой процесс. Когда этому процессу нужно ждать, процессор переключается на другой процесс и так далее. В конце концов, первый процесс завершает ожидание и возвращает процессор. До тех пор, пока должен выполняться хотя бы один процесс, ЦП является совершенно новым. Эта идея распространена в других жизненных ситуациях. Например, юрист не работает одновременно только с одним клиентом. В то время как одно дело ожидает передачи в суд или имеет бумажный стиль, адвокат может работать над другим делом. Если у нее достаточно клиентов, адвокат никогда не будет сидеть сложа руки из-за отсутствия работы. (Бесполезные юристы, как правило, становятся политиками, поэтому есть определенная социальная ценность в том, чтобы держать юристов занятыми.) Многозадачность является логическим продолжением мультипрограммирования. В многозадачных системах ЦП выполняет несколько процессов, переключаясь между ними, но переключения происходят часто, предоставляя пользователю быстрое время отклика. Учтите, что, когда процесс выполняется, он обычно выполняется в течение короткого времени, прежде чем он либо завершится, либо ему потребуется выполнить ввод-вывод. Ввод / вывод может быть интерактивным; то есть вывод поступает на дисплей для пользователя, а ввод поступает с клавиатуры пользователя, мыши или экрана касания. Интерактивный ввод-вывод обычно выполняется со «скоростью людей», для завершения которой может потребоваться много времени. Например, ввод может быть ограничен скоростью набора текста пользователем; семь символов в секунду быстро для людей, но невероятно медленно для компьютеров. Вместо того, чтобы позволить центральному процессору бездействовать, когда происходит этот интерактивный ввод, операционная система быстро переключит центральный процессор на другой процесс. Наличие нескольких процессов в памяти одновременно требует некоторой формы управления памятью, о которой мы расскажем в главе 9 и главе 10. Кроме того, если несколько процессов уже запущены вовремя, система должна выбрать, какой процесс будет выполняться следующим. Принятие этого решения - планирование ЦП, которое обсуждается в Главе 5. Наконец, запуск нескольких процессов одновременно требует их способности воздействовать на одну из других запрещенных фаз операционной системы, включая планирование процессов, хранение на диске и управление памятью. Мы обсуждаем эти соображения по всему тексту. В многозадачной системе операционная система должна обеспечивать разумное время отклика. Распространенным методом для этого является виртуальная память, техника, которая позволяет выполнять процесс, который не полностью находится в памяти (глава 10). Основным преимуществом этой схемы является то, что она позволяет пользователям запускать программы, которые увеличивают реальную физическую память. Кроме того, она выделяет основную память в большой однородный массив хранения, отделяя логическую память, которую пользователь просматривает, от физической памяти. Такое расположение освобождает программистов от беспокойства по поводу ограничений памяти. Системы мультипрограммирования и многозадачности должны обеспечивать полную систему (глава 13, глава 14 и глава 15). Файловая система находится во втором хранилище, поэтому управление хранилищем должно быть обеспечено (глава 11). Кроме того, система должна защищать ресурсы от ненадлежащего использования (Глава 17). Для обеспечения последовательного исполнения системы должны обеспечивать механизмы синхронизации процессов и связи (Глава 6 и Глава 7), и это может гарантировать, что процессы не застревают в тупике, навсегда ожидая друг друга (Глава 8).

    1.4.2. Работа в двухрежимном и многорежимном режимах Поскольку операционная система и ее пользователи совместно используют аппаратные и программные ресурсы компьютерной системы, надлежащим образом спроектированная операционная система должна гарантировать, что неправильная (или вредоносная) программа не может заставить другие программы - или саму операционную систему - работать некорректно. Чтобы обеспечить надлежащее выполнение системы, мы должны различать выполнение кода операционной системы и пользовательского кода. Подход, принятый большинством компьютерных систем, заключается в обеспечении аппаратной поддержки, которая позволяет различать различные режимы выполнения. По крайней мере, нам нужны два отдельных режима работы: режим пользователя и режим ядра (также называемый режимом супервизора, режимом системы или привилегированным режимом). Бит, называемый битом режима, добавляется к оборудованию компьютера для указания текущего режима: ядро ​​(0) или пользователь (1). С помощью бита режима мы можем различить задачу, которая выполняется от имени операционной системы, и задачу, которая выполняется от имени пользователя, когда компьютерная система выполняет половинное приложение-причину в режиме пользователя. Однако, когда пользовательское приложение запрашивает сервис у операционной системы (посредством системного вызова), система должна перейти из режима пользователя в режим ядра, чтобы выполнить запрос. Это показано на рисунке 1.13. Как мы увидим, это архитектурное усовершенствование полезно и для многих других аспектов работы системы. Во время загрузки системы оборудование запускается в режиме ядра. Затем операционная система загружается и запускает пользовательские приложения в пользовательском режиме. Всякий раз, когда происходит прерывание, аппаратные средства переключаются из режима пользовательского режима в режим ядра (то есть изменяет состояние бита режима на 0). Таким образом, всякий раз, когда операционная система получает контроль над компьютером, она находится в режиме ядра. Система всегда переключается в режим пользователя (путем установки бита режима в 1) перед передачей управления пользовательской программе. Двойной режим работы обеспечивает средства защиты операционной системы от ошибок пользователей - и ошибок пользователей, влияющих друг на друга. Мы осуществляем эту защиту, назначая некоторые машинные инструкции, которые могут причинить вред привилегированным инструкциям. Аппаратное обеспечение позволяет выполнять привилегированные инструкции только в режиме ядра. Если пользователь пытается выполнить привилегированную инструкцию в пользовательском режиме, аппаратное обеспечение не выполняет инструкции по дальнейшему выполнению команды, связанной с удаленной операцией. Инструкция по переключению в режим ядра является примером привилегированной инструкции. Некоторые примеры здесь включают в себя управление вводом / выводом, управление таймером и управление прерываниями. Многие дополнительные привилегированные инструкции обсуждаются по всему тексту. Концепция режимов может быть расширена за пределы двух режимов. Например, процессоры Intel имеют четыре отдельных защитных кольца, где кольцо 0 является режимом ядра, а кольцо 3 - режимом пользователя (хотя кольца 1 и 2 могут использоваться для различных сервисов операционной системы, в действительности они на самом деле часто используются.) Системы ARMv8 имеют семь режимов. Процессоры, поддерживающие виртуализацию (раздел 18.1), часто имеют отдельный режим, позволяющий указать, какой виртуальный диспетчер машин (VMM) контролирует систему. В этом режиме VMM имеет больше привилегий, чем пользовательские процессы, но меньше, чем ядро. Ему необходим такой уровень привилегий, чтобы он мог создавать и управлять виртуальными машинами, изменяя состояние ЦП для этого. Теперь мы можем лучше понять жизненный цикл выполнения команд в компьютерной системе. Начальный контроль находится в операционной системе, в которой инструкции выполняются в режиме ядра. Когда управление передается пользовательскому приложению, режим устанавливается в режим пользователя. В конце концов управление снова переключается на операционную систему через прерывание, прерывание или системный вызов. Большинство современных операционных систем, таких как Microsoft Windows, Unix и Linux, используют эту двухрежимную функцию и обеспечивают лучшую защиту операционной системы.

    Системные вызовы предоставляют пользовательской программе средства для запроса операционной системы о выполнении задач, зарезервированных для операционной системы, от имени пользовательской программы. Системный вызов вызывается различными способами, в зависимости от функциональности, предоставляемой базовым процессором. Во всех формах это метод, используемый в процессе восстановления запроса операционной системой. Системный вызов обычно задает форму фрейма для конкретного местоположения в векторе прерывания. Это может быть выполнено с помощью обычной команды вызова, хотя некоторые системы имеют специальную инструкцию системного вызова для вызова системного вызова. Когда системный вызов выполняется, он обычно обрабатывается аппаратным обеспечением как программное прерывание. Управление проходит через вектор прерывания в служебную подпрограмму в операционной системе, а бит режима устанавливается в режим ядра. Процедура обслуживания системного вызова является частью операционной системы. Ядро проверяет инструкцию прерывания, чтобы определить, какой системный вызов произошел; параметр указывает, какой тип сервиса запрашивает пользовательская программа. Дополнительная информация, необходимая для запроса, может передаваться в регистрах, в стеке или в памяти (с указателями на ячейки памяти, передаваемые в регистрах). Ядро проверяет, что параметры являются правильными и допустимыми, выполняет запрос и возвращает управление по инструкции системы. Мы опишем системные вызовы более подробно в разделе 2.3. Как только аппаратная защита установлена, она обнаруживает ошибки, которые нарушают режимы. Эти ошибки обычно обрабатываются операционной системой. Если пользовательская программа каким-то образом дает сбой - например, путем попытки выполнить недопустимую инструкцию или получить доступ к памяти, которая не находится в адресном пространстве пользователя, - тогда аппаратное обеспечение перехватывает операционную систему. Управление передачей осуществляет управление вектором прерывания в операционной системе, как прерывание. При возникновении программной ошибки операционная система должна ненормально завершить программу. Эта ситуация обрабатывается тем же кодом, что и запрашиваемое пользователем ненормальное завершение. Неправильное сообщение об ошибке появляется, и память программы может быть сбита с толку.
    1   2   3   4   5   6   7


    написать администратору сайта