Руководство системного администратора • третье издание { h h y с п п т п р


% «udo -u operator /uer/ebin/dump Ou /dov/rsdOa



Pdf просмотр
страница6/82
Дата12.11.2016
Размер7.94 Mb.
Просмотров12758
Скачиваний0
ТипРуководство
1   2   3   4   5   6   7   8   9   ...   82
% «udo -u operator /uer/ebin/dump Ou /dov/rsdOa
Пользователь lynda имеет право выполнять команды от имени любого пользователя на любой машине, ноне может запускать некоторые распространенные командные интерпретаторы. Означает ли это. что она не может запустить интерпретатор, будучи суперпользователем Конечно, нет
I ср -р /Ып/coh /tznp/cah
% audo /tmp/csh
Вообще говоря, попытка разрешить "все команды, кроме" обречена на провал, по крайней мере с технической точки зрения. Тем не менее, имеет смысл создавать файл sudoers в таком виде, так как это послужит хотя бы напоминанием о том, что вызывать командный интерпретатор в режиме суперпользователя не рекомендуется, и предотвратит случайные попытки вызова В последней строке пользователям группы wheel разрешается выполнять команды печати 1рс и Iprm от имени суперпользователя на всех компьютерах, за исключением машин группы PHYSICS. Более того, от них не требуется вводить пароль. Обратите внимание на то, что команды в файле /etc/sudoers даются с полными путевыми именами, чтобы пользователи не могли выполнять свои собственные программы и сценарии от именн суперпользователя. Разрешается также указывать допустимые аргументы для каждой команды. Вообше, возможности файла sudoers очень велики, а показанный пример иллюстрирует лишь основные из них. Для модификации файла /etc/sudoers предназначена специальная команда visudo. Она проверяет, не редактируется ли файл кем-то другим, затем открывает его в редакторе, а перед инсталляцией файла выполняет синтаксический контроль. Последнее действие особенно важно, поскольку ошибка в файле sudoers может не позволить повторно вызвать программу sudo для ее исправления. Использование программы sudo имеет следующие преимущества благодаря регистрации команд значительно повышается степень контроля над системой операторы могут выполнять рутинные задачи, не имея неограниченных привилегий настоящий пароль суперпользователя знают всего один-два человека вызывать программу sudo быстрее, чем выполнять команду su или входить в систему под именем root; у пользователя можно отобрать привилегии без изменения пароля суперпользователя, ведется список всех пользователей с правами пользователя root; меньше вероятность того, что интерпретатор команд, запущенный суперпользователем, приведет к непредсказуемым последствиям управлять доступом ко всей сети можно с помощью одного файла
Гпово 3. Сило привилегий з 7
У программы есть и свои недостатки. Самый большой из них заключается в том. что любая брешгь в системе безопасности того или иного привилегированного пользователя эквивалентна нарушению защиты самой учетной записи root. Противостоять этому нелегко. Можно лишь предупредить тех, кто имеет право выполнять программу sudo, о необходимости защищать свои учетные записи так. как если бы они были суперпользователями. Другой недостаток — это возможность обмануть программу sudo с помощью таких уловок, как временный выход в командный интерпретатор из разрешенной программы или выполнение команд sudo csli нли sudo su, еслн они допустимы.
3.5. Другие п сев до пользователи Пользователь с именем root — единственный, кто имеет для ядра UNIX особый статус. Есть, однако, еще несколько неперсонифицнруемых регистрационных имен, которые используются для системных целей. Пароли этих псевдопользователей в файле /etc/passwd обычно заменяют звездочкой, чтобы нельзя было войти в систему под их именем. Владелец непривилегированных системных программ daemon Учетная запись daemon, как правило, имеет идентификатор пользователя, равный 1. Файлы н процессы, которые должны принадлежать операционной системе, а неконкретному пользователю, часто назначаются данной учетной записи, а не пользователю root, чтобы уменьшить угрозу безопасности системы. Имеется также группа с именем daemon, которая создается по аналогичным причинам. Владелец системных команд bin В некоторых системах пользователь bin является владельцем большинства системных команда также каталогов, в которых они хранятся. Назначение отдельного пользователя для этих целей часто считается избыточными даже небезопасным, поэтому в современных системах соответствующую роль берет на себя пользователь root. Владелец образов ядра и памяти sys В некоторых системах пользователь sys владеет специальными файлами, такими как /dev/kmem, /dev/mem и /dev/drum нли /dcv/swap, которые содержат образы адресного пространства ядра, физической памяти системы и файла подкачки соответственно. Доступ к этим файлам имеют лишь немногие программы, и все они изменяют эффективный идентификатор пользователя иа sys. Иногда вместо пользователя sys создается группа Kmcm или sys. Общий сетевой пользователь nobody В большинстве версий UNIX определяется пользователь nobody с идентификатором -1 или -2. Разработчики Solaris выбрали идентификатор
60001 (следующий идентификатор 60002 назначается специальному пользователю
Чость I. Основы администрировсния
Сетевая файловая система — NFS (Network File System) — использует учетную запись nobody для представления суперпользователей в других системах. Чтобы лишить суперпользователей их исключительных прав при доступе к удаленным машинам, NFS должна заменить нулевой идентификатор чем-то другим. Этой цели как рази служит учетная запись nobody.
Дополнительная информация об учетной записи nobody приведена в параг-
рафе 17.1.
Пользователю nobody ненужны специальные права доступа, ион не должен владеть никакими файлами. Сетевая файловая система использует это средство для зашиты файловых серверов в сетях, где бездисковые клиенты могут перезагружаться в однопользовательском режиме всеми, кто имеет физический доступ к ним. С правами пользователя nobody работают и некоторые демоны, например fingerd. Идентификаторы пользователей — это короткие целые числа, следовательно, значение -1 будет представлено как 32767. В алгоритмах определения следующего доступного идентификатора, которые используются многими программами adduser, это не учитывается.

Управление процессами
\
Процесс — это абстракция, применяемая в UNIX для описания выполняющейся программы. Это системный объект, посредством которого можно контролировать обращения программы к памяти, процессору и ресурсам ввода-вывода. Концепция, согласно которой как можно больше работы должно выполняться в контексте процессов, а не в ядре, является частью философии
UNIX. Она пронизывает все системные команды UNIX Системные и пользовательские процессы подчиняются одними тем же правилам, благодаря чему управление ими осуществляется с помощью одних и тех же команд.
4.1. Компоненты процесса Процесс состоит из адресного пространства и набора структур данных, содержашихся внутри ядра Адресное пространство представляет собой совокупность страниц памяти, которые ядро выделило для выполнения процесса. В него загружается код процесса и используемые им библиотеки функций, переменные, стеки различная вспомогательная информация, необходимая ядру вовремя работы процесса. Поскольку в UNIX поддерживается концепция виртуальной памяти, страницы адресного пространства процесса в конкретный момент времени могут либо находиться в физической памяти целиком или частично, либо вообще отсутствовать там. В структурах данных ядра хранится различная информация о каждом процессе. К наиболее важным сведениям относятся таблица распределения памяти процесса текущий статус процесса (неактивен, приостановлен, выполняется и т.п.); приоритет выполнения процесса информация о ресурсах, которые используются процессом маска сигналов процесса (запись о том, какие сигналы блокируются Страницы — это базовые блоки памяти размером, как правило, от 1 до 8 Кб.
64
Чость I. Основы администрировсния
идентификатор владельца процесса. В традиционных системах процесс также отслеживает, какие инструкции центральный процессор выполняет от его имени. В ряде современных систем код процесса может выполняться несколькими "процессорами" (реальными или имитируемыми, в зависимости от конфигурации системы. При этом информация о каждом контексте выполнения содержится в объекте, называемом потоком.
Теоретически два потока могут управляться системным планировщиком совершенно независимо, даже будучи частью одного процесса. На практике библиотеке потоковых функций, распространяемая большинством поставщиков, ие поддерживает такую возможность. Почти все задачи планирования решаются на уровне процессов, поэтому многопотоковое программирование ие особо заботит системных администраторов. ' Многие характеристики процесса непосредственно влияют на его выполнение. Имеет значение, сколько времени выделяется этому процессу центральным процессором, к каким файлам он имеет доступ и т.д. В следующих параграфах мы рассмотрим наиболее интересные сточки зрения системного администратора характеристики процессов. Они поддерживаются во всех версиях UNIX. Идентификатор процесса (PID) Каждому новому процессу, созданному ядром, присваивается уникальный идентификатор (Process ID, PID). Большинство команд и системных вызовов, работающих с процессами, требуют указания конкретного идентификатора, чтобы был ясен контекст операции. Идентификационные номера присваиваются процессам по порядку по мере их создания. Когда номера заканчиваются, ядро сбрасывает счетчик в единицу и снова начинает присваивать их по порядку, пропуская те идентификаторы, которые еще используются. Идентификатор родительского процесса (PPID) В UNIX нет системного вызова, который создавал бы новый процесс для выполнения конкретной программы. Вместо этого существующий процесс должен клонировать сам себя, чтобы породить новый процесс. Путь, по которому осуществляется клон, может отличаться от пути выполнения породившего его процесса. Исходный процесс в терминологии UNIX называют родительским, а его клон — порожденным или дочерним. Помимо собственного идентификатора, каждый процесс имеет атрибут PPID (Parent Process ID), который равен идентификатору родительского процесса, породившего данный процесс. Идентификатор пользователя (UID) и эффективный идентификатор пользователя (EUID)
UID (User ID) — это идентификатор пользователя, создавшего данный процесс, или, точнее, это копия значения EUID родительского процесса. Вносить изменения в процесс могут только его создатель (владелец) и пользователь root. По крайней мере, первоначально. Если родительский процесс по какой-то причине прекращает работу, программа Init процесс номер 1) подставляет себя на место предка см. параграф 4.2).
Глова 4. У г, ров ленив процессами
65

Детальная информация об идентификаторах пользователя приведена в па-
раграфе 6.1.
EUID (Effective User ID) — это "эффективный" пользовательский идентификатор процесса. Он используется для того, чтобы определить, к каким ресурсами файлам у процесса есть право доступа в данный конкретный момент. У большинства процессов значения UID и EUID будут одинаковыми Исключение составляют программы с установленным битом смены идентификатора пользователя (SUID). Зачем нужны два идентификатора Просто потому, что имеет смысл разграничить понятия персонификации и прав доступа. Программа, у которой установлен бит SUID, не всегда хочет выполняться с расширенными привилегиями. В большинстве систем значение EUID можно устанавливать и сбрасывать, чтобы предоставить процессу дополнительные полномочия или отобрать нх. Идентификатор группы (GID) и эффективный идентификатор группы (EGID)
G I D (Group ID) — это идентификатор группы, к которой относится владелец процесса. Эффективный идентификатор группы (Effective Group ID.
EG ID) связан с атрибутом GID также, как значение EUID — с UID Если процесс попытается обратиться к файлу, который ему не принадлежит, ядро автоматически проверит, можно ли предоставить процессу соответствующие разрешения на основании эффективного идентификатора группы.
Дополнительную информацию о группах вы найдете в параграфе 6.1.
В некоторых системах процесс одновременно может относиться к нескольким группам. В этом случае атрибуты G I D и EGID представляют собой списки идентификаторов групп. Если пользователь пытается получить доступ к какому-либо ресурсу, весь список проверяется на предмет того, принадлежит ли этот пользователь к группе, члены которой имеют право использовать данный ресурс. Приоритет и зночение nice От приоритета процесса зависит, какую долю времени центрального процессора он получит. Ядро применяет динамический алгоритм назначения приоритетов, учитывающий, сколько времени центрального процессора уже использовал процесс и сколько времени он ожидает своей очереди. Кроме того, учитывается заданный административным путем так называемый фактор
уступчивости (устанавливается с помощью команды nice), определяющий, в какой степени программа может "делиться" процессором с другими программами. Чем выше значение nice, тем "уступчивее" программа. Подробнее этот механизм рассматривается в параграфе 4.6.
Упровляющий терминал Большинство процессов имеют связанный сними управляющий терминал. Он определяет базовую конфигурацию стандартных каналов ввода, вывода и ошибок. Когда пользователь вводит какую-либо команду в интерпретаторе shell, его терминал, как правило, становится управляющим
66
Чость I. Основы администрировсния
терминалом процесса. От управляющего терминала также зависит распределение сигналов, о чем пойдет речь в параграфе 4.3.
4.2. Жизненный цикл процесса Для создания нового процесса существующий процесс клонирует самого себя с помошью системного вызова fork Результатом является получение копии исходного процесса, имеющей лишь некоторые отличия. В частности, новому процессу присваивается новый идентификатор, и учет ресурсов ведется для него независимо от предка. Системный вызов fork обладает уникальным свойством ои возвращает сразу два значения. В порожденном процессе эта функция возвращает 0. а в родительском — идентификатор потомка. Поскольку в остальном процессы идентичны, они должны проверять это значение, чтобы определить, в какой роли следует выступать дальше. После выполнения системного вызова fork новый процесс обычно запускает новую программу с помошью одного из системных вызовов семейства схсс" Все вызовы семейства exec производят приблизительно одинаковые действия они замещают сегмент кода процесса и устанавливают сегменты данных и стека в исходное состояние. Формы вызовов exec отличаются только способами указания аргументов командной строки и переменных среды, передаваемых новой программе. Когда система загружается, ядро самостоятельно создает несколько процессов. Наиболее важный из них — процесс init. идентификатор которого всегда равен 1. Программа init отвечает за вызов командного интерпретатора для выполнения стартовых сценариев, если они используются в системе. Все процессы, кроме тех, что создаются ядром, являются потомками процесса init.
|7f Подробная информация о начашюй загрузке и демоне init приведена в главе 2.
Программа init играет и другую важную роль в управлении процессами. Когда процесс завершается, он вызывает функцию _exit<). чтобы уведомить ядро о своей готовности прекратить работу. В качестве параметра функции
_exit() передается код завершения — целое число, указывающее на причину останова процесса. По соглашению нулевой код завершения означает, что процесс окончился успешно. В UNIX требуется, чтобы, прежде чем процесс окончательно исчезнет, его удаление было подтверждено родительским процессом с помошью системного вызова wait Данная функция возвращает код завершения потомка и, если требуется, статистику использования ресурсов. По этой причине ядро должно хранить код завершения, пока родительский процесс ие запросит его. По окончании дочернего процесса его адресное пространство освобождается, время центрального процессора ему не выделяется, однако в таблице процессов ядра сохраняется запись о нем. Процесс в этом состоянии называется зомби
Описанный механизм работает нормально, если родителъскии процесс завершается позже порожденных им процессов и добросовестно выполняет системные вызовы wait для того, чтобы все процессы-зомби были уничтожены Если же родительский процесс завершается первым, то ядро понимает, что вызови wait не последует, и переназначает все процессы-зомбн программе На самом деле все они. кроме одного, являются библиотечными функциями. Г лево 4. Управление процессами
67

Init. Она обязана принять "осиротевшие" процессы и ликвидировать их. осуществив для каждого из этих процессов вызов wait. Раньше программа init не всегда выполняла свои обязанности как следует и зомби оставались в системе. В последнее время, однако, подобных проблем мы не замечали.
4.3. Сигналы Сигналы — это запросы иа прерывание на уровне процессов. В UNIX определено свыше тридцати различных сигналов, и они находят самое разное применение сигналы могут посылаться от одного процесса к другому как средство межзадачного взаимодействия сигналы могут посылаться драйвером терминала для уничтожения или приостанова процессов, когда пользователь нажимает специальные комбинации клавиш, такие как и "; сигналы могут посылаться пользователем или администратором с помощью команды kill; сигналы могут посылаться ядром, когда процесс выполняет нелегальную инструкцию, например деление на ноль. Когда поступает сигнал, возможен один из двух вариантов развития событий. Если процесс назначил данному сигналу подпрограмму обработки, то оиа вызывается, и ей предоставляется информация о контексте, в котором был сгенерирован сигнал. В противном случае ядро выполняет от имени процесса действия, определенные по умолчанию. Эти действия различны для разных сигналов. Многие сигналы приводят к завершению работы процесса, а в некоторых случаях при этом еще выполняется дамп оперативной памяти.
Дамп памяти — это файл, содержащий образ памяти процесса его можно
использовать для целей отладки.
Процедуру вызова обработчика называют перехватом сигнала. Когда выполнение обработчика завершается, процесс возобновляется стой точки, где был получеи сигнал. Чтобы сигналы не поступали в программу, можно указать, что они должны игнорироваться или блокироваться. Игнорируемый сигнал просто пропускается и ие оказывает на процесс никакого влияния. Блокируемый сигнал ставится в очередь на обработку, но ядро не требует от процесса никаких действий до явного разблокирования сигнала. Обработчик вызывается для разблокированного сигнала только одии раз, даже если в течение периода блокировки поступило несколько таких сигналов. В табл. 4.1 перечислены сигналы, представляющие интерес для системного администратора. Традиционно имена сигналов записываются прописными буквами. В программах на языке С к именам добавляется префикс
S1C (например, SIGH UP). Функции, связанные с этими комбинациями ктавиш, могут назначаться другим клавишам с помошью команды stty, но иа практике такое случается очень редко. В этой главе мы подразумеваем, что сданными клавишами связаны их стандартные функции. Дополнительную информацию можно получить в параграфе 7.10.
68
Чость I. Основы одминистрировония
Таблица 4.1. Сигнслы, которые должны быть известны каждому администратору
No Имя Описание
Реокция по умолчанию Перехватывается Блокируется Дамп
ПОМЯТИ?
1
HUP
Отвой Завершение Да ДР Нет
2
INT Прерывание Завершение Да Да Нет
3
QUIT Выход Завершение Да Да Да
9
KILL У ничто- жекме Завершение Нет Нет Нет
1
BUS Ошибка на шине Завершение Да Да Да
1
SEGV Ошибка сегментации Завершение Да Да Да
IS
TERM Программное завершение Завершение Да Да Нет
STOP Останов Останов ^ Нет Нет Нет
TSTP Сигнал останова, посылаемый с клавиатуры Останов Да Да Нет i
CONT
Продол- хеше после останова Игнорируется Да Нет Нет i
WINCH Изменение окна Игнорируется Да Да Нет i
USRI Определяется пользователем Завершение Да Да Нет
|
USR2 Определяется поль-
Завершение Да Да Нет эователсм
1
В разных системах разный (см. файл /usr/includc/sigtial.b или раздел man signal интерактивного руководства. Имеются и другие сигналы, ие показанные в табл. 4.1, большинство из которых сообщает о всяких загадочных ошибках, например "неверная инструкция. По умолчанию такие сигналы, как правило, приводят к завершению программы и созданию дампа памяти. Перехвати блокирование обычно разрешены, так как есть достаточно "умные" программы, которые всегда стараются устранять последствия возникающих ошибок. Сигналы BUS и SEGV также посылаются в случае ошибок. Мы включили их в таблицу, поскольку они чрезвычайно распространены в 99% случаев программа аварийно завершается именно из-за них. Сами по себе эти сигналы не имеют диагностической ценности. Они лишь указывают на то. что была произведена попытка неправильного обращения к памяти. Большинство эмуляторов терминалов посылают сигнал WINCH, когда происходит изменение их конфигурационных параметров (например, числа линий на виртуальном терминале. Это позволяет программам, которые тесно
Глово 4. Упровление процессоми
/5
связаны с терминалами (в основном текстовым редакторам, автоматически переконфигурировать себя в ответ на изменения. Сигналы KILL и STOP нельзя ни перехватить, ни блокировать, ни проигнорировать. Сигнал KILL уничтожает процесс, которому он посылается, а сигнал STOP приостанавливает выполнение процесса ло получения сигнала
CONT. Сигнал CONT можно перехватить и проигнорировать, но нельзя блокировать. Сигнал TSTP представляет собой "облегченную" версию сигнала STOP. Проще всего описать его как запрос на останов. Он генерируется драйвером терминала прн нажатии пользователем комбинации клавиш . Программы, обрабатывающие этот сигнал, обычно выполняют операции очистки, а затем посылают сами себе сигнал STOP. С другой стороны, сигнал TSTP можно просто проигнорировать, чтобы сделать программу невосприимчивой к случайным нажатиям клавиш. Может показаться, что сигналы KILL, INT. HUP, QUIT и TERM означают одно и тоже, нона самом деле они используются совершенно по-разному: Сигнал KILL не может блокироваться и приводит к безусловному завершению процесса на уровне операционной системы. В действительности процесс не может принять этот сигнал, так как уничтожается раньше. Сигнал INT посылается драйвером терминала при нажатии пользователем клавиш . Он запрашивает завершение текущей операции. Простые программы должны прекратить свою работу (если онн перехватывают этот сигнал) илн позволить уничтожить себя стандартному обработчику сигнала. Программы, в которых есть режим командной строки, должны прервать текущую операцию, произвести очистку и снова перейти в режим ожидания. Сигнал TERM представляет собой запрос иа полное завершение программы. Предполагается, что процесс, который получит этот сигнал, произведет очистку и прекратит работу. У сигнала H U P есть две распространенные интерпретации. Во-первых, многие демоны понимают его как команду сброса Если демои способен повторно прочитать свой конфигурационный файл и адаптироваться к изменениям без перезапуска, сигнал H U P позволяет менять его поведение. Во-вторых, данный сигнал иногда генерируется драйвером терминала при попытке "очистить" (те. удалить) процессы, связанные с конкретным терминалом. Это происходит, например, при завершении сеанса работы с терминалом или когда модем внезапно разрывает соединение (отсюда название "hang-up" — отбой. Интерпретаторы семейства Сидр) обычно делают фоновые процессы невосприимчивыми к сигналу HUP, чтобы они могли продолжать свою работу, даже когда пользователь выходит из системы. Пользователи интерпретаторов семейства) могут эмулировать данное поведение с помощью команды nohup. Сигнал QUIT напоминает сигнал TERM, но отличается от него тем, что по умолчанию стандартный обработчик создает дамп памяти. Сигналы USRI и USR2 не имеют стандартного назначения. Ими можно пользоваться в различных ситуациях. Например, демон named интерпретирует их как запросы на выбор уровня отладки.
70
Чость I. Основы одминистрировония

4.4. Отправка сигналов команда kill Команду kill ч ат е всего используют для прекращения выполнения процесса. Зга команда может послать процессу любой сигнал, но по умолчанию это сигнал TERM (программное завершение. Команду kill могут выполнять как обычные пользователи (для своих собственных процессов, таки пользователь root (для любого процесса. Она имеет следующий синтаксис k i l l I-сигнал] иментмфикатор
где сигнал — это номер или символическое имя посылаемого сигнала (см. табл. 4.1), а идентификатор — это номер процесса-адресата. В некоторых системах идентификатор -1 означает широковещательную передачу сигнала всем процессам, кроме системных и текущего интерпретатора команд. Команда kill без номера сигнала ие гарантирует, что процесс будет уничтожен, потому что сигнал TERM можно перехватывать, блокировать и игнорировать. Команда k i l l - 9 p i d безусловно" уничтожает процесс, потому что сигнал номер 9, KILL, не перехватывается. Мы написали "безусловно" в кавычках, так как иногда процессы попадают в состояния, в которых их нельзя завершить даже таким способом (обычно это связано с блокировкой ввода-вывода, например ожиданием жесткого диска, который перестал врашаться). Остается один выход — перезагрузка.
4.5. Состояния процессов Факт существования процесса не дает ему автоматического права на получение доступа к центральному процессору Необходимо знать о четырем состояниях выполнения процесса, которые перечислены в табл. 4.2. Таблица 4.2. Состояния процесса Состояние Описание Выполнение Процесс можно выполнять Ожидание Процесс ждет выделения какого-либо ресурса Зомби Процесс пытается завершиться Останов Процесс приостановлен (не имеет разрешения на выполнение) Выполняемый процесс получил все необходимые ресурсы и ждет, пока системный планировщик предоставит ему доступ к центральному процессору для обработки данных. Если процесс выполняет системный вызов, который нельзя осуществить немедленно (например, чтение части файла, система переводит его в состояние ожидания.
Ожидающии процесс ждет наступления определенного события. Интерпретатор команд и системные демоны проводят в этом состоянии большую часть своего времени, ожидая поступления данных с терминала или из сетевого соединения. Поскольку ожидающий процесс фактически блокирован, то доступ к процессору будет предоставлен ему только в случае получения сигнала. Г лево 4. Управление процессами
71
Остановленному процессу администратор запретил выполняться. Процессы останавливаются при получении сигнала STOP или TSTP и возобновляют работу по сигналу CONT. Это состояние аналогично ожиданию, но выйти из него можно только с помошью другого процесса.
4.6. Изменение приоритета выполнения команды nice и renice Значение nice (фактор уступчивости) подсказывает ядру, как следует относиться к данному процессу по сравнению с другими процессами, конкурирующими за право доступа к центральному процессору. Чем ниже
значение nice, тем выше приоритет процесса. Диапазон допустимых значений меняется от системы к системе. Как правило, он простирается от - 2 0 до +19, а иногда — от 0 до 39 (см. табл. 4.3). Несмотря на различия в диапазонах значений nice, все системы трактуют фактор уступчивости примерно одинаково. Если пользователь ие предпринимает особых мер, то дочерний процесс наследует приоритет своего родительского процесса. Владелец процесса может увеличить значение nice, но ие может уменьшить его. Это не дает возможности процессам с низким приоритетом порождать высокоприоритетных потомков. Только суперпользо- вателъ имеет полную свободу в установке значений nice и даже может присвоить процессу такой высокий приоритет, что все остальные процессы не смогут работать. В некоторых системах ядро автоматически повышает значение nice процессов, которые достаточно долго работали с центральным процессором или переведены в фоновый режим. Установка приоритетов процессов вручную быстро уходит в прошлое. Когда ОС UNIX работала на слабых машинах х гг.. на производительность больше всего влияло то. какой процесс занимал основную часть времени центрального процессора. Сегодня, когда иа рабочих столах стоят намного более быстродействующие компьютеры, планировщик UNIX, как правило, обслуживает все процессы весьма оперативно. К сожалению, уровень производительности подсистемы ввода-вывода растет не так быстро, как быстродействие центральных процессоров, поэтому жесткие диски стали основным "узким местом" в большинстве ОС.
[yj О производительности читайте также в главе 25.
Фактор уступчивости процесса можно установить вовремя его создания. Это делается с помощью команды nice. Команда rcnice позволяет изменять значение nice вовремя выполнения процесса. Первая из этих команд принимает в качестве аргумента командную строку, а вторая — идентификатор процесса либо (в некоторых случаях) имя пользователя. Приведем примеры



Поделитесь с Вашими друзьями:
1   2   3   4   5   6   7   8   9   ...   82


База данных защищена авторским правом ©nethash.ru 2019
обратиться к администрации

войти | регистрация
    Главная страница


загрузить материал