RSS    

   Реферат: Администрирование локальных сетей

$fpa_reg                                                Address register for fpa sequences.   (S300 only)

LOCATIONS

line                                                          source line & code address (if any)

#label                                     "

file[:line]                                "

[file:]proc[:proc[...]][:line|#label]      "

[class]::proc[:line|#label]                    "

proc#line                                               code address (if any)

[class]::proc#line                                 "

name@shared_lib                               Address of name in shared library

FORMATS

          A format has the form [count]formchar[size].  formchar's are:

 a                                                             String at address.

(b | B)                                                     Byte in decimal (either way).

(c | C)                                                     (Wide) character.

(d | D)                                                     (Long) decimal.

(e | E)                                                      E floating point notation (as double).

(f | F)                                                      F floating point notation (as double).

(g | G)                                                     G floating point notation (as double).

 i                                                              Machine instruction (disassembly).

(k | K)                                                     Formatted structure display (with base classes).

 n                                                             "Normal" format, based on type.

(o | O)                                                     (Long) octal.

 p                                                             Print name of procedure containing address.

(r | R)                                                      Print template of object (with base classes).

 s                                                             String from pointer.

 S                                                             Formatted structure display.

(t | T)                                                      Print type of object (with base classes).

(u | U)                                                     (Long) unsigned decimal.

(w | W)                                                   Wide character string (at address).

(x | X)                                                     (Long) hexadecimal.

(z | Z)                                                      (Long) binary.

          Size can be a number or one of the following:

 b                             1 byte (char)

 s                             2 bytes (short)

 l                              4 bytes (long)

 D                            8 bytes (double - floating point formats only)

 L                            16 bytes (long double - floating point only)

6.   Системные вызовы и взаимодействие с UNIX.

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

UNIX - многозадачная система (мультипрограммная). Это означает, что одновременно может быть запущено много процессов. Процессор выполняет их в режиме разделения времени - выделяя по очереди квант времени одному процессу, затем другому, третьему... В результате создается впечатление параллельного выполнения всех процессов (на многопроцессорных машинах параллельность истинная). Процессам, ожидающим некоторого события, время процессора не выделяется. Более того, "спящий" процесс может быть временно откачан (т.е. скопирован из памяти машины) на диск, чтобы освободить память для других процессов. Когда "спящий" процесс дождется события, он будет "разбужен" системой, переведен в ранг "готовых к выполнению" и, если был откачан будет возвращен с диска в память (но, может быть, на другое место в памяти!). Эта процедура носит название "своппинг" (swapping).

Можно запустить несколько процессов, выполняющих программу из одного и того же файла; при этом все они будут (если только специально не было предусмотрено иначе) независимыми друг от друга. Так, у каждого пользователя, работающего в системе, имеется свой собственный процесс-интерпретатор команд (своя копия), выполняющий программу из файла /bin/csh (или /bin/sh).

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

a) Аргументов функции main:

       void main(int argc, char *argv[], char *envp[]);

Если мы наберем команду

       $ a.out a1 a2 a3

то функция main программы из файла a.out вызовется с

           argc    = 4  /* количество аргументов */

           argv[0] = "a.out"       argv[1] = "a1"

           argv[2] = "a2"          argv[3] = "a3"

           argv[4] = NULL

По соглашению argv[0] содержит имя выполняемого файла из которого загружена эта программа*.

b) Так называемого "окружения" (или "среды") char *envp[], продублированного также в предопределенной переменной

       extern char **environ;

Окружение состоит из строк вида

       "ИМЯПЕРЕМЕННОЙ=значение"

Массив этих строк завершается NULL (как и argv). Для получения значения переменной с именем ИМЯ существует стандартная функция

       char *getenv( char *ИМЯ );

Она выдает либо значение, либо NULL если переменной с таким именем нет.

c) Открытых файлов. По умолчанию (неявно) всегда открыты 3 канала:

                        ВВОД         В Ы В О Д

     FILE *             stdin     stdout   stderr

     соответствует fd     0         1        2

     связан с        клавиатурой     дисплеем

    #include <stdio.h>

    main(ac, av) char **av; {

      execl("/bin/sleep", "Take it easy", "1000", NULL);

    }

Эти каналы достаются процессу "в наследство" от запускающего процесса и связаны с дисплеем и клавиатурой, если только не были перенаправлены. Кроме того, программа может сама явно открывать файлы (при помощи open, creat, pipe, fopen). Всего программа может одновременно открыть до определенное количество  файлов в зависииости от настройки ядра.

d) Процесс имеет уникальный номер, который он может узнать вызовом

       int pid = getpid();

а также узнать номер "родителя" вызовом

       int ppid = getppid();

Процессы могут по этому номеру посылать друг другу сигналы:

       kill(pid /* кому */, sig /* номер сигнала */);

и реагировать на них

       signal (sig /*по сигналу*/, f /*вызывать f(sig)*/);

e) Существуют и другие средства коммуникации процессов: семафоры, сообщения, общая память, сетевые коммуникации.

f) Существуют некоторые другие параметры (контекст) процесса: например, его текущий каталог, который достается в наследство от процесса-"родителя", и может быть затем изменен системным вызовом

       chdir(char *имя_нового_каталога);

У каждого процесса есть свой собственный текущий рабочий каталог. К "прочим" характеристикам отнесем также: управляющий терминал; группу процессов (pgrp); идентификатор (номер) владельца процесса (uid), идентификатор группы владельца (gid), реакции и маски, заданные на различные сигналы; и.т.п.

g) Издания других запросов (системных вызовов) к операционной системе ("богу") для выполнения различных "внешних" операций.

h) Все остальные действия происходят внутри процесса и никак не влияют на другие процессы и устройства ("миры"). В частности, один процесс НИКАК не может получить доступ к памяти другого процесса, если тот не позволил ему это явно (механизм shared memory); адресные пространства процессов независимы и изолированы (равно и пространство ядра изолировано от памяти процессов).

Операционная система выступает в качестве коммуникационной среды, связывающей "миры"-процессы, "миры"-внешние устройства (включая терминал пользователя); а также в качестве распорядителя ресурсов "Вселенной", в частности - времени (по очереди выделяемого активным процессам) и пространства (в памяти компьютера и на дисках).

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

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

Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51


Новости


Быстрый поиск

Группа вКонтакте: новости

Пока нет

Новости в Twitter и Facebook

                   

Новости

© 2010.