Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

Подписываем
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Предоплата всего
Подписываем
Выполнение кода операционной системы
Так как ОС является программой, то ее код выполняется также, как и код обычной программы. Отличительной особенностью работы операционной системы заключается в возможности выполнять привелегированные команды процессора и то, что ОС часто передает управление другим процессам; возврат же управления операционной системе полностью возложен на процессор.
Ограничения
Так как операционная система многозадачная, то процессы конкурируют между собой за ресурсы компьютера. Для “справедливого” распределения ресурсов, таких как память, дисковое пространство, время процессора, каждому процессу установлен набор ограничений. Это ограничения не носят общесистемного характера, как например, максимальное число процессов. Для получения информации о текущих ограничениях и их изменениях предназначены системные вызовы getrlimit() и setrlimit().
#include <sys/time.h>
#include <sys/resource.h>
int getrlimit (int resource, struct rlimit *rlp);
int setrlimit (int resource, struct rlimit *rlp);
Аргумент resource определяет вид ресурса, для которого мы хотим узнать или изменить ограничения. Структура rlimit состоит из двух полей:
rlimit_cur текущее значение
rlimit_max максимальное значение
Различные ограничения и связанные с ними типы ресурсов определены в таблице:
Ограничение |
Тип ресурса |
Эффект |
RLIMIT_CORE |
Максимальный размер дампа памяти, записываемого на диск при сбое |
|
RLIMIT_CPU |
Максимальное время использования процесса в секундах |
При превышении предела процессу отправляется сигнал SIGXCPU |
RLIMIT_DATA |
Максимальный размер сегмента данных в байтах |
|
RLIMIT_FSIZE |
Максимальный размер файла, который может создать процесс. Если равно 0, то процесс не может создавать файлы |
|
RLIMIT_NOFILE |
Максимальное количество назначенных файловых дескрипторов процесса |
|
RLIMIT_STACK |
Максимальный размер стека |
|
RLIMIT_VMEM |
Максимальный размер отображаемой памяти процесса в байтах |
|
RLIMIT_NPROC |
Максимальное число процессов с одним реальным UID. Определяет максимальное число процессов, которые может создать пользователь |
|
RLIMIT_RSS |
Максимальный размер в байтах резидентной части. Определяет максимальное количество физической памяти, предоставляемой процессу |
|
RLIMIT_MEMLOCK |
Максимальный объем физической памяти (в страницах), который процесс может заблокировать с помощью системного вызова mlock(2). |
Примеры программ
Демон
Демоны играют важную роль в работе операционной системы. Рассмотрим основные требования, предъявляемые к демонам:
Рассмотрим реализацию такой программы:
#include <syslog.h>
#include <signal.h>
#include <sys/types.h>
#include <sys/param.h>
#include <sys/resource.h>
#include <iostream.h>
int main (int argc, char **argv)
{ int fd;
struct rlimit flim;
// Если родительский процесс не init, то следует
// игнорировать сигналы, связанные с терминалом
if (getppid() != 1)
{ signal(SIGTTOU, SIG_IGN);
signal(SIGTTIN, SIG_IGN);
signal(SIGTSTP, SIG_IGN);
// Создать дочерний процесс и закрыть родительский
if (fork() != 0)
exit(0);
// Дочерний процесс становится лидером новой группы сеанса
// и не имеет ассоциированного терминала
setsid();
}
// Определить число открытых файлов и закрыть их
getrlimit(RLIMIT_NOFILE, &flim);
for (fd=0; fd<flim.rlim_max; fd++)
close(fd);
// Установить корневой каталог текущим
chdir("/");
// Открыть системный журнал и сделать в нем запись
openlog("demon", LOG_PID | LOG_CONS, LOG_DAEMON);
syslog(LOG_INFO, "Start_daemon");
closelog();
// Тело демона (команды демона)
while (1)
pause();
}
Тело демона содержит текст программы, реализующий полезные функции демона. Чтобы выяснить, работает ли демон можно в терминале просмотреть список работающих процессов. В приведенном примере демон не выполняет ни какой полезной работы, это предоставляется сделать самостоятельно.