У вас вопросы?
У нас ответы:) SamZan.net

тема многозадачная то процессы конкурируют между собой за ресурсы компьютера

Работа добавлена на сайт samzan.net: 2016-03-13

Поможем написать учебную работу

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

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

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 7.3.2025

Выполнение кода операционной системы

Так как ОС является программой, то ее код выполняется также, как и код обычной программы. Отличительной особенностью работы операционной системы заключается в возможности выполнять привелегированные команды процессора и то, что ОС часто передает управление другим процессам; возврат же управления операционной системе полностью возложен на процессор.

Ограничения

Так как операционная система многозадачная, то процессы конкурируют между собой за ресурсы компьютера. Для “справедливого” распределения ресурсов, таких как память, дисковое пространство, время процессора, каждому процессу установлен набор ограничений. Это ограничения не носят общесистемного характера, как например, максимальное число процессов. Для получения информации о текущих ограничениях и их изменениях предназначены системные вызовы 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).

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

Демон

Демоны играют важную роль в работе операционной системы. Рассмотрим основные требования, предъявляемые к демонам:

  1.  Демон не должен реагировать на сигналы управления заданиями, посылаемые ему при попытке операций ввода/вывода с управляющим терминалом.
  2.  Необходимо закрыть все открытые файлы (файловые дескрипторы).
  3.  Необходимо снять ассоциацию с группой процессов и управляющим терминалом.
  4.  Сообщения о работе демона следует направлять в специальный журнал.
  5.  Необходимо изменить текущий каталог на корневой.

Рассмотрим реализацию такой программы:

#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();

}

Тело демона содержит текст программы, реализующий полезные функции демона. Чтобы выяснить, работает ли демон можно в терминале просмотреть список  работающих процессов. В приведенном примере демон не выполняет ни какой полезной работы, это предоставляется сделать самостоятельно.




1. Изучение амплитудно-частотных характеристик роторов на подшипниках качения
2. очень древняя наука.html
3. ОСТАНОВИТЬ РАЗВАЛ ОБРАЗОВАНИЯ И НАУКИ потому что По новому закону Об образовании в РФ- РОДИТЕЛЯ
4. Тема урока- L vie u lyc~e
5. О программе необходимо показывать диалоговое окно с произвольным не пустым содержанием.html
6. Пчелы
7. Педолога интересуют не те чистые наследственные признаки которые являются независимыми от среды а те при.html
8. Скворцов Сергей Борисович
9. Феномен антинауки как альтернатива модерну Дж Холтон
10. Автоматизированное рабочее место дежурного штаба ГО Западного административного округа г Москвы