Администрирование локальных сетей
| Категория реферата: Рефераты по информатике, программированию
| Теги реферата: реферат по культурологии, доклад по биологии
| Добавил(а) на сайт: Tolkachjov.
Предыдущая страница реферата | 8 9 10 11 12 13 14 15 16 17 18 | Следующая страница реферата
|Операци|Описание |
|я | |
|> |Больше |
|< |Меньше |
|>= |Больше или равно |
|> |Правый битовый сдвиг |
| file Append commands to file.
>@ file Record-all debugger commands &
output to file.
>>@ file Append all debugger commands &
output to file.
">>" is equivalent to ">" for the next four commands.
> Show status of current recording
file.
>@ Show status of current record-all
file.
>(t | f | c) Turn recording on (t), or off (f), or close the recording file (c).
>@(t | f | c) Turn record-all on (t), or off (f), or close the record-all file (c).
Misc: ss file Save (breakpoint, macro, assertion) state. tc Toggle case sensitivity in searches.
Repeat previous command.
~ Repeat previous command.
! [command-line] Execute shell (with or without
commands).
q Quit debugger.
$addr Unary operator, address of object.
$sizeof Unary operator, size of object.
$in Unary boolean operator, execution
in procedure.
# [text] A comment.
I Print debugger status.
M [(t | c) [expr [; expr ...]]] Print or set (text or core) maps.
tM Toggle between default and
modifiable core maps.
VARIABLES
var Search current procedure
and globals.
class::var Search class for variable.
[[class]::]proc:[class::]var Search procedure for variable.
[[class]::]proc:depth:[class::]var Search procedure at depth on stack.
:var or ::var Search for global variable
only.
. Shorthand for last thing you
looked at.
$var Define or use special
variable.
$result Return value of last cmd line
procedure call.
$signal Current child process signal
number.
$lang Current language for expression
evaluation.
$depth Default stack depth for local
variables.
$print Display mode for character data.
$line Current source line number.
$malloc Debugger memory allocation (bytes).
$step Instr. count in non-debug before
free-run.
$cplusplus C++ feature control flags.
$regname Hardware registers.
$fpa Treat fpa sequence as one
instruction.(S300 only)
$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)
Системные вызовы и взаимодействие с 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 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); адресные пространства процессов
независимы и изолированы (равно и пространство ядра изолировано от памяти
процессов).
Операционная система выступает в качестве коммуникационной среды, связывающей "миры"-процессы, "миры"-внешние устройства (включая терминал
пользователя); а также в качестве распорядителя ресурсов "Вселенной", в
частности - времени (по очереди выделяемого активным процессам) и
пространства (в памяти компьютера и на дисках).
Уже неоднократно упоминали "системные вызовы". Что же это такое? С точки
зрения Си-программиста - это обычные функции. В них передают аргументы, они
возвращают значения. Внешне они ничем не отличаются от написанных нами или
библиотечных функций и вызываются из программ одинаковым с ними способом.
С точки же зрения реализации - есть глубокое различие. Тело функции-
сисвызова расположено не в нашей программе, а в резидентной (т.е. постоянно
находящейся в памяти компьютера) управляющей программе, называемой ядром
операционной системы*.
Поведение всех программ в системе вытекает из поведения системных вызовов, которыми они пользуются. Даже то, что UNIX является многозадачной системой, непосредственно вытекает из наличия системных вызовов fork, exec, wait и
спецификации их функционирования! То же можно сказать про язык Си -
мобильность программы зависит в основном от набора используемых в ней
библиотечных функций (и, в меньшей степени, от диалекта самого языка, который должен удовлетворять стандарту на язык Си). Если две разные системы
предоставляют все эти функции (которые могут быть по-разному реализованы, но должны делать одно и то же), то программа будет компилироваться и
работать в обоих системах, более того, работать в них одинаково.
Сам термин "системный вызов" как раз означает "вызов системы для выполнения
действия", т.е. вызов функции в ядре системы. Ядро работает в
привелегированном режиме, в котором имеет доступ к некоторым системным
таблицам*, регистрам и портам внешних устройств и диспетчера памяти, к
которым обычным программам доступ аппаратно запрещен (в отличие от MS DOS, где все таблицы ядра доступны пользовательским программам, что создает
раздолье для вирусов). Системный вызов происходит в 2 этапа: сначала в
пользовательской программе вызывается библиотечная функция-"корешок", тело
которой написано на ассемблере и содержит команду генерации программного
прерывания. Это - главное отличие от нормальных Си-функций - вызов по
прерыванию. Вторым этапом является реакция ядра на прерывание:
1. переход в привелегированный режим;
2. разбирательство, КТО обратился к ядру, и подключение u-area этого процесса к адресному пространству ядра (context switching);
3. извлечение аргументов из памяти запросившего процесса;
4. выяснение, ЧТО же хотят от ядра (один из аргументов, невидимый нам - это номер системного вызова);
5. проверка корректности остальных аргументов;
6. проверка прав процесса на допустимость выполнения такого запроса;
Рекомендуем скачать другие рефераты по теме: бесплатные тесты бесплатно, рефераты по медицине.
Категории:
Предыдущая страница реферата | 8 9 10 11 12 13 14 15 16 17 18 | Следующая страница реферата