Глава 1. Введение. Концепция операционных систем
Скачать 0.54 Mb.
|
КОНЦЕПЦИЯ ОПЕРАЦИОННЫХ СИСТЕМ ABRAHAM SILBERSCHATZ, PETER BAER GALVIN, GREG GAGNE Copyright © 2018, 2013, 2012, 2008 John Wiley & Sons, Inc. All rights reserved Предисловие Операционные системы являются неотъемлемой частью любой компьютерной системы. Точно так же курс по операционным системам является неотъемлемой частью любого компьютерного образования. В этой области происходят быстрые изменения, поскольку компьютеры сейчас широко распространены практически во всех сферах повседневной жизни - от встроенных устройств в автомобилях до самых совершенных инструментов планирования для правительств и многонациональных компаний. Тем не менее, фундаментальные концепции остаются совершенно неясными, и именно на них мы основываем эту книгу. Мы написали эту книгу как учебное пособие для вводного курса по операционным системам на уровне младшего или старшего уровня бакалавриата или на уровне первого года обучения магистратуры. Мы надеемся, что практикующие программисты также найдут его полезным. Это обеспечивает четкое описание концепций, которые лежат в основе операционных систем. В качестве предварительных условий мы предполагаем, что читатель знаком с базовыми структурами данных, организацией компьютеров и языком высокого уровня, таким как Основы Java. Темы аппаратного обеспечения, необходимые для понимания операционных систем, рассматриваются в главе 1. В этой главе мы также включаем обзор базовых структур данных, которые преобладают в большинстве операционных систем. Для примеров кода мы используем преимущественно язык C, а также значительное количество кода на Java, но читатель все еще может понять алгоритмы без глубокого знания языков программирования. Концепции представлены с использованием интуитивных описаний. Важные теоретические результаты раскрыты, но формальные доказательства в значительной степени опущены. Библиографические примечания в конце каждой главы содержат указатели на исследовательские работы, в которых результаты были впервые представлены и доказаны, а также ссылки на материалы для дальнейшего прочтения. Вместо доказательств мы приводим примеры, по которым мы ожидаем, что рассматриваемый результат будет верным. Фундаментальные концепции и алгоритмы, описанные в книге, часто основаны на тех, которые используются как в открытых, так и в коммерческих операционных системах. Наша цель - представить эти концепции и алгоритмы в общем виде, который не привязан к какой-либо конкретной операционной системе. Тем не менее, мы представляем большое количество примеров, относящихся к наиболее популярным и наиболее инновационным операционным системам, включая Linux, Microsoft Windows, Apple macOS (оригинальное название OSX, было изменено в 2016 году для сравнения нескольких продуктов Apple) и Solaris. Мы также включили примеры Android и iOS: в настоящее время две доминирующие мобильные операционные системы. Организация текста пособия отражает наши многолетние учебные курсы по операционным системам. Также были рассмотрены отзывы, предоставленные рецензентами текста, а также многочисленные комментарии и предложения, которые мы получили от читателей наших предыдущих изданий, а также от наших нынешних и бывших студентов. Содержание этой книги Пособие состоит из десяти основных частей: • Обзор. Главы 1 и 2 объясняют, что такое операционные системы, что они делают, и как они спроектированы и созданы. В этих главах обсуждаются общие черты операционной системы и действия операционной системы для пользователя. Мы охватываем как традиционные ПК и серверные операционные системы, так и операционные системы для мобильных устройств. Изложение носит мотивационный и пояснительный характер. Мы избежали обсуждения того, что происходило внутренне в этих главах. Таким образом, они подходят для индивидуальных читателей или студентов младших классов, которые изучают какую-либо рабочую систему без подробного изучения внутренних алгоритмов. • Управление процессом. В главах с 3 по 5 описывается концепция процесса и параллелизм как сердце современных операционных систем. Процесс - это единица работы в системе. Такая система состоит из набора одновременно выполняющихся процессов, некоторые из которых выполняют код операционной системы и другой выполняют пользовательский код. Эти главы описывают методы для планирования процессов и межпроцессного взаимодействия. Также включено подробное обсуждение темы, а также рассмотрение вопросов, связанных с несколькими основными системами и параллельным программированием. • Синхронизация процессов. Главы 6–8: методы для синхронизации процессов и обработки тупиковых ситуаций. Поскольку мы расширили охват синхронизации процессов, мы разделили прежнюю главу 5 (Синхронизация процессов) на две отдельные главы: Глава 6, Инструменты синхронизации, и Глава 7, Примеры синхронизации. Управление памятью. Главы 9 и 10 посвящены управлению основной памятью во время выполнения процесса. Чтобы улучшить как использование процессора и скорость его реакции для своих пользователей, компьютер должен хранить несколько процессов в памяти. Существует много различных схем управления памятью, отражающих различные подходы к управлению памятью, и эффективность конкретного алгоритма зависит от ситуации. • Управление хранением. В главах 11 и 12 описывается, как запоминающее устройство и устройства ввода / вывода обрабатываются в современной компьютерной системе. Устройства ввода-вывода, которые подключаются к компьютеру, сильно различаются, и операционная система должна предоставлять приложениям широкий спектр функций, позволяющих им контролировать все аспекты этих устройств. Мы подробно обсудим системный ввод-вывод, в том числе проект системы ввода-вывода, интерфейсы, а также внутренние структуры и функции системы. Во многих отношениях устройства ввода-вывода являются самыми медленными основными компонентами компьютера. Поскольку они представляют собой узкое место в производительности, мы также изучаем проблемы производительности, связанные с устройствами ввода-вывода. • Файловые системы. Главы с 13 по 15 обсуждают, как файловые системы обрабатываются в современной компьютерной системе. Файловые системы обеспечивают механизм для хранения и доступа к данным и программам. Мы описываем классические внутренние алгоритмы и структуры управления хранилищем, что дает твердое практическое понимание свойств, используемых алгоритмов, их преимуществ. • Безопасность и защита. В главах 16 и 17 рассматриваются механизмы, необходимые для обеспечения безопасности и защиты компьютерных систем. Процессы в операционной системе должны быть защищены от действий друг друга. Чтобы обеспечить такую защиту, мы должны гарантировать, что только процессы, получившие надлежащую авторизацию от операционной системы, могут работать с файлами, памятью, процессором и другими ресурсами системы. Защита - это механизм контроля доступа программ, процессов или пользователей к ресурсам компьютерной системы. Этот механизм должен обеспечивать средства указания элементов управления, которые должны быть наложены, а также средства обеспечения соблюдения. Защита безопасности целостности информационной системы (обоих данных и кода), а также физических ресурсов системы, от несанкционированного доступа, злонамеренного уничтожения или изменения и случайного введения несоответствия. Среды программирования Текст содержит несколько примеров программ, написанных на C и Java. Эти программы предназначены для работы в следующих средах программирования: • POSIX. POSIX (что означает переносимый интерфейс операционной системы - Portable Operating System Interface) представляет собой набор стандартов, реализованных преимущественно для операционных систем на основе UNIX. Хотя системы Windows также могут запускать определенные программы POSIX, наш обзор POSIX сфокусирован на системах Linux и UNIX. POSIX-совместимые системы должны реализовывать основной стандарт POSIX (POSIX.1); Linux и macOS являются примерами POSIX-совместимых систем. POSIX также определяет несколько расширений для стандартных стандартов, включая расширения реального времени (POSIX.1b) и расширение для библиотеки потоков (POSIX.1c, более известной как Pthreads). Мы предоставляем несколько примеров программирования, написанных на C, иллюстрирующих базовый API POSIX, а также Pthreads и расширения для программирования в реальном времени. Эти примеры программ были протестированы на системах Linux и 4.4 OS с использованием компилятора gcc. • Java. Java - широко используемый язык программирования с богатым API и встроенной языковой поддержкой для конкурентного и параллельного программирования. Java-программы запускаются из любых операционных систем, поддерживающих Java (виртуальную машину Jvm). Мы проработаем концепции различных операционных систем и сетей с Java-программами, протестированными с использованием Версии 1.8 Java Development Kit (JDK). • Оконные системы. Основная среда программирования для Windows-систем представляет собой Windows API, который предоставляет всесторонние функции для управления процессами, потоками, памятью и периферийными устройствами. Мы предоставляем небольшое количество программ на C, иллюстрирующих использование этого API-интерфейса. Программы были протестированы на работающей системе Windows 10. Мы выбрали эти три среды программирования, поскольку считаем, что они лучше всего представляют две наиболее популярные модели операционных систем - Linux / UNIX и Windows - вместе с широко используемой средой Java. Большинство примеров программирования написаны на C, и мы ожидаем, что читателям будет удобно с этим языком. Читатели, знакомые с языками C и Java, должны легко понять большинство программ, представленных в этом тексте. В некоторых случаях, таких как создание потоков, мы иллюстрируем конкретную концепцию, используя все три среды программирования, позволяя читателю противопоставить три разные библиотеки при решении одной и той же задачи. В других ситуациях мы можем использовать только один из API для демонстрации концепции. Например, мы иллюстрируем разделяемую память, используя только POSIX API; программирование сокетов в TCP / IP выделяется с помощью Java API. Виртуальная машина Linux Чтобы помочь студентам лучше понять систему Linux, мы предоставляем виртуальную машину Linux с дистрибутивом Ubuntu с этим текстом. Виртуальная машина, доступная для скачивания с текстового сайта (http://www.os-book.com), также предоставляет разработку среды, включая компиляторы gcc и Java. Большинство программных заданий в книге могут быть выполнены с использованием этой виртуальной машины, за исключением исключений, для которых требуется Windows API. Виртуальная машина может быть установлена и запущена в любой хост-операционной системе, которая может запускать программное обеспечение виртуализации VirtualBox, которое в настоящее время включает в себя Windows 10, Linux и macOS. В то же время мы писали об этом последнем варианте функционирования операционных систем, мы руководствовались устойчивым ростом в четырех основных областях, которые влияют на операционные системы: Мобильные операционные системы Многоядерные системы Виртуализация Вторичное хранилище энергонезависимой памяти Чтобы подчеркнуть эти темы, мы включили соответствующее освещение во все новое издание. Например, мы значительно расширили охват мобильных операционных систем Android и iOS, а также охват архитектуры ARMv8, которая доминирует в мобильных устройствах. Мы также расширили охват многоядерных систем, в том числе расширили охват API-интерфейсов, обеспечивающих поддержку конкурентности и параллелизма. В настоящее время такие устройства, как твердотельные накопители, рассматриваются как равные накопителям на жестких дисках в главе, в которой обсуждаются операции ввода-вывода, хранения данных и файловых систем. Несколько наших читателей высказались в поддержку увеличения охвата Java, и в этом выпуске мы предоставили дополнительные примеры Java. Кроме того, мы переписываем материал в главном порядке, принося более старый материал на сегодняшний день и удаляя материал, который больше не интересен или не актуален. Мы перераспределяем многие главы и, в некоторых случаях, перемещаем разделы из одной главы в другую. Мы также значительно переработали рисунок, создав несколько новых фигур, а также изменив многие существующие фигуры. Поддержка сайта Когда вы посещаете веб-сайт, поддерживающий этот текст по адресу http://www.os-book.com, вы можете загрузить следующие ресурсы: Виртуальная машина Linux Исходный код C и Java Полный набор рисунков и иллюстраций FreeBSD, Mach и примеры использования Windows 7 Ошибки Библиография Примечания для инструкторов На веб-сайте для этого текста мы предлагаем несколько примеров, которые предлагают различные подходы к использованию текста как на начальных, так и на продвинутых курсах. Как правило, мы призываем инструкторов последовательно продвигаться вперед. Как правило, мы призываем инструкторов последовательно продвигаться по главам, поскольку эта стратегия обеспечивает наиболее тщательное изучение операционных систем. Однако, используя примерные учебные планы, инструктор может выбрать другой порядок глав (или подразделов глав). В этом выпуске мы добавили много новых письменных упражнений и программных задач, и проектов. Большинство новых назначений программирования включают процессы, потоки, планирование процессов, синхронизацию процессов и управление памятью. Некоторые вводят ядро в систему Linux, которая требует использования виртуальной машины Linux, сопровождающей этот текст, или другого подходящего дистрибутива Linux. Решения для письменных упражнений и заданий по программированию доступны для инструкторов, которые приняли этот текст для своего класса операционной системы. Чтобы получить эти ограниченные добавки, обратитесь к местному торговому представителю John Wiley & Sons. Вы можете найти своего представителя Wiley, перейдя по ссылке http://www.wiley.com/college и нажав «Кто мой представитель?» Примечания для студентов Мы рекомендуем вам воспользоваться практическими упражнениями, приведенными в конце каждой главы. Мы также рекомендуем вам ознакомиться с учебным руководством, которое было подготовлено одним из наших студентов. Наконец, для студентов, которые не знакомы с системами UNIX и Linux, мы рекомендуем вам загрузить и установить виртуальную машину Linux, которую мы включили на веб-сайте поддержки. Не только предоставит вам новый опыт, но и откроет источник природы Linux, и вы легко исследуете все детали этой популярной операционной системы. Мы желаем вам удачи в изучении операционных систем! Связаться с нами Мы постарались устранить опечатки, ошибки и тому подобное в тексте. Но, как и в случае новых версий программного обеспечения, ошибки, скорее всего, остаются. Список обновлений доступен на веб-сайте книги. Мы будем благодарны, если вы сообщите нам о любых ошибках или упущениях в книге, которых нет в текущем списке ошибок. Мы будем рады получить предложения по улучшению книги. Мы также приветствуем любые материалы на веб-сайте книги, которые могут быть полезны другим читателям, такие как упражнения по программированию, предложения по проектам, онлайн-лаборатории и учебные пособия, а также учебные советы. Электронная почта должна быть адресована os-bookauthors@cs.yale.edu. Часть 1. Обзор Функционирующая система действует как посредник между пользователем компьютера и компьютерным оборудованием. Цель операционной системы - предоставить среду, в которой пользователь может выполнять программы удобным и эффективным способом. Операционная система - это программное обеспечение, которое управляет аппаратным обеспечением компьютера. Аппаратное обеспечение должно обеспечивать надлежащие механизмы для обеспечения правильной работы компьютерной системы и предотвращения программ от вмешательства в правильную работу системы. Внутренне, операционные системы сильно различаются по своему составу, так как они организованы по многим различным направлениям. Проектирование новой операционной системы является основной задачей, и важно, чтобы цели системы были четко определены до начала проектирования. Поскольку операционная система большая и сложная, ее нужно создавать по частям. Каждая из этих частей должна быть четко очерченной частью системы с тщательно определенными входами, выходами и функциями. Глава 1 Введение Операционная система - это программное обеспечение, управляющее аппаратным обеспечением компьютера. Она также обеспечивает основу для прикладных программ и выступает в качестве посредника между пользователем компьютера и компьютерным оборудованием. Удивительным аспектом операционных систем является то, как они различаются при выполнении этих задач в самых разных вычислительных средах. Операционные системы повсюду: от автомобилей и бытовой техники, которые включают устройства «Интернета вещей», до смартфонов, персональных компьютеров, корпоративных компьютеров и облачных вычислительных сред. Для того, чтобы исследовать роль операционной системы в современной вычислительной среде, важно, чтобы первые понимали и организацию, и архитектуру компьютерного оборудования. Это включает в себя процессор, память и устройства ввода-вывода, а также хранилище. Основная ответственность операционной системы заключается в распределении этих ресурсов по программам. Поскольку операционная система большая и сложная, ее нужно создавать по частям. Каждая из этих частей должна быть четко очерченной частью системы с тщательно определенными входами, выходами и функциями. В этой главе мы даем общий обзор основных компонентов современной компьютерной системы, а также функций, предоставляемых операционной системой. Кроме того, мы переходим к различным темам, которые помогают установить этап для оставшейся части текста: структуры данных, используемые в операционных системах, вычислительных средах, а также в открытых и свободных операционных системах. |