Файл: Межсетевая Операционная Система Cisco.docx

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 03.02.2024

Просмотров: 37

Скачиваний: 0

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.


Пример 1.2. Результат выполнения команды show memory



Пример 1.2.

Из примера 1.2 видно, что в системе выделены три пула памяти: Processor, I/O и PCI. Сравнивая значения колонки Head (адрес пула) с соответствующими значениями из колонки Start (начальный адрес) команды show region, можно определить, какие области покрывает каждый пул памяти.

Пример 1.3. Информация, выводимая командой Show region



Пример 1.3.

Из примера 1.3 видно, что пул памяти процессора (Processor memory pool) включает подобласть под названием куча (heap) из основной области (main region), который, в свою очередь, принадлежит к локальному классу (class Local). Пул памяти процессора присутствует во всех IOS-системах и всегда размещается в локальной памяти. Для размещения различных данных (таких как таблицы маршрутизации) из процессорного пула памяти выделяется необходимая часть. Аналогичным образом пул ввода-вывода (I/O pool) отвечает за память региона iomem, а пул шины PCI — соответственно за регион pcimem. В выводе команды show memory присутствует еще несколько колонок, которые отображают различную информацию о пулах. Ниже приведено краткое описание этих значений (все показатели измеряются в байтах).

  1. Total (всего) — размер пула памяти.

  2. Used (использовано) — показывает объем памяти, выделенной из данного пула.

  3. Free (доступно) — доступный объем памяти.

  4. Lowest (наименьший объем) — наименьший объем памяти, когда-либо доступный со времени создания данного пула.

  5. Largest (наибольший объем) — размер наибольшего непрерывного блока памяти, доступного для выделения в данный момент.

Как мы увидим далее, команда show memory может отображать выделенные блоки памяти внутри каждого пула.

Процессы в системе IOS.

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

Как мы уже отмечали раньше, операционная система IOS использует модель приоритетного выполнения до полного завершения для планирования своих процессов. Может показаться, что использование планирования без приоритетных прерываний — не лучшее решение для системы, которая должна оперативно обслуживать входящие сетевые пакеты. В некоторых случаях так оно и есть: потребность в оперативности выходит за ограничения механизма планирования процессов в системе IOS. Невысокие затраты ресурсов. При кооперативной многозадачности контексты различных потоков переключаются относительно редко, что выражается в меньшей загруженности центрального процессора (так как он реже занимается собственно переключением потоков). Меньше трудностей для программиста. Поскольку программист может контролировать момент, когда процесс будет приостановлен, весьма просто оказывается переключать процессы лишь в тех местах, где они не оперируют с общими данными в памяти. Это позволяет избежать нежелательных эффектов и тупиков между потоками.

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

Цикл жизни процесса.

Процессы могут “рождаться и умирать” в любой момент работы системы IOS, исключая время обработки прерывания. Процесс может создаваться или “уничтожаться” ядром системы (во время инициализации IOS) или любым другим выполняющимся процессом. В частности, за возникновением большинства процессов операционной системы IOS ответствен процесс синтаксического анализатора (parser). Синтаксический анализатор представляет собой набор функций, которые интерпретируют конфигурационные файлы системы IOS и исполняемые команды (ЕХЕС). Синтаксический анализатор вызывается ядром системы во время инициализации и процессом ЕХЕС, который предоставляет интерфейс командной строки - CLI для консоли или сессии Telnet.

Будь то команда, введенная пользователем, или строка, прочитанная из конфигурационного файла, синтаксический анализатор обрабатывает поступившие данные и предпринимает соответствующие действия.

Команды конфигурации могут отвечать за установку различных значений (как, например, IP-адресов), а также параметров маршрутизации и за мониторинг событий. Некоторые команды требуют, чтобы синтаксический анализатор породил новый процесс. К примеру, получив через интерфейс командной строки конфигурационную команду router eigrp, анализатор создает новый процесс, именуемый ipigrp (если, конечно, такой процесс еще не запущен в системе), который занимается обслуживанием IP-пакетов протокола EIGRP. Если же введена команда no router eigrp, анализатор прекращает работу процесса ipigrp и соответственно пакеты IP EIGRP больше не обрабатываются маршрутизатором. Жизнь процессов в системе IOS состоит из нескольких фаз, ниже изображены эти фазы и соответствующие им состояния процессов.



Рис 1.4.

Фаза рождения.

Когда новый процесс рождается, он получает в распоряжение собственный стек и переходит в состояние “новый” (new). После этого процесс может перейти в фазу трансформации. Если же нужды в трансформации нет, то процесс напрямую следует в фазу своего выполнения.

Фаза трансформации.

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

Фаза выполнения.

После того как новый процесс был успешно создан и подвергся трансформации, он переходит в состояние готовности (ready), находясь уже в фазе выполнения (execution). В этой фазе процесс получает доступ к центральному процессору и, собственно, совершает некую полезную работу. Находясь в фазе выполнения, процесс может принимать одно из трех состояний: готовность, выполнение или простой. Процесс в состоянии готовности ожидает своей очереди на пользование ресурсами процессора. Выполняющийся процесс уже получил доступ к центральному процессору, который и занимается выполнением инструкций этого процесса. Процесс, находящийся в состоянии простоя, “спит”, ожидая какого-то события извне. Если такое событие происходит, процесс может выполняться. Переход процесса из состояния готовности в состояние выполнения контролируется планировщиком. Поскольку многозадачность операционной системы IOS не использует приоритетное прерывание, то, получив право на выполнение, процесс занимает центральный процессор, выполняясь до полного своего завершения либо периодически приостанавливая свою работу. Приостановить свое выполнение процесс может двумя способами. Процесс может напрямую сообщить ядру, что он желает освободить центральный процессор от использования, и тогда ядро системы приостанавливает выполнение процесса и переводит его в состояние готовности, где он вновь ожидает своей очереди на выполнение.


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

Фаза уничтожения.

Последняя фаза в жизненном цикле процесса — фаза уничтожения. Процесс входит в эту фазу после завершения всех своих задач и прекращает работу (так называемое самостоятельное завершение работы). Процесс также может быть “убит” и другим процессом. Когда процесс завершил работу самостоятельно или под действием другого процесса, он переходит в состояние “мертвый” (dead). Завершившиеся процессы пребывают в “мертвом” состоянии, пока ядро не освободит все занимаемые ими ресурсы. Ядро может также сохранить информацию об использовании процессом стека. После того как все ресурсы “мертвого” процесса освобождены, он полностью выгружается из системы.

Приоритеты процессов в системе IOS.

Планируя выполнение своих процессов, операционная система IOS использует политику приоритетов. При рождении процесса ему назначается один из четырех приоритетов, в зависимости от целей данного процесса. Впоследствии приоритет процесса не изменяется. Приведем описание возможных приоритетов процессов операционной системы IOS. Критический приоритет. Зарезервирован для системных процессов, распределяющих ресурсы.

Высокий приоритет. Назначается процессам, обеспечивающим высокую оперативность (как, например, процесс, получающий пакеты непосредственно от сетевого интерфейса).

Средний приоритет. По умолчанию такой приоритет назначается большинству процессов системы JOS.

Низкий приоритет. Назначается процессам, которые выполняют фоновые задачи, такие как информационные сообщения.

В зависимости от приоритетов механизм приоритетов дает различным процессам различные привилегии на доступ к процессорным ресурсам. Однако следует помнить, что операционная система IOS не реализует приоритетные прерывания. Таким образом, процесс с более высоким приоритетом не может прервать выполнение процесса с более низким приоритетом. Вместо этого система IOS предоставляет процессам с высоким приоритетом больше возможности захватить процессорные ресурсы.


Для того чтобы определить, какие процессы выполняются в системе, используется команда show process. Результат исполнения команды включает также дополнительную информацию о каждом процессе.

Пример 1.4. Результат работы команды show process