Андрей Робачевский - Операционная система UNIX

Тут можно читать онлайн Андрей Робачевский - Операционная система UNIX - бесплатно полную версию книги (целиком) без сокращений. Жанр: comp-osnet, издательство BHV - Санкт-Петербург, год 1997. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    Операционная система UNIX
  • Автор:
  • Жанр:
  • Издательство:
    BHV - Санкт-Петербург
  • Год:
    1997
  • Город:
    Санкт-Петербург
  • ISBN:
    5-7791-0057-8
  • Рейтинг:
    4.63/5. Голосов: 81
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 100
    • 1
    • 2
    • 3
    • 4
    • 5

Андрей Робачевский - Операционная система UNIX краткое содержание

Операционная система UNIX - описание и краткое содержание, автор Андрей Робачевский, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

Книга посвящена семейству операционных систем UNIX и содержит информацию о принципах организации, идеологии и архитектуре, объединяющих различные версии этой операционной системы.

В книге рассматриваются: архитектура ядра UNIX (подсистемы ввода/вывода, управления памятью и процессами, а также файловая подсистема), программный интерфейс UNIX (системные вызовы и основные библиотечные функции), пользовательская среда (командный интерпретатор shell, основные команды и утилиты) и сетевая поддержка в UNIX (протоколов семейства TCP/IP, архитектура сетевой подсистемы, программные интерфейсы сокетов и TLI).

Для широкого круга пользователей

Операционная система UNIX - читать онлайн бесплатно полную версию (весь текст целиком)

Операционная система UNIX - читать книгу онлайн бесплатно, автор Андрей Робачевский
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

#include

#include

/* Процедура вывода на экран текущего и максимального

пределов потребления ресурса resource */

void disp_limit(int resource, char *rname) {

struct rlimit rim;

getrlimit(resource, &rlm);

printf("%-13s ", rname);

/* Значение изменяемого ограничения */

if (rlm.rlim_curr == RLIM_INFINITY)

printf("infinite ");

else

printf("%101d ", rlm.rlim_cur);

/* Значение жесткого ограничения */

if (rlm.rlim_max == RLIM_INFINITY)

printf("infinite \n");

else

printf("%10ld\n", rlm.rlim_max);

}

main() {

disp_limit(RLIMIT_CORE, "RLIMIT_CORE");

disp_limit(RLIMIT_CPU, "RLIMIT_CPU");

disp_limit(RLIMIT_DATA, "RLIMIT_DATA");

disp_limit(RLIMIT_FSIZE, "RLIMIT_FSIZE");

disp_limit(RLIMIT_NOFILE, "RLIMIT_NOFILE");

disp_limit(RLIMIT_STACK, "RLIMIT_STACK");

/* BSD */

#ifdef RLIMIT_NPROC

disp_limit(RLIMIT_NPROC, "RLIMIT_NPROC");

#endif

/* BSD */

#ifdef RLIMIT_RSS

disp_limit(RLIMIT_RSS, "RLIMIT_RSS");

#endif

/* BSD */

#ifdef RLIMIT_MEMLOCK

disp_limit(RLIMIT_MEMLOCK, "RLIMIT_MEMLOCK");

#endif

/* System V */

#ifdef RLIMIT_VMEM

disp_limit(RLIMIT_VMEM, "RLIMIT_VMEM");

#endif

}

Запуск программы под управлением операционной системы Solaris 2.5 даст следующие результаты:

$ а.out

RLIMIT_CORE infinite infinite

RLIMIT_CPU infinite infinite

RLIMIT_DATA 2147479552 2147479552

RLIMIT_FSIZE infinite infinite

RLIMIT_NOFILE 64 1024

RLIMIT_STACK 8388608 2147479552

RLIMIT_VMEM infinite infinite

Примеры программ

В качестве заключительной иллюстрации к обсуждавшимся выше вопросам приводятся фрагменты двух приложений, которые в достаточной степени демонстрируют практическое применение программного интерфейса UNIX. Заметим, что приведенные примеры не являются законченными программами — во многих местах участки кода намеренно опущены, а функциональность сведена к минимуму. Задачей являлось показать принцип взаимодействия программ с операционной системой и идеологию программирования в UNIX. Рассмотрим два диаметрально противоположных приложения — неинтерактивную программу-демон и интерактивный командный интерпретатор.

Демон

Демоны играют важную роль в работе операционной системы. Достаточно будет сказать, что возможность терминального входа пользователей в систему, доступ по сети, использование системы печати и электронной почты, — все это обеспечивается соответствующими демонами — неинтерактивными программами, составляющими собственные сеансы (и группы) и не принадлежащими ни одному из пользовательских сеансов (групп).

Некоторые демоны работают постоянно, наиболее яркий пример такого демона — процесс init(1M) , являющийся прародителем всех прикладных процессов в системе. Другими примерами являются cron(1M) , позволяющий запускать программы в определенные моменты времени, inetd(1M) обеспечивающий доступ к сервисам системы из сети, и sendmail(1M) , обеспечивающий получение и отправку электронной почты.

При описании взаимодействия процессов с терминалом и пользователем в разделе "Группы и сеансы", отмечалось особое место демонов, которые не имеют управляющего терминала. Теперь в отношении демонов можно сформулировать ряд правил, определяющих их нормальное функционирование, которые необходимо учитывать при разработке таких программ:

1. Демон не должен реагировать на сигналы управления заданиями, посылаемые ему при попытке операций ввода/вывода с управляющим терминалом. Начиная с некоторого времени, демон снимает ассоциацию с управляющим терминалом, но на начальном этапе запуска ему может потребоваться вывести то или иное сообщение на экран.

2. Необходимо закрыть все открытые файлы (файловые дескрипторы), особенно стандартные потоки ввода/вывода. Многие из этих файлов представляют собой терминальные устройства, которые должны быть закрыты, например, при выходе пользователя из системы. Предполагается, что демон остается работать и после того, как пользователь "покинул" UNIX.

3. Необходимо снять его ассоциацию с группой процессов и управляющим терминалом. Это позволит демону избавиться от сигналов, генерируемых терминалом ( SIGINTили SIGHUP), например, при нажатии определенных клавиш или выходе пользователя из системы.

4. Сообщения о работе демона следует направлять в специальный журнал с помощью функции syslog(3) , — это наиболее корректный способ передачи сообщений от демона.

5. Необходимо изменить текущий каталог на корневой. Если этого не сделать, а текущий каталог, допустим, находится на примонтированной файловой системе, последнюю нельзя будет размонтировать. Самым надежным выбором является корневой каталог, всегда принадлежащий корневой файловой системе.

Приведем скелет программы-демона:

#include

#include

#include

#include

#include

#include

main(int argc, char **argv) {

int fd;

struct rlimit flim;

/* Если родительский процесс — init, можно не беспокоиться

за терминальные сигналы. Если нет — необходимо игнорировать

сигналы, связанные с вводом/выводом на терминал

фонового процесса: SIGTTOU, SIGTTIN, SIGTSTP */

if (getppid() != 1) {

signal(SIGTTOU, SIG_IGN);

signal(SIGTTIN, SIG_IGN);

signal(SIGTSTP, SIG_IGN);

/* Теперь необходимо организовать собственную группу и сеанс,

не имеющие управляющего терминала. Однако лидером группы и

сеанса может стать процесс, если он еще не является лидером.

Поскольку предыстория запуска данной программы неизвестна,

необходима гарантия, что наш процесс не является лидером.

Для этого порождаем дочерний процесс. Т.к. его PID уникален,

то ни группы, ни сеанса с таким идентификатором не существует,

а значит нет и лидера. При этом родительский процесс

немедленно завершает выполнение, поскольку он уже не нужен.

Существует еще одна причина необходимости порождения

дочернего процесса. Если демон был запущен из командной строки

командного интерпретатора shell не в фоновом режиме,

последний будет ожидать завершения выполнения демона,

и таким образом, терминал будет заблокирован.

Порождая процесс и завершая выполнение родителя,

имитируем для командного интерпретатора завершение

работы демона, после чего shell выведет свое приглашение */

if (fork () !=0)

exit(0); /* Родитель заканчивает работу */

/* Дочерний процесс с помощью системного вызова

становится лидером новой группы, сеанса и не имеет

ассоциированного терминала */ [28] Использование вызова setsid(2) справедливо для UNIX System V. Для BSD UNIX процесс должен последовательно создать группу, лидером которой он становится, а затем открыть управляющий терминал и с помощью команды ioctl(2) TIOCNOTTY отключиться от него.

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Андрей Робачевский читать все книги автора по порядку

Андрей Робачевский - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




Операционная система UNIX отзывы


Отзывы читателей о книге Операционная система UNIX, автор: Андрей Робачевский. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x