- •Ответы на экзаменационные вопросы по соСиА
- •Классификация операционных систем
- •Обобщенная структура операционных систем
- •Сравнение моделей osi и tcp/ip
- •Сравнение моделей atm и tcp/ip
- •Модель клиент-сервер на базе микроядра
- •Сетевое по: иерархия протоколов, разработка уровней
- •Настройка сети
- •Службы, примитивы и протоколы
- •Распределенные системы: доступ, прозрачность
- •Прозрачность в распределенных системах.
- •Доступ в распределенных системах
- •Методы управления доступом
- •Распределенные системы: масштабируемость, открытость
- •Открытость
- •Масштабируемость
- •Концепции аппаратных решений
- •Гомогенные и гетерогенные сети
- •Концепции программных решений, сравнение систем
- •Мультипроцессорные ос
- •Мультикомпьютерные ос
- •Системы с распределенной разделяемой памятью
- •Программное обеспечение промежуточного уровня
- •Разделение приложений по уровням
- •Архитектура клиент-сервер: многозвенные архитектуры
- •Структура файловой системы: принципы и особенности
- •Структура файловой системы: стандарт fhs
- •Структура файловой системы: принципы организации данных на диске
- •Структура файловой системы: монтирование и размонтирование
- •Структура файловой системы: журналирование
- •Структура файловой системы: принципы создания стартового виртуального диска
- •Досистемная загрузка: первичный и вторичный загрузчик
- •Досистемная загрузка: загрузчики lilo и grub
- •Загрузка системы: первый процесс init
- •Загрузка системы: стартовый виртуальный диск и модули ядра
- •Загрузка системы: демоны системных служб
- •Загрузка системы: схема «.D»
- •Загрузка системы: уровни выполнения
- •Работа с внешними устройствами: файлы-дырки, драйверы
- •Разметка диска и наименование устройств
- •Область подкачки
- •Проектирование свойств системы
- •Профиль системы
- •Управление пакетами
- •Установщики пакетов
- •Сетевые и серверные возможности
Область подкачки
Linux на компьютере из примера использует три раздела: hda5, hda6 и hda7. Тип раздела hda6, «Linux sawp», отличается от двух других, по словам Гуревича, «это вообще не файловая система». Это — т. н. область подкачки (swap space), пространство на диске, используемое системой для организации виртуальной памяти. Оказывается, областям оперативной памяти, которые процессы запрашивают у ядра, не всегда соответствуют части физической оперативной памяти. Если процесс долгое время не испольует заказанную оперативную память, её содержимое записывается на диск, в область подкачки — тем самым освобождается место в физической памяти для других процессов. Когда же он «вспомнит» об этой области памяти, ядро подкачает её с диска, разместит в оперативной памяти (возможно, откачав другие области), и только тогда позволит процессу продолжить работу.
Вполне может сложиться ситуация, когда несколько процессов заказали оперативной памяти больше, чем её есть в действительности, и преспокойно работают, потому что не используют всё заказанное пространство сразу, позволяя системе откачивать неиспользуемые области. К тому же многие процессы (особенно демоны) не работают постоянно, а ждут наступления определённого события, и чем дольше они ждут, тем дольше не используют оперативную память, и тем выше вероятность, что ядро откачает её.
Стоит отдавать себе отчёт, что если эти самые процессы вдруг захотят работать одновременно и со всеми областями памяти, ядру придётся туго. Большую часть времени система будет проводить откачивая и подкачивая, потому что дисковые операции чтения и записи работают в тысячи раз медленнее, чем запись и чтение из оперативной памяти.
Такая ситуация называется «дребезг» (trashing) и свидетельствует о том, что для текущих задач компьютеру требуется больше физической памяти.
Чтобы хоть как-то облегчить ему жизнь, область подкачки размещают на отдельном разделе, обмен данными с которым работает бытрее, чем чтение и запись в файл, обслуживаемые файловой системой.
Проектирование свойств системы
Операционная система, позволяющая задействовать все возможности компьютера, резко отличается от специализированного программного обеспечения огромным числом т. н. «вариантов использования» (use cases) и обширнейшими возможностями тонкой настройки для решения задач конкретного пользователя наилучшим способом. Достаточно сравнить какую-нибудь игровую приставку (например, PlayStation2) под управлением собственной операционной системы и её же под управлением Linux. Вычислительная и мультимедийная мощность такого копьютера весьма высока (известно, что именно компьютерные игры определяют сейчас ресурсопотребление персонального компьютера). Однако способы управления одной и другой системами настолько различны, что неподготовленный человек просто теряется при виде возможностей Linux: где? на какие кнопки нажимать? А кнопок-то и нет...
Можно попытаться описать операционную систему как большой и сложный универсальный инструмент решения любых задач. Предполагается, что пользователь, прочтя документацию, в которой описывается как работает система и как применять её в различных ситуациях, сможет решать и свои задачи. Правда, для этого ему придётся прочесть большую часть документации по системе (в том числе и технической) и перепрограммировать некоторые части системы сообразно своим нуждам. На такой подвиг способны немногие, времени это займёт немало, да и вероятность ошибки (которая тем выше, чем сложнее средства управления системой) при таком подходе недопустимо велика. Сами утилиты или службы Linux, каждую из которых можно «окинуть взором» и понять, что и как она умеет, и чего в ней не хватает, разрабатываются именно теми из пользователей, у которых хватает времени, знаний и навыков на такое полное освоение (см. лекцию Политика свободного лицензирования. История Linux: от ядра к дистрибутивам). Вывод: пользователь — не разработчик, ему всё-таки важнее быстро и качественно решить задачу, чем догло и качественно улучшать инструмент решения.
Можно пойти обратным путём: попытаться предусмотреть все основные способы использования операционной системы на всех основных пользовательских задачах, и на каждый такой способ создать (запрограммировать) отдельную часть, управляемую «кнопкой» или утилитой. Эту часть обычно называют «решением» (solution), и в документации обычно пишут, что должно быть «на входе» системы, и что получается «на выходе» после применения решения. Если пользователь не умеет сам поставить задачу, или делает это в неопределённой форме («хочу, чтобы был текст», «хочу, чтобы играла музыка»), этот способ работает на ура: та же игровая приставка — это отличное решение крайне неопределённой задачи «хочу без толку потратить время». Однако, стоит пользователю захотеть чего-то конкретного, начинаются трудности. Трудности могут быстро стать непреодолимыми, как только для этого «конкретного» не окажется готового решения: внутренняя структура систем, ориентированных на «решения», столь сложна и столь плохо документирована, что сделать что-либо вручную, скорее всего, не удастся. Вывод: пользователь, понимающий суть собственных задач, — не «клиент», он должен иметь возможность быстро и качественно решать задачи самостоятельно, а не выбирать то из готовых «решений», которое нанесёт меньше вреда.
Что же нужно идеальному — достаточно подготовленному, чтобы действовать самостоятельно, и достаточно занятому, чтобы не переделывать системы — пользователю? По-видимому, механизм, с помощью которого можно сформулировать и придать операционной системе все требуемые свойства, имея возможность описывать решение задачи по крайней мере на том же уровне конкретности, на котором было поставлено её условие. Большая часть других, не нужных для решения собственных задач пользователя, свойств должны быть «стандартными» и не требовать его вмешательства.
