Будь умным!


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

Лабораторная работа ’ 2 ОПЕРАЦИОННАЯ СИСТЕМА LINUX Управление процессами.html

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


Лабораторная работа № 2

ОПЕРАЦИОННАЯ СИСТЕМА LINUX

Управление процессами. Файловая система /proc

  1.  Общие сведения

В ОС Linux основным средством организации многозадачности является процесс – уникальным способом идентифицируемая программа которая нуждается в получении доступа к ресурсам компьютера. Операционная система манипулирует образом процесса, который представляет собой программный код , а так же разделами данных процесса, определяющими среду выполнения. Сегмент кода содержит реальные инструкции процессора, включающие как строки, скомпилированные и написанные пользователем, так и стандартный код, сгенерированный компилятором для системы. Этот системный код обеспечивает взаимодействие между программой и операционной системой.

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

  1.  Атрибуты процессов

Идентификатор процесса (PID) – позволяет ядру системы различать процессы. Когда создаётся новый процесс, ядро присваивает ему следующий свободный идентификатор. Присвоение идентификатора обычно происходит по возрастающей, т.е. идентификатор нового процесса больше, чем идентификатор процесса, созданного перед ним. Если идентификатор достигает максимального значения (обычно 65737), следующий процесс получает минимальный свободный PID и цикл повторяется. Когда процесс завершает работу, ядро освобождает использовавшийся им идентификатор.

Идентификатор родительского процесса (PPID) – идентификатор процесса породившего этот процесс. Все процессы в системе, кроме системных процессов и процесса init, являющегося прародителем остальных процессов, порождены одним из существующих или существовавших ранее процессов.

Поправка приоритета (NI) – относительный приоритет процесса, учитываемый планировщиком при определении очерёдности запуска. Фактически же распределение процессорных ресурсов определяется приоритетом выполнения (атрибут PRI), зависящим от нескольких факторов, в частности от заданного относительного приоритета. Относительный приоритет не изменяется системой на всём протяжении жизни процесса (хотя может быть изменён пользователем или  администратором) в отличии от приоритета выполнения, динамически изменяемого планировщиком.

Терминальная линия (TTY) – терминал или псевдотерминал, связанный с процессом. С этим терминалом по умолчанию связаны стандартные потоки: входной и выходной и поток сообщений об ошибках. Потоки (программные каналы) являются стандартным средством межпроцессного взаимодействия в ОС Linux.

Реальный (GID) и эффективный (EGID) идентификаторы группы – реальный идентификатор группы равен идентификатору основной или текущей группы пользователя, запустившего процесс. Эффективный идентификатор служит для определения прав доступа к системным ресурсам от имени группы. Обычно эффективный идентификатор группы совпадает с реальным.Но если для выполняемого файла установлен бит SGID, такой файл выполняется с эффективным идентификатором группы владельца.

1.2 Приоритеты процессов

Планирование процессов Linux основано на приоритете процесса. Планировщик всегда выбирает процесс с наивысшим приоритетом. Приоритет процесса не является фиксированным и динамически изменяется системой в зависимости от использования вычислительных ресурсов, времени ожидания запуска и текущего состояния процесс. Если процесс готов к запуску и имеет наивысший приоритет, планировщик приостановит выполнение текущего процесса (с более низким приоритетом), даже если последний не ‘выработал’ свой временной квант.

Ядро Linux является непрерываемым (nonpreemptive). Это означает что, что процесс находящийся в режиме ядра (в результате системного вызова или прерывания) и выполняющий системные инструкции, не может быть прерван системой, а вычислительные ресурсы переданы другому высокоприоритетному процессу. В этом состоянии выполняющийся процесс не может освободить процессор 'по собственному желанию', в результате недоступности какого либо ресурса перейдя в состояние сна. В противном случае система может прервать выполнение процесса только при переходе из режима ядра в пользовательский режим. Такой подход значительно упрощает решение задач синхронизации и поддержки целостности структур данных ядра. Каждый процесс имеет два атрибута приорита: текущий приоритет, на основании которого происходит планирование, и относительный приоритет, называемы также поправкой приоритета (nice number), который задаётся при порождении процесса и влияет на текущий приоритет. Диапазон значений текущего приоритета различен, в зависимости от версии ОС Linux и используемого планировщика. В любом случае, процессы, выполняющиеся в пользовательском режиме, имеют более низкий приоритет, чем работающие в режиме ядра.

1.3 Работа с процессами

Во время выполнения процедуры регистрации в операционной системе Linux, она автоматически производит следующие операции:

  1.  начинается процесс стандартно с проверки логина пользователя и пароля;

2. затем определяется вся палитра набора, состоящего из переменных окружения;

3. завершает этот процесс запуск интерпретатора команд. Именно он и именуется оболочкой операционной системы.

ps –help -  выдаст вам справку по команде ps, именно она владеет полной информацией и работает с полным списком запущенных Вами процессов. Встроенная система для получения справок man – предоставит дополнительную справку. man ps - выведет на экране полную информацию по команде ps, не забывайте, что результат отдельных программ напрямую зависит от ваших прав в рамках ОС.

init – изменяет текущий уровень запуска ОС командой, отвечающей за запуск и завершение процессов в Linux; для тех же целей разработаны и специальные скрипты. Они хранятся в /etc/inittab. Уровень 0 – обеспечит выключение, а уровень 6 – перезагрузку. Соответственно для выключения init 0, для перезагрузки init 6. init используется и для изменения уровня запуска ОС. Рассмотрим уровни более детально:

1  – однопользовательский режим. Доступ разрешен пользователю root;

  1.  –многопользовательский режим без поддержки сетевых функций;
  2.  –с поддержкой сети;
  3.  –зарезервировано;
  4.  –с использованием графической оболочки.

init 3 позволит завершить действие графической оболочки. В итоге она закроется и система перейдет на уровень запуска 3. Для возврата нужно ввести init 5. По умолчанию уровень запуска определяется initdefault из /etc/inittab. Для запуска системы в случае необходимости поддержки графической оболочки применяйте команду: id:5:initdefault. Если 5 заменить на 3, то графическая оболочка при старте системы не запустится. Никогда не устанавливайте уровень запуска системы по умолчанию со значениями от 0 до 6.

В ОС Linux доступен просмотр списка задач с помощью команды ps. Без уточняющих параметров она отобразит список процессов, запущенных во время текущего сеанса работы. ps --help стандартно выдаст полный список опций.

Cписок всех процессов, запущенных в системе:

ps -A - выдаст список процессов с идентификаторами (PID) и их именами
или:
ps -ax - выдаст тот же список процессов, но с полной строкой запуска

список задач, порожденных пользователем user:  ps -U user

список задач, связанных с текущим терминалом: ps T

список задач, связанных с терминалом N: ps t ttyN

Если список задач большой, а нас интересует состояние одной или нескольких задач, можно воспользоваться grep: ps -U root | grep ppp - выдать список задач, содержащих "ppp" в имени. top отображает на экране данные об использовании ресурсов компьютера. 


Верхняя часть окна сообщит Вам итоговые данные о состоянии системы:

• текущее время;

• время с момента загрузки системы;

• число пользователей в системе;

• число процессов в условиях разных состояниях;

• данные об использовании памяти и процессора.

Ниже выводится таблица, характеризующая отдельные процессы. Число строк, отображаемых в этой таблице, определяется размером окна. Содержимое окна обновляется каждые 3 секунды. Нажатие клавиши h выводит справку по командам, которые позволяют изменить формат отображаемых данных и управлять некоторыми параметрами процессов в системе:

s или d - изменить интервалл обновления окна.

z - цветное/черно-белое отображение

n или # - количество отображаемых процессов

Можно отсортировать список процессов по использованию процессора (P), памяти (M), времени выполнения (T) и т.п. Однако, есть и более полезные команды, которые позволяют управлять процессами в интерактивном режиме:

k - снять (kill) задачу. По этой команде будет запрошен идентификатор процесса (PID), после ввода которого, процесс будет завершен.

r - изменить текущий приоритет задачи (renice). Как и при выполнении предыдущей команды, будет запрошен PID, и затем, новое значение приоритета (отображается в колонке NI). Диапазон значений приоритетов - от минус 20 (наивысший) до плюс 19. Отрицательные значения и 0 может устанавливать только пользователь root. Для выхода из top нажмите q 

Принудительное завершение процесса и изменение его приоритета можно выполнить и без команды top. Процессы в Linux позволяют обмениваться "сигналами" с ядром и другими процессами. При получении сигнала процессом, управление запускает подпрограмму для его обработки. Если ее нет, то или ядру. Linux оперирует специальной командой kill. Именно она делает возможной опцию послать заданному процессу любой сигнал. Список сигналов можно получить по команде: kill –l. В результате выполнения этой команды вы увидите список номеров и названий сигналов. Послать определенный сигнал выбранному процессу с помощью ввода в командной строке:

kill <-номерсигнала> номер PID выбранного процесса.

Например, нам нужно завершить работу приложения Midnight Commander (mc). Определим идентификатор процесса mc: ps -A | grep mc. Пусть PID= 11597. Посылаем сигнал SIGQUIT (номер 3): kill -3 11597 После чего процесс mc обработает сигнал GIGQUIT и нормально завершится. Однако, если mc "завис", то, естественно, завершиться он не сможет, поскольку подпрограмма обработки сигнала SIGQUIT не получит управления. В таких случаях используется сигнал под номером 9 (SIGKILL), обрабатываемый ядром операционной системы, и принудительно завершающий указанный процесс: kill -9 11597. Если в команде kill номер сигнала не указан, то тогда используется SIGKILL, предыдущую команду можно было ввести как kill PID: kill 11597. Завершение процесса прерывает и запущенные в нем процессы. Для завершения процесса по имени используется команда killall: • killall mc - завершить процесс, в имени которого есть "mc", killall -u user - завершить процессы, порожденные пользователем user. Команды nice и renice измененяют приоритет процессов. При запуске процесса, его приоритет задается значением родительского процесса, например, терминала xterm или командной оболочки shell. Команда nice позволяет запустить процесс с приоритетом, равным сумме родительского (например 8) и числа, задаваемого в качестве опции команды nice:

nice -<число> команда

nice -4 mc - запустит mc с приоритетом = 8+4=12 Команда renice используется для изменения приоритета уже запущенного процесса:

renice <число> -p PID

renice 4 -p 11597 - установить значение приоритета для процесса mc (PID=11597) равным 4. После выполнения, renice выдаст строку результата: 11597: old priority 12, new priority 4 - старый приоритет 12, новый приоритет 4 Задание нулевого и отрицательного числа приоритета допустимо лишь для пользователя с правами root.

Дополнительно для управления процессами можно использовать:

 at - запускает процесс в определенное время;

atq - выводит список заданий, поставленных в очередь командой at;

jobs – список фоновых процессов которые мы запустили;

bg – переводит процесс в фон;

fg – возвращает процесс из фона.

Для запуска программы в фоновом режиме после её имени поставить &.

1.4 Файловая система /proc

Файловая система /proc является виртуальной и в действительности она не существует на диске. Ядpо создает ее в памяти компьютеpа. Система /proc предоставляет информацию о системе (изначально только о процессах - отсюда ее название). Некоторые наиболее важные файлы и каталоги pассмотpены ниже. Более подробную информацию о стpуктуpе и содержании файловой системы /proc можно найти в man-pуководстве к proc.

1.5 Информация о процессах

Если вы выведете список содержимого каталога /proc, вы увидите много каталогов, именами которых являются номера. Эти каталоги содержат информацию о всех процессах в системе, запущенных в данный момент:

$ ls -d /proc/[0-9]*

/proc/1/    /proc/302/  /proc/451/  /proc/496/  /proc/556/  /proc/633/

/proc/127/  /proc/317/  /proc/452/  /proc/497/  /proc/557/  /proc/718/

/proc/2/    /proc/339/  /proc/453/  /proc/5/    /proc/558/  /proc/755/

/proc/250/  /proc/385/  /proc/454/  /proc/501/  /proc/559/  /proc/760/

/proc/260/  /proc/4/    /proc/455/  /proc/504/  /proc/565/  /proc/761/

/proc/275/  /proc/402/  /proc/463/  /proc/505/  /proc/569/  /proc/769/

/proc/290/  /proc/433/  /proc/487/  /proc/509/  /proc/594/  /proc/774/

/proc/3/    /proc/450/  /proc/491/  /proc/554/  /proc/595/

Посмотрите, какие процессы соответствуют вашему сеансу и зайдите в один из каталогов, имя которого совпадает с pid одного из этих процессов.

$ cd /proc/127

$ ls -l

total 0-9

-r--r--r--    1 root     root            0 Dec 14 19:53 cmdline

lrwx------    1 root     root            0 Dec 14 19:53 cwd -> //

-r--------    1 root     root            0 Dec 14 19:53 environ

lrwx------    1 root     root            0 Dec 14 19:53 exe -> /usr/sbin/apmd*

dr-x------    2 root     root            0 Dec 14 19:53 fd/

pr--r--r--    1 root     root            0 Dec 14 19:53 maps|

-rw-------    1 root     root            0 Dec 14 19:53 mem

lrwx------    1 root     root            0 Dec 14 19:53 root -> //

-r--r--r--    1 root     root            0 Dec 14 19:53 stat

-r--r--r--    1 root     root            0 Dec 14 19:53 statm

-r--r--r--    1 root     root            0 Dec 14 19:53 status

$

Каждый из каталогов содержит одинаковые пункты: Вот краткое описание некоторых из них:

  1.  cmdline: этот (псевдо-) файл содержит полную командную строку, использованную для вызова процесса. Он не отформатирован: между программой и ее аргументами нет пробелов, а в конце строки нет разделителя строки.
  2.  cwd: эта символическая ссылка указывает на текущий рабочий каталог процесса (следует из имени).
  3.  environ: этот файл содержит все переменные окружения, определенные для этого процесса, в виде ПЕРЕМЕННАЯ=значение. Как и в cmdline вывод вообще не отформатирован: нет разделителей строк для отделения различных переменных, и в конце нет разделителя строки.
  4.  exe: эта символическая ссылка указывает на исполняемый файл, соответствующий запущенному процессу.
  5.  fd: этот подкаталог содержит список файловых дескрипторов, открытых в данный момент процессом. Смотрите ниже.
  6.  maps: когда вы выводите содержимое этого именованного канала (при помощи команды cat, например), вы можете увидеть части адресного пространства процесса, которые в текущий момент распределены для файла. Вот эти поля (слева направо): адресное пространство, связанное с этим распределением; разрешения, связанные с этим распределением; смещение от начала файла, где начинается распределение; старший и младший номера (в шестнадцатеричном виде) устройства, на котором находится распределенный файл; номер inode файла; и, наконец, имя самого файла. Если устройство обозначено как 0 и отсутствует номер inode или имя файла - это анонимное распределение.
  7.  root: эта символическая ссылка указывает на корневой каталог, используемый процессом.
  8.  status: этот файл содержит разнообразную информацию о процессе: имя исполняемого файла, его текущее состояние, его PID и PPID, его реальные и эффективные UID и GID, его использование памяти и другие данные. Обратите внимание, что файлы stat и statm теперь устарели. Содержавшаяся в них информация теперь хранится в status.

Если мы выведем список содержимого каталога fd для процесса 127, мы получим следующее:

$ ls -l fd

total 0

lrwx------    1 root     root           64 Dec 16 22:04 0 -> /dev/console

l-wx------    1 root     root           64 Dec 16 22:04 1 -> pipe:[128]

l-wx------    1 root     root           64 Dec 16 22:04 2 -> pipe:[129]

l-wx------    1 root     root           64 Dec 16 22:04 21 -> pipe:[130]

lrwx------    1 root     root           64 Dec 16 22:04 3 -> /dev/apm_bios

lr-x------    1 root     root           64 Dec 16 22:04 7 -> pipe:[130]

lrwx------    1 root     root           64 Dec 16 22:04 9 ->

/dev/console

$

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

1.6 Дополнительная информация, содержащаяся в файловой системе /proc

/proc/cpuinfo 

Информация о пpоцессоpе, такая как тип пpоцессоpа, его модель, производительность и дp.

/proc/devices 

Список дpайвеpов устройств, встроенных в действующее ядро.

/proc/filesystems 

Файловые системы, встроенные в ядро.

/proc/interrupts 

Задействованные в данный момент пpеpывания.

/proc/ioports 

Задействованные в данный момент порты ввода/вывода.

/proc/kcore 

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

/proc/kmsg 

Сообщения, выдаваемые ядром. Они также пеpенапpавляются в syslog.

/proc/ksyms 

Таблица символов ядра.

/proc/loadavg 

Оpиентиpовочная загруженность системы. Этот файл содержит числа подобно:

    0.13 0.14 0.05

Эти числа являются результатом команд uptime и подобных, показывающих среднее число процессов пытающихся запуститься в одно и то же вpямя за последнюю минуту, последние пять минут и последние пятнадцать

/proc/meminfo 

Информация об использовании памяти, как физической так и swap-области. Файл содержит обзор выходной информации пpогpаммы free. Содержание его имеет следующий вид:

 total: used:  free:  shared:  buffers:

Mem: 7528448  7344128  184320  2637824 1949696

Swap: 8024064 1474560 6549504

/proc/modules 

Список модулей ядра, загруженных в данный момент.

/proc/net 

Информация о сетевых протоколах.

/proc/self 

Символическая ссылка к каталогу процесса, пытающегося получить информацию из /proc. При попытке двух различных процессов получить какую-либо информацию в /proc, они получают ссылки на различные каталоги. Это облегчает доступ пpогpамм к собственному каталогу процесса.

/proc/stat 

Различная статистическая информация о работе системы. Файл stat отображает статистику данной системы в формате ASCII. Пpимеp:

  cpu   5470 0 3764 193792

  disk  0 0 0 0

  page  11584 937

  swap  255 618

  intr  239978

  ctxt  20932

  btime 767808289

Значения стpок:

cpu

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

disk

Четыре компоненты dk_drive в стpуктуpе kernel_stat в данный момент незаняты.

page

Количество стpаниц введенных и исключенных системой.

swap

Количество своп-стpаниц введенных и исключенных системой.

intr

Количество пpеpываний установленных пpи загpузке системы.

ctxt

Hомеp подтекста выключающий систему.

btime

Время в секундах отсчитываемое сначала суток.

/proc/uptime 

Время, в течение которого система находится в рабочем состоянии. Файл содержит время работы системы в целом и идеализированное время затpачивоемое системой на один процесс. Оба числа представлены в виде десятичных дробей с точностью до сотых секунды. Точность до двух цифр после запятой не гаpантиpуется на всех аpхитектуpах, однако на всех подпpогpаммах Linux даются достаточно точно используя удобные 100-Гц часы. Этот файл выглядит следующим образом: 604.33 205.45 В этом случае система функционирует 604.33 секунды, а время затрачиваемое на идеальный пpцесс равно 204.45 секунд.

/proc/version 

Версия ядра.

  1.  Задание на работу

  1.  Выбрать процесс по своему усмотрению и :

а) послать сигнал о прекращении процесса по его ID и имени;

б) запустить процесс с конкретным приоритетом;

в) изменить приоритет конкретного процесса;

г) запустить процесс в фоновом режиме и вывести из него;

д) передать выходной поток процесса другой программе;

е) записать выходной поток процесса в файл;

ж) вывести информацию о работающих процессах;

з) задать задание на запуск конкретного процесса в определённое время и в определённую дату и с определённым приоритетом на запуск, уметь редактировать это список заданий.

и) просмотреть процессы соответствующие вашему сеансу используя /proc 

2.2 Составить справочник согласно п. 1.6

2.3 Самостоятельная работа:

а) сконфигурировать таблицу расписания запуска заданий /etc/crontab (запускаемое приложение выбрать по своему усмотрению).

3. Содержание отчёта

1. Технология выполнения заданий п 2.1 (screenshot).

2. Справочник п 2.2.

3. Листинг таблицы расписаний п 2.3.




1. Аудит расчетов с подотчетными лицами
2. Правовое обеспечение управленческой деятельности в правоохранительной сфере по направлению 030900
3. Прикладная информатика в экономике Базы данных и знаний
4. ~~рылысмотаждау ж~мыстары ~ндiрiсiнi~ ~рт ~ауiпсiздiгi ережесi талабына с~йкес газды с~улелендiргiш ~ондыр~ы
5. Будь неряхой Иди на риск
6. МАРКЕТИНГ I Требования к соcтаву отчета Отчет представляется в сброшюрованном виде в следующей последо
7. Подчинительные союзы Союзные слова члены придаточных предложений
8. то зависеть и затем от этой зависимости избавиться
9. Как именно в виде логических нулей и единиц битов а также их групп байтов
10. Охрана водных объектов
11. будет насыщен яркими событиями
12. Дипломная работа- Роль классного руководителя в формировании познавательного интереса школьников
13.  Причины русскотурецкой войны 17681774 гг
14. ЛМЗ Кафедра оборудования и технологии производства металлоконструкций Методы получения заготовок
15. Форма и содержание теоретический очерк
16. Академии Фитнеса Виноградов Дмитрий менеджер клуба Hrd Cndy презентер российских и международных конв
17. Гипотеза эволюции и сотворение мира
18. Тема- Динамические структуры данных и их организация с помощью указателей Цель- изучить принципы организац
19. по теме Склонение имён существительных УМК Начальная школа ХХI века п
20. Юриспруденция Для студентов всех форм обучения Москва 2011 У