Лекции по Операционным Системам. Ввиде html

Вид материалаЛекции
И еще один пример. Фрагмент командного файла
Стандартные переменные
Условия проверки файлов
Условия проверки строк
Условия сравнения целых чисел
Сложные условия
Физический уровень
Сетевой уровень
Транспортный уровень
Уровень представления
Прикладной уровень
Схема взаимодействия между Интернет протоколами
Internet информация
Программа копирования файлов.
Программа, которая вызывает программу копирования.
Структура файловой системы
Подобный материал:
1   2   3   4   5

выдадут на экран

ОС UNIX

var_2

И еще один пример. Фрагмент командного файла:

echo "var_2 = $var_2"

выдаст на экран

var_2 = ОС UNIX

В команде 'echo' первое использование 'var_2' - это просто текст, а второе ('$var_2') - это значение соответствующей переменной.

То что здесь присутствуют пробелы между именем переменной и символом присваивания, а также между символом присваивания и значением, так это потому, что здесь мы имеем дело лишь с текстом, куда подставлены значения переменных. Там, где действительно выполняется присваивание, пробелы в этих местах НЕДОПУСТИМЫ. Присваивание, скажем, w= означает присваивание переменной 'w' пустой строки. Но и пустую строку лучше присваивать аккуратно,

например w=''.

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

Пусть a=/mnt/lab/asu/

тогда

cat /mnt/lab/asu/prim и

cat ${a}prim

равноценны (т.е. "cat" выдаст на экран содержимое одного и того же файла).

Если также предположить, что в системе есть переменная 'prim' и

'prim=dir' , то команда

echo ${a}$prim

выдаст на экран

/mnt/lab/asu/dir

Стандартные переменные

Кроме пользовательских переменных существуют переменные, задаваемые самим shell'ом.

? значение, возвращенное последней командой;

$ номер процесса;

! номер фонового процесса;

# число позиционных параметров, передаваемых в shell;

* перечень параметров, как одна строка;

@ перечень параметров, как совокупность слов;

- флаги, передаваемые в shell.

b. окружения

Каждый процесс имеет среду, в которой он выполняется. shell использует ряд переменных этой среды. Если вы наберете команду 'set' без параметров, то на экран будет выдана информация о ряде стандартных переменных, созданных при входе в систему (и передаваемых далее всем вашим новым процессам "по наследству"), а также переменных, созданных и экспортируемых вашими процессами.

Конкретный вид и содержание выдаваемой информации в немалой степени зависит от того, какая версия UNIX используется и как инсталлирована система.

Пример выхода команды 'set':

HOME=/home/sae

PATH=/usr/local/bin:/usr/bin:/bin:.:/usr/bin/X11:

IFS=

LOGNAME=sae

MAIL=/var/spool/mail/sae

PWD=/home/sae/STUDY/SHELL

PS1=prompter >

PS2=>

SHELL=/bin/bash

TERM=linux

TERMCAP=console|con80x25|dumb|linux:li#25:co#80::

UID=501

perem=stroka

x=5

HOME=/home/sae - это имя домашнего директория, в котором пользователь (в данном случае я) оказывается после входа в систему. То есть, правильно набрав имя и пароль, я окажусь в директории "/home/sae".

PATH=/bin:/usr/bin:.:/usr/local/bin:/usr/bin/X11 - эта переменная задает последоватьельность файлов (ТРОПУ), которые просматривает "shell" в поисках команды. Имена файлов разделяются здесь двоеточиями. Последовательность просмотра соответствует очередности следования имен в тропе.

IFS= - (Внутренний Разделитель Полей) перечисляет символы, которые служат для разделения слов (полей). Таковыми являются "пробел", "табуляция" и "перевод строки", поэтому здесь слева от присваивания ничего не видно и занято две строки.

LOGNAME=sae - имя входа ("имя" пользователя).

MAIL=/var/spool/mail/sae - имя файла, в который поступает

(электронная) почта.

PWD=/home/sae/STUDY/SHELL - имя текущего директория

PS1=prompter > - вид промтера.

PS2=> - этот промтер (эдесь '>') используется как приглашение к продолжению ввода (в очередной строке) незаконченной команды. Например, наберите открывающую скобку '(' и после нажатия в следующей строке вы увидите этот промптер.

Если пока не знаете, что дальше делать, наберите закрывающую скобку ')' - и он исчезнет.

SHELL=/bin/bash - эта переменная указывает оболочку, которую использует пользователь. В данном случае используется не(стандартный) shell ('sh'), а 'продвинутая' версия - 'bash', написанная тем же автором (Bourne-Again SHell).

TERM=linux - указание типа терминала.

perem=stroka x=5 - переменные, которые ввел пользователь.

7. Командные файлы

В интерпретаторе shell существует два режима работы: выполнение команд из командной строки, после нажатия ENTER (как мы рассматривали ранее), и последовательное выполнение всех команд из файла.

В начале этот файла должен быть указан транслятор. В нашем случае это

- sh, находящийся в директории /bin

#!/bin/sh

Далее следует сама программа.

Для того чтобы файл мог выполняться, ему надо сменить тип доступа.

chmod 755 prog

где 755 - тип доступа, prog - имя файла.

prog

./prog

prog f1 5 k

echo $2

5

echo $*

f1 5 k

echo $#

3

shift — сдвигает аргумент, в этом случае, обращаясь к $1, можно организовать цикл.

echo $1

shift

echo $1

shift

echo $1

В результате выдадутся все аргументы.

Параметры

В командный файл могут быть переданы параметры. В shell используются позиционные параметры (т.е. существенна очередность их следования). В командном файле соответствующие параметрам переменные (аналогично shell-переменным) начинаются с символа '$', а далее следует одна из цифр от 0 до 9:

Пусть расчет 'pr1' вызывается с параметрами 'cock' и 'tail'. Эти параметры попадают в новую среду под стандартными именами '1' и '2'. В (стандартной) переменной с именем '0' будет храниться имя вызванного расчета.

При обращении к параметрам перед цифрой ставится символ доллара '$' (как и при обращении к переменным):

$0 соответствует имени данного командного файла;

$1 первый по порядку параметр;

$2 второй параметр и т.д.

Пусть командный файл с именем 'pr1' имеет вид

echo Это расчет $0:

sort $2 >> $1

cat $1

а файлы 'cock' и 'tail' содержат соответсвенно

cock:

Это отсортированный файл:


tail:

1

3

2

Тогда после вызова команды

examp-1 cock tail

на экране будет

Это расчет examp-1:

Это отсортированный файл:

1

2

3

Поскольку число переменных, в которые могут передаваться параметры, ограничено одной цифрой, т.е. 9-ю ('0', как уже отмечалось имеет особый смысл), то для передачи большего числа параметров используется специальная команда 'shift'.

После ее исполнения все параметры (кроме нолевого) 'сдвигаются', т.е. то, что было $2 станет $1, то что было $3 станет $2, и т.д.

Функции

nazv()

{тело}

nazv f1,f2 в ней аргументы обрабатываются через $1,$2 и т.д.

Немедленный выход осуществляется следующим образом :

exit 0(0 — это нормальный код возврата.)

8. Команда TEST

Команда 'test' проверяет выполнение некоторого условия. С использованием этой (встроенной) команды формируются операторы условия (if) и цикла (while, until) языка shell.

Два возможных формата команды:

test условие или [ условие ]

Мы будем пользоваться вторым вариантом, т.е. вместо того, чтобы писать перед условием слово 'test', будем заключать условие в скобки, что более привычно для программистов.

На самом деле shell будет распознавать эту команду по открывающей скобке '[', как слову(!), соответсвующему команде 'test'. Уже этого достаточно, чтобы предупредить о распространенной ошибке начинающих: Между скобками и содержащимся в них условием обязательно должны быть пробелы.

Пробелы должны быть и между значениями и символом сравнения или операции (как, кстати, и в команде 'expr'). Не путать с противоположным требованием для присваивания значений переменным. В shell используются условия различных 'типов'.

УСЛОВИЯ ПРОВЕРКИ ФАЙЛОВ:

-f имя файла

Существует ли этот файл ?

d имя файла

Является ли каталогом ?

-с имя файла

Специальный файл

-r имя файла

Файл доступен на чтение

-w имя файла

Файл доступен на запись

-s имя файла

Файл не пустой

Примеры.

Вводя с клавиатуры командные строки в первом случае получим

подтверждение (код завершения '0'), а во втором - опровержение

(код завершения '1'). 'specific' - имя существующего файла.

[ -f specific ] ; echo $?

0

[ -d specific ] ; echo $?

1

Если каталог /home не существует, то создать такой каталог :

[-d /home ] || mkdir /home

Если первая команда выполнена, то выполнять вторую :

[ -d /home ]&& cd /home

УСЛОВИЯ ПРОВЕРКИ СТРОК:

str1 = str2

строки 'str1' и 'str2' совпадают;

str1 != str2

строки 'str1' и 'str2' не совпадают;

-n str1

строка 'str1' существует (непустая);

-z str1

строка 'str1' не существует (пустая).


Примеры.

x="who is who"; [ "who is who" = "$x" ]; echo $?

0

Если строка непустая, то написать её :

[“$ST”] && echo “$ST”

Проверка строк, которые содержат целую часть :

while ( cnt = read (…))

[ “$i”!= “5” ]

УСЛОВИЯ СРАВНЕНИЯ ЦЕЛЫХ ЧИСЕЛ:

x -eq y x равно y,

x -ne y x неравно y,

x -gt y x больше y,

x -ge y x больше или равно y,

x -lt y x меньше y,

x -le y x меньше или равно y.

То есть в данном случае команда 'test' воспринимает строки символов как целые (!) числа. Поэтому во всех остальных случаях 'нулевому' значению соответствует пустая строка. В данном же случае, если надо обнулить переменную, скажем, 'x', то это достигается присваиванием 'x=0'.

x=321 ; [ 321 -eq $x ] ; echo $?

0

x=321 ; [ 123 -lt $x ] ; echo $?

0

СЛОЖНЫЕ УСЛОВИЯ

Реализуются с помощью типовых логических операций:

! (not) инвертирует значение кода завершения

[ ! Усл ]

-o (or) соответсвует логическому "ИЛИ"

[ усл1 –о усл2 ]

-a (and) соответсвует логическому "И"

[ усл1 –а усл2 ]

ПРЕДУПРЕЖДЕНИЕ. Не забывайте о пробелах.

Примеры.

[ ! 3 = 3 ] ; echo $?

1

x=privet;export x; [ "$x" = "privet" -a -f specific ] ; echo $?

0

9. IF

В общем случае оператор 'if' имеет структуру

if условие

then список

[elif условие

then список]

[else список]

fi

Здесь 'elif' сокращенный вариант от 'else if' может быть использован наряду с полным, т.е. допускается вложение произвольного числа операторов 'if' (как и других опрераторов).

Разумеется 'список' в каждом случае должен быть осмысленный и допустимый в данном контексте, а 'условие' - команда или набор команд, возвращающих '0' в случае удачного завершенния (к примеру 'test').

Самая усеченная структура этого оператора

if условие

then список

fi

если выполнено условие (как правило это, когда получен код завершения '0'), то выполняется 'список', иначе он пропускается. Обратите внимание, что структура обязательно завершается служебным словом 'fi'. Число 'fi', естественно, всегда должно соответсвовать числу 'if'.

Примеры.

if ["$Mark" = "5"]

then

echo "Молодец"

else

echo "Приходи ещё"

fi

10. CASE

Оператор выбора 'case' имеет структуру:

case строка in

шаблон1) список команд;;

шаблон2) список команд;;

...

esac

Здесь 'case' 'in' и 'esac' - служебные слова. 'Строка' (это может быть и один символ) сравнивается с 'шаблоном'. Затем выполняется 'список команд' выбранной строки. Непривычным будет служебное слово 'esac', но оно необходимо для завершения структуры.

Пример.

###

# case-1: Структура "case".

# Уже рассматривавшийся в связи со

# структурой "if" пример проще и

# нагляднее можно реализовать с

# помощью структуры "case".

echo -n " А какую оценку получил на экзамене?: "

read z

case $z in

5) echo Молодец ! ;;

4) echo Все равно молодец ! ;;

3) echo Все равно ! ;;

2) echo Все ! ;;

*) echo ! ;;

esac

Непривычно выглядят в конце строк выбора ';;', но написать здесь ';' было бы ошибкой. Для каждой альтернативы может быть выполнено несколько команд. Если эти команды будут записаны в одну строку, то символ ';' будет использоваться как разделитель команд.

Обычно последняя строка выбора имеет шаблон '*', что в структуре 'case' означает 'любое значение'. Эта строка выбирается, если не произошло совпадение значения переменной (здесь $z) ни с одним из ранее записанных шаблонов, ограниченных скобкой ')'.Значения

просматриваются в порядке записи.

###

# case-2: Справочник.

# Для различных фирм по имени выдается

# название холдинга, в который она входит

case $1 in

ONE|TWO|THREE) echo Холдинг: ZERO ;;

MMM|WWW) echo Холдинг: Not-Net ;;

Hi|Hello|Howdoing) echo Холдинг: Привет! ;;

*) echo Нет такой фирмы ;;

esac

При вызове "case-2 Hello" на экран будет выведено:

Холдинг: Привет!

А при вызове "case-2 HELLO" на экран будет выведено:

Нет такой фирмы

В шаблонах используются регулярные выражения :

a*

b?

[]

set –f —директива, используется для того, чтобы Shell не подставлял шаблоны ;

set –x —директива, для режима отладки.

Пример.

set –f

case "$MARK" in

5) echo "Отлично" ;;

4) echo "Хорошо" ;;

3) echo "Удовлетворительно" ;;

?) echo "Плохо" ;;

*) echo "Не оценка" ;;

esac

Шаблоны можно писать через "или". Например, могли написать

1|2) echo "плохо" ;;

11. FOR

Оператор цикла "for" имеет структуру:

for имя [in список значений]

do

список команд

done

где 'for' - служебное, слово определяющее тип цикла, 'do' и 'done' - служебные слова, выделяюшие тело цикла. Если фрагмент 'in список значений' отсутствует, то вместо списка значений используются параметры расчета ($1 $2 $3 ...)

Расчет сортировки трех файлов f1, f2, f3 будет выглядеть так:

for i in f1 f2 f3

do

sort $i > $i_sorted

done

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

for i in *.txt

do

sort $i > /tmp/sorted_file

mv /tmp/sorted_file $i

done

12. WHILE and UNTIL

a. WHILE

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

while условие

do

список команд

done

где 'while' - служебное слово определяющее тип цикла с истинным условием. Список команд в теле цикла (между 'do' и 'done') повторяется до тех пор, пока сохраняется истинность условия (т.е. код завершения последней команды в теле цикла равен '0') или цикл не будет прерван изнутри специальными командами ('break', 'continue' или 'exit'). При первом входе в цикл условие должно выполняться.

###

# print-50: Структура "while"

# Расчет позволяет напечатать 50

# экземпляров файла "file-22"

n=0

while [ $n -lt 50 ] # пока n < 50

do

n=`expr $n + 1`

cat file-22 > /dev/lp

done

Обратим внимание на то, что переменной 'n' вначале присваивается значение 0, а не пустая строка, так как команда 'expr' работает с shell-переменными как с целыми числами, а не как со строками.

n=`expr $n + 1`

т.е. при каждом выполнении значение 'n' увеличивается на 1.

b. UNTIL

Оператор цикла с ложным условием 'until' имеет структуру:

until условие

do

список команд

done

где 'until' - служебное слово определяющее тип цикла с ложным

условием. Список команд в теле цикла (между 'do' и 'done') повторяется

до тех пор, пока сохраняется ложность условия или цикл не будет

прерван изнутри специальными командами ('break', 'continue' или

'exit'). При первом входе в цикл условие не должно выполняться.

Отличие от оператора 'while' состоит в том, что условие цикла

проверяется на ложность (на ненулевой код завершения последней

команды тела цикла) проверяется ПОСЛЕ каждого (в том числе и

первого!) выполнения команд тела цикла.

Программистов, знакомых с операторами 'until' в других языках

может вначале сбивать такая семантика этого оператора.

Пример 'Ожидание полдня'.

until date | grep "12:00:"

do

sleep 30

done

Здесь каждые 30 секунд выполняется командная строка условия. Команда

'date' выдает текущую дату и время. Команда 'grep' получает эту

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

'12:00:' с временем, выдаваемым командой 'date'. При несовпадении

'grep' выдает код возврата '1', что соответствует значению 'ложь', и

цикл 'выполняет ожидание' в течение 30 секунд, после чего повторяется

выполнение условия. В полдень (возможно с несколькими секундами)

произойдет сравнение, условие станет истинным, 'grep' выдаст на

экран соответствующую строку и работа цикла закончится.

13. sed awk lex yacc make

a. SED

Потоковый редактор sed имеет формат:

sed [ -e script ] [ -f sfile ] [ files ]

Команда копирует файлы (по умолчанию со стандартного входа) на стандартный выход, редактирует их в соответствии со своими(!) командами, размещенными в строке 'script'. По флагу '-f' берет команды из файла 'sfile'. Если есть только опция '-e script, то флаг '-e' можно опустить. 'script' состоит из команд редактирования, по одной в строке, имеющих формат:

[ addr [ , addr ] ] cmd [ args ]

Адреса '[ addr [ , addr ] ]' - это либо номера строк, либо последняя строка (символ '$'), либо регулярные выражения (шаблоны). Для следующих (основных) функций (команд) максимальное число допустимых адресов указано в скобках.

(1)a\

text Добавляет text после указанной строки

(2)b label

Осуществляет переход к команде ("cmd") "label:cmd" Если

метка ("label") отсутствует, то переход на конец командного файла.

(2)c\

text Удаляет выбранные строки и заменяет их на "text'.

(2)d Удаляет найденные строки

(1)i\

text Вставляет "text" на место выбранной строки.

(сравните с "a\")

(1)q Выходит из "sed".

(2)r rfile

Читает файл "rfile" и выдает на выход.

(2)s/reg_expr/rpl/flags

Заменяет регулярное выражение "reg_expr" на "rpl" с учетом

флагов "flags":

g - глобально (по всей строке)

p - выводить замены

w wfile - сохранять заменяемое в "wfile".

(2)y/str1/str2/

Заменяет все вхождения символов "str1" соответствующими символами

"str2". Длины строк должны быть одинаковыми.

(2)! cmd Команда(ы) "cmd" применяются к невыбранным строкам.

(1)= Выдает номера строк.

(2){ } Скобки группируют команды.

b. awk (Aho, Weinberg, Kernigan)

awk - команда контекстного поиска и преобразования текста. Она - фильтр. Ее можно рассматривать как оболочку 'awk' в оболочке 'shell'. Программа состоит из операторов (правил), имеющих вид:

шаблон {действие}

шаблон {действие}

\&. . .

Частные случаи:

{действие}

когда действие выполняется для всех строк.

шаблон

когда выводятся строки с данным шаблоном.

Действие может состоять из последовательности операторов, разделяемой

";" или переводом строки или закрывающей скобкой.

Возможны комментарии (как в shell "#.........").

c. LEX

lex - lexical analyzer generator

Lex - команда Unix. Предназначена для ганерации программы на Си,

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

Структура программы на lex:

раздел деклараций

%%

раздел правил

%%

пользовательский код

Раздел деклараций состоит из строк:

имя значение

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

шаблон действие

Шаблоны это:

x символ 'x'

. любой символ кроме перевода строки

[abj-oZ]

любой из 'a','b','Z' и диапозона от 'j' до 'o'

r* любое количество выражений 'r'

r+ одно или более выражений 'r'

r|s

или 'r', или 's'

(r|s)*

любое количество выражений 'r' или 's'

<>

конец файла

d. YACC

yacc - Yet Another Compilator of Compilators. Предназначен для генерации программы на Си, которая бы проводила синтаксический разбор входной информации. Имеет следующую структуру:

%{ Вставка на Си %}

Раздел деклараций

%%

Раздел правил

%%

Пользовательский код

Раздел деклараций состоит из определений следующего вида:

%token лексемы

Раздел правил выглядит так:

нетерминал: цепочка символов { код на Си }

| цепочка символов { код на Си }

Пользовательский код должен содержать функцию 'yyerror' на Си, которая содержит обработку ошибок. И, если не подключается lex, то функцию yylex, которая должна осуществлять лексический анализ.

e. MAKE

Утилита 'make' предназначена для автоматического определения частей большой программы, которые необходимо перекомпилировать.

Обычно инструкция для работы make содержится в файле с именем 'Makefile'. И для компиляции программы, к которой она прилагается надо написать просто: make

В начале инициализируются переменные, потом выполняются действия. Действия выполняются в зависимости от метки, которая задается аргументом к команде 'make':
  •    make all
  •    make install

Если метка не задана, то выполняется первая встреченная в Makefile.

make all

Сначала выполнятся все присваивания (они выполнялись и в первом случае), затем произойдет переход на заданную метку (all).

После этой метки стоит пересылка на следующую метку - deform. Для компиляции программы необходимы два объектных файла - util.o и deform.o по меткам с соответствующими названиями содержаться инструкции - как их получить. Когда они готовы из них собирается команда deform.

Если мы повторно напишем 'make all', то получим сообщение:

make: Nothing to be done for `all'.

Это означает, что все уже готово и делать больше нечего, но если мы изменим какой-нибудь из файлов с исходниками, то он (и только он) откомпилируется и программа 'deform' соберется по новой.

Метка 'install' предназначена для переноса готовой программы в директорию с другими пользовательскими командами, а 'clean' - для того, чтобы в директории остался только исходный текст. Весь остальной 'мусор' удаляется.

14. X-Window System

Имеем две независимых программы. Одна умеет рисовать на графическом мониторе, и вообще, обслуживать все это железо. Она называется X-сервер. Вторая программа - называем ее клиент X Window, рисовать физически не умеет. Зато она знает, что именно надо рисовать, и умеет командовать. Команды типа: 'нарисовать прямоугольник', 'провести линию', 'открыть окно', 'вывести символ в заданном фонте', 'опросить координаты мыши', и т.п. передаются X-серверу, а тот их исполняет - рисует. Формат и спецификации этих команд опубликованы, стандартизованы, и широко известны. Все вместе они называются 'Протокол X Windows'.

X-сервер. Программа, которая написана специально под конкретное физическое устройство (имеется в виду - монитор, графконтроллер, мышь клавиатура), умеет на нем рисовать, и умеет понимать команды рисования по протоколу X Windows System.

X-клиент. Прикладная программа, обеспечивающая графический интерфейс с пользователем. Команды для рисования на экране передает X серверу по протоколу X Window System.

X-терминал. Монитор, графконтроллер, мышь, клавиатура, ну и, естественно, процессор и оперативная память, на которых запущена программа X-сервер. X-терминалом может служить самая обыкновенная графическая Unix-рабочая станция, на которой X-сервер выполняется, как одна из многих прикладных задач. Специализированный X-terminal - компьютер, на котором запускается только X-сервер, и ничего кроме. Можно использовать PC под MS-DOSом или MS-Windows, на котором запущена DOSовская программа, реализующая X сервер.

Xlib - библиотека C-ишных функций, реализующих протокол X Windows

System. С помощью этой библиотеки можно писать графические программы - X-клиенты.

Мы получаем универсальный GAPI - (Graphical Application Programming Interface) - средство программирования графических приложений. Пользовательские графические программы при этом полностью отвязаны от железа, от конкретного графконтроллера. О железе пусть беспокоится X-сервер.

Протокол X Window умеет 'ездить' по сети: например по TCP/IP, или по DEC-net. Поэтому X-сервер может крутиться на одной машине, а X-клиент - на другой. То есть, картинка рисуется на одной машине, а программа, которая ее обеспечивает - крутится на другой. X-сервер способен обслуживать сразу много клиентов, причем всех - одновременно. На нашем графическом экране может быть открыто сразу много окон - каждое окно порождается его собственным X-клиентом. Клиенты эти могут быть запущены и на нашей машине (к которой подключена графическая подсистема), и на удаленных машинах, соединенных с нами по сети. X Window очень любит ресурсы - память, процессор, диск. Способен съесть их в неограниченных количествах. А еще ведь надо программировать. (К счастью, не всем на- до). Кто видел, как выглядят программы для MS Windows или Mac, может представить себе внешний вид исходных текстов X-овой программы.

15. Internet протоколы

В модели взаимодействия открытых систем (Open Systems Interconnection- OSI) и разработанной Международной Организацией по Стандартам (International Organization for Standardization - ISO), средства сетевого взаимодействия делятся на семь уровней, для которых определены стандартные названия и функции:

Физический уровень

Выполняет передачу битов по физическим каналам, таким, как коаксиальный кабель, витая пара или оптоволоконный кабель

Канальный уровень

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

Сетевой уровень

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

Транспортный уровень

Обеспечивает передачу данных между любыми узлами сети с требуемым уровнем надежности.

Сеансовый уровень

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

Уровень представления

Уровень представления имеет дело с внешним представлением данных. На этом уровне могут выполняться различные виды преобразования данных, такие как компрессия и декомпрессия, шифровка и дешифровка данных.

Прикладной уровень

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

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

Прикладной FTP TELNET SMTP HTTP DNS служба времени Echo

уровень |_____|_____|____| |________|__________|

| |

Транспортный TCP GGP HMP EGP UDP

уровень |____|____|____|____|

|

Межсетевой IP

уровень _________________|_____________

| | | |

Сетевой Локальные ARPANET PPP Пакетная

уровень сети радиосвязь

Локальная сеть чаще всего организуется с помощью Ethernet.

Хорошей аналогией взаимодействиям в среде Ethernet может служить разговор группы вежливых людей в небольшой темной комнате

PPP - обеспечивает модемное соединение до Internet-провайдера.

Межсетевой протокол IP является базовым элементом технологии internet, а центральной частью IP является его таблица маршрутов. Протокол IP использует эту таблицу при принятии всех решений о маршрутизации IP-пакетов. Менеджер сети присваивает IP-адреса машинам в соответствии с тем, к каким IP-сетям они подключены. Старшие биты 4-х байтного IP-адреса определяют номер IP-сети. Оставшаяся часть IP-адреса - номер узла (хостномер). Для машины из табл.1 с IP-адресом 223.1.2.1 сетевой номер равен 223.1.2, а хост-номер - 1.

Протокол UDP (User Datagram Protocol) проектировался для создания в объединенной системе компьютерных сетей с коммутацией пакетов. Протокол UDP предполагает, что нижестоящим протоколом является IP. Данный протокол предоставляет прикладной программе процедуру для посылки сообщений другим программам, причем механизм протокола минимален. Протокол UDP ориентирован на транзакции, получение датаграмм и защита от дублирования не гарантированы.

Протокол управления передачей (TCP) предназначен для использования в качестве надежного протокола общения между хост-компьютерами в коммуникационных компьютерных сетях с коммутацией пакетов, а также в системах, объединяющих такие сети. DNS (Domain Name System) - это распределенная база данных, поддерживающая иерархическую систему имен для идентификации узлов в сети Internet. Служба DNS предназначена для автоматического поиска IP-адреса по известному символьному имени узла.

Протокол DNS является служебным протоколом прикладного уровня. Этот протокол несимметричен - в нем определены DNS-серверы и DNS-клиенты. DNS-серверы хранят часть распределенной базы данных о соответствии символьных имен и IP-адресов. Эта база данных распределена по административным доменам сети Internet. Клиенты сервера DNS знают IP-адрес сервера DNS своего административного домена и по протоколу IP передают запрос, в котором сообщают известное символьное имя и просят вернуть соответствующий ему IP-адрес. Если данные о запрошенном соответствии хранятся в базе данного DNS-сервера, то он сразу посылает ответ клиенту, если же нет - то он посылает запрос DNS-серверу другого домена, который может сам обработать запрос, либо передать его другому DNS-серверу. Все DNS-серверы соединены иерархически, в соответствии с иерархией доменов сети Internet. База данных DNS имеет структуру дерева, называемого доменным пространством имен, в котором каждый домен (узел дерева) имеет имя и может содержать поддомены. Имя домена идентифицирует его положение в этой базе данных по отношению к родительскому домену, причем точки в имени отделяют части, соответствующие узлам домена.Корень базы данных DNS управляется центром Internet Network Information Center. Имена этих доменов должны следовать международному стандарту ISO 3166. Для обозначения стран используются трехбуквенные и двухбуквенные аббревиатуры, а для различных типов организаций используются следующие аббревиатуры:

com коммерческие организации (например, microsoft.com);

edu образовательные (например, mit.edu);

gov правительственные организации (например, nsf.gov);

org некоммерческие организации (например, fidonet.org);

net организации, поддерживающие сети (например, nsf.net).

Internet информация

Рассмотрим самые популярные протоколы Internet. Они поддерживаются стандартом.

- Удаленный доступ ('telnet')

- Передача файлов ('ftp')

- Электронная почта ('smtp')

- Доски объявлений ('nntp')

- Поиск данных и программ ('archie')

- Oболочка 'Gopher'

- Поиск данных по ключевым словам ('WAIS')

- Глобальные гипертекстовые структуры ('http')

Telnet - удаленный доступ - работа на удаленном компьютере в режиме, когда ваш компьютер эмулирует терминал удаленного компьютера, т.е. вы можете делать все то же (или почти все), что можно делать с обычного терминала той машины.

ftp - File Transfer Protocol - протокол передачи файлов

- протокол, определяющий правила передачи файлов с одного компьютера на другой.

Для работы с 'ftp' нужно иметь доступ на ту удаленную машину, с которой вы хотите перекачать себе файлы, т.е. иметь входное имя и знать соответствующий пароль.

Имеет место подвид 'ftp', так называемое 'анонимное ftp'. Работа электронная почты 'e-mail' происходит в основном по протоколу 'smtp'

Доски объявлений ('USENET news'), работающие по протоколу nntp, -это так называемые сетевые новости или дискуссионные клубы.

Archie - cистема поиска и выдачи информации о расположении общедоступных файлов по 'анонимному ftp'. Система, поддерживающая этот вид услуг, регулярно собирает со своих подопечных (анонимных ftp-серверов) информацию о содержащихся там файлах: списки файлов по директориям, списки директорий, а также файлы с кратким описанием того, что есть что.

Gopher - это интегратор возможностей Internet. Он в удобной форме позволяет пользоваться всеми услугами, предоставляемыми Internet. Организована оболочка в виде множества вложенных на разную глубину меню, так что вам остается только выбирать нужный пункт и нажимать ввод.

WAIS - диалоговая система с оконным интерфейсом для поиска данных по ключевым словам в контексте. Сугубо интерактивна, поэтому доступ к ней возможен только в 'on-line'.

World Wide Web - 'Всемирная паутина' (Короче: WWW, Web, W3) работает по протоколу http (Hipertext Transfer Protocol). Гипертекст - текст со вставленными в него словами (командами) разметки, ссылающимися на другие места этого текста, другие документы, картинки и т.

В Internet в контексте WWW можно получать доступ к чему угодно, к telnet, e-mail, ftp, Gopher, WAIS, Archie, USENET News и т.п. В WWW можно ссылаться на данные на других машинах в любом месте сети, тогда при активации этой ссылки эти данные автоматически передадутся на исходную машину и вы увидите на экране текст, данные, картинку, а если провести в жизнь идею мультимедиа, то и звук услышите, музыку, речь.

16. Архитектура UNIX.



На Рисунке изображена архитектура верхнего уровня системы UNIX.

Технические средства, показанные в центре диаграммы, выполняют

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

Программы, подобные командному процессору shell и редакторам (ed и vi) и показанные на внешнем по отношению к ядру слое, взаимодействуют с ядром при помощи хорошо определенного набора обращений к операционной системе. Обращения к операционной системе понуждают ядро к выполнению различных операций, которых требует вызывающая программа, и обеспечивают обмен данными между ядром и программой.

Некоторые из программ, приведенных на рисунке, в стандартных конфигурациях системы известны как команды, однако на одном уровне с ними могут располагаться и доступные пользователю программы, такие как программа a.out, стандартное имя для исполняемого файла, созданного компилятором с языка Си. Другие прикладные программы располагаются выше указанных программ, на верхнем уровне, как это показано на рисунке. Например, стандартный компилятор с языка Си ('cc') располагается на самом внешнем слое: он вызывает препроцессор для Си, ассемблер и загрузчик (компоновщик), т.е. отдельные

программы предыдущего уровня.

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

Многие прикладные подсистемы и программы, составляющие верхний

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

Программа копирования файлов.

char buffer [2048];

main (argc, argv)

int argc;

char *argv [];

{

int fdold, fdnew;

fdold = open (argv [1], O_RDONLY);

fdnew = create (argv [2], 0666);

copy (fdold, fdnew);

exit (0);

}

copy (old, new);

int old, new;

{

int count;

while (count = read(old, buffer, sizeof(buffer)))

write(new, buffer, count);

}

Программа, которая вызывает программу копирования.

main (argc, argv);

char *argv [];

{

if (fork() == 0)

execl (‘dubl’, ‘dubl’, argv [1], argv [2]);

else

{

wait (NULL),

printf (‘Скопировали’);

}

}

17. Ядро

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

Функции ядра :

  1. 1.   управление и выполнение процессов
  2. 2.   планирование очерёдности, предоставление времени ЦП
  3. 3.   выделение оперативной памяти процессу
  4. 4.   работа с внешней памятью
  5. 5.   управление доступом к периферии

Режимы работы процесса

  1. 1.   режим задач (пользовательский уровень)
  2. 2.   режим ядра (уровень ядра)

В режиме задач процессы имеют доступ только к своим инструкциям и данным. А в режиме ядра доступ к адресному пространству ядра и к другим пользователям (процессам).

 


-     система управления памятью

- управляет и размещает доступ

- поиск данных для пользователя

-    подсистема управления процесса

-синхронизация

-взаимодействие

-распределение памяти

-планирование

-выполнение

Прерывания

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

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

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

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

Виртуализация

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

Структура файловой системы

Программы, выполняемые под управлением системы UNIX, не содержат никакой информации относительно внутреннего формата, в котором ядро хранит файлы данных, данные в программах представляются как бесформатный поток байтов. Программы могут интерпретировать поток байтов по своему желанию, при этом любая интерпретация никак не будет связана с фактическим способом хранения данных в операционной системе. Так, синтаксические правила, определяющие задание метода доступа к данным в файле, устанавливаются системой и являются едиными для всех программ, однако семантика данных определяется конкретной программой. Например, программа форматирования текста troff ищет в конце каждой строки текста символы перехода на новую строку, а программа учета системных ресурсов acctcom работает с записями фиксированной длины. Обе программы пользуются одними и теми же системными средствами для осуществления доступа к данным в файле как к потоку байтов, и внутри себя преобразуют этот поток по соответствующему формату. Если любая из программ обнаружит, что формат данных неверен, она принимает соответствующие меры.

Каталоги похожи на обычные файлы в одном отношении; система представляет информацию в каталоге набором байтов, но эта информация включает в себя имена файлов в каталоге в объявленном формате для того, чтобы операционная система и программы, такие как ls (выводит список имен и атрибутов файлов), могли их обнаружить. Права доступа к файлу регулируются установкой специальных битов разрешения доступа, связанных с файлом. Устанавливая биты разрешения доступа, можно независимо управлять выдачей разрешений на чтение, запись и выполнение для трех категорий пользователей: владельца файла, группового пользователя и прочих. Пользователи могут создавать файлы, если разрешен доступ к каталогу. Вновь созданные файлы становятся листьями в древовидной структуре файловой системы.

18. Подсистема управления файлами.

Внутренняя структура файла описывается в inode. Каждый inode описывает один файл. У каждого файла строго один inode, но у файла может быть несколько имён.



Таблица дескрипторов имеется для каждого процесса.

 



В суперблоке содержится информация о системе в целом, т.е. тип, размер, размер блока ( 512, 1024, 2048 ), число свободных блоков, число свободных инодов, список свободных блоков, список свободных инодов.

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

В списке свободных блоков содержатся ссылки на все свободные блоки данных.

Суперблок имеет фиксированный размер.



Нулевая запись содержит ссылку на блок, который в свою очередь содержит указатели на блок.



 

Каждая запись в таблице инодов содержит следующие данные:
  • тип файла и права доступа
  • число ссылок на файл ( сколько имён файла )
  • идентификатор создателя файла ( пользователь, который его создал) и группа пользователя
  • время последнего доступа к файлу
  • время последней модификации файла
  • время последней модификации инода

 



Записали файл1 и файл2. Потом вместо файла1 записали файл3. Файл4 не входит, поэтому его дописывают в конец. Остаётся свободное место.




Структура каталогов.

Каталог — это таблица, в которой каждая запись в 16 байт.




20-1. EXT2.



В Linuxe файловая система называется EXT2. Доступное нам пространство делется на блоки. Доступные нам пространства делятся на группы блоков.

В суперблоке содержатся номер копии и длина группы.



В Linuxe имена файлов могут иметь неограниченную длину.

20-2. EXT3.

Файловая система ext3 является журналируемой файловой системой, 100% совместимой со всеми утилитами созданными для создания, управления и тонкой настройки файловой системы ext2, которая используется в Linux системах несколько последних лет. Перед детальным описанием различий между файловыми системами ext2 и ext3, уточним терминологию файловых систем и хранения файлов.