Основы программирования в Linux
Основы программирования в Linux читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
Один из таких примеров — процедура регистрации. Процесс
initgettyps9619 tty2 Ss+ 0:00 /sbin/mingetty tty2Процессы
gettyinitgettyКак видите, способность запускать новые процессы и ждать их окончания — одна из основных характеристик системы. Позже в этой главе вы узнаете, как выполнять аналогичные задачи в ваших собственных программах с помощью системных вызовов
forkexecwaitПланирование процессов
В следующем примере вывода команды
psps21475 pts/2 R+ 0:00 ps axЭта строка означает, что процесс
21475Rps ахR+командыЯдро Linux применяет планировщик процессов для того, чтобы решить, какой процесс получит следующий квант времени. Решение принимается исходя из приоритета процесса (мы обсуждали приоритеты процессов в главе 4). Процессы с высоким приоритетом выполняются чаще, а другие, такие как низкоприоритетные фоновые задачи, — реже. В ОС Linux процессы не могут превысить выделенный им квант времени. Они преимущественно относятся к разным задачам, поэтому приостанавливаются и возобновляются без взаимодействия друг с другом. В более старых системах, например Windows 3.х, как правило, для возобновления других процессов требовалось явное согласие процесса.
В многозадачных системах, таких как Linux, несколько программ могут претендовать на один и тот же ресурс, поэтому программы с короткими рабочими циклами, прерывающиеся для ввода, считаются лучше ведущими себя, чем программы, прибирающие к рукам процессор для продолжительного вычисления какого-либо значения или непрерывных запросов к системе, касающихся готовности ввода данных. Хорошо ведущие себя программы называют nice-программами (привлекательными программами) и в известном смысле эту "привлекательность" можно измерить. Операционная система определяет приоритет процесса на основе значения "nice", по умолчанию равного 0, и поведения программы. Программы, выполняющиеся без пауз в течение долгих периодов, как правило, получают более низкие приоритеты. Программы, делающие паузы время от времени, например в ожидании ввода, получают награду. Это помогает сохранить отзывчивость программы, взаимодействующей с пользователем; пока она ждет какого-либо ввода от пользователя, система увеличивает ее приоритет, чтобы, когда программа будет готова возобновить выполнение, у нее был высокий приоритет. Задать значение
nicenicerenicenicenicenice-l-fpsNI$ <b>ps -l</b> F S UID PID PPID С PRI NI ADDR SZ WCHAN TTY TIME CMD000 S 500 1259 1254 0 75 0 - 710 wait4 pts/2 00:00:00 bash000 S 500 1262 1251 0 75 0 - 714 wait4 pts/1 00:00:00 bash000 S 500 1313 1262 0 75 0 - 2762 schedu pts/1 00:00:00 emacs000 S 500 1362 1262 2 80 0 - 789 schedu pts/1 00:00:00 oclook000 R 500 1363 1262 0 81 0 - 782 - pts/1 00:00:00 psКак видно из списка, программа
oclocknice$ <b>nice oclock &</b>то получила бы значение
nice$ <b>renice 10 1362</b>1362: old priority 0, new priority 10программа
oclockps$ ps -lF S UID PID PPID С PRI NI ADDR SZ WCHAN TTY TIME CMD000 S 500 1259 1254 0 75 0 - 710 wait4 pts/2 00:00:00 bash000 S 500 1262 1251 0 75 0 - 714 wait4 pts/1 00:00:00 bash000 S 500 1313 1262 0 75 0 - 2762 schedu pts/1 00:00:00 emacs000 S 500 1362 1262 0 90 10 - 789 schedu pts/1 00:00:00 oclock000 R 500 1365 1262 0 81 0 - 782 - pts/1 00:00:00 psСтолбец состояния теперь также содержит
Nnice$ <b>ps х</b>PID TTY STAT TIME COMMAND1362 pts/1 SN 0:00 oclock
