Колисниченко Д.Н. - Linux-сервер своими руками (1077324), страница 34
Текст из файла (страница 34)
В этомслучае я рекомендую использовать диски с возможностью «горячей» замены.В противном случае вам придется останавливать машину для замены диска.После замены на новом диске следует создать разделы так же как и на диске,который вышел из строя, и только после этого выполнить команду raidhotadd.В качестве параметров программы raidhotremove и raidhotadd используют имямассива (/dev/mdO) и номер диска, извлекаемого из массива.4.20.
Форматирование дискет в LinuxВ других книгах, посвященных ОС Linux, этой теме обычно уделяетсямало внимания. Хотя эта тема никак не относится к организации сервера, ярешил все-таки рассмотреть процесс форматирования дискет более подробно, потому что в ближайшее время они еще будут использоваться.Я использую программу kfloppy, которая входит в состав KDE и в особыхкомментариях не нуждается. В качестве альтернативы вы можете использовать программы fdformat и superformat.
Первая из них (fdformat) форматирует135Файловая система Linuxдискеты только в Linux-формате (extZfs). Вызов программы осуществляетсяследующим образом:f d f o r m a t [-n] deviceОпция -п запрещает проверку дискеты при форматировании.device - это или / d e v / f d O( А : ) или / d e v / f d l(В:).Более гибкой является программа superformat.
Она может форматироватьдискету как в Linux-формате, так и создавать файловую систему DOS. Насамом деле она вызывает mformat из mtools для создания файловой системыmsdos. Параметры программы superformat указаны в табл. 4.18. Форматиспользования программы superformat следющий:superformat параметрыПараметры программы superformatПараметр-2-В-d устройство--dd-D устройство-f-Н п-hd-1--no2m-s n-tn-V П-VТаблица 4.18ОписаниеФорматирование дисков большой емкости для работы с программой 2mfПроверка диска с помощью программы mbadblocksФорматирование диска в указанном устройстве.
По умолчанию используется /dev/fdOФорматирование дисков двойной плотности (Double Density)Указание устройства в формате DOS для передачи программе mformat (а: или Ь:)Запрет проверки дискаУстановка количества головок (по умолчанию 2)Форматирование дисков высокой плотности (High Density)Не использовать 2тНе использовать 2тУстановка количества секторов. Аргумент п обозначает не количество физическихсекторов, а количество логических 512-байтных секторовУстановка количества дорожек.
Значение по умолчанию — 40 или 80 в зависимости отустройства и плотности дискаУстановка уровня отладки. Допустимые значения 1 , 2, 3, 6 и 9Проверка диска после завершения форматирования всего диска. По умолчаниюпосле форматирования каждой дорожки производится ее проверкаС помощью этой программы можно увеличить емкость дискет, используя нестандартные форматы (см.
табл. 4.19). Однако за качество работы этихдискет я не ручаюсь. К тому же я очень не рекомендую использоватьдискеты нестандартных форматов в качестве загрузочных.Нестандартные форматы дискетРазмердискеты5.25"5.25"5.25"3.5"3.5"3.5"Емкостьустройства360Кб1.2Мб1.2Мб720 Кб1.44 Мб1.44 МбТаблица 4.19Стандартнаяемкость дискеты360Кб360Кб1.2Мб720 Кб720 Кб1.44МбПример:s u p e r f o r m a t -d / d e v / f d O-t81ЧислодорожекЧислосекторов418110108118818110108121-sЕмкость дискеты, байт409.088816.6401.476.096(1.45 Мб)816.640816.6401.723.904 (1.7Мб)21Если дискета работает крайне нестабильно, попробуйте уменьшить число секторов до 20.136Процессы55.1.
Системные вызовы forkf) и ехес()Процесс в Linux (как и в UNIX) — это программа, которая выполняетсяв отдельном виртуальном адресном пространстве. Когда пользователь регистрируется в системе, под него автоматически создается процесс, в которомвыполняется оболочка (shell), например, / b i n / b a s h .В Linux поддерживается классическая схема мультипрограммирования.При этом Linux поддерживает параллельное (или квазипараллельное приналичии только одного процессора) выполнение процессов пользователя.Каждый процесс выполняется в собственном виртуальном адресном пространстве, т.е. процессы защищены друг от друга и крах одного процессаникак не повлияет на другие выполняющиеся процессы и на всю систему вцелом.
Один процесс не может прочитать что-либо из памяти другого процесса (или записать в нее) без «разрешения» на то другого процесса. Санкционированные взаимодействия между процессами допускаются системой.Ядро предоставляет системные вызовы для создания новых процессов идля управления порожденными процессами. Любая программа может начатьвыполняться, только если другой процесс ее запустит или произойдет какоето прерывание (например, прерывание внешнего устройства).В связи с развитием SMP (Symmetric Multiprocessor Architectures) в ядроLinux был внедрен механизм нитей или потоков управления (threads).
Нитямитакже называют «легковесные» процессы. Другими словами, нить -- этопроцесс, выполняемый в виртуальной памяти, которая используется вместес другими нитями одного и того же «тяжеловесного» процесса. Такой «тажеловесный процесс» обладает отдельной виртуальной памятью и может иметьнесколько «легковесных» процессов.Потоки (или нити) позволяют решать в рамках одной программы одновременно несколько задач.Операционная система предоставляет программе некоторый интервалпроцессорного времени.
Когда программа переходит в режим ожиданиякакого-либо события (например, сигнала) или освобождает процессор, операционная система передает управление другой программе. Распределяявремя центрального процессора, операционная система распределяет его немежду программами, а между потоками. Исходя из всего этого, потоки — это137Процессынаборы команд, имеющие возможность получать время процессора.
Времяпроцессора выделяется квантами. Квант — это минимальное время, на протяжении которого поток (нить) может использовать процессор.Когда вы вводите команду, интерпретатор производит поиск указаннойпрограммы в каталогах, которые перечислены при определении переменнойокружения PATH. При этом будет выполнена первая найденная программа суказанным именем.Если интерпретатору (shell) встречается команда, соответствующая выполняемому файлу, интерпретатор выполняет ее, начиная с точки входа(entry point). Для С-программ entry point — это функция main. Точка входадля каждой среды разработки различна. Запущенная программа тоже можетсоздать процесс, т.е.
запустить какую-то программу и ее выполнение тоженачнется с функции main. Затем с помощью системного вызова fork() создается адресное пространство — подготавливается «место» для нового процесса, а потом с помощью вызова ехес() в это адресное пространство загружается программа. Таким образом, каждый новый процесс выполняется всвоей индивидуальной среде.Для создания процессов используется системный вызов: fork().
Вызов fork()создает новое адресное пространство, которое полностью идентично адресномупространству основного процесса. Другими словами, вызов fork() создает новый процесс. После выполнения этого системного вызова вы получаете дваабсолютно одинаковых процесса — основной и порожденный. Функция fork()возвращает 0 в порожденном процессе и PID (Process ID — идентификаторпорожденного процесса) — в основном.
PID — это целое число.Теперь, когда процесс создан, можно запустить в нем программу спомощью вызова exec. Параметрами функции exec являются имя выполняемого файла и, если нужно, параметры, которые будут переданы этой программе. В адресное пространство порожденного с помощью fork() процессабудет загружена новая программа и ее выполнение начнется с точки входа(адрес функции main).В качестве примера рассмотрим следующий фрагмент программы:if ( f o r k ( ) = = 0 ) w a i t < 0 ) ;else execl("ls", "Is", 0 ) ; /* порожденный процесс */Теперь рассмотрим более подробно, что же делается при выполнениивызова fork():1. Выделяется память для описателя нового процесса в таблице процессов.2. Назначается идентификатор процесса PID.3.
Создается логическая копия процесса, который выполняет fork() — полноекопирование содержимого виртуальной памяти родительского процесса, копирование составляющих ядерного статического и динамического контекстов процесса-предка.4. Увеличиваются счетчики открытия файлов (порожденный процесс наследуетвсе открытые файлы родительского процесса).5. Возвращается PID в точку возврата из системного вызова в родительскомпроцессе и 0 — в процессе-потомке.138Процессы5.1.1. Общая схема управления процессамиКаждый процесс может порождать полностью идентичный процесс спомощью fork().