2.3Управление процессами В роли задач в UNIX® выступают процессы. Процесс - это программа, запущенная пользователем, которая находится в памяти и, как полагается задаче, потребляет ресурсы: выполняется, требует памяти, обменивается данными с системой, внешними устройствами и другими процессами. При запуске процесс получает уникальный идентификатор процесса (Process IDentifier, PID), по которому он становится доступен другим процессам и планировщику.
Процесс можно представить себе как виртуальную машину, отданную в распоряжение одной задачи. Каждый процесс считает, что он на машине один и может распоряжаться всеми ее ресурсами. На самом же деле процессы надежно изолированы друг от друга, так что крушение одного не может повредить всей системе.
Это описание предельно упрощено.
Главное отличие планировщика UNIX® заключается в том, что каждая задача из очереди работает в течение всего отведенного ей промежутка времени, только если ей есть чем заняться. Если задача к этому времени работать не может (например, ожидает завершения операции ввода/вывода, или сигнала, или освобождения какого-либо ресурса), она из начала очереди перемещается в конец "очереди для тех, кто без очереди" или очереди "спящих" задач. Как только какая-нибудь задача из очереди спящих просыпается, ей тут же отводится место в начале обычной очереди. Таким образом максимально сокращается время простоя (idle) системы, если, конечно, выполняемых задач достаточно для того, чтобы полностью ее загрузить. Сверх того процессы в UNIX® могут иметь разные приоритеты, сообразно которым идет планирование очередного запуска процесса (например, полностью отработав свой промежуток времени, процесс может помещаться не в конец очереди).
Между собой процессы могут обмениваться данными не только стандартными пользовательскими средствами (посредством файлов, каналов или сокетов, но и с помощью более быстрых системных, именуемых средствами межпроцессного взаимодействия (Interprocess Communication, IPC). Процессы могут заказать у системы общую память (тогда часть адресного пространства каждого будет ссылаться на один и тот же кусок реальной памяти), для индикации занятости ресурса использовать семафор (система гарантирует, что запрошенный ресурс действительно будет свободен, пока процесс не откроет семафор) и посылать друг другу сигналы и сообщения.
2.4Демоны Некоторые части UNIX® запускаются уже как процессы в режиме пользователя. С ядром взаимодействуют функциональные подсистемы (службы), то есть наборы программных средств, выполняющих определенную функцию (например, система печати, система передачи почты и т. д.). Демон - это процесс, который запускается при старте UNIX® для обслуживания запросов к функциональной подсистеме. Пользователю запускать его незачем, он работает всегда. Именно демон обменивается данными с ядром системы, часто он держит очередь пользовательских запросов, работает с сетью и т. д.
2.5Понятие файла в Linux Во многих операционных системах (включая UNIX®) существует концепция файла, по которой его можно рассматривать просто, как набор информации, которому дано имя. Примерами файлов будут: программа, которая может выполняться, письмо, полученное по электронной почте, написанная вами статья. Существенно то, что все, что хранится на диске, хранится в отдельных файлах.
UNIX® отличается от большинства операционных систем тем, что она файл-ориентирована. Дизайнеры системы решили, что для упрощения ОС будет полезным рассматривать всё как файлы – приводы жестких дисков, терминалы, модемы, сетевые соединения и собственно файлы файловой системы. С точки зрения UNIX® файл представляет собой неструктурированный набор байтов произвольной длины. Структура любого файла определяется программой, которая его использует, но не операционной системой в целом. Исключениями являются исполняемые бинарные файлы, которые начинаются с магического числа (magic number) – комбинации из 2-х байтов, позволяющие ядру ОС определить способ исполнения программы, и разделители строк в текстовых файлах – по умолчанию это символ новой строки LF, в отличие от DOS, где строки разделяются комбинацией символов CR+LF. Такой подход позволяет абстрагироваться от конкретной реализации аппаратного обеспечения и использовать для доступа к устройствам стандартный набор файловых операций POSIX: open(2), close(2) read(2), write(2). При этом ядро ОС или его модули ответственны за предоставление такого типа доступа к ресурсам системы и периферии.
Таким образом, приложения оперируют лишь потоками байтов. В UNIX® различают следующие типы файлов:
обычные файлы;
каталоги;
файлы физических устройств; именованные каналы (named pipes); сокеты (UNIX® sockets); символические ссылки (symlinks).
Главные отличительные признаки файлов и каталогов - их имена. В Unix имена файлов и каталогов могут быть длиной не более 256 символов, и могут содержать любые символы, кроме "/". Причина этого ограничения очевидна: данный символ используется как разделитель имен в составе пути, поэтому не должен встречаться в самих именах. Причем Linux всегда различает прописные и строчные буквы в именах файлов и каталогов, поэтому "methody", "Methody" и "METHODY" будут тремя разными именами.
Допускается использование символов национальных алфавитов в любых кодировках, но для нормальной работы система должна иметь поддержку нужной кодировки. В последнее время стандартом стало использование UTF8.
Есть несколько символов, допустимых в именах файлов и каталогов, которые нужно использовать с осторожностью. Это так называемые спецсимволы "*", "\", "&", "<", ">", ";", "(", ")", "|", а также символы пробела и табуляции. Дело в том, что эти символы имеют особое значение для любой командной оболочки, поэтому нужно будет специально позаботиться о том, чтобы командная оболочка воспринимала эти символы как часть имени файла или каталога.
|