Файл: «ФУНКЦИИ ОПЕРАЦИОННЫХ СИСТЕМ ПЕРСОНАЛЬНЫХ КОМПЬЮТЕРОВ».pdf
Добавлен: 23.04.2023
Просмотров: 264
Скачиваний: 1
СОДЕРЖАНИЕ
1 Функции операционной системы
2 Интерфейс между пользователем и аппаратным обеспечением
3 Интерфейс между пользователем и программным обеспечением
4 Интерфейс между программами и аппаратным обеспечением
4.1 Абстракция файловой системы
4.2 Абстракция виртуальной памяти
Рис. 2 – Диалог пользователя с операционной системой IBM PC-DOS 1.0. Пользователь ввел команду, чтобы получить список файлов на диске
Понятно, что такой способ взаимодействия с пользователем, хотя и решает свою непосредственную задачу (например, позволяет запускать любые необходимые пользователю программы), тем не менее, является довольно неудобным. Например, ожидается, что пользователь будет наизусть знать формат необходимых команд, и не будет ошибаться при их наборе.
Современные операционные системы вместо возможности набора команд, предоставляют пользователю некий графический интерфейс, с которым можно взаимодействовать, используя клавиатуру, мышь, или просто пальцы руки. Пример такого графического интерфейса приведен на рисунке.
Рис. 3 – Пример графического интерфейса пользователя в ОС Linux, с применением рабочего стола KDE
Как видно на рисунке, данный способ является гораздо более наглядным. Если мы не знаем, что делает команда DIR в операционной системе MS-DOS, мы никогда бы не узнали, что происходит на рисунке 2. Однако когда мы смотрим на рисунок 3, мы сразу же понимаем, что в правом верхнем углу находятся часы, а в центре – какой-то диалог, в котором можно выбрать один из девяти вариантов.
Практически все современные операционные системы предоставляют пользователю графический интерфейс. Однако не следует думать, что этот интерфейс является панацеей, и текстовые команды больше не нужны. На самом деле, даже самый тщательно продуманный графический интерфейс пользователя не может перекрыть все возможные варианты использования компьютера, поэтому даже в самой современной операционной системе всегда существуют специальные программы, имитирующие старый механизм взаимодействия – с помощью команд. В операционной системе Microsoft Windows это программы CMD и PowerShell, а в ОС Linux – например, Bash или Tcsh. Естественно, сегодня умение работать в таких программах больше не является необходимостью, однако они могут быть весьма полезны, так как иногда позволяют сделать работу быстрее и качественнее.
Кроме способа организации интерфейса для взаимодействия с пользователем, операционные системы различаются по количеству программ, которые можно запустить одновременно. Более старые ОС, например, операционная система MS-DOS, позволяла запускать лишь одну программу в один момент времени (часто в программах даже не существовало способа передать управление операционной системе обратно, и для этого приходилось перезагружать компьютер). В этом подходе есть как свои преимущества (если программа одна, то она может взаимодействовать с аппаратным обеспечением как ей угодно, не боясь навредить другим программам), так и недостатки (невозможно, например, одновременно набирать текст и слушать музыку). Именно из-за недостатков такого способа почти все современные операционные системы являются многозадачными.
Многозадачные ОС позволяют пользователю выполнять несколько задач одновременно. Как правило, пользователь «напрямую» взаимодействует лишь с одной задачей, например, набирает текст, однако в «фоновом режиме» задач может выполняться сколь угодно много (в пределах мощности компьютера). Например, в процессе набора текста он может слушать музыку, а его компьютер - заниматься майнингом биткоинов или вычислять формулу нового лекарства от рака.
Кроме того, что это удобнее для конечного пользователя, это гораздо лучше для самой операционной системы. Каждая ОС делает множество «скрытых» от пользователя вещей, например, обновляет показания часов компьютера, или выводит изображение на экран монитора 50 раз в секунду. Если бы наша операционная система была однозадачной, было бы сложно в нужный момент прерывать пользовательскую программу, чтобы выполнить что-то свое. Если же наша ОС многозадачна, то свои собственные задачи она может выполнять точно также, как и пользовательские (возможно, с более высоким приоритетом).
Прежде чем позволять пользователю работать с каким-либо программами, их необходимо установить и настроить, а после того, как по какой-то причине программа перестала быть нужной, она должна быть удалена, и желательно так, чтобы после нее не осталось никаких лишних файлов. Таким образом, хорошо спроектированная операционная система должна предоставлять пользователю возможность установки и удаления любых необходимых ему программ.
В своем простейшем виде программа просто может представлять собой набор некоторых файлов, возможно запакованных в один архив. Тогда желающий работать с программой пользователь может просто скопировать (и при необходимости распаковать) требуемую программу в любой каталог на жестком диске, и начать с ней работать. Чтобы удалить более ненужную ему программу, он просто удаляет каталог, где она располагается.
Однако в современных ОС все значительно сложнее по нескольким причинам.
Во-первых, писать каждую программу по отдельности довольно утомительно. Часто при написании программы используют уже ранее написанные. Например, если программист хочет создать программу, показывающую пользователю изображения на экране, то ему не нужно заново писать код по обработке каждого возможного формата файлов с изображениями. Он может воспользоваться какими-либо библиотеками, которые были написаны заранее. И опять же, он конечно может распространять эти библиотеки вместе со своей программой, но тогда ему нужно будет постоянно обновлять их (например, если в них нашли уязвимость), а если другие программы тоже пожелают воспользоваться этими библиотеками, их нужно будет хранить в нескольких копиях.
Поэтому в современных ОС применяются библиотеки на уровне системы. Часто используемые библиотеки, такие как .NET Framework в ОС Windows, или, например, libpng в ОС Linux устанавливаются в каталог с библиотеками операционной системы, и ими может пользоваться любая программа. Естественно, если программа пользуется такими библиотеками, ее уже нельзя просто передавать в виде каталога с файлами. Нужно проверить, есть ли в системе такая библиотека, а если ее нет, то скачать ее из Интернета, или хотя бы вывести ошибку пользователю.
Во-вторых, программа может захотеть обратиться к какому-то месту, находящемуся за пределами ее собственной папки. Например, если та же программа просмотра изображений поддерживает механизм OLE (о нем будет сказано в дальнейшем разделе), то ей нужно сообщить об этом операционной системе (как правило, записью в реестр). Следовательно, если потом удалить данную программу, просто удалив ее папку, операционная система все еще будет считать ее в какой-то степени существующей. При установке каждой программы необходимо сохранять, что именно она сделала (какие файлы создала, и в какие места записала данные), чтобы потом полностью ее удалить.
В данной области ответственности операционных систем наиболее ярко проявляются различия ОС Windows и ОС Linux.
В семействе ОС Windows каждая программа, как правило, снабжена специальной программой-установщиком, называющимся setup.exe или install.exe. Данная программа должна установить программу на жесткий диск (переписать программу, и произвести все необходимые настройки), и создать другую программу, которая будет удалять эту программу в случае запроса пользователя. Когда пользователь скажет операционной системе, что эту программу нужно удалить, то Windows вызовет данный файл, и он произведет всю необходимую работу по удалению.
В таком подходе есть один большой недостаток – пользователь (и ОС) должен довеять разработчику программного обеспечения в той части, что программа удалится полностью, и от нее не останется никаких лишних файлов. Даже если разработчик не хотел сделать ничего плохого, он мог забыть о каких-то параметрах, которые нужно удалить. Поэтому в данной ОС довольно часто встречаются «хвосты» от уже удаленных программ – данные, которые по какой-то причине остались храниться.
Поэтому в ОС Linux общепризнан другой подход. В каждом его дистрибутиве находится специальный «пакетный менеджер». Его задачей является установка и удаление любых программ, находящихся в специальных «репозиториях», которые создают и поддерживают либо разработчики дистрибутива, либо отдельные неравнодушные пользователи.
Например, в дистрибутиве Gentoo Linux существует пакетный менеджер Portage. С помощью данной программы можно установить любое приложение, входящее в состав репозитория, который в данном дистрибутиве называется «коллекция портов». Чтобы установить приложение, нужно отдать всего одну команду. После этого будут скачаны исходные коды данного приложения (как правило, с сайта GITHUB), оно будет скомпилировано, и установлено в систему. В процессе установки, данное приложение запомнит, какие файлы и куда были установлены, и запишет данную информацию в базу данных. Затем, при возможном удалении приложения, весь список файлов приложения будет удален. Пример начала установки приложения Midnight Commander (mc) показан на рисунке:
Рис. 4 – Обновление Midnight Commander в ОС Gentoo Linux с помощью пакетного менеджера Portage
Использование данного подхода имеет множество преимуществ. Перечислим лишь некоторые из них:
- При удалении, все файлы приложения удаляются полностью, причем это не зависит от создателя приложения;
- Приложение компилируется из исходных кодов, следовательно, перед установкой можно убедиться, что в нем не содержится никаких уязвимостей (хотя, конечно, редко кто будет просматривать исходный код, но в принципе это возможно). Кроме этого, приложение будет скомпилировано именно под нужную архитектуру и с нужным набором опций;
- В отличие от ОС Windows, здесь нельзя поймать вирус, пока ты ищешь сайт программы, и скачиваешь дистрибутив. Все они уже добавлены разработчиками, а у каждого пакета прописана контрольная сумма.
Из-за преимуществ данного подхода, разработчики ОС Windows также добавили некоторые возможности такого «пакетного менеджера» в последнюю версию операционной системы (хотя пока он лишь скачивает готовые приложения, а не компилирует их). Этот пакетный менеджер называется Chocolatey, но пока о нем мало кто знает.
Ниже, на изображении показано обновление установленных ранее при помощи данного пакетного менеджера приложений, используя PowerShell:
Рис. 5 – Обновление Adobe Reader с помощью пакетного менеджера Chocolatey
Логично, что в многозадачных операционных системах нельзя предоставлять программам монопольный доступ к оборудованию. Оборудование может быть нужно одновременно нескольким программам, и нужно уметь «делить его на части» - например, в случае сетевой карты, сетевые пакеты от различных программ должны уметь перемешиваться, а не ждать друг друга. Это приводит к следующей функции, которой должны обладать все операционные системы – обеспечение интерфейса между программами и аппаратными ресурсами компьютера.
4 Интерфейс между программами и аппаратным обеспечением
Так как все современные операционные системы являются многозадачными, а они могут выполнять (и выполняют) несколько программ одновременно, то возникает вопрос, как разделить между ними оборудование (которое, как правило, представлено в единственном экземпляре).
Например, большинство программ хотят выводить что-то на экран. Естественно, они не могут обращаться напрямую к видеокарте, так как видеокарт может быть много, и поддерживать их все нереально (кроме того, сама операционная система такого не позволит). Однако даже вызывая операционную систему, и соблюдая наложенные ей ограничения, программы не могут выводить в любое место экрана то, что им вздумается.
Для того, чтобы множество программ могло одновременно сосуществовать в одной системе, ОС предоставляет абстракцию, называемую «рабочим столом». Экран монитора представляется как некоторый «рабочий стол», на котором могут располагаться окна конкретных программ. Программа не может (без специальных разрешений) отобразить что-то за пределами своего окна, или залезть в чужое окно. Это сделано для того, чтобы программы не могли мешать друг другу отображать информацию.
Кроме монитора, программы могут конкурировать и за другие ресурсы – клавиатуру, мышь, оперативную память, место на жестком диске, и так далее. Ниже мы рассмотрим несколько примеров того, как операционная система не позволяет программам конфликтовать из-за доступа к отдельным физическим ресурсам, предоставляя специальные абстракции.
4.1 Абстракция файловой системы
На уровне операционной системы любой жесткий диск представляется как набор последовательно пронумерованных секторов, чаще всего размером по 512 байт (хотя в последних моделях жестких дисков сектора могут иметь и другой размер). Если бы каждая программа получала доступ к такому набору секторов без всяких указаний на то, как организовывать и хранить в данных секторах информацию, это очень быстро привело бы к полному хаосу.
Поэтому для целей организации одновременного доступа нескольких программ к жестким дискам, любая операционная система предоставляет специальную абстракцию под названием «файловая система».