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

Тип работы:
Реферат
Предмет:
Программирование


Узнать стоимость

Детальная информация о работе

Выдержка из работы

1. Хабовая архитектура системных плат

С введением высокоскоростных режимов UltraDMA (АТА/66, АТА/100, а затем и АТА/133) связь двухканального контроллера IDE с памятью через шину PCI стала уже слишком сильно нагружать эту шину. Кроме того, появились высокоскоростные интерфейсы Gigabit Ethernet, FireWire (100/200/400/800 Мбит/с) и USB 2.0 (480 Мбит/с). Ответом на эти изменения в расстановке сил стал переход на хабовую архитектуру чипсета [1]. В данном контексте хабы — это специализированные микросхемы, обеспечивающие передачу данных между своими внешними интерфейсами. Этими интерфейсами являются «прикладные» интерфейсы подключения процессоров, модулей памяти, шин расширения и периферийные интерфейсы (АТА, SATA, USB, FireWire, Ethernet). Поскольку к одной микросхеме все эти интерфейсы не подключить (слишком сложна структура и много требуется выводов), чипсет строится, как правило, из пары основных хабов (северного и южного), связанных между собой высокопроизводительным каналом.

Рисунок 1.1 — Хабовая архитектура на примере чипсета Intel с ICH-6

Северный хаб чипсета выполняет те же функции, что и северный мост шинно-мостовой архитектуры: он связывает шины процессора, памяти и порта AGP. Однако на южной стороне этого хаба находится уже не шина PCI, а высокопроизводительный интерфейс связи с южным хабом (рис. 1. 1). Пропускная способность этого интерфейса составляет 266 Мбайт/с и выше, в зависимости от чипсета. Если чипсет имеет интегрированную графику, то в северный хаб входит и графический контроллер со всеми своими интерфейсами (аналоговыми и цифровыми интерфейсами дисплея, шиной локальной памяти). Чипсеты с интегрированным графическим контроллером могут иметь внешний порт AGP, который становится доступным при отключении встроенного графического контроллера. Есть чипсеты, у которых порт AGP является чисто внутренним средством соединения встроенного контроллера, и внешний графический контроллер к ним может подключаться только по шине PCI.

С появлением PCI-E архитектура не слишком изменилась: северный хаб (мост) вместо порта AGP теперь предлагает высокопроизводительный (8х или 16х) порт, а то и пару портов PCI-E для подключения графического адаптера. Маломощные (1х) порты PCI-E могут предоставляться как северным, так и южным хабами (это решает разработчик чипсета). В последнем случае корневой комплекс PCI-E «расползается» по двум микросхемам чипсета, связанным между собой «фирменным» интерфейсом. Использования PCI-E как единой коммуникационной базы внутри чипсета пока не наблюдается.

Северные хабы

Северный хаб [1] (как и мост) определяет основные возможности системной платы:

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

а) шина Pentium процессоров для сокета 7, Super7 (и сокета 5); частоты 50−100 МГц;

б) шина Р6 процессоров для сокета 8, слотов 1 и 2, сокета-370; частоты 66−133 МГц;

в) шина Pentium 4 для сокетов с 423, 478/479, 603/604 и 775 контактами; частота синхронизации 100−266 МГц при 4-кратной «накачке» обеспечивает частоту передачи данных 400−1066 МГц;

г) шина EV-6 процессоров Athlon, Duron, Semptron для слота, А и сокета, А (462 контакта); частоты передачи данных 200−400 МГц (тактовая частота в два раза ниже);

д) интерфейс HyperTransport процессоров со встроенным контроллером памяти (Athlon 64, Opteron, мобильные Turion 64 и Semptron) для сокетов с 754 и 939/940 выводами.

2) Типы памяти и частота работы шины памяти:

а) DRAM (FPM, EDO, BEDO) с временем доступа 50−80 не;

б) SDRAM (РС66, РС100, РС133) с частотами 66−133 МГц;

в) DDR SDRAM (РС1600, РС2100, РС2700, РС3200) с частотами 100−200 МГц (частота передачи в два раза выше);

г) DDR2 SDRAM (РС2−3200, РС2−4300, РС2−5300, РС2−5300, РС2−6400) с частотами 200−400 МГц (частота передачи в два раза выше);

д) RDRAM (РС600, РС700, РС800, РС1066) с частотами 300, 356, 400 и 533 МГц.

3) Максимальный объем памяти. На него влияет ряд факторов:

а) число слотов под модули памяти и поддерживаемые объемы модулей (допустимое число устанавливаемых модулей при работе на самой высокой частоте шины памяти может оказаться меньше, чем число слотов);

б) максимальное количество «рядов» микросхем памяти (может ограничивать возможное число устанавливаемых двусторонних модулей).

4) Число каналов памяти -- пока чаще один, но для повышения пропускной способности применяются два канала. Поначалу двухканальность использовалась только для RDRAM (здесь меньше интерфейсных сигналов в канале), теперь есть двухканальные контроллеры DDR SDRAM и DDR2 SDRAM. В оба канала должны быть установлены попарно однотипные модули (как раньше пары SIMM-72 для Pentium).

5) Возможность и эффективность применения разнородной памяти (например, DRAM вместе с SDRAM в старых платах, SDRAM и DDR SDRAM в более новых) и модулей с разным быстродействием (разная латентность при оди-

6) Для старых плат с DRAM -- возможность чередования банков (у современных типов памяти чередование банков внутреннее).

7) Поддержка контроля достоверности памяти и исправления ошибок (ЕСС).

8) Средства подключения графического акселератора (высокопроизводительное подключение), для которого уже имеется несколько вариантов:

а) порт AGP и его характеристики (режим 2х/4х/8х, внеполосная адресация SBA, быстрая запись Fast Writes); для чипсетов с интегрированной графикой интересна доступность порта при отключении внутреннего графического адаптера;

б) слоты PCI-E 8х или 16х для подключения графического адаптера (1 или 2 порта); слоты PCI-E 1х может обеспечивать как северный, так и южный хаб;

в) графический адаптер с интерфейсом HyperTransport (пока что это теоретический вариант).

9) Возможности системы управления энергопотреблением (ACPI или АРМ) -- реализуемые энергосберегающие режимы процессора и памяти, управление производительностью, SMM.

Северный мост плат для сокетов 5, 7 и Super7 определяет также политику записи кэша, применяемые типы и быстродействие микросхем статической памяти, возможный размер кэша и кэшируемой области основной памяти. Для современных плат без кэша все эти параметры определяются процессором, а политику обратной записи поддерживают уже все платы.

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

Южные хабы

Южный хаб чипсета [1] обеспечивает подключение шин PCI, PCI-X и «маломощных» портов PCI-E, ISA (но уже не всегда), АТА (2 канала), SATA, USB, FireWire, а также «мелких» контроллеров ввода-вывода, памяти CMOS и флэш-памяти с системным модулем BIOS. В южной части располагаются таймер (8254), контроллер прерываний (совместимый с парой 8259 или APIC), контроллер DMA для шины ISA и периферии системной платы. Если в чипсет интегрирован звук, то южный хаб (мост) имеет контроллер интерфейса AC-Link или HDA Link для подключения аудиокодека, а то и сам аудиокодек. Поскольку шина ISA отправляется в отставку, для контроллеров ввода-вывода, ранее подключавшихся к шине X-BUS (это практически та же ISA), ввели новый интерфейс LPC (Low Pin Count). Он, как и следует из названия, имеет малое число линий, что значительно облегчает разработку чипсета и системной платы. Флэш-память для хранения системной памяти BIOS стали помещать в специальный хаб (firmware hub), соединяемый с южным хабом отдельной шиной (аналогичной LPC). Флэш-память может подключаться и прямо к шине LPC. Для подключения энергонезависимой памяти (EEPROM) хаб может иметь дополнительный последовательный интерфейс. Для обслуживания процессоров, имеющих дополнительную сервисную шину SMBus, а также для поддержки слота CNR хаб может иметь последовательный интерфейс I2C (Inter 1С -- интерфейс связи микросхем). Этот же интерфейс может использоваться для чтения идентификаторов модулей памяти (I2С и SMBus -- близкие родственники, несколько различающиеся набором команд). В южный хаб интегрированных чипсетов вводят и контроллер локальной сети (как правило, Ethernet).

Логически южный хаб представляется как набор виртуальных мостов и устройств, подключенных к главной шине PCI. Однако обмены данными с широкополосными устройствами (IDE, SATA, USB, FireWire, Ethernet, AC"97 или HDA) на внешнюю шину PCI все-таки не «выплескивают», иначе теряется смысл южного хаба.

Южный хаб (или мост) определяет перечисленные далее параметры системной платы:

1) Параметры шины PCI (только для хабов):

а) версия интерфейса и режимы (PCI, PCI-X, PCI-X 2. 0);

б) разрядность (32 или 64 бита);

в) частота (33 или 66 МГц для PCI, до 133 МГц для PCI-X);

г) допустимое количество контроллеров шины (число каналов арбитра, которое влияет на число слотов и встроенных устройств PCI).

2) Число маломощных (4х) портов PCI-E.

3) Параметры интерфейсов АТА:

а) поддерживаемые режимы UltraDMA -- ATA/33, АТА/66, АТА/100, АТА/133;

б) независимость каналов -- электрическое разделение каналов, возможность одновременной работы двух каналов.

4) Параметры интерфейса SATA: тип контроллера (желательно AHCI), число портов, возможность одновременного использования с параллельной шиной.

5) Число портов и версия шины USB.

6) Наличие интерфейса AC-Link или HDA Link.

7) Наличие шины ISA.

8) Возможность эмуляции DMA на шине PCI (PC-PCI, DDMA).

9) Возможности мониторинга состояния:

а) число каналов измерения питающих напряжений;

б) число каналов измерения температуры;

в) число каналов измерения частоты вращения вентиляторов.

Контроллеры гибких дисков, интерфейсных портов, клавиатуры, CMOS RTC могут входить в собственно чипсет, а могут быть реализованы и на отдельных «инородных» микросхемах. От них зависят следующие параметры системной платы:

1) наличие порта PS/2 Mouse (есть во всех платах АТХ);

2) режимы параллельного порта (стандартный, двунаправленный, ЕСР, ЕРР, поддержка FIFO и DMA);

3) режимы последовательных портов (стандартом считается совместимость с 16 550А и поддержка FIFO и DMA);

4) поддержка IrDA;

5) типы поддерживаемых дисководов (2,88 Мбайт поддерживают теперь почти все контроллеры, но эта возможность не востребована дисководами и дискетами).

хабовый архитектура сигнал плата

2. Интерфейс командной строки Unix System V

Пользователь ОС UNIX общается с системой через командный интерпретатор (shell) [2]. Через него происходит доступ к командам, файловой системе и другим функциям ядра UNIX. Это обычная программа (т.е. не входит в ядро операционной системы UNIX). Ее можно заменить другой или использовать несколько разных версий. Наиболее известны следующие версии:

Sh — классический интерпретатор версии UNIX V7, иначе называемый по фамилии автора Bourne shell.

Ksh — интерпретатор Korn shell, дополняющий классический shell возможностями работы с заданиями пользователя, историей работы и позволяющий редактировать командную строку при помощи команд, аналогичных vi. Является фактически стандартом для POSIX-совместимых систем, в частности, UNIX System V.

Csh — стандартный интерпретатор BSD UNIX и производных от него систем. Отличается улучшенными диалоговыми возможностями, способом присваивания и экспортирования переменных в среду, управляющими конструкциями и рядом других моментов; тоже поддерживает историю и редактирование командной строки. Главное и, по моему мнению, отрицательное его отличие от других интерпретаторов, — это свои управляющие конструкции, не совпадающие с sh.

Bash — свободно распространяемый в виде исходных текстов интерпретатор, называемый «Bourne another shell», объединяющий все лучшее из остальных интерпретаторов с удобными возможностями редактирования командной строки и работы с историей команд. В настоящее время — фактический стандарт.

Рассмотрим структуру командной строки интерпретаторов sh и ksh (в классической версии 1988 года).

Командные строки рассматриваются по одной и имеют определенную структуру. Чтобы понять ее, рассмотрим ряд синтаксических определений:

< пробел>: =

< символ пробела> | < символ табуляции>

< имя>: =

< буква или подчеркивание> {< допустимый символ имени> }

< буква или подчеркивание>: =

< буква> | _

< допустимый символ имени>: =

< буква> | < цифра> | _

< параметр>: =

< имя> | < цифра> | * | @ | # |? | - | $ | !

< слово>: =

< не пробел> {< не пробел> }

< простая команда>: =

< слово> {< пробел> < слово>}

Итак, простая команда — это последовательность слов через пробел. Нажатие клавиши Enter при вводе команды или перевод строки при обработке сценария являются для командного интерпретатора признаком завершения команды. Она обрабатывается и выполняется.

Значением простой команды является ее статус выхода (см. далее) в случае нормального завершения или (восьмеричное) 200+статус при ненормальном завершении.

Пример простой команды:

$ who

oracle pts000 Aug 20 10: 08

root console Aug 20 09: 03

intdbi pts004 Aug 20 12: 45

$

Из простых команд строятся более сложные конструкции: конвейеры и списки.

< конвейер>: =

< команда>

< список>: =

< конвейер> {< разделитель> < конвейер>} [< терминатор команды> ]

< разделитель>: =

& & | || | < терминатор команды>

< терминатор команды>: =

; | &

Конвейер — это последовательность одной или более команд, разделенных |. Стандартный выходной поток каждой команды, кроме последней, соединяется при помощи программного канала со стандартным входным потоком следующей команды. Каждая команда выполняется как отдельный процесс; интерпретатор ожидает окончания последней команды. Статусом выхода конвейера является статус выхода его последней команды. Вот пример простого конвейера:

$ ls | tee save | wc

15 15 100

$

Список — это последовательность одного или более конвейеров, разделенных ;, &, & & или || и, возможно, заканчивающаяся; или &. Из этих четырех символов,; и & имеют равный приоритет, который ниже, чем у & & и || (эти символы тоже имеют равный приоритет). Точка с запятой (;) вызывает последовательное выполнение предшествующего конвейера (т.е. командный интерпретатор ожидает окончания конвейера перед выполнением любых команд, следующих за точкой с запятой). Амперсанд (&) вызывает асинхронное выполнение предшествующего конвейера (т.е. командный интерпретатор не ожидает окончания работы конвейера). Символ & & (||) ведет к тому, что следующий за ним список выполняется только в том случае, когда предыдущий конвейер вернул нулевой (ненулевой) статус выхода. В список может входить произвольное количество переводов строк и точек с запятой, разделяющих команды.

Теперь можно дать общее определение команды:

< команда>: =

< простая команда> |

< оператор управления> |

< определение функции> |

< список> | (< список>) | { < список>; }

Список в круглых скобках выполняется в порожденном командном интерпретаторе. Круглые скобки обычно используют для группировки команд.

Список в фигурных скобках выполняется в текущем командном интерпретаторе, без порождения дополнительного процесса, и замещает образ командного интерпретатора (это аналог системного вызова exec).

Операторы управления и синтаксис определения функций рассматривается далее.

Рассмотрим пример сложной команды:

bash$ (sleep 5; date) & date

[1] 1148

Wed Aug 20 15: 00:11 ??? 1997

bash$ Wed Aug 20 15: 00:16 ??? 1997

Фоновый процесс начинается, но сразу «засыпает»; тем временем вторая команда date выдает текущее время, а интерпретатор — приглашение для ввода новой команды. Через пять (примерно, зависит от загрузки системы и т. п.) секунд прекращается выполнение команды sleep и первая команда date выдает новое время.

3. Демоны

В ОС UNIX выделяется три типа процессов: системные, процессы-демоны и прикладные процессы [2].

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

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

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

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

Способы порождения и запуска «демонов» могут быть различны:

1. В процессе старта системы из файла /etc/rc. Такие «демоны» будут работать в статусе суперпользователя во время работы ОС.

2. Используя либо системный файл /usr/lib/crontab, либо пользовательский crontab. Обыкновенно стандартный системный процесс cron в течении дня выполняет определенные задачи, периодически выбирая свои команды для таких исполнений из файла /usr/lib/crontab.

3. С помощью команды at «демон» ждет наступления заданного времени и выдает определенное задание.

4. Запуск фонового процесса с помощью пользовательского терминала.

4. Сигналы UNIX

Сигналы обеспечивают механизм вызова определенной процедуры при наступлении некоторого события (аналогично прерываниям) [2]. Каждое событие имеет свой числовой идентификатор (обычно в диапазоне от 1 до 36) и соответствующую символьную константу — имя. При работе с сигналами необходимо различать две фазы:

1) генерация или посылка сигнала;

2) доставка и обработка сигнала.

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

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

Ядро генерирует и посылает процессу сигнал в ответ на ряд событий, которые могут быть вызваны самим процессом, другим процессом, прерыванием или каким либо внешним событием. Основные причины отправки сигнала:

1) исключительные ситуации — выполнение процесса вызывает исключительну ситуацию, например, деление на 0;

2) терминальные прерывания — нажатие клавиш терминала, например, < Del>, < Ctrl+C>, < Ctrl+>, вызывает посылку сигнала текущему процессу, связанному с терминалом;

3) другие процессы — процесс может посылать сигнал другому процессу или группе процессов с помощью системного вызова kill. В этом случае сигналы являются элементарной формой межпроцессного взаимодействия.

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

5) квоты — когда процесс превышает выделенную ему квоту вычислительных ресурсов или ресурсов файловой системы, ему посылается соответствующий сигнал;

6) уведомления — процесс может запросить уведомление о наступлении тех или иных событий, например, готовности устройства и т. д. Такое уведомление посылается процессу в виде сигнала.

7) будильники — если процесс установил таймер, ему будет послан сигнал, когда значение таймера станет равным 0.

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

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

Доставка сигнала происходит после того, как ядро от имени процесса вызывает системную процедуру issig (), которая проверяет, существуют ли ожидающие доставки сигналы, адресованные данному процессу. Процедура issig () вызывается ядром в трех случаях:

Непосредственно перед возвращением из режима ядра в пользовательский режим после обработки системного вызова или прерывания.

Непосредственно перед переходом процесса в состояние сна с приоритетом, допускающим прерывание сигналом.

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

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

Работа с сигналами, связанными с исключительными ситуациями, незначительно отличается от описанной выше. Исключительная ситуация возникает при выполнении процессом определенной инструкции, вызывающей в системе ошибку. Если такое происходит, вызывается системный обработчик исключительной ситуации, и процесс переходит в режим ядра, почти так же, как и при обработке любого другого прерывания. Обработчик отправляет процессу соответствующий сигнал, который доставляется, когда процесс возвращается в пользовательский режим.

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

Таблица 4.1 — Основные сигналы

Сигнал

Стандартная обработка

Значение

SIGTERM 15

Завершение процесса

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

SIGHUP 1

Завершение процесса

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

SIGKILL 9

Завершение процесса

Не перехватываемый сигнал, позволяющий завершить любой процесс.

SIGILL 4

Завершение процесса и сброс образа памяти

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

SIGTRAP 5

Завершение процесса и сброс образа памяти

Была установлена ловушка точки прерывания процесса. Этим управляет системный вызов ptrace, который полезен для отладки.

SIGFPE 8

Завершение процесса и сброс образа памяти

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

SIGBUS 10

Завершение процесса и сброс образа памяти

Ошибка на шине ввода-вывода. Обычно это является результатом попытки выполнить чтение или запись вне границ памяти программы.

SIGSEGV 11

Завершение процесса и сброс образа памяти

Это нарушение сегментации — проклятие разработчиков программ! Оно означает, что вы попытались получить доступ к сегменту памяти запрещенным образом. Может быть, это было присваивание значения части сегмента кода или чтение из нулевого адреса.

SIGPIPE 13

Завершение процесса

Программа попыталась выполнить чтение или запись в программный канал, другой конец которого уже завершил работу. Этот сигнал помогает завершить работу конвейера, когда одна из его команд дала сбой.

SIGALRM 14

Завершение процесса

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

SIGCHLD 18

Игнорируется

Сначала это был сигнал завершения работы дочернего процесса, но сейчас он означает изменение состояния дочернего процесса.

SIGTSTP 24

Остановка процесса

Это запрос от терминала на остановку процесса. Посылка этого сигнала процессу происходит при нажатии комбинации клавиш Ctrl-Z.

SIGCONT 25

Игнорируется

Этот сигнал указывает процессу на возобновление его работы. Процессу посылается либо команда fg, либо bg, а командный интерпретатор выполняет внутренний системный вызов wait для привилегированного процесса, либо не выполняет его для фонового процесса.

ПоказатьСвернуть
Заполнить форму текущей работой