Организация и функционирование компьютеров

         

Алфавит языка Паскаль


Текст программы на Паскале состоит из собственно текста программы и ком­ме­нтариев. Коммента­рием называется последовательность любых символов расширенного кода ASCII, ограниченная парой  фигурных скобок {  и  }, либо парой (*   и  *), либо  парой /*  и  */. Собственно текст  программы состоит из слов в специальном алфавите, который является подмножеством системы знаков ASCII. Алфавит Паскаля состоит из букв (в число букв включены прописные и строчные буквы латин­ского алфавита и символ подчеркивания ‘_’),  пробела, цифр и следующих специальных символов (разделитель символов - верти­кальная черта):

 + | - | * | / | = | < | > |  <= | >= | <> | [ | ] | ( | ) | { | } | . | , | := | ; | : | .. | ^ | @ | $ | #

Слова (или лексемы) Паскаля подразделяются на идентификаторы, обозначения операций, разделители, числовые константы и строковые константы.

Идентификатором называется последовательность букв и цифр, начинающа­яся с буквы. Прописные и строчные буквы в идентификаторе не различаются. Длина идентификатора не должна превышать 63 символа. Идентификаторы подразделяются на ключевые (зарезервиро­ванные) слова, стандартные имена и пользовательские имена. Ключевым словам (таким, как  program, var, const, label) приписана опреденная функция, и другим образом эти имена использовать нельзя. Стандартные имена - это названия стандартных функций и процедур Паскаля (например, sin, readln, keypressed). Эти имена можно использовать для других целей, но во избежание ошибок делать это не рекомендуется. Пользовательские имена вводятся программистом для обозначения объектов программы.

Обозначения операций состоят из специальных символов или идентифика­торов, таких как  div, mod, and, or. Спецсимволы состоят из одного, реже двух символов (приваивание - “:=“, не равно - “<>“, больше или равно - “>=“, меньше или равно - “<=“).

Числовая константа - это запись числа. Числа делятся на целые и вещественные. Целые числа можно записать в десятичной или шестнадцатиричной системе счисления. Вещественные числа могут быть записаны в формате с фиксированной точкой (1.25, -100.2, 0.0002) или в экспоненциальном формате (-0.12345E+32  то же самое, что -0.12345*1032).

Строковая константа - это произвольная последовательность символов, заключенная в кавычки: ‘Константа’. Если сама константа содержит кавычки, то для правильного ее задания кавычки внутри константы должны быть удвоены: ’Буква ’’А’’ - первая буква алфавита’.



БНФ - метаязык описания синтаксиса языков программирования


По мере создания все новых и новых языков программирования в связи с проблемой программирования трансляторов появилась острая необходи­мость в формализации описания синтаксиса языка. Язык, используемый для формализации синтаксиса другого языка, называется метаязыком. В насто­ящее время наиболее употребительным для описания синтаксиса языков программирования является метаязык форм Бэкуса?Наура (сокращенно БНФ). Идея этого метаязыка заключается в структурировании понятий исходного языка программирования и определения более сложных понятий через более простые. Для этого в языке БНФ приняты следующие соглашения.

Любое понятие Паскаля изображается своим наименованием, заключенным в угловые скобки: <...> . Предложение БНФ представляет собой одно определение некоторого понятия Паскаля через другие в форме: понятие Паскаля, после которого следует знак  “::=“, после которого записывается определение понятия. В составе определения могут использоваться другие понятия языка программирования (в нашем случае Паскаля), символы алфавита (терминальные символы) и ключевые слова языка программирования, а также специальные символы языка БНФ, которые имеют определенный смысл. В качестве таких символов используются вертикальная черта и круглые, квадратные и фигурные скобки. Их использование подчиняется следующим правилам:

запись <понятие1> ::= <понятие2>  <понятие3>

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

запись <понятие1> ::= <понятие2> | <понятие3> | и т.д. означает, что первое понятие совпадает с одним из остальных понятий;

круглые скобки используются для группировки сложных конструкций БНФ внутри простых;

часть определения, заключенная в квадратные скобки, не обязательна;

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

вместо сложного понятия Паскаля в формы БНФ могут входить терминальные символы и ключевые слова; для того, чтобы отличать их от символов БНФ (например, скобок) условимся, что мы будем выделять символы Паскаля и ключевые слова жирным курсивом .


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



<список> ::= <элемент списка> {, <элемент списка>}

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

<список> ::=  | <элемент списка> {, <элемент списка>}

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

<идентификатор>::=<буква>{<буква>|<цифра>}

Тот факт, что параметры у процедуры могут отсутствовать, отражается за счет заключения списка параметров в квадратные скобки:

<заголовок процедуры> ::=

procedure <имя процедуры> [(<параметры>)];

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

<процедура или функция>::=(<процедура>|<функция>);

Мы не будем давать полного описания синтаксиса Турбо Паскаля на языке БНФ, а приведем несколько фрагментов. Вот как описывается общая структура программы на Паскале в терминах языка БНФ:

<описание программы> ::=

    <заголовок программы>

    <блок объявлений>

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

    <операторная часть> .

<заголовок программы> ::=

    program

<имя программы> [ (<список параметров>) ];

<блок объявлений> ::={<раздел объявлений>; }

<раздел объявлений> ::= <раздел констант> | <раздел типов> |

    <раздел переменных> | <раздел меток> | <раздел модулей>

<раздел констант> ::=

    const <описание константы> {; <описание константы>}

<описание константы> ::= <имя константы> [ : <тип> ] =

<выражение>

<раздел типов> ::= type <описание типа> {; <описание типа>}

<описание типа> ::= <имя типа> = <тип>

<раздел переменных> ::=



    var

<объявление переменных> {; <объявление переменных>}

<объявление переменных> ::=

    <имя переменной> {, <имя переменной> }:

<тип>

<раздел меток> ::= label <метка> {, <метка>}

<метка> ::= <целое без знака> | <идентификатор>

<раздел модулей> ::= uses <имя модуля> {, <имя модуля>}

<блок процедур и функций> ::= {<описание процедуры или функции> }

<описание процедуры или функции>::=

    (<описание процедуры> | <описание функции>) ;

<описание процедуры> ::=

    <заголовок процедуры>

    <блок объявлений>

    <заголовок процедуры> ::=

procedure

<имя процедуры> [(<список формальных параметров>)];

<список формальных параметров> ::=

    <формальный параметр> { ; <формальный параметр> }

<формальный параметр> ::=

    [var] <имя параметра> {, <имя параметра> }: <имя типа>

<описание функции> ::=

    <заголовок функции>

    <блок объявлений>

    <операторная часть>

<заголовок функции> ::= function <имя функции>

    [ (<список формальных параметров>) ] : <имя типа>;

<операторная часть> ::=

    begin (  | <оператор>{; <оператор>

}) end

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

В качестве другого примера фрагмента синтаксиса Паскаля приведем описание спецификации типа:

<тип> ::= <имя стандартного типа> | <имя пользовательского типа> |

    <перечислимый тип> | <диапазон> | <тип массива> | <тип записи> |

    <тип множества> | <тип файла>

<перечислимый тип> ::= ( <идентификатор> {,

<идентификатор> } )

<диапазон> ::= <значение> .. <значение>

<тип массива> ::= array [<имя типа> | <диапазон>] of  <тип>

<тип записи> ::= record  <поле записи> {; <поле записи> } end

<поле записи> ::= <имя поля> : <тип>

<тип множества> ::= set of  ( <имя типа> | <диапазон> )

<тип файла> ::= file of  <тип>


Центральный процессор


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

¨ чтение и дешифрацию команд из оперативной памяти;

¨     чтение данных из оперативной памяти и портов ввода – вывода;

¨     запись данных в оперативную память или их пересылка в порты ввода – вывода;

¨     прием и обработку запросов и команд от адаптеров внешних устройств;

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

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

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

¨     выбирает из адресного регистра адрес в ОЗУ очередной выполняемой команды;

¨     выбирает из ОЗУ очередную команду;


¨     с помощью дешифратора операций анализирует код команды и идентифицирует выполняемую ею операцию и ее признаки;

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

¨     считывает адреса в ОЗУ участвующих в операции операндов и в случае необходимости переписывает данные из ОЗУ в регистры общего назначения;

¨     выполняет операцию;

¨     записывает результаты операции обратно в ОЗУ;

¨     формирует адрес следующей команды.

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

Схема управления шиной и портами выполняет следующие функции:

¨     формирует адрес порта и управляющую информацию для него (например, переключение порта на прием или передачу);

¨     принимает информацию от порта о его состоянии или его готовности;

¨     подготавливает все устройства и микросхемы к обмену данными между процессором и портом ввода – вывода.

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


Что такое Интернет


Интернет – всемирная компьютерная сеть, составленная из разнообразных локальных и глобальных (типа NSFNET) компьютерных сетей, объединенных стандартными соглашениями о способах обмена информацией и единой системой адресации. Под разнообразием сетей понимается то, что они работают под управлением программного обеспечения разных фирм и используют для передачи данных внутри сети различными протоколами. Характеристическим свойством Интернет является тот факт, что между собой сети обмениваются по протоколам семейства TCP/IP. Они беспечивают возможность надежно и быстро передавать информацию даже по не слишком надежным линиям связи, а также строить программное обеспечение, пригодное для работы на любой аппаратуре. Система адресации Интернета (URL-адреса) обеспечивает уникальными координатами каждый компьютер (точнее, практически каждый ресурс компьютера) и каждого пользователя Интернета, создавая возможность взять или передать именно то, что нужно.

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

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

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

¨ информация передается небольшими порциями (пакетами);

¨   получение и безошибочность пакета должны быть подтверждены;

¨   в случае необходимости посылка пакета дублируется;

¨   маршрут движения пакета определяется в момент передачи и может меняться от пакета к пакету даже в пределах одного сообщения;

¨   на месте получения сообщение восстанавливается из нескольких пакетов.

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

Под термином "TCP/IP" обычно понимают все, что связано с протоколами TCP и IP. Это не только собственно сами протоколы с указанными именами, но и протоколы, построенные на использовании TCP и IP, и прикладные программы, использующие передачу данных по протоколам семейства TCP/IP. Другими словами, Интернет - это технология межсетевого взаимодействия. Сеть, которая использует технологию Интернет, также называется Интернет. Тем же термином называют всемирную сеть, объединяющую множество сетей, включающую как сети Интернет, так и другие сети.

Необходимость протокола можно проиллюстрировать на простом примере. Первым действием при получении пакета является определение его границ – начала и конца. Теоретически для этого можно придумать только три способа:

¨   посылать пакеты заранее оговоренной постоянной длины;

¨   помечать конец пакета определенной комбинацией битов (достаточно длинной, чтобы вероятность встретить ее в самом пакете была практически равна нулю);

¨   указывать длину пакета в его начале.



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

Протокол IP - это протокол, описывающий формат пакета данных, передаваемого по сети. Протокол TCP предназначен для контроля передачи и контроля целостности передаваемой информации. Компьютеры обмениваются пакетами протокола IP, контролируют их передачу по протоколу TCP и, объединяясь в глобальную сеть, образуют Интернет. Такова, в самых общих чертах, техническая сторона вопроса.

Как уже было сказано, каждая из подсетей сети TCP/IP работает в соответствии со своими специфическими требованиями и имеет свою природу средств связи. Однако предполагается, что каждая подсеть может принять пакет информации и доставить его по указанному адресу в этой конкретной подсети либо передать его другой подсети, связанной с данной. Отдельные подсети связываются через компьютеры, называемые шлюзами. Шлюзом может служить как специальное устройство, так и компьютер, который имеет программное обеспечение, выполняющее функции маршрутизации пакетов. Маршрутизация – это процедура определения пути следования пакета из одной сети в другую. Проблема доставки пакетов в такой системе решается путем реализации во всех узлах сети и шлюзах межсетевого протокола IP.

Передачу информации согласно протоколам TCP/IP используют разнообразные сервисы Интернет. Эффективность работы в сети определяется умением обращаться с конкретными сервисами и способностью выбрать правильный способ решения конкретной задачи. Этим определяется не только то, как скоро Вы сможете найти нужную информацию, но и то, сможете ли Вы ее найти вообще.

Различные информационные сервисы используют линии связи с разной эффективностью. Так, например, при работе в WWW до 30% ресурсов сети уходит не на информационный обмен, а на служебный трафик. Это хорошо заметно при рассмотрении графиков, на которых кроме байтов, переданных по тому или иному протоколу, указывается также и число переданных пакетов.


Чем больше разница, тем эффективнее работает система, т.к. меньше служебных обменов приходится на каждый переданный байт.

Вначале Интернет функционировал как средство научного и информационного обмена и не носил коммерческого характера. Однако в последнее время сеть постепенно дрейфует в сторону ее коммерческого использования. Появился новый термин Intranet, который обозначает применение информационных технологий Интернет для нужд компаний и корпораций в качестве основы их корпоративных информационных ресурсов. Для многих компаний вопросом является не только организация TCP/IP сетей и подключение к Интернет, но и организация централизованного обслуживания клиентов в рамках информационных технологий Интернет.

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

¨   организация сети TCP/IP;

¨   получение адресов и имен Интернет для всех внутренних пользователей сети;

¨   подключение локальной или корпоративной сети к Интернет;

¨   определение и управление маршрутами передачи информации в этой сети (проблема маршрутизации);

¨   обмен электронной почтой как внутри сети, так и с адресатами за ее пределами;

¨   организация информационного обслуживания на базе Интернет, плавно перетекающая в технологию Intranet;

¨   проблема безопасности сети TCP/IP.


Динамические структуры данных


До сих пор мы встречались с переменными, которые описывались в разделе объявления переменных программы или процедур и функций и которым в программе приписано определенное имя. Таким переменным  приписан простой или составной тип, который однозначно определяет объем памяти, необходимой для хранения переменной. Память для поименованных переменных выделяется при компиляции программы. Такая память называется статической. В некоторых ситуациях статическая память имеет серьезные недостатки. Рассмотрим подробнее некоторые аспекты компиляции программы и структуру программного кода.

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

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

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

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

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

В Паскале выделение динамической памяти осуществляется функцией new, а освобождение - функцией dispose. Однако сдесь возникают некоторые концептуальные трудности. Уже говорилось, что транслятор заменяет каждое имя объекта адресом данного объекта (на самом деле смещением от начала соответствующей секции). Но ведь адрес динамической переменной появляется только в момент ее размещения и при компиляции неизвестен. Следовательно, программный код должен быть устроен таким образом, чтобы можно было совершать операции над непоименованными переменными, адрес которых в момент компиляции программы не известен.

Указанное противоречие разрешается использованием в языках программирования специальных переменных - указателей или ссылок. Значением указателя является адрес того участка памяти, где в настоящий момент храниться значение динамической переменной. Следовательно, для указателя существенны две области памяти: одна, где указатель хранится, и другая, на которую указатель указывает. Отметим, что сам указатель является статической переменной и память для него выделяется заранее (это два или четыре байта). Очевидно, что использовать динамическую память имеет смысл тогда, когда сама динамическая переменная требует гораздо большего объема памяти (обычно это массив или запись).


Доменная адресация в Интернет


Во всемирной сети Интернет каждый компьютер (на самом деле, каждый сетевой адаптер компьютера) получает уникальный идентификатор, однозначно его определяющий. Этот идентификатор, называемый IP-адресом, имеет размер четыре байта и имеет сложную структуру. Если не вдаваться в детали, IP-адрес состоит из двух частей: номера локальной сети и номера компьютера внутри сети. За присвоение номеров сетям отвечают несколько выделенных серверов. Назначение номеров внутри сети является прерогативой администратора сети.

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

 Идея доменной организации Интернетовских адресов заключается в том, чтобы придать всей системе адресов стройную иерархическую структуру. Имеются домены верхнего уровня, каждому из которых присваивается определенное имя (com, edu, org, gov, ru, ua и т.д.). Домены следующего уровня образуются прибавлением к имени верхнего уровня имени узла следующего уровня. И вообще, домен очередного уровня получается прибавлением имени очередного узла к именам предыдущего домена. Записываются имена домена в обратном порядке, от конца к началу, и разделяются точкой. Обычно каждое отдельное имя в записи домена соответствует некоторому реальному серверу, но вообще это необязательно. Однако полное имя домена характеризует адрес в Интернет однозначно. Например, полное имя ECON.MSU.RU представляет собой доменное имя узла сети экономического факультета МГУ.

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

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

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

От реактивности работы сервиса доменных имен зависит во многом работа всей сети в целом. Очень часто медленная скорость получения ответов на запросы к сервису доменных имен может приводить к отказам на обслуживание другими серверами информационных ресурсов Internet. Типичным примером может быть доступ в информационным страницам WWW или архивам FTP. Время ожидания адреса ресурса у многих прикладных программ ограничено, и, как следствие, программы не начинают обслуживание по причине отсутствия адреса. 

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

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


Другие протоколы


Протокол TELNET позволяет обслуживающей машине рассматривать удаленные терминалы как стандартные "сетевые виртуальные терминалы" строчного типа, работающие в коде ASCII, а также обеспечивает возможность согласования более сложных функций (например, локальный или удаленный эхо-контроль, страничный режим, высота и ширина экрана и т.д.). TELNETработает на базе протокола TCP. На прикладном уровне над TELNET находится либо программа поддержки реального терминала (на стороне пользователя), либо прикладной процесс в обсуживающей машине, к которому осуществляется доступ с терминала. Работа с TELNET походит на набор телефонного номера. Пользователь набирает на клавиатуре что-то вроде «telnet А» и получает на экране приглашение на вход в машину А. Протокол TELNET существует уже давно. Он хорошо опробован и широко распространен. Создано множество реализаций для самых разных операционных систем. Вполне допустимо, чтобы процесс-клиент работал, скажем, под управлением одной операционной системой, а процесс-сервер - под управлением другой.

Протокол FTP (File Transfer Protocol– протокол передачи файлов) распространен так же широко и пользуется транспортными услугами TCP. Существует множество реализаций для различных операционных систем, которые хорошо взаимодействуют между собой. Пользователь FTP может вызывать несколько команд, которые позволяют ему посмотреть каталог удаленной машины, перейти из одного каталога в другой, а также скопировать один или несколько файлов.

Протокол SMTP (Simple Mail Transfer Protocol - простой протокол передачи почты) поддерживает передачу сообщений (электронной почты) между произвольными узлами сети internet. Имея механизмы промежуточного хранения почты и механизмы повышения надежности доставки, протокол SMTP допускает использование различных транспотных служб. Он может работать даже в сетях, не использующих протоколы семейства TCP/IP. Протокол SMTP обеспечивает как группирование сообщений в адрес одного получателя, так и размножение нескольких копий сообщения для передачи в разные адреса.
Над модулем SMTP располагается почтовая служба конкретных вычислительных систем.

Сетевая файловая система NFS (Network File System) впервые была разработана компанией Sun Microsystems Inc. NFS использует транспортныеуслуги UDP и позволяет монтировать в единое целое файловые системы нескольких машин с ОС UNIX. Бездисковые рабочие станции получают доступ к дискам файл-сервера так, как-будто это их локальные диски. NFS значительно увеличивает нагрузку на сеть. Если в сети используются медленные линии связи, то от NFS мало толку. Однако, если пропускная способность сети позволяет NFS нормально работать, то пользователи получают большие преимущества. Поскольку сервер и клиент NFS реализуются в ядре ОС, все обычные несетевые программы получают возможность работать с удаленными файлами, расположенными на подмонтированных NFS-дисках, точно так же, как с локальными файлами.

Протокол SNMP (Simple Network Management Protocol - простой протокол управления сетью) работает на базе UDP и предназначен для использования сетевыми управляющими станциями. Он позволяет управляющим станциям собирать информацию о положении дел в сети internet. Протокол определяет формат данных, их обработка и интерпретация остаются на усмотрение управляющих станций или менеджера сети.

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

Протокол HTTP (Hyper text transfer protocol – протокол передачи гипертекста) применяется для обмена информацией между серверами WWW (World Wide Web – всемирная паутина) и программами просмотра гипертекстовых страниц – броузерами WWW. Допускает передачу широкого спектра разнообразной информации – текстовой, графической, аудио и видео.

POP3 (Post Office Protocol – протокол почтового узла, 3 версия), позволяет программам-клиентам электронной почты принимать и передавать сообщения с / на почтовые серверы.Обладает достаточно гибкими возможностями по управлению содержимым почтовых ящиков, расположенных на почтовом узле. В типичных программах-клиентах в основном применяется для приема входящих сообщений.

NNTP (Network News Transfer Protocol  – протокол передачи сетевых новостей ) позволяет общаться серверам новостей и клиентским программам – распространять, запрашивать, извлекать и передавать сообщения в группы новостей. Новые сообщения хранятся в централизованной базе данных, которая позволяет пользователю выбирать интересующие его сообщения. Также обеспечивается индексирование, организация ссылок и удаление устаревших сообщений.


Двоичная система счисления и представление информации в компьютере


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

Сначала разберемся в том, что собой представляет десятичная система счисления. Начнем с целых чисел. Возьмем какое-либо число, записанное в десятичной системе счисления, например, 397. В этом числе 7 единиц, 9 десятков и 3 сотни, т.е. величина числа равна 7*1+9*10+3*100 = 7*100+9*101+3*102. Аналогично устроена позиционная система счисления по произвольному основанию. В общем случае, пусть число X записывается в системе счисления по основанию M в виде  ANAN-1…A2A1A0 (число цифр в записи равно  N+1). Тогда величина числа вычисляется по формуле X = A0*M0 + A1*M1 + A2*M2 +…+ AN-1*MN-1 + AN*MN. Здесь A0, A1, A2, …, AN-1, AN – так называемые M-ричные цифры, которые представляют значения от 0 до M-1 включительно.

Например, записанное в семиричной системе счисления число 236417 = 1+4*71+6*72+3*73+2*74 = 1+28+294+1029+4802 = 615410 . Проще вычислить это значение с использованием так называемой схемы Горнера, которая заключается в расстановке скобок в вышеприведенной сумме: 1+4*71+6*72+3*73+2*74 = 1+7*(4+7*(6+(7*(3+7*2) ) ) = 1+7*(4+7*(6+7*17) ) = 1+7*(4+7*125) = 1+7*879 = 615410 .

Как вычислить цифры M-ричного представления числа? Для этого сначала посмотрим, как вычислляются цифры десятичного представления числа. Пусть X снова равно 397. При делении числа 397 на 10 получаем 39 и 7 в остатке. Остаток 7 выражает количество единиц в числе X. Теперь разделим 39 на 10. Получим частное 3 и 9 в остатке. Остаток 9 теперь представляет число лесятков. Наконец, делим 3 на 10 и получаем 0 и 3 в остатке. В результате этой операции получаем количество сотен – 3. Десятичная запись числа состоит из остатков 7, 9 и 3, но стоящих в обратном порядке.


Контрольные вопросы по теме.

Переведите 134210  в семиричную систему счисления.

Переведите  13425 в десятичную систему счисления.

Переведите  134210 в двоичную систему счисления.

Переведите  100111010101102 в шестнадцатиричную систему счисления.

Что такое представление чисел с плавающей запятой и для чего оно используется?

Что такое ASCII-коды?

Почему в байте 8 битов?

Сколько книг поместится в 1Гб, если книги содержат 500 стр., а на странице примерно 2000 символов?




По такой же схеме вычисляются цифры в произвольной M-ричной системе счисления . Возьмем то же число X=39710  (естественно, что величина числа не зависит от той системы счисления, в которой оно записано). Попробуем записать его в пятиричной системе счисления. Для этого разделим его на 5. Получим 79 и 2 в остатке. Запомним первый остаток: A0 = 2. Далее разделим 79 на 5. Получим 15 и 4 в остатке. Запомним второй остаток: A1 = 4. Теперь разделим на 5 число 15. Получим 3 и 0 в остатке. Следовательно, A2 = 0. Последнее деление 3 на 5 дает 0 и 3  в остатке, то есть последняя полученная цифра – это A3

= 3. Равенство частного нулю означает, что процедуру следует завершить. Полученные остатки следует записать в обратном порядке. В результате проделанного вычисления получаем, что 39710 = 30425.

Для дробных чисел формула для вычисления величины числа слегка видоизменяется. Пусть число записано в системе счисления по основанию M в виде  AnAn-1…A2A1A0

, A-1A-2…A-h . Тогда его величина вычисляется по формуле

X = A-h*M-h +…+ A-2*M-2+A-1*M-1

+ A0*M0 + A1*M1 + A2*M2

+…+ An-1*Mn-1 + An*Mn

.

Так, число 1011,0112  представляет собой значение  2-3+2-2+20+21+23 = 11,37510 . Следует отметить, что в европейских языках для разделения целых и дробных разрядов числа вместо запятой используется точка.

В информатике актуальны двоичная и шестнадцатиричная системы счисления. В шестнадцатиричной системе счисления требуется 16 цифр. В качестве шестнадцатиричных цифр используются 10 десятичных цифр от 0 до 9, а также шесть первых букв латинского алфавита: A (10), B (11), C (12), D (13), E (14) и F (15). В двоичной системе счисления всего две цифры: 0 и 1. В соответствии с общим определением число, записанное в двоичной системе счисления, является суммой степеней двойки, соответствующих тем местам  в записи числа, на которых стоят единицы. Например, число 10010111012  равно сумме 1+22+23+24+26+29

= 1+4+8+16+64+512 = 60510 .

Для хранения числа в памяти компьютера оно переводится в двоичную систему счисления.


Каждая двоичная цифра соответствует одному разряду хранения информации в памяти компьютера – одному биту. В современных компютерах биты хранения информации объединяются в группы по восемь, которые называются байтами. Соответственно при хранении чисел двоичные цифры группируются по восемь. Например, для хранения числа 10011 100111012 требуется два байта. В первый байт записываются цифры 00010011, а во второй – цифры 10011101.

Шестнадцатиричная и двоичная системы счисления связаны между собой. Если в двоичной записи числа сгруппировать двоичные цифры по четыре (считая справа налево), а затем заменить каждую четверку двоичных цифр на шестнадцатиричную цифру, то получится шестнадцатиричное представление числа. Например, если в вышеприведенном примере 10011100111012  разбить двоичные цифры на четыре группы 1 0011 1001 1101, то 12  = 116 , 00112

= 316 , 10012 = 916 , 11012 = D16 , и в результате получается представление числа 10011100111012  в шестнадцатиричной системе: 139D16 . Шестнадцатиричная запись иногда используется, если необходимо указать содержимое нескольких байтов памяти компьютера (например, в руководстве или учебном пособии).

Вся информация в компьютере представляется в цифровой форме. Это естественно для чисел. Для нечисловой информации (например, текста) используется стандартный прием: всевозможные элементарные значения нумеруются, и вместо самих значений хранятся их номера (которые играют роль кодов). Так, при представлении текстовой информации все символы сводятся в таблицу, а текст записывается номерами символов. В любом случае коды нечисловых данных, хранящиеся в компьютере, не имеют содержания вне таблиц нумерации. Количество двоичных разрядов, необходимых для записи наибольшего номера объекта данных, зависит от их общего объема. Наибольшее число, которое в двоичной системе счисления можно записать с помощью N цифр, состоит из N единиц. Это число равно 1+2+4+…+2N-1

= 2N-1 . Например, с помощью восьми двоичных цифр можно различать 28=256 символов текста.



Это рассуждение настолько важно для всей идеологии хранения информации в двоичном коде, что в информатике принято измерять объем не в десятичной системе счисления, а в специальных единицах измерения, использующих степени двойки. Используя то обстоятельство, что 210=1024 не очень отличается от 103-1000, принято 1024 байт называть килобайтом (1Кб). Аналогично мегабайт – это 1024 килобайта (1Мг), а гигабайт – 1024 мегабайта (1Гб). Количество информации в современном мире столь велико, что приходится вводить еще одну единицу – терабайт, равную 1024 гигабайта (1Тб). Если не нужна особая точность, то можно считать, что:

1 терабайт = 1 000 гигабайт = 1 000 000 мегабайт = 1 000 000 000 килобайт = 1 000 000 000 000 байт.

То устройство компьютера, в котором хранится информация, называется оперативным запоминающим устройством (ОЗУ) или оперативной памятью. Если отвлечься от технических деталей, оперативная память компьютера представляет собой линейную последовательность байтов. Длина этой последовательности в современных персональных компьютерах десятки сотни мегабайт. Еще больше память суперкомпьютеров. Для хранения чисел выделяется несколько байтов (от одного до 10). Различают две основных формы представления числа в памяти компьютера. При первом способе все разряды выделенных для хранения числа байтов памяти последовательно нумеруются, и двоичные цифры числа непосредственно записываются в соответствующие биты памяти. Один бит выделяется для представления знака числа (0 – плюс, 1 – минус). При втором способе число представляется в так называемой нормализованной (или экспоненциальной) форме:  X=M*10n, где число М (называемое мантиссой)  заключено от 1 до 10, число n (называемое порядком) - целое.

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


Для хранения величин, изменяющихся в диапазоне от  -215 = –32768  до  215-1 = 32767, выделяется два байта. Если целое число не вмещается в этот диапазон, то для его хранения выделяется четыре байта (диапазон от –231 до 231-1).

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

 Представление нормализованных чисел называется представлением числа с плавающей запятой. Он используется для хранения величин, которые могут принимать любые значения. В памяти компьютера порядок и мантисса хранятся отдельно в форме двоичных целых чисел со знаком. В современных компьютерах используется несколько форматов представления чисел с плавающей запятой, которые отличаются общим объемом представления чисел (6, 8 или 10 байтов), а также размерами памяти, отводимой отдельно для мантиссы и порядка. От этого зависят общий диапазон возможных значений числовой величины в компьютере и минимальная ошибка в вычислениях, проистекающая из-за невозможности запоминать в компьютере большее количество знаков после запятой.

В реальной действительности информация  разнородна. Обычно делят данные на числовую информацию, текстовую информацию и логическую информацию. Под текстовой информацией понимается линейная последовательность символов. Для представления символа в памяти компьютера используется следующая схема: фиксируется множество допустимых символов текста (обычно их  28 = 256 символов) и каждому символу присваивается номер (от 0 до 255). После этого последовательность символов заменяется на последовательность номеров, которые в памяти компьютера записываются в виде целых двоичных чисел (без знака).


Один номер помещается в одном байте памяти ( именно поэтому исторически сложилось разбиение памяти на группы по восемь битов, так как оказалось, что оптимальное количество символов – 28, а не, например, 29).

Множество допустимых символов и их номера составляют таблицу кодирования символов. Естественно, эта таблица не должна зависеть от произвола программиста или производителя компьютеров, поскольку передача инфор­мации в этом случае будет сильно затруднена. В настоящее время существует стандарт ASCII (American Standard Code for Informational Interchange), содержащий набор и номера 128 основных символов (коды от 0 до 127) и набор и номера 128 расширенных символов (коды от 128 до 255). Поскольку в этот стандарт не входят символы национальных алфавитов (которых значительно больше, чем 128), в каждой стране 128 кодов расширенных символов (от 128 до 255) заменяются символами национального алфавита. Другими словами, каждый язык с алфавитом, отличным от английского алфавита, устанавливает свой стандарт. Осмысленный текст на одном языке будет бессмысленным на другом. Таким образом, для правильной работы с текстом важна не только сама информация, но и ее интерпретация. Программа, которая правильно интерпретирует колы символов в соответствии с таблицей кодирования в определенном алфавите, называется текстовым драйвером.

Логическая величина – это величина, которая может принимать всего два значения – true  и  false («истина» и «ложь»). Для хранения значения логической переменной достаточно одного бита. Обычно значение «ноль» бита памяти ассоциируется с истиной, значение «единица» – с ложью.

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

Контрольные вопросы по теме.

1. Переведите 134210  в семиричную систему счисления.

2. Переведите  13425 в десятичную систему счисления.

3. Переведите  134210 в двоичную систему счисления.

4. Переведите  100111010101102

в шестнадцатиричную систему счисления.

5. Что такое представление чисел с плавающей запятой и для чего оно используется?

6. Что такое ASCII-коды?

7. Почему в байте 8 битов?

8. Сколько книг поместится в 1Гб, если книги содержат 500 стр., а на странице примерно 2000 символов?


Ethernet-кадр


Ethernet-кадр в заголовке содержит Ethernet-адрес назначения, Ethernet-адрес источника, поле типа пакета и еще некоторые данные. Важной особенностью Ethernet является то, что каждая сетевая карта имеет свой уникальный номер. Каждому производителю сетевых карт выделен свой диапазон номеров, в пределах которого он может нумеровать свои карты. Этот номер рассчитан на шесть байтов. Ethernet-адрес обычно записывается в виде шести групп шестнадцатиричных цифр по две в каждой (например, 2B:17:9A:23:DF:B7). Первые три байта называются префиксом, и именно они закреплены за производителем. Каждый префикс определяет диапазон из почти 17-ти млн. номеров.

При получении кадра сетевым драйвером считываются Ethernet-адреса источника и места назначения, указанные в заголовке кадра. Кроме того, считывается тип пакета. Работающий сетевой адаптер знает свой Ethernet-адрес. Если адрес назначения совпадает с собственным адресом, драйвер начинает принимать Ethernet-кадр.

Пусть тип кадра говорит о том, что его содержимое является IP-пакетом. Кроме Ethernet-адреса, сетевой адаптер имеет также четырехбайтный IP-адрес, который уникален в пределах всей сети Internet. Этот адрес обозначает точку доступа к сети  IP-модуля (для сетевого драйвера). Работающий компьютер всегда знает также и свой IP-адрес.

При отправке IP-пакета необходимо по IP-адресу места назначения определить Ethernet-адрес с тем, чтобы записать это значение в поле адреса назначения Ethernet-кадра. Если все это происходит в пределах локальной сети, то для поиска используется специальная таблица соответствия IP-адресов Ethernet-адресам. Структура этой таблицы описывается протоколом ARP (Address Resolution Protocol).

Упрощенно, ARP-таблица состоит из двух столбцов:

IP-адрес           Ethernet-адрес

 223.1.2.1          08:00:39:00:2F:C3

 223.1.2.3          08:00:5A:21:A7:22

 223.1.2.4          08:00:10:99:AC:54

Если меняются IP-адреса, то ARP-таблица должна быть изменена. Это может быть сделано автоматически определенной процедурой.
В сеть посылается широковещательный запрос типа "чей это IP-адрес?". Все сетевые интерфейсы получают этот запрос, но отвечает только владелец адреса. Если он есть, то соответствующая строка добавляется в ARP-таблицу. Следует отметить, что если искомого IP-адреса нет в локальной сети и сеть не соединена с другой сетью шлюзом, то разрешить запрос не удается. IP-модуль будет уничтожать такие пакеты, обычно по time-out (превышен лимит времени на разрешение запроса). Модули прикладного уровня при этом не могут отличить физического повреждения сети от ошибки адресации.

Однако в современной сети Internet, как правило, запрашивается информация с узлов, которые реально в локальную сеть не входят. В этом случае для разрешения адресных коллизий и отправки пакетов используется модуль IP.

Если компьютер соединен с несколькими сетями, т.е. является шлюзом, то в таблицу ARP вносятся строки, которые описывают как одну, так и другую IP-сети. При использовании Ethernet и IP каждый сетевой интерфейс имеет как минимум один адрес Ethernet и один IP-адрес. Если компьютер имеет несколько интерфейсов, то это автоматически означает, что каждому интерфейсу будет назначен свой Ethernet-адрес. IP-адрес назначается для каждого драйвера сетевого интерфейса. Грубо говоря, каждой сетевой карте Ethernet соответствуют один Ethernet-адрес и один IP-адрес. IP-адрес уникален в рамках всего Internet.

Сетевой адаптер контролирует обмен информацией, происходящий в сети, и принимает адресованные ему Ethernet-кадры, а также Ethernet-кадры с адресом "FF:FF:FF:FF:FF:FF" (в 16-ричной системе), который обозначает "всем", и используется при широковещательной передаче. Ethernet реализует метод доступа, называемый методом множественного доступа с контролем несущей и обнаружением столкновений. Этот метод предполагает, что все устройства взаимодействуют в одной среде, в каждый момент времени может передавать только одно устройство, а принимать могут все одновременно. Если два устройства пытаются передавать одновременно, то происходит столкновение передач, и оба устройства после случайного (краткого) периода ожидания пытаются вновь выполнить передачу.Понятно, что чем больше компьютеров подключено в сегменте Ethernet, тем больше столкновений будет зафиксировано и тем медленнее будет работать сеть. Кроме того, если в сети стоит сервер, к которому часто обращаются, то это также снизит общую производительность сети.


FTP - передача файлов


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

Вообще говоря, FTP – это название протокола и стандартной программы, предназначенной для передачи файлов между разными компьютерами. На одном из компьютеров работает программа - сервер, на втором пользователь запускает программу - клиента, которая соединяется с сервером и передает или получает по протоколу FTP файлы. Протокол FTP оптимизирован для передачи файлов.

Вы вряд ли найдете в FTP-архивах коммерческие программы, так как лицензионные соглашения запрещают их открытое распространение. Зато обнаружите условно-бесплатное и общедоступное программное обеспечение. Это разные категории: общедоступные программы действительно бесплатны, а за условно-бесплатное программное обеспечение требуется заплатить автору, если после испытательного срока Вы решите оставить себе программу и пользоваться ею. Встретятся Вам и так называемые бесплатные программы: их создатели сохраняют за собой авторские права, но разрешают пользоваться своими творениями без какой-либо оплаты. Сервер FTP можно настраивать таким образом, что соединиться с ним можно не только под своим именем, но и под условным именем anonymous (аноним). При этом становится доступна не вся файловая система компьютера, а некоторый публичный файловый архив, которые составляют содержимое сервера anonymous FTP. На таких серверах сегодня доступно огромное количество информации и программного обеспечения. Это и программы - свободно распространяемые и демонстрационные версии, это и мультимедиа, это, наконец просто тексты - законы, книги, статьи, отчеты.

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



Интранет - информационное обслуживание на основе Интернет


В последнее время все чаще стали говорить об Intranet. При этом обычно понимают использование информационных технологий Internet для создания информационных систем внутри организации. Ядром такой системы является технология World Wide Web, расширенная возможностями подключения через программы, реализующими специальный формат обмена данными между сервером World Wide Web и системами управления базами данных, а также мобильными кодами нового языка Java, которые должны реализовать концепцию распределенной информационной системы.

Исходя из этого, концепция администрирования сетей TCP/IP расширяется администрированием серверов World Wide Web и настройкой этих серверов для работы с разными клиентами, условной генерацией ответов в зависимости от типа клиента, адреса машины и кодировки (языка). 

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

Организации могут использовать и другие информационные технологии: FTP-архивы и доступ в режиме удаленного терминала. Режим удаленного терминала продолжает оставаться одним и главных способов первичной организации доступа к локальным информационным системам через сеть. Такое использование системы позволяет отказаться от копирования системы на каждый из компьютеров пользователей и централизованное управление информационным ресурсом.



Использование деревьев для индексирования


Дерево называется бинарным, если каждая вершина имеет не более двух подчиненных (не более двух слуг). Бинарные деревья принято задавать иначе, чем произвольные деревья. Вместо ссылок от вершины “вниз” и “вправо” структура дерева задается ссылками к первому (“левому”) и второму (“правому”) слуге данного хозяина. Если один или оба слуги отсутствуют, соответствующие ссылки равны Nil. Путь на бинарном дереве от корня до любой вершины кодируется последовательностью нулей и единиц: нуль соответствует переходу к левому слуге, а единица - к правому. Классификация с помощью бинарного дерева называется бинарной классификацией.

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

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

переход от текущей записи к последующей и к предыдущей (при условии, что порядок задан);

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

поиск записи по заданному значению какого-то поля или по сложному критерию;

поддержание порядка при добавлении, изменении и удалении данных.

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

Пусть данные - это запись, а порядок задается одним из полей этой записи (например, наименованием name). Будем формально различать в бинарном дереве стрелки “вниз влево” и “вниз вправо” (соответственно, говорить о левом подчинении и правом подчинении). Бинарное дерево задает упорядочение массива данных при выполнении следующих условий:

существует взаимнооднозначное соответствие между записями массива и вершинами дерева;

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

В примере с полем name

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

Перейдем к вопросу о том, как устроено формальное описание дерева индекса массива данных. В описание вершины индексного дерева будут входить четыре компоненты:

type

    pterm = ^term;

    term = record

        num: longint;           {Номер записи, соответствующей вершине}

        val: type_val;          {Поле упорядочения (type_val - тип поля упорядочения ) }

        pleft:   pterm;           {Cсылка на левую подчиненую вершину (Nil в случае ее отсутствия) }

        pright: pterm            {Cсылка на правую подчиненую вершину (Nil в случае ее отсутствия) }

    end;

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

                 Назначить текущей вершиной корневую вершину дерева индекса

                   Значение поля в текущей вершине совпадает с искомым      ­­да                         Запись найдена



                                                                         нет

                    Значение поля в текущей вершине больше (меньше) искомого значения

                                         больше                                                            меньше

                   У текущей вершины                                            У текущей вершины

                      есть левый слуга                                                есть правый слуга

                      да                           нет                                                  да                       нет

      Сделать левого        Запись не найдена            Сделать правого            Запись не найдена

      слугу текущим                                                         слугу текущим

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

                     Назначить текущей вершиной корневую вершину дерева индекса

                        Значение поля в текущей вершине больше (меньше) искомого значения

                                         больше                                                                         меньше или равно

                   У текущей вершины                                                         У текущей вершины

                      есть левый слуга                                                             есть правый слуга

                      да                           нет                                                               да                       нет

       Сделать левого             Занести запись в                   Сделать правого               Занести запись в

        слугу текущим       качестве правого слуги              слугу текущим          качестве правого слуги

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


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


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

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

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

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

                                                                               1.1.1



                     2.1.2                             2.2.8                                  2.3.10                           2.4.11

 

        3.1.3                      3.2.6                   3.1.9                  3.1.12                    3.2.13                 3.3.18

 

     4.1.4                4.2.5             4.1.7                  4.1.14                 4.2.15                 4.3.16              4.4.17

Тупиками являются вершины с номерами 4,5,7,9,10, 12,14,15,16,17,18.

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

Деревом изображаются любые иерархические структуры, которые очень часто встречаются на практике. Например структура подразделений компании или структура административного деления регионов. Деревом является классификация видов животных или перечень номенклатуры изделий (и вообще, любая классификация). Иерархия объектов в реальной действительности приводит к иерархии описаний объектов в памяти компьютера.

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


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

type

    rec = record  <поля данных>  end;       {запись данных}

    ptree = ^tree;                                              {тип указателя на элемент списка }

    tree = record                                              {тип элемента списка}

                    data: rec;                                     {данные вершины дерева}

                    down: ptree                                 {ссылка на 1-го слугу данной вершины}

                    right: ptree                                  {ссылка на следующего слугу хозяина вершины}

                end;

var  root: ptree;                                              {ссылка на корневую вершину дерева}

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

procedure  write_tree (f: tpf);  {f - файловая переменная типа  tpf = file

of rec}

var  k: integer;

        path: array [1..20] of  tree;

begin

    k := 1;

    path [k] := root;    {Начальная вершина дерева - корневая}

    while  (k>0) and

(path[k]<>Nil) do

        begin



            write (f, (path[k])^.data);

            if  (path[k])^.down<>Nil  then

                begin      path [k+1] :=(path[k])^.down;

                                k:=k+1

                end

            else

                begin  while (k>0) and ( (path[k])^.right=Nil)  do  k:=k-1;

                             if  k>0  then           path [k] := (path[k])^.right

                end

        end

end;

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

-1, если случай противоречит ситуации;

+1, если случай может быть согласован с ситуацией;

0, если случай полностью соответствует ситуации.

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

если agree(x,y)=0, то текущая ситуация является искомой;

если agree(x,y)=-1, то бессмысленно анализировать подчиненные ситуации, то есть с точки зрения поиска текущая ситуация тупиковая и необходимо сделать “шаг вправо”;

если agree(x,y)=+1, то следует перейти к подчиненной ситуации, то есть сделать “шаг вниз”.

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


Под ситуацией понимается расстановка ферзей на первых n горизонталях, а подчиненные ситуации - это расстановки ферзей на (n+1) горизонталях. Входные данные в этой задаче отсутствуют, то есть отсутствует переменная x, обозначающая анализируемый случай. Назовем клетку битой, если она бьется хотя бы одним ферзем из уже имеющейся расстановки. Ситуация тупиковая, если n<8

и все поля (n+1)-й горизонтали бьются ферзями из первых n горизонталей. “Шаг вниз” заключается в выборе первой слева небитой клетки (n+1)?й горизонтали. “Шаг вправо” заключается в выборе следующей с правой стороны небитой клетки в n?й горизонтали. С формальной точки зрения:

y - расстановка ферзей на первых n горизонталях;

agree(y)=-1, если ферзь на n-й горизонтали бьется другим ферзем;

agree(y)=+1, если ферзи не бьют друг друга и n<8;

agree(y)=0, если ферзи не бьют друг друга и n=8.

Тогда решение задачи полностью укладывается в схему метода ветвей и границ.


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


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

Существует другая возможность описывать упорядоченную последовательность данных - списком. В наборе технологических средств программирования списком называется совокупность однотипных упорядоченнных данных, снабженных средствами, позволяющими переходить от предыдущего значения к последующему. Наиболее естественно обеспечивается переход с помощью указателей. Именно, элемент списка будет состоять из двух частей: первая часть состоит из содержательных данных списка, а вторая часть представляет собой указатель, ссылающийся на следующий элемент списка. Указатель на первый элемент списка хранится в фиксированной переменной. Если он неопределенный (равен Nil), то список пуст. Указатель следующего элемента в последнем элементе списка равен Nil. Общая схема списка такова:

 

    начальный                элемент1                 элемент2                    ...                   элементN                   NIL

    указатель                 указатель               указатель                                         указатель

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

type

    rec = record  <поля данных>  end;          {запись данных}

    plist = ^list;                                                    {тип указателя на элемент списка }

    list =  record                                                 {тип элемента списка}


                    d: rec;                                                 {данные списка}

                    p: plist                                                {ссылка на следующий элемент}

                end;

var  p0: plist;                                                      {ссылка на первый элемент списка}

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

испоьзуется тип list, определяемый ниже в тексте программы, а не выше, как того требует фундаментальное правило Паскаля. Разобранный случай - это единственное исключение из этого правила.

Список, устроенный так, как это было описано выше, называется линейным однонаправленным (или односвязным) списком. При работе с таким списком можно выделить три основные функции:

поиск элемента списка по критерию;

добавление элемента внутрь списка;

удаление элемента из списка.

Пусть функция:  {function  order (r1,r2: rec): integer;}  возвращает -1, 0 или +1 в зависимости от того, предшествует, совпадает или следует запись r1 за записью r2

(порядок следования зависит от полей записи). Тогда поиск в линейном списке записи r заключается в последовательном переборе элементов списка и сравнении записи r с полем d элемента списка. Перебор начинается с элемента p0^ и заканчивается тогда, когда order(r,d)=0 (запись найдена), либо order(r,d)=1 (нужной записи не существует), либо указатель на следующую запись равен Nil (список кончился).

function  find_in_list (r: rec): plist;   {возвращает указатель на элемент, Nil - неудача}

var next: plist;

begin

    find_in_list := Nil;

    next := po;  {Первый элемент списка}

    while  (next<>Nil) and (order (r, next^.d) >= 0) do

            {Cписок не кончился и исходная запись больше текущей}

        if  order (r, next^.d) = 0 

            then    begin  find_in_list := next;  break  end  {Записи совпадают}

            else    next := next.p;  {исходная больше текущей; продолжить поиск}

end;

Для того, чтобы добавить элемент в список, необходимо вначале определить его местоположение в списке (найти элемент до и элемент после).


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

procedure  include_in_list (r: rec);

var  next,curr: plist;  prev: ^plist;

begin

    next := po;      {Первый элемент списка}

    prev := @p0;   {Сcылка на указатель первого элемента}

    while  (next<>Nil) and (order (r, next^.d) >= 0) do begin

        prev := @(next.p);        {Сcылка на указатель в предыдущем элементе}

        next := next.p                 {Переход к следующему элементу}

    end;    {Cписок кончился или последняя запись предшествует текущей}

    new (curr);                          {Создание копии элемента списка}

    curr^.d := r;                       {Заполнение элемента}

    curr^.p := prev^;               {Ссылка последующий элемент списка}

    prev^ := curr;                    {Ссылка в прдыдущем элементе на новый}

end;

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





function  exclude_from_list (r: rec): boolean;

var  next: plist;  prev: ^plist;

begin

    exclude_from_list := false;

    next := po;      {Первый элемент списка}

    prev := @p0;   {Сcылка на указатель первого элемента}

    while  (next<>Nil) and (order (r, next^.d)  <= 0) do

        if  order (r, next^.d) = 0                                  {Уничтожить элемент списка}

            then  begin prev^ := next.p;                      {Ссылка в прдыдущем элементе на последующий}

                                  dispose (next);                        {Освободить ненужную память}

                                  exclude_from_list := true;  {Элемент удален}



                                  break

                     end

            else  begin  prev := @(next.p);                 {Сcылка на указатель в предыдущем элементе}

                                  next := next.p                          {Переход к следующему элементу}

                     end

end;

  Кольцевой список отличается от линейного тем, что в нем указатель в последнем элементе не равен Nil, а указывает на первый элемент, то есть ссылки замыкают список в кольцо. Кольцевой список позволяет производить поиск не только с первого, но и с любого элемента. Процедуры поиска, добавления и уничтожения в кольцевом списке несколько отличаются за счет проверки условия окончания поиска (next <> p0  вместо  next <> Nil).

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


Использование указателей при вызове процедур


Предположим, что формальный параметр z процедуры p

является указателем  на значение определенного типа (например, целого). Тогда при обращении к процедуре  во внутреннюю переменную скопируется адрес, а само значение по данному адресу не будет затронуто. Если в процедуре встретится присваивание  вида z^ := 7, то по адресу указателя заносится число 7. При выходе из процедуры это значение останется, то есть переменная по этому адресу получит новое значение. Например, после вызова p(@n) переменная n

примет значение 7. Эффект будет таким же, как если бы задать параметр обычным целым числом, но описать его выходным (с ключевым словом var) и обратиться к процедуре оператором p(n).

Однако использование указателя имеет свои преимущества. Оно позволяет обойти стандартное ограничение Паскаля на строгое соответствие типов формального и фактического параметров вызова процедуры. Особенно это касается соответствия длин массивов. Дело в том, что определение указателя некоторого типа требует выделения памяти для хранения адреса, но не требует выделения памяти для хранения значения этого типа. Оператор вида p:=@x всего лишь совмещает значение, обозначаемое как p^, с уже существующей переменной x. Пусть имеется указатель p на массив некоторой длины n и массив a

меньшей длины k, а типы элементов массивов одинаковые. Если теперь присвоить p^:=@a, то при обращении к элементам вида p^[m], где m>k, фактически произойдет обращение к памяти, не принадлежащей массиву a, что неправильно. Но если программно следить за тем, чтобы индекс в выражении p^[m]

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

function find_integer (

    x: integer;   {Значение для поска}

     p: pointer;  {Массив для поиска}

     n: integer)  {Длина массива}

        : integer;      {Возвращает номер совпавшего элемента или 0 в случае неудачи}

type  ar: array [1..30000] of integer;

var

    k: integer;

    p1: ^ar;

begin

    find_integer := 0;

    p1 := p;

    for ki:=1 to  n  do

        if  p1^[k]=x  then

            begin

                find_integer := k;

                break

            end

end;

Обратиться к данной функции можно следующим образом:

var a: array [1..20] of

integer;

...

i := find_integer (23,@a,20);



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


В конце 1960-х годов Министерство Обороны США начало эксперименты по соединению компьютеров друг с другом и с людьми с помощью телефонных линий, используя фонды Агентства Перспективных Проектов Исследований Министерства Обороны США (U.S Defense Department's Advanced Research Projects Agency - ARPA). Была спроектирована сеть, которая явилась предтечей Internet, – она называлась ARPAnet. ARPAnet была экспериментальной сетью, – она создавалась для поддержки научных исследований в военно-промышленной сфере, – в частности, для исследования методов построения сетей, устойчивых к частичным повреждениям, получаемым, например, при бомбардировке авиацией и способных в таких условиях продолжать нормальное функционирование. Это требование дает ключ к пониманию принципов построения и структуры Internet. В модели ARPAnet всегда была связь между компьютером-источником и компьютером-приемником (станцией назначения). Сеть предполагалась ненадежной: любая часть сети может исчезнуть в любой момент.

ARPAnet использовала технологию передачи данных, которая называется "коммутация пакетов" (packet switching). При этой технологии передаваемое по сети сообщение разбивается на небольшие пакеты, каждый из которых имеет свой адрес назначения. Пакеты перемещаются по сети независимо. Ответственность за поддержание связи возложена не на саму сеть, а на входящие в сеть компьютеры. Основной принцип состоял в том, что любой компьютер мог связаться как равный с равным с любым другим компьютером. Сеть задумывалась и проектировалась так, чтобы от пользователей не требовалось никакой информации о конкретной структуре сети. Для того, чтобы послать сообщение по сети, компьютер должен поместить данные в некий "конверт'', называемый, например, IP, указать на этом "конверте'' конкретный адрес в сети и передать получившиеся в результате этих процедур пакеты в сеть.

В семидесятых годах при поддержке ARPA были разработаны правила, или протоколы, пересылки данных между различными компьютерными сетями.
Эти протоколы с общим именем ‘TCP/IP’ сделали возможным разработку всемирной Сети, которую мы сейчас имеем и которая соединяет компьютеры всех видов через национальные границы. К концу семидесятых были разработаны связи между ARPANet и ее контрагентами в других странах. Мир оказался связан в одно целое паутиной компьютерных сетей.

Весь опыт работы Internet подтвердил, что большинство принятых решений оказались разумными и верными. Активисты Internet начали устанавливать IP-программное обеспечение на все возможные типы компьютеров. Вскоре оно стало наиболее приемлемым способом для связи разнородных компьютеров. Такая схема понравилась правительству и университетам, которые проводят политику покупки компьютеров у различных производителей. Каждый покупал тот компьютер, который ему нравился и вправе был ожидать, что сможет работать по сети совместно с другими компьютерами.

Примерно в это время (около 1980 г.) разработчики операционной системы Unix вышли с новой возможностью обмена информацией между двумя компьютерами по телефонным линиям, названной UUCP (Unix-to-Unix Connection Protocol). Том Траскотт, Джим Эллис, Стив Белловин и Стив Дэниел написали программное обеспечение конференций и связали компьютеры в университете Дьюка и Северной Каролины.

Слухи разошлись быстро, и в 1981-м году аспирант из Беркли Марк Хортон и старшеклассник местной школы Мэтт Гликман выпустили новую версию, которая добавила новые возможности и позволила осуществлять пересылку больших объемов информации - исходная программа из Северной Каролины разрешала только передачу нескольких статей на группу новостей в день. Сегодня Usenet связывает десятки тысяч мест и систем по всему миру, от огромных компьютеров до компьютеров Amiga.

Примерно 10 лет спустя после появления ARPAnet появились Локальные Вычислительные Сети (LAN), например, такие как Ethernet и др. Одновременно появились компьютеры, которые стали называть рабочими станциями. На большинстве рабочих станций была установлена операционная система UNIX.


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

Одной из важнейших среди этих новых сетей была NSFNET, разработанная по инициативе Национального Научного Фонда (National Science Foundation – NSF). В конце 80-х NSF создал пять суперкомпьютерных центров, сделав их доступными для использования в любых научных учреждениях. Было создано всего лишь пять центров потому, что они очень дороги даже для богатой Америки. Именно поэтому их и следовало использовать кооперативно. Возникла проблема связи: требовался способ соединить эти центры и предоставить доступ к ним различным пользователям. Сначала была сделана попытка использовать коммуникации ARPAnet, но это решение потерпело крах, столкнувшись с бюрократией оборонной отрасли и проблемой обеспечения персоналом.

Тогда NSF решил построить свою собственную сеть, основанную на IP технологии ARPAnet. Центры были соединены специальными телефонными линиями с пропускной способностью 56 KBPS (7 KB/s). Однако, было очевидно, что не стоит даже и пытаться соединить все университеты и исследовательские организации непосредственно с центрами, т.к. проложить такое количество кабеля – не только очень дорого, но практически невозможно. Поэтому решено было создавать сети по региональному принципу. В каждой части страны заинтересованные учреждения должны были соединиться со своими ближайшими соседями. Получившиеся цепочки подсоединялись к суперкомпьютеру в одной из своих точек, таким образом суперкомпьютерные центры были соединены вместе.


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

Это решение было успешным, но настала пора, когда сеть уже более не справлялась с возросшими потребностями. Совместное использование суперкомпьютеров позволяло подключенным общинам использовать и множество других вещей, не относящихся к суперкомпьютерам. Неожиданно университеты, школы и другие организации осознали, что заимели под рукой море данных и мир пользователей. Поток сообщений в сети (трафик) нарастал все быстрее и быстрее пока, в конце концов, не перегрузил управляющие сетью компьютеры и связывающие их телефонные линии. В 1987 г. контракт на управление и развитие сети был передан компании Merit Network Inc., которая занималась образовательной сетью Мичигана совместно с IBM и MCI. Старая физически сеть была заменена более быстрыми (примерно в 20 раз) телефонными линиями. Были заменены на более быстрые и сетевые управляющие машины.

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

В девяностых годах сеть продолжала разрастаться экспоненциально. По некоторым оценкам, объем пересылаемых сообщений растет на 20 процентов в месяц. В ответ на это правительство и другие пользователи пытаются в последние годы расширить саму Сеть. Когда-то основной "хребет" Сети в Соединенных Штатах передавал данные со скоростью 56000 бит в секунду. Это оказалось слишком медленно для все возрастающего объема пересылаемых данных, и максимальная скорость возросла до 1.5 миллиона, а затем - до 45 миллионов бит в секунду.


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

Другое серьезное новшество - разработка коммерческих служб, которые предоставляют услуги по межсетевому обмену, сравнимые по скорости с соответствующими услугами правительственной системы. Фактически в середине 1994 года правительство Соединенных Штатов самоустранится от ежедневного управления работой Сети, и местные и национальные организаторы услуг сети будут ее расширять.

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

В 1988 году проект гипертекстовой системы Теодора Нельсона обрел источник финансирования у Джона Уокера, основателя фирмы Autodesk. Решающий шаг в создании WWW совершил Тим Бернерс-Ли. В конце восьмидесятых годов он, работая в Лаборатории физики элементарных частиц европейского центра ядерных исследований, более известного под названем CERN, занимался проблемами применения идей гипертекста для построения информационной среды, которая решила бы проблемы обмена информацией между физиками, работавшими в большом неоднородном CERN"е, и их партнерами в других странах. CERN был уникальным местом, одним из оживленных перекрестков Интернет. Еще до WWW Бернерс-Ли создал гипертекстовую систему Enquire, которая была по сути записной книжкой. В ней, как и впоследствии в WWW, была заложена идея о том, что компьютеры должны представлять информацию подобно тому, как она представляется в нашем мозгу, т.е.


ассоциативно.

Проект, который в конечном счете привел к созданию Всемирной Паутины и того явления, которое мы теперь называем Web-технологией, стартовал в в CERN в 1989 году. Бернерс-Ли как раз и сотворил Всемирную Паутину, заимствовав идею гипертекста у Нельсона и творчески развив ее. Он выпустил начальный протокол передачи гипертекстов, управляющий движением информации в Паутине, разработал универсальный указатель ресурсов как единую систему адресации, объединившую в себе большинство существующих в Интернет технологий поиска и связи, наконец, он создал язык разметки гипертекстов.

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

Бернерс-Ли избрал для решения основной проблемы Интернет академический подход - и в этом состоит одна из причин жизненности Web-технологии. Однако настоящему перевороту было суждено произойти тогда, когда сеть Интернет стала открытой для мира, а мир открыл для себя Интернет. Чтобы шире раскрыть двери Интернет для пользователей, нужно было сделать ее доступной для неискушенных в программировании любителей.

Это совершил Марк Андриссен, в то время сотрудник Национального центра прикладных систем для суперкомпьютеров США (NCSA), разработав зимой 1993 года в соавторстве со своим коллегой по NCSA Эриком Байна программу для просмотра информации, представленной в виде гипертекстов Программа называлась Mosaic. Как и любая начальная версия программы, она обладала некоторыми недостатками (у кого их нет?), но главное в ней уже было - графика стала полноправной частью интерфейса, мышь -основным средством работы с информацией, и Интернет открыл свои просторы миллионам пользователей, не знающих магических заклинаний системы Unix.



Богатая, работающая с изображениями программа для доступа к WWW и другим сервисам Интернет, Mosaic требовала от пользователя не больше знаний о своей внутренней сути, чем требуется знаний об устройстве автомобиля от человека, сидящего за его рулем. Состоящая всего из 9000 строк кода (сравните с 11 миллионами строк Windows 95), Mosaic стала распространяться быстрее любой когда-либо написанной программы.

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

В декабре 1993 года Андриссен ушел из NCSA и уехал в Силиконовую Долину. О его пребывании в Долине узнал Джим Кларк, некогда университетский профессор и основатель компании Silicon Graphics. Кларк как раз искал проект, в который можно было бы вложить деньги. Его заинтересовала Mosaic, и скорая его встреча с Андриссеном в начале 1994 года стала отправной точкой компании Netscape, первоначально названной Mosaic Communications. Это, по сути дела, послужило началом новой волны, когда WWW перестала быть университетской игрушкой, превратившись в наиболее быстро развивающееся направление компьютерной индустрии.

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


Язык Java


Java - интерпретируемый язык программирования с синтаксисом C++, специально рассчитанный на работу в открытой сетевой среде. Особенностью Java является использование программ в сети. Программа на Java не компилируется, а переводится в промежуточную форму (так назывемый бинарный псевдокод). Такие передаваемые по сети маленькие частично откомпилированны программы называются Java-аплетами. Программы-навигаторы на клиентском компьютере должны включать Java-интерпретатор для выполнения этиx апплетjd. При этом доступ к ресурсам машины, на которой апплет работает, для Java-программы может быть ограничен с целью обеспечения безопасности.. С серверов Интернет могут вызываться не только программы, но и описания объектов или форматов данных.

Java позволяет решить самые глубокие проблемы WWW: отсутствие интерактивности, ограниченный контроль вида документа, ограниченный набор форматов встроенной графики и других объектов мультимедиа. Если Вы создаете документ в Интернет и используете Java, то, включив в документ картинку в придуманном Вами формате, Вы можете также указать ссылку на программу, которая умеет читать Ваш формат и рисовать картинку. Если Вас не устраивают существующие протоколы передачи данных в Интернет, то Вы можете определить свой протокол и передавать данные по нему, предварительно указав ссылку, откуда брать программу для его поддержки. WWW-навигатор, поддерживающий Java, неограниченно расширяем и позволяет реализовать все, что угодно. При этом замечательна та особенность, что с точки зрения пользователя все предельно просто - он пользуется стандартным интерфейсом, не замечая никаких сложностей с форматами, протоколами и т. д.

Сегодня Java чаще всего применяется для передачи через Интернет аплетов, реализующих простые вещи  для  украшения WWW-страниц. Через Интернет можно передавать не просто данные, но приложения. Новая технология сделала документы объектами, вместе с которыми стали передаваться и методы их обработки. Это предоставляет возможность построения средствами Java больших программных продуктов, полностью использующих возможности современных корпоративных информационных сред, построенных на базе высокоскоростных сетей и мощных серверов баз данных в архитектуре клиент-сервер.
Используя такую технологию, можно построить практически идеальную корпоративную информационную систему, где данные хранятся на одном сервере, обрабатываются на другом, а отображаются на Java-терминалах. Такая схема наиболее экономична и практична: пользовательские рабочие места дешевы, поскольку их ресурсы и архитектура специализированы и адекватны возлагаемым на них задачам; сеть минимально загружена, поскольку по сети передаются методы отображения объектов и данные, а значит трафик гораздо ниже; вычислительные ресурсы централизованы, а значит более эффективно используются; данные также централизованы и проще управляются, резервируются и надежней защищены.

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


Электронная почта


Электронная почта (e-mail) - первый из сервисов Интернет, наиболее распространенный и эффективный из них. Электронная почта - типичный сервис отложенного чтения (off-line). Вы посылаете сообщение (обычно в виде текста), адресат получает его на свой компьютер, а читает сообщение тогда, когда ему будет удобно.

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

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

E-mail универсален - множество сетей во всем мире, построенных на совершенно разных принципах и протоколах, могут обмениваться электронными письмами с Интернет. Для передачи сообщений электронной почты в основном используется протокол SMTP, а для приема– POP3. В Windows можно использовать разнообразные программы для работы с E-mail – специализированные, как Outlook Express, или же встроенные в Web броузер, например в Netscape Navigator.



Классификация вычислительных устройств


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

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

Миникомпьютером называется универсальная ЭВМ, компактная по размерам и средняя по производительности. К этому классу относятся персональные компьютеры, серверы и рабочие станции. Сейчас миникомпьютеры содержат до 1Гб оперативной памяти и несколько десятков гигабайт внешней памяти.

Совершенствование миникомпьютеров привело к оформлению современного поколения настольных систем высокой производительности, которые сегодня известны как рабочие станции. Первоначальная ориентация рабочих станций на профессиональных пользователей (в отличие от ПК, которые с самого начала ориентировались на широкие слои потребителей -непрофессионалов) привела к тому, что рабочие станции - это хорошо сбалансированные системы, в которых высокое быстродействие сочетается с большим объемом оперативной и внешней памяти, высокопроизводительными внутренними магистралями, высококачественной и быстродействующей графической подсистемой и разнообразными устройствами ввода/вывода. Это свойство выгодно отличает рабочие станции среднего и высокого класса от ПК и сегодня.

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

Персональные компьютеры (ПК)

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

Быстрый рост производительности ПК на базе новейших микропроцессоров Intel в сочетании с резким снижением цен на эти изделия и развитием технологии локальных шин (VESA и PCI), позволяющей устранить многие "узкие места" в архитектуре ПК, делают современные персональные компьютеры весьма привлекательной альтернативой рабочим станциям. В свою очередь производители рабочих станций создали изделия так называемого "начального уровня", которые по стоимостным характеристикам близки к высокопроизводительным ПК, но все еще сохраняют лидерство по производительности и возможностям наращивания. Насколько успешно удастся ПК на базе процессоров Pentium бороться против рабочих станций UNIX, покажет будущее, но уже в настоящее время появилось понятие "персональной рабочей станции", которое объединяет оба направления.

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


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

Первоначально мейнфреймы ориентировались на централизованную модель вычислений, работали под управлением патентованных операционных систем и имели ограниченные возможности для объединения в единую систему оборудования различных фирм-поставщиков. Однако стремительный рост производительности персональных компьютеров, рабочих станций и серверов создал тенденцию перехода с мейнфреймов на компьютеры менее дорогих классов: миникомпьютеры и многопроцессорные серверы. Эта тенденция получила название "разукрупнение" (downsizing). Конкуренция со стороны распределенных систем заставила производителей мейнфреймов существенно расширить возможности своих операционных систем в направлении совместимости. В настоящее время они демонстрирует свою "открытость", обеспечивая соответствие протоколов соединений OSI и TCP/IP или предоставляя возможность работы на своих компьютерах под управлением операционной системы UNIX собственной разработки.

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

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


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

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

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

Суперкомпьютер характеризуется следующими свойствами:

¨     существует ряд аппаратных и системных возможностей параллельного выполнения заданий на процессорах кластера;

¨     разделение ресурсов между процессорами: процессоры в кластере имеют доступ к общим дисковым накопителям и обращаются к их файлам данных как к локальным;



¨     если происходит отказ одного процессора, задания его пользователей автоматически могут быть перенесены на другой; то же относится к контроллерам внешних накопителей и других периферийных устройств;

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

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

Двумя основными проблемами построения вычислительных систем для критически важных приложений являются обеспечение сверхвысокой производительности и сверхнадежности функционирования системы. Задача обеспечения продолжительного функционирования системы имеет три составляющих: надежность, готовность и удобство обслуживания. Суперкомпьютеры относятся к типу "систем высокой готовности" (High Availability Systems). Системы высокой готовности имеют общую цель - минимизацию времени простоя. Имеется два типа времени простоя компьютера: плановое и неплановое. Плановое время простоя требуется для проведения работ по модернизации системы и для ее обслуживания. Неплановое время простоя является результатом отказа системы или компонента. Следует отметить, что высокая готовность не дается бесплатно. Стоимость систем высокой готовности намного превышает стоимость обычных систем.


Компьютер – универсальная вычислительная машина


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

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

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

Традиция связывает термин «алгоритм» с именем арабского ученого Аль-Хорезми.

Контрольные вопросы по теме.

Каково самое общее предназначение компьютера?

Что означает определение «универсальный» по отношении к компьютеру?

Что означают определения «дискретный» и «конечный» по отношению к алгоритму?

Для чего нужны блок-схемы?




Проблемами алгоритмизации при решении математических задач занимались Паскаль, Декарт, Лейбниц, Лаплас  и многие другие великие ученые. Особый интерес в этой области был инициирован Гильбертом в связи с его знаменитыми проблемами. В двадцатом веке формальная теория алгоритмов бурно развивалась. Можно назвать такие фамилии, как Гедель, Клини, Черч, Тьюринг, Пост, Марков, Петер.

Параллельно с теорией делались попытки создать практически работающие вычислительные устройства. В 1642г. Паскаль изобрел устройство, выполняющее сложение чисел, а в 1673г. Лейбниц сконструировал арифмометр, позволяющий выполнять четыре арифметических действия. В первой половине XIX в. английский математик Чарльз Бэббидж попытался построить универсальную машину, которая должна была выполнять любые вычисления без участия человека.  Программы для нее вводилась с помощью перфокарт, которые уже тогда употреблялись в ткацких станках. Реально такая машина (но не механическая, а электронная) была построена в США в 1943г.

Существует несколько альтернативных теорий представления алгоритмов. Ближе всего к реальным компьютерам представление Тьюринга и Поста, согласно которым вычислительный процесс есть результат функционирования автоматически работающей машины. Абстрактная машина описывается своим состоянием, которое представляет собой в самом общем случае конечный набор данных. Различается входная, промежуточная и выходная информация. Одна элементарная операция при работе машины заключается в том, что меняется фрагмент состояния машины. Само изменение зависит от других элементов данных и задается формальной инструкцией - командой. Полный набор команд конечен. Данные состояния машины, остающиеся после ее работы, являются выходной информацией. Алгоритмом в этом случае называется упорядоченная совокупность команд программы.

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


Этим он отличается от вычислительных устройств, являющихся частью производственных комплексов и выполняющих внутри них специальные функции. Любая информация представляется в цифровой форме (в двоичной системе счисления) и размещается в специальном хранилище данных, которое называется оперативной памятью компьютера. Алгоритм отображается в компьютере в форме машинной программы и состоит из отдельных инструкций – машинных команд. Очередная машинная команда производит с данными в оперативной памяти определенные действия. Число различных типов машинных команд ограничено.

Отметим основные свойства алгоритмов, лежащих в основе работы современных компьютеров:

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

¨     массовость - алгоритм должен быть применим ко многим различным наборам входной информации, а не к одному единственному;

¨     повторяемость - алгоритм должен давать один и тот же результат при одних и тех же входных значениях;

¨     конечность - алгоритм должен давать решение задачи за конечное число шагов.

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

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


А для этого необходимо иметь аде­кват­ные средства для описания маленьких, элементарных шагов алго­рит­ма и для описания структуры алгоритма.

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

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

Контрольные вопросы по теме.

1.     Каково самое общее предназначение компьютера?

2.     Что означает определение «универсальный» по отношении к компьютеру?

3.     Что означают определения «дискретный» и «конечный» по отношению к алгоритму?

4.     Для чего нужны блок-схемы?


Компьютерные программы и языки программирования


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

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

Язык записи команд, основанный на этой идее, получил название языка Ассемблера. На самом деле его структура намного сложнее описанной здесь. Однако в основнй своей части - максимальной приближенности к системе машин­ных команд - дело обстоит так, как описано.
В-частности, разные типы компьютеров характеризуются разными Ассемблерами, так что один из упомянутых недостатков машинных языков сохраняется. Однако при использовании Ассемблера возникает новый интересный аспект. Программа, записанная на Ассемблере, не может восприниматься компьютером непосредственно. Следовательно, ее нуж­но прочесть как обыкновенный текст и затем преобразовать в информацию, которая будет интерпретироваться компьютером как программа. Это дела­ется с помощью специальной программы, называемой транслятором, а про­цесс преобразо­вания программы на Ассемблере называется трансляцией. Попутно при трансляции на транслятор можно возложить выявление неко­торых ошибок при записи программы, нарушающих соглашения по записи. Такие ошибки называются синтаксическими.

Развитие программирования связано со слиянием двух ветвей - теорети­ческо­го и практического программирования - и появлением языков програм­миро­вания высокого уровня. Язык программирования высокого уров­ня позволяет отвлечься от конкретного машинного языка конкретного типа компьютеров и конкретного Ассемблера. Такой язык содержит правила записи программ, которые, с одной стороны, достаточ­ны и удобны для описания алгоритмов решения задач, а с другой стороны, толкуются совершенно однозначно и могут быть преобразованы в програм­мы в машинных кодах. Задача программиста заключается в том, чтобы подготовить правильный текст на языке программирования, а остальное возьмет на себя транслятор, который прочтет этот текст, проверит его на соответствие правилам языка и сформирует программу на машинном языке. Естественно, транслятор должен быть свой для каждого типа компьютера.

Языки программирования с описанными выше свойствами называются машинно-независимыми. Отметим, что при повсевместном переходе на языки программирования программой стал называться текст на языке программи­ро­вания, а оттранслированная программа на машинном языке стала назы­ваться машинным кодом или просто кодом.



Забегая вперед, следует сказать, что никто не составляет текст программы целиком вплоть до малейших деталей. В мире уже составлено огромное коли­чество программ, и очень многие из них имеют тождественные фрагменты, выполня­ющие одинаковые подзадачи. Наиболее типичные и употребитель­ные фрагменты уже написаны, отлажены и вставлены в трансляторы в форме так называемых стандартных процедур и функций. Из них составлены библи­о­теки, которыми программист может пользоваться (и обычно пользуется). Поэтому при трансляции программы, составленной программистом, не получается нормального кода: в нем нет тех внешних программ, которые хранятся в библиотеках. Чтобы отличить такой промежуточный продукт от работоспособной программы, он помещается в файл с расширением .obj (object), в то время как окончательный код получает расширение .exe (execute). Соответственно компиляцией называется преобразование текста программы в obj-файл, в то время как образование exe?файла путем сборки кода из нескольких фрагментов называется редактированием связей (линков­кой на жаргоне программистов, от английского Link).

Первыми языками программирования высокого уровня были COBOL, FORTRAN, затем ALGOL, BASIC, PL/1. Был накоплен определенный опыт в том, как эти языки должны быть устроены. Стало также ясно, что не может быть одного самого лучшего языка, и что при программировании различных задач удобнее использовать разные языки. В настоящее время языки програ­м­мирования делятся на специализированные и универсальные. Специали­зи­рованные используются для решения узкого класса задач. На универсальном языке можно запрограммировать любую задачу (вопрос об эффективности программирования и эффективности программы здесь не ставится). Универ­сальные условно делятся на простые и сложные. Простые имеют ограничен­ный набор средств и за счет этого проще в изучении и дают экономичный код (то есть откомпилированная программа занимает меньше места в памяти и быстрее выполняется).


Сложные имеют большее разнообразие синтаксичес­ких конструкций и зачастую сильно упрощают программирование, но сложны в изучении и дают менее экономичный код. Наиболее употребительными простыми языками являются PASCAL , C (более сложная версия - C++) и BASIC. В нашем курсе мы будем изучать программирование на основе языка PASCAL. Более сложные языки программирования – PL/1, ADA, MODULA-2.

Другое деление языков - деление на императивные и декларативные. Императивные позволяют формулировать алгоритм в форме схемы отдель­ных операций (согласно приведенному выше определению алгоритма). Декларативные языки позволяют формулировать сразу цель программы, а алгоритм ее решения строится автоматически. Естественно, такие языки пригодны не для всех, а только для определенного класса задач, для которых формализован процесс составления алгоритма в классическом смысле. В качестве примера декларативных языков можно привести языки PROLOG и PLANNER.

Язык программирования Паскаль придуман швейцарским ученым Никлаусом Виртом в 1970г. Паскаль вначале предназначался для учебных целей, однако оказался настолько удачным, что широко распостранился среди профессио­наль­­­ных программистов. Его достоинствами являются простота, естествен­ность, хорошая усваиваемость при обучении и эффек­тивность при реализа­ции программ. При этом неоднократно делались попытки улучшить Паскаль за счет полезных (с точки зрения улучшателей) нововведений. В результате для Паскаля, как и для других языков програм­мирования, стала актуальной проблема приведения языка к единому стан­дарту, иначе терялось главное достоинство языка высокого уровня - уни­версальность и переносимость. Этот стандарт был создан в 1983г (стандарт ISO 7185 - 83). В этом стандарте зафиксированы те конструкции и термины Паскаля, которые должны присутствовать в каждой реализации и не могут быть изменены.

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


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

Изложим схему профессионального программирования на языке высокого уровня. Оно состоит из нескольких этапов. Сначала нужно хорошо сформулировать задачу и придумать алгоритм решения задачи. Затем нужно реализовать алгоритм в форме текста программы на языке высокого уровня. После этого следует откомпилировать программу с помощью какого-либо компилятора с этого языка и выявить синтаксические ошибки в тексте прог­раммы (которые наверняка там будут). Исправленный текст следует отком­пи­ли­ро­вать заново. Подобная процедура может повториться несколько раз. Программу, в которой нет синтаксических ошибок, необходимо отладить. Отладкой называется процесс проверки правильности работы программы, то есть соответствия программы поставленной задаче. Поиск логических оши­бок в программе очень трудоемок. Наиболее общий способ отладки заключа­ет­ся в проверке функционирования программы для возможно большего числа вариантов разнообразных входных наборов данных. В большинстве случаев даже в программе, которая верно работает для широкого набора входных значений, обнаруживаются ошибки.

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


При наличии ошибок весь цикл повторяется сначала, и так до тех пор, пока про­грамма не окажется без изъянов. Для того, чтобы облегчить труд програм­мис­тов, были созданы такие программные комплексы, которые позволяли решать эти задачи, оставаясь внутри этих программных комплексов. Подо­бные комплексы принято называть средой программирования. Мы будем пользоваться средой  Турбо-Паскаль, созданной фирмой Borland.

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


Литература


1.      Айден, Кристоф и др. Аппаратные средства PC. СпБ., BHV, Санкт-Петербург, 1998г.

2.      Алексеев А., Евсеев Г., Мураховский В., Симонович С. Новейший самоучитель работы на компьютере. ИнформКом-Пресс, 2001г.

3.      Вербовецкий А.А. Основы компьютерной технологии. М., Алекс, 2000г.

4.      Гудмэн Джон. Управление памятью для всех. Диалектика, Киев, 1996г.

5.      Компьютер для тех, кому некогда. Под ред. Ф.И. Струнина, М., 2001г.

6.      Кушниренко А.Г., Леонов А.Г., Кузьменко М.А. и др. Информационная культура: Новые информационные технологии. М., Дрофа, 2000г.

7.      Мансфельд, Готхард и др. Аппаратные средства ПК. М., Бином, 1997г.

8.      Нортон П. Персональный компьютер фирмы IBM и операционная система MS-DOS. - М.: “Радио и связь”, 1991.



Маршрутизация в сетях TCP/IP


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

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

Если администратор локальной сети хочет, чтобы информационными ресурсами данной сети можно было пользоваться как внутри сети, так и за ее пределами, он должен данную сеть прописать в таблицах маршрутов провайдеров, к которым данная сеть подключена. Это взаимодействие носит не столько технический, сколько организационный характер и может занимать гораздо больше времени, чем доставка пакета из Москвы в Нью-Йорк. 



Машинная команда


В 1943г. в США была создана первая электронная вычислительная машина – Марк-1. Более удачный вариант – машина ЭНИАК – был создан в 1945г. К работе над ней был привлечен немецкий ученый Джон фон Нейман, который сформулировал основные принципы построения универсальных вычислительных машин. На этих принципах до сих пор строятся все компьютеры. В число этих принципов входит разделение устройств хранения информации и процессора, организация обмена с внешней средой, адресация памяти и т.д.

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

В общих чертах машинный язык устроен следующим образом. Программа состоит из машинных команд. Каждая команда представляет собой отдельную инструкцию и предназначена для выполнения одной опе­рации. Команда состоит из нескольких байтов информации (в персональных компьютерах от 2 до 4 байт), то есть разные команды могут иметь разную длину. Команды помещаются в оперативной памяти последовательно, одна за другой. По форме машинная команда представляет собой последовател­ьность двоичных цифр. Первый байт команды содержит код команды, который указывает номер операции. По номеру операции процессор определяет ту микросхему, которая будет выполнять операцию.
Код команды однозначно задает всю последовательность действий, выполняемых компьютером для вычисления результата операции. В частности, в зависимости от кода команды определяется длина команды. Часть команды, за исключением кода операции, указывает на дополнительные осо­бенности операции, которую команда выполняет, и содержит дополнительную информацию (например, адреса данных в оперативной памяти, необходимые для выполнения пересылок, или номера регистров процессора, участвующие в арифметических операторах).

Процесс выполнения машинной команды состоит из 3-х шагов: выборки очередной команды, выполнения команды и вычисления адреса следующей команды. Для выполнения команд в процессоре предусмотрены два специальных регистра: адресный регистр и командный регистр. Адресный регистр содержит адрес начального байта очередной выполняемой команды. Первый шаг заключается в считывании  по шине данных в командный регистр информации, содержащейся по этому адресу в оперативной памяти. Затем процессор выбирает из командного регистра код команды и далее все дальнейшее выполнение операции зависит от значения этого кода. В частности, от него зависит длина текущей команды. Эта длина прибавляется к значению адресного регистра, после чего там автоматически будет содержаться адрес следующей выполняемой команды (напомним, что в памяти компьютера команды расположены одна за другой).

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


Эти значения записываются в активизированный байт.

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

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

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


Машинная программа


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

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

Увеличение мощности компьютеров в сочетании с их дороговизной имело много следствий. Во-первых, системой стала работа на компьютере нескольких пользователей одновременно. Соответственно в оперативной памяти стали размещаться несколько программ, и поэтому начальный адрес программы может меняться от запуска к запуску.
При этом сбиваются рабочие адреса данных в памяти в командах программы. С этой проблемой оказалось справиться несложно. Для вычисления адреса теперь используются две характеристики: базовый начальный адрес размещения программы в памяти, который меняется от запуска к запуску, и смещение адреса относительно начала программы, которое в готовой программе неизменно. Адресный регистр процессора состоит из двух частей: одна содержит базовый адрес, другая смещение относительно начала программы. Из машинных команд извлекаются только смещения. Для конструирования фактического адреса, который и посылается по адресной шине, значение регистра базового адреса складывается со значением регистра смещения адреса. Регистр базового адреса заполняется в момент размещения программы в памяти и затем в процессе выполнения программы не меняется. Изменяется только адресный регистр смещения.

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

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


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

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

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


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

¨ текущая программа застывает на очередной команде и переходит в пассивное состояние;

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

¨     в оперативной памяти отыскивается незанятый участок, достаточный для размещения подпрограммы, и она переписывается на этот участок;

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

¨     управление передается подпрограмме, для чего в адресный регистр просто записывается адрес первой команды программы (точнее, его смещение; базовый адрес заполняется на предыдущем этапе);

¨     когда подпрограмма заканчивает свою работу, восстанавливается окружение и значения регистров программы, вызвавшей данную подпрограмму;

¨     место подпрограммы в оперативной памяти освобождается, то есть считается впредь незанятым;

¨     программа продолжает работать с той команды, на которой она остановилась.

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

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


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

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

Прежде, чем выполнить очередную команду, процессор проверяет, не поступило ли какое-то прерывание. Если поступило, то сначала запрашивается подтверждение прерывания, после чего определяется тип прерывания. Затем процессор приступает к выполнению программы обработки поступившего прерывания.


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

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

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



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

При наличии определенной операционной системы на компьютере работает одна программа – ядро этой операционной системы. Все прочие программы, в том числе и пользовательские, являются ее подпрограммами. Ядро операционной системы решает, какую программу запустить, как разместить программы и данные и т.д. Однако в конечном итоге ядро операционной системы управляется пользователем с помощью команд (как в MS DOS)  или различных манипуляций с мышью и клавиатурой (как в Windows).

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

Контрольные вопросы по теме.

1. Какие функции выполняет оперативная память?

2. Что такое адрес оперативной памяти?

3. Какие функции выполняет процессор?

4. Какую роль в компьютере выполняют порты ввода-вывода?

5. Для чего нужна шина адреса?

6. Как процессор выполняет машинную команду?

7. Как процессор узнает очередность выполнения команд?

8. Каковы причины разбиения программ на подпрограммы?

9. Для чего нужны прерывания?

10.    Что такое мультизадачность?

11.    Что означает функция управления памятью?


Межсетевой протокол IP


Модуль IP является базовым элементом технологии Интернет. При отправке данных этот модуль инкапсулирует переданное ему сообщение в IP-пакет, добавляя в заголовок поля, из которых основными являются IP-адрес источника, IP-адрес места назначения и поле «протокол». В поле «протокол» указывается тот модуль, которому должно быть передано инкапсулированное внутри IP-пакета сообщение. Центральной частью IP-модуля является его таблица маршрутов. Модуль IP использует эту таблицу при принятии всех решений о маршрутизации IP-пакетов. Чтобы понять технику межсетевого взаимодействия, нужно понять то, как используется таблица маршрутов. Пример таблицы маршрутов указан на рис.2.

Номер сети

Прямая / косвенная маршрутизация

IP-адрес шлюза

Номер сетевого интерфейса

223.1.2

Прямая

1

223.1.3

Косвенная

223.1.4.1

2

                                         Рис.2. Таблица маршрутов

Пусть модуль IP должен отправить IP-пакет другому компьютеру B. Для этого надо определить, через какой сетевой интерфейс сообщение должно быть отправлено и какой Ethernet-адрес должен быть указан в качестве адреса назначения пакета. Пусть компьютер B имеет IP-адрес  223.1.2.2. Ключом поиска служит номер IP-сети, выделенный из IP-адреса места назначения IP-пакета. Модуль IP с помощью маски подсети выделяет номер сети из IP-адреса B. Номер сети равен 223.1.2. В таблице маршрутов ему соответствует первая строка. В этой строке указано, что флаг маршрутизации имеет значение «прямая», а посылать сообщение надо через 1-й интерфейс. С помощью ARP-таблицы выполняется преобразование IP-адреса 223.1.2.2 в соответствующий Ethernet-адрес, и через 1-й интерфейс Ethernet-кадр посылается узлу В.

Пусть теперь узел IP-модуль посылает IP-пакет узлу В с адресом 223.1.3.2. Сетевому номеру 223.1.3 в таблице маршрутов соответсвует вторая строка. Поскольку флаг маршрутизации во второй строке имеет значение «косвенная», сообщение должно быть послано через шлюз C, IP-адрес которого 223.1.4.1 указан в третьем столбце.
Модуль IP осуществляет поиск в ARP-таблице, с помощью которого определяет Ethernet-адрес, соответствующий адресу шлюза 223.1.4.1. Но на место IP- адреса вставляется не адрес шлюза C, а адрес узла B, то есть IP-адрес назначения в этом пакете не соответствует Ethernet-адресу назначения. Затем пакет посылается через интерфейс 2, указанный во второй строке, шлюзу С. IP-пакет принимается сетевым интерфейсом в узле С и передается модулю IP компьютера C. Модуль проверяет IP-адрес места назначения, и, поскольку он не соответствует ни одному из собственных IP-адресов С, шлюз решает ретранслировать IP-пакет. Следуя тому же алгоритму, модуль IP в узле С выделяет сетевой номер из IP-адреса места назначения IP-пакета (223.1.3) и ищет соответствующую запись уже в своей таблице маршрутов. Если соответствующая строка характеризуется прямой маршрутизацией, пакет ретранслируется напрямую, в противном случае он опять направляется в шлюз и т.д. После того, как IP-пакет достигнет узла B,  содержащееся в IP-пакете сообщение передается протокольному модулю верхнего уровня (согласно значению поля «протокол»).

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

Итак, для отправляемых IP-пакетов, поступающих от модулей верхнего уровня, модуль IP должен определить способ доставки - прямой или косвенный - и выбрать сетевой интерфейс. Этот выбор делается на основании результатов поиска в таблице маршрутов. Для принимаемых IP-пакетов, поступающих от сетевых драйверов, модуль IP должен решить, нужно ли ретранслировать IP-пакет по другой сети или передать его на верхний уровень другому модулю (TCP или UDP). Если модуль IP решит, что IP-пакет должен быть ретранслирован, то дальнейшая работа с ним осуществляется также, как с отправляемыми IP-пакетами.


Входящий IP- пакет никогда не ретранслируется через тот же сетевой интерфейс, через который он был принят. Решение о маршрутизации принимается до того, как IP-пакет передается сетевому драйверу, и до того, как происходит обращение к ARP-таблице.

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

Адресное пространство сети TCP/IP может быть разделено на непересекающиеся подпространства - "подсети", с каждой из которых можно работать как с обычной сетью TCP/IP. Таким образом единая IP-сеть организации может строиться как объединение подсетей. Как правило, подсеть соответствует одной физической сети, например, одной сети Ethernet. Конечно, использование подсетей необязательно. Можно просто назначить для каждой физической сети свой сетевой номер. Однако такое решение имеет два недостатка. Первый, и менее существенный, заключается в пустой трате сетевых номеров.

Более серьезный недостаток состоит в том, что если ваша организация имеет несколько сетевых номеров, то машины вне ее должны поддерживать записи о маршрутах доступа к каждой из этих IP-сетей. Таким образом, структура IP-сети организации становится видимой для всего мира. При каких-либо изменениях в IP-сети информация о них должна быть учтена в каждой из машин, поддерживающих маршруты доступа к данной IP-сети. Подсети позволяют избежать этих недостатков. Ваша организация должна получить один сетевой номер, например, номер класса B. Стандарты TCP/IP определяют структуру IP-адресов. Для IP-адресов класса B первые два байта являются номером сети. Оставшаяся часть IP-адреса может использоваться как угодно. Например, вы можете решить, что третий байт будет определять номер подсети, а четверый байт - номер узла в ней. Вы должны описать конфигурацию подсетей в файлах, определяющих маршрутизацию IP-пакетов. Это описание является локальным для вашей организации и не видно вне ее. Все машины вне вашей организации видят одну большую IP-сеть.


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

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

Вы также должны выбрать "маску подсети". Она используется сетевым программным обеспечением для выделения номера подсети из IP-адресов. Биты IP-адреса, определяющие номер IP-сети, в маске подсети должны бытьравны 1, а биты, определяющие номер узла, в маске подсети должны бытьравны 0. Как уже отмечалось, стандарты TCP/IP определяют количество байтов, задающих номер сети. Часто в IP-адресах класса B третий байт используется для задания номера подсети. Это позволяет иметь 256 подсе-тей, в каждой из которых может быть до 254 узлов. Маска подсети в такой системе равна 255.255.255.0. Но, если в вашей сети должно быть больше подсетей, а в каждой подсети не будет при этом более 60 узлов, то можно использовать маску 255.255.255.192. Это позволяет иметь 1024 подсети и до 62 узлов в каждой. (Напомним, что номера узлов 0 и "все единицы" используются особым образом). Обычно маска подсети указывается в файле стартовой конфигурации сетевого программного обеспечения.


Протоколы TCP/ IP позволяют также запрашивать эту информацию по сети.

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

Предположим, что нужно посылать IP-пакеты по IP-адресу 128.6.7.23. Первый IP-пакет пойдет на шлюз по умолчанию, так как это единственный подходящий маршрут, описанный в таблице. Однако шлюз128.6.4.27 знает, что существует лучший маршрут, проходящий через шлюз128.6.4.30. (Как он узнает об этом, мы сейчас не рассматриваем. Существует довольно простой метод определения лучшего маршрута.) В этом случае шлюз 128.6.4.27 возвращает сообщение перенаправления, где указывает, что IP-пакеты для узла 128.6.7.23 должны посылаться через шлюз 128.6.4.30. Модуль IP на машине-отправителе должен добавить соответствующую запись в таблицу маршрутов. Все последующие IP-пакеты для узла 128.6.7.23 будут посланы прямо через указанный шлюз.

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


Модель взаимодействия открытых систем


Проблема стандартизации, характерная для современного развития общества в целом, в сфере распространения информации особенно остра в связи с возникновением глобального информационного пространства. В настоящее время все вычислительные сети работают в стандарте взаимодействия открытых систем (англ. Open Systems Interconnection - OSI). Стандарт OSI включает в себя правила построения информационных пакетов, передаваемых по сети, и последовательность действий, выполняемую при обработке этих пакетов. Стандарт реализуется в форме протоколов – формализованных правил, описывающих взаимодействие на различных уровнях обработки информации. Протоколы могут содержать как нормативную информацию, обязательную к исполнению, так и правила рекомендательного характера в использовании того или иного метода.

Модель ISO предполагает, что прежде, чем быть переданным по сети, сообщение проходит несколько этапов обработки. Каждый этап обработки решает задачи своего уровня. Сама обработка довольно проста. Для очередного этапа входной пакет представляет собой «черный ящик» неизвестного содержания. Этот пакет может быть разделен на несколько более мелких пакетов (такая операция называется коммутацией пакетов). После этого к каждому составляющему пакету добавляется или заголовок (в начало), или хвостовик (в конец), или и то, и другое вместе. Говорят что пакет «обертывается» в служебную информацию. В результате первоначальная информация несколько раз «обертывается» в служебную информацию различных уровней. Служебная информация обычно состоит из нескольких полей. Содержание полей зависит от уровня обработки и используемых соглашений – протоколов. Значения полей используются при расшифровке сообщения, когда из обертывающего пакета извлекается содержащийся там исходный пакет, после чего несколько пакетов собираются в один (операция, также предусмотренная технологией коммутации пакетов).

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

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

¨ физический уровень (Physical Layer);

¨       канальный уровень (Data Link);

¨       сетевой уровень (Network Layer);

¨       транспортный уровень (Transport Layer);

¨       сеансовый уровень (Session Layer);

¨       уровень представления данных (Presentation Layer);

¨       прикладной уровень (Application Layer).

При отправлении сообщения обработка начинается от высшего кровня к низшему. При расшифровке сообщения обработка производится в обратном порядке: от низшего уровня к высшему.

Основным назначением протоколов физического уровня явля­ются физическая связь и неразрывная с ней эксплуатационная готовность. Соответствующий заголовок описывает характеристики физической сети передачи данных, которая используется для межсетевого обмена. Это такие параметры, как напряжение в сети, сила тока, число контактов на разъемах и т.п. Для описания этих характеристик используются такие стандарты, как, например, RS232C, V35, IEEE 802.3 и т.п. На физическом уровне выполняется преобразование данных, поступающих от следующего, более высокого уровня (уровень управления передачей данных ) в сигналы, передающиеся по кабелю. Ответственным за этот уровень является математическое обеспечение сетевого адаптера или модема.

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


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

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

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

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


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

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

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

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

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



Протоколы транспортного уровня поддерживают непрерывную передачу данных между двумя взаимодействующими друг с другом компьютерами вне зависимости от их месторасположения. Транспортный заголовок отвечает за надежность доставки данных. Сетевые модули транспортного уровня проверяют контрольные суммы и принимают решение о сборке сообщения в одно целое. В Internet транспортный уровень представлен двумя протоколами: TCP (Transport Control Protocol) и UDP (User Datagramm Protocol). Если предыдущий уровень (сетевой) определяет только правила доставки информации, то транспортный уровень отвечает за целостность доставляемых данных.

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

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


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

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

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

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

В заключение приведем определения некоторых терминов.

Синхронизация - механизм распознавания начала передаваемого блока данных и его конца.

Инициализация - установление соединения между взаимодейст­вующими узлами сети по запросу.

Блокирование - разбиение передаваемой информации на блоки данных строго определенной конфигурации (включая опо­знава­тельные знаки начала блока и его конца).

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


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

Обнаружение ошибок связано с установкой битов четности и вы­числением контрольных битов.

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

Текущая нумерация блоков

позволяет установить ошибочно переда­ваемую или поте­рявшуюся информацию.

Управление потоком данных

служит для распределения и синхрони­зации ин­формаци­онных потоков. Передача данных в сети требует управления потоками данных. Дело в том, что разные каналы в сети и разные узлы сети могут иметь разные скорости передачи и обработки данных. В этом случае более медленное устройство (например, принтер) должно иметь буфер для хранения порций данных. В результате данные в некоторых узлах могут накапливаться. Необходимо предусмотреть механизм такого накапливания и дальнейшей передачи.

Необходим механизм защиты сообщений, передаваемых по каналу связи и предназначенных определенному адресату, от прочтения его другим адресатом. Для этого аппаратное и программное обеспечение, управляющее распределением и контролем передачи данных в сети, должно иметь механизм обеспечения доступа к приему и передаче сообщений.Распределение, контроль и управление ограничениями доступа к данным вме­няются в обязанность пункта разрешения доступа (например, "только передача" или "только прием" ).

Методы восстановления

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


Монитор


Монитор (дисплей) компьютера предназначен для вывода на экран текстовой и графической информации. Экран монитора представляет собой прямоугольную таблицу из светящихся точек разного цвета. Однако в реальности точки группируются, причем в разных режимах по-разному. Мониторы персональных компьютеров могут работать в двух режимах: текстовом или графическом. В текстовом режиме экран монитора делится строками и столбцами на клетки  (в персональных компьютерах экран чаще всего состоит из 25 строк и 80 столбцов). Каждая клетка предназначена для одного символа. Все возможные символы сведены в специальную таблицу, содержащую чаще всего 256 символов. Таблица символов включает большие и малые латинские буквы, цифры, определённые символы, символы кириллицы, а также псевдографические символы, используемые для вывода на экран таблиц и диаграмм, построения рамок вокруг участков экрана и так далее. Технически каждый символ представляет собой картинку в клетке, нарисованную отдельными точками монитора. Эти картинки хранятся в специальной памяти монитора и рисуются аппаратными средствами монитора. Каждой ячейке экрана может соответствовать свой цвет (отдельно цвет символа и цвет фона), что позволяет выводить на экран  цветные надписи.

В текстовом режиме для полного описания экрана (в случае 25 строк и 80 столбцов) необходимо задать 25*80 = 2000 символов, и для каждого из них, кроме того, указать цвет символа и цвет фона. Всего различных цветов в текстовом режиме 16, и поэтому для задания цвета достаточно 4 разряда, то есть полбайта. Итого, для одного символа нужно иметь один байт для кода символа и один байт для цветов символа и фона. Всего на один экран требуется 4000б. Реально в текстовом режиме поддерживается не одна, а несколько видеостраниц размером 4000б каждая, описывающих разные варианты видеоэкрана. Для быстрой смены экрана монитора необходимо задать полный вид экрана на одной из запасных видеостраниц, а затем просто переключить монитор на эту страницу, и на экране при очередном выводе изображения появится полностью новая картинка.


В графическом режиме экран состоит из точек, полученных разбиением экрана на большое количество строк и столбцов. Эти точки называются пикселами. Количество пикселов на экране называется разрешающей способностью монитора в данном режиме. Сейчас мониторы персональных компьютеров могут работать в режимах 480*640, 600*800, 768*1024, 864*1152 или 1024*1280 пикселов. Каждый пиксел может быть окрашен в один из возможных цветов. В различных режимах работы монитора число различных цветов может составлять 24=16, 28 =256, 216 = 65536 или 224 = 16 777 216. Для описания цвета пиксела в этих режимов нужно выделить соответственно полбайта, один байт, два байта и три байта. Из окрашенных пикселов составляется любое изображение, в том числе надписи.

Информация, задающая изображение на экране монитора, хранится в памяти специального вида, которая называется видеопамятью. Логически видеопамять представляет собой участок оперативной памяти и характеризуется выделенным диапазоном адресов. Физически это отдельное устройство, вмонтированное в монитор (в отличие от остальной оперативной памяти, которая монтируется на материнской плате в системном блоке).  Когда монитор работает в текстовом режиме, он через определенные промежутки времени (примерно 70 раз в секунду) считывает информацию из соответствующего участка памяти и воспроизводит ее на экране. При этом изображения символов хранятся в специальной таблице изображений символов. Каждый символ в этой таблице все равно строится из точек – пикселов. Например, при разрешающей способности экрана 600*800 и при размерах экрана в текстовом режиме 25*80 на каждый символ приходится прямоугольник размером 24*10 пикселов.

По аналогичной схеме работает монитор персонального компьютера в графическом режиме, только в этом случае 70 раз в секунду полностью перерисовывается каждый пиксел экрана. При 224  цветах для задания цвета одного пиксела требуется 3 бита, поэтому при  разрешающей способности экрана 1024*1280 пикселов для полного задания экрана необходимо 3*1024*1280 байтов или почти 4Мгб.Ясно, что такой режим возможен только при видеопамяти 8мгб или 16мгб. При меньшей видеопамяти используется меньшее количество цветов. В остальном принцип работы монитора такой же. Каждый квант времени графическая страница видеопамяти переносится на экран. При изменении содержимого графической страницы видеопамяти автоматически меняется изображение на экране. Возможно сначала построить новое изображение на запасной странице видеопамяти, а затем переключить монитор на вывод этой страницы, в результате изображение на экране мгновенно изменится.

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


Назначение и преимущества сетей


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

Компьютерные сети подразделяются на локальные, региональные и глобальные.

Локальные вычислительные сети  (ЛВС, англ. LAN – Local Area Network) объединяют компьютеры, расположенные не более, чем в нескольких стах метрах друг от друга, в пределах одной территориальной единицы. Как правило, линии связи локальной сети принадлежат предприятию или учреждению, для которого предназначена сеть.

Региональные вычислительные сети с (РВС, англ. WAN – Wide Area Network) остоят их нескольких ЛВС, объединеных по территориальному или ведомственному признаку. К таким сетям относятся сети, обслуживающие крупные корпорации (корпоративные сети), сети, объединяющие университеты , или ведомственные сети (например, сеть органов внутренних дел). Линии связи принадлежат корпорации или ведомству или арендуются у специализирующихся на связи компаний.

Глобальные вычислительные сети  (ГВС, англ. GAN – Global Area Nework) объединяют компьютеры разных стран и разных континентов, принадлежащих фирмам самого различного профиля или частным лицам.

На основе компьютерных сетей строятся информационные системы, предназначенные для  управления предприятием.
Смысл использования сетей заключается в следующем. Во-первых, все управляющие действия на рабочих местах выполняются, как правило,  одной программой, по единым правилам и похожими средствами. Во-вторых, использование сетей позволяет расположить все данные системы на одном (реже нескольких компьютерах), обеспечивая доступ к ним со всех рабочих мест. Это позволяет не только сэкономить дисковое пространство, но и имеет ряд преимуществ, главным из которых является возможность обеспечить пользователям информационной системы доступ к информации в режиме реального времени. Под доступом в режиме реального времени имеется в виду то, что информация, введенная в систему одним пользователем, сразу же становится доступной всем остальным пользователям. Здесь подразумевается, что пользователи работают с данными одновременно. Работа в сети всегда многопользовательская, и в этом третье преимущество сети. В-четвертых, сети позволяют пользователям сообща использовать периферийные устройства. Чаще всего пользуются общими печатающими устройствами и общими магнитными дисками.

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

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

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


Назначение и структура операционной системы


Наиболее эффективной оказалась идея выделить в операционной системе основную программу, называемую ядром ОС (или диспетчером, или коммандером, или монитором операционной системы). Ядро загружается в оперативную память при включении компьютера, всегда находится в оперативной памяти, первым начинает выполняться и является основной работающей программой компьютера. Все прочие программы ОС являются служебными и выполняют конкретные функции операционной системы (они называются утилитами ОС). Утилиты загружаются в оперативную память при запуске и выгружаются (то есть освобождается занимаемая ими память) после окончания своей работы. При запуске прикладной программы или утилиты ОС диспетчер умеет находить незанятые участки оперативной памяти, из которых он выделяет нужное по размеру пространство и помещает туда загружаемую программу. При размещении программа должна получить начальный адрес ее размещения в памяти, который ей необходим для осуществления правильной адресации команд и данных. Этот адрес, а также другие сведения времени выполнения, необходимые для правильной работы программы, размещаются определенным образом в специальном блоке, который помещается перед началом программы. Далее происходит передача управления загруженной программе, играющей роль подпрограммы ОС. По такой же схеме происходит переход от прикладной программы к ее подпрограмме.

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


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

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

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

Вначале эксплуатировались несколько вариантов операционной системы на вычислительных машинах различных фирм.


В итоге выявилось первенство операционной системы фирмы IBM, названной MS DOS. Она выполняет все функции, описанные выше, и еще ряд других технических действий, таких как ведение часов и календаря. Был выпущен ряд версий MS DOS, включающих все новые и новые услуги, однако в целом концепция операционной системы, изложенная выше, осталась неизменной.

В современных компьютерах часть функций операционной системы реализована аппаратно, то есть выполняется микросхемами. Эта часть называется базовой системой ввода – вывода (англ. Base Input Output System – BIOS). За счет этого происходит увеличение скорости выполнения операций. Операционная система при необходимости выполнения таких функций обращается не к своим подпрограммам, а к соответствующим аппаратным средствам. Кроме того, отдельно выделяется программа начальной загрузки компьютера. Эта программа хранится в постоянной памяти компьютера, реализована также в виде микросхемы и не зависит от питания.

Наиболее важным следствием использования операционных систем при работе компьютера явилось то, что, поскольку типичные операции за прикладную программу выполняют утилиты ОС, то и программа может работать только с той операционной системой, на которую она ориентирована. Зато программы стала сравнительно независимы от компьютера, необходимо лишь, чтобы на нем работала нужная ОС. Этот факт сильно расширил круг производителей компьютеров, что не могло не оказать положительного воздействия на прогресс в этой области. В частности, из-за почти повсеместного распространения MS DOS  было создано огромное количество DOS-программ.

Позднее (в 80-х годах) стали появляться другие, более эффективные операционные системы. Усовершенствование шло по нескольким направлениям. Во-первых, одним из главных недостатков MS DOS являлись неудобные для рядового пользователя-непрофессионала правила общения с системой (называемые интерфейсом операционной системы). Для формулировки инструкций для ОС требовалось вводить с клавиатуры закодированные текстовые сообщения.


Частично трудность была снята за счет использования замечательной программной надстройки над MS DOS – программы Norton Commander, которая позволяет моделировать основные запросы к операционной системе MS DOS, манипулируя клавишами и надписями на экране. В наиболее современных версиях операционных систем дружественный пользователю интерфейс стал непосредственной частью самой системы. Наиболее удачно интерфейс взаимодействия с ОС был реализован в компьютерах системы Macintosh. Постепенно заложенные там идеи стали стандартом для всех программ, работающих в интерактивном режиме (то есть режиме общения с пользователем в реальном времени). В итоге была сконструирована и приобрела всеобщее распространение операционная система Windows со своим многооконным интерфейсом.

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

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

Частью проблемы печати является проблема шрифтов. Эта проблема также касается вывода текстовой информации на экран дисплея. В системе Windows шрифты являются частью системы. Для смены шрифта при печати информации от пользовательской программы требуется только указать название шрифта и некоторые его характеристики (размер и спецэффекты), остальное сделает диспетчер печати (то же при выводе на экран).



Другая типовая функция при работе на компьютере – работа с различными внешними устройствами – винчестерами, гибкими дисками, мониторами, клавиатурой и т.д. Эти устройства выпускаются самыми различными фирмами, и одинаковые по назначению устройства могут иметь различные характеристики и управляться совершенно разным способом. Для управления внешним устройством марки определенной фирмы требуется своя специальная программа, которая называется драйвером устройства. Существуют драйверы принтеров, драйверы дисководов, драйверы мыши и т.д. Если компьютер комплектуется определенным набором внешних устройств каких-то марок, то одновременно его программное обеспечение должно включать соответствующие драйверы. В системе MS DOS драйверы не включаются в состав самой системы. В системе Windows, поскольку к моменту ее возникновения были установлены стандарты основных производителей компьютерной техники, предусматривается набор стандартных драйверов для всех видов устройств. Кроме того, в систему можно включить любые дополнительные драйверы.

Дополнительная услуга, оказываемая системой Windows, заключается в автоматическом определении марок тех внешних устройств, которыми укомплектован компьютер в момент включения, после чего также автоматически выбираются соответствующие драйверы этих устройств (принцип Plug and Play). Естественно, это возможно только в случае, если устройство «умеет» отвечать на вопрос о своей марке (основные производители компьютерной техники это предусматривают).

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


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

Может случиться так, что при размещении в оперативной памяти нескольких программ для всех них места не хватит. В таких случаях Windows находит достаточный по объему участок памяти, обслуживающий те программы, которые в данный момент неактивны. Данные из этого участка переписываются на временно выделяемое на винчестере место, а сам участок используется для размещения активной программы и принадлежащих ей данных. Если активной станет предыдущая программа, то данные из использованного участка сохранятся в другом месте винчестера, а прежде сохраненная на винчестере часть оперативной памяти восстановится в прежнем виде. Такой метод называется своппингом или пэйджингом (в зависимости от способа обмена данных между оперативной памятью и винчестером). Чем больше оперативная память, тем реже используется своппинг и тем быстрее выполняются программы, то есть объем оперативной памяти напрямую связан с быстродействием.

Возникновение вычислительных сетей привело к появлению целого класса типовых задач, которые естественно было возложить на операционную систему. MS DOS ранних версий не выполняли сетевых функций. Самые поздние версии MS DOS и Windows поддерживают сетевые функции, но не в полном объеме. Для обеспечения сетевой связи между персональными компьютерами с подобными ОС обычно используется сетевая система типа NetWare фирмы Novell. Эта система не является собственно операционной системой, так как предполагает, что на каждом отдельном компьютере стоит своя операционная система (не важно, какая). Novell берет на себя все функции обеспечения процесса передачи данных между компьютерами с помощью следующего приема: для пользователя одного компьютера данные на другом компьютере представляются как еще один внешний носитель (диск) данного компьютера.


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

Очередным шагом в развитии операционных систем является объединение операционных и сетевых систем в одну. К таким сетевым операционным системам относятся Windows NT и различные версии UNIX. Эти системы обеспечивают как работу отдельного компьютера, так и работу в сети. При этом на них возлагается множество дополнительных (по сравнению с рассмотренными) функций. Это все действия, связанные с установлением связи между узлами сети и с передачей данных в сети. Однако частично изменяются и рассмотренные выше функции операционной системы. Прежде всего это относится к файловой системе. При использовании сетевых ОС файловое пространство сети единое. По форме оно похоже на иерархическую файловую систему MS DOS (с небольшими вариациями в наименовании дисков, каталогов и файлов),  но при этом разные диски физически располагаются на разных носителях разных компьютеров. Пользователь может совершать с файлами те же операции, которые он совершает с файлами отдельного компьютера, не заботясь о том, что фактически при этом происходит перемещение информации с одного компьютера на другой.

Сетевые ОС являются многопользовательскими (в отличие от многозадачной Windows). При этом приходится следить за тем, кто запустил конкретную программу и кто пользуется открытым в системе файлом. Важную часть сетевой операционной системы являются проблемы доступа. Эти проблемы решаются с двух сторон: со стороны доступа к данным и со стороны привилегий пользователя. И в Windows NT, и в UNIX есть механизм кодирования уровня доступа к данным и кодирования привилегий пользователя таким образом, что система имеет возможность определить, имеет ли данный пользователь доступ к данному диску, каталогу или отдельному файлу.Кроме того, используются различные системы паролей, которые обеспечивают доступ к данным только того пользователя, который является владельцем этих данных или которому разрешено испоьзовать эти данные польностью или ограниченным образом (например, только для чтения).


Некоторые другие устройства


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

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

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

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

Контроллер прямого доступа к памяти (англ. Direct Memory Access – DMA) позволяет осуществлять обмен информации оперативной памятью с внешними устройствами без участия процессора. Контроллер DMA освобождает процессор от управления операциями ввода – вывода, позволяя осуществлять ввод – вывод параллельно с вычислениями в процессоре.

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

Контрольные вопросы по теме.

1. Как связаны объем оперативной памяти и разрядность адресной шины?

2. Почему оперативная память электрическая, а не магнитная?

3. Можно ли вводить и выводить информацию без участия процессора?

4. Что такое видеопамять и чем она отличается от остальной оперативной памяти?

5. Зачем нужна постоянная память?

6. Зачем в компьютере нужен генератор тактовых импульсов?

7. Как управлять работой принтера?



Операционная система


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

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

С развитием вычислительных систем повышались быстродействие и объем оперативной памяти компьютеров, а также появились внешние магнитные носители (магнитные ленты и магнитные барабаны). Появилась возможность ввода текста с консоли управления ЭВМ. В связи с этим усложнились операции чтения информации в оперативную память и записи из оперативной памяти на внешние носители. Стало возможным сократить дорогостоящее время работы центрального процессора за счет сокращения простоев при загрузке новой программы: в оперативную память одновременно помещается несколько программ, и в то время, когда одна программа считывает данные или загружается сама, работает другая программа.
Также использование нескольких устройств для установки магнитных лент и барабанов позволило не тратить время процессора при смене ленты. Однако эти новшества автоматически привели к серьезным техническим трудностям в старом программировании.

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

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


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

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

Комплекс сервисных программ был объединен в систему, которая получила название операционной системы (ОС). Работа компьютера стала невозможной без операционной системы. Именно операционная система (точнее, ее ядро) является первой (и в некотором смысле единственной!) программой, которая начинает работать в компьютере. Остальные программы выполняются как подпрограммы ядра операционной системы. Основными функциями первых ОС были запуск программ, управление распределением оперативной памяти между различными программами и блоками данных, обеспечение всех нужных действий при операциях ввода – вывода и обработка всевозможных ситуаций, связанных со сбоями аппаратуры или программ (например, в случае отказа принтера или деления на нуль).






Операционная система MS DOS


Дисковая операционная система (DOS) загружается при включении компьютера. Это происходит следующим образом. Сначала начинают работать программы системы BIOS. Базовая система ввода-вывода (BIOS) находится в постоянном запоминающем устройстве (ПЗУ) компьюте­ра. Эта часть операционной системы является «встроенной» в компью­тер. Ее назначение состоит в выполнении наиболее простых и универ­сальных услуг операционной системы, связанных с осуществлением ввода-вывода. Базовая система ввода-вывода содержит тест фун­кционирования компьютера, проверяющий работу памяти и устройств компьютера при включении его электропитания. Кроме того, базовая система ввода-вывода содержит программу вызова загрузчика операци­онной системы.

Эта программа находит во внешней памяти программу загрузчика операционной системы. Загрузчик операционной системы — это очень короткая про­грамма, находящаяся в первом секторе каждой дискеты с операционной системой DOS. Функция этой программы заключается в считывании в память модулей операционной системы, имеющих название 10.SYS и MSDOS.SYS, и командного процессора DOS. После этого процесс загрузки DOS завершается. Обычно персональный компьютер настроен таким образом, что  сначала загрузчик ищется на флоппи-диске. Если последний не вставлен в компьютер, то загрузчик ищется на винчестере. На любом диске для загрузчика отведено одно и то же место (называемое нулевой дорожкой и скрытое от просмотра). Файл I0.SYS представляет собой дополнение к базoвой системе ввода-вывода в ПЗУ. Файл MSDOS.SYS реализует основные высокоуровневые услуги DOS.

Командный процессор DOS обрабатывает команды, вводимые пользователем. Командный процессор находится в файле COMMAND.СОМ на диске, с которого загружается операционная система. Некоторые команды пользователя, например Type, Dir или Сорy, командный процессор выполняет сам. Такие команды называются внутренними. Для выполнения остальных (внешних) команд пользователя командный процессор ищет на дисках программу с соответствующим именем и если находит ее, то загружает в память и передает eй управление.
По окончании работы программы командный процессор удаляет программу из памяти и выводит сообщение о готовности к выполнению команд (приглашение DOS).

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

Драйверы устройств — это специальные программы, которые дополняют систему ввода-вывода DOS и обеспечивают обслуживание новых или нестандартное использование имеющихся устройств. Например, с помощью драйверов осуществляется работас клавиатурой, монитором, принтером и т.д. Драйверы загружаются в память компьютера при загрузке операционной системы, их имена указываются в специальном файл CONFIG.SYS. Такая схема позволяет добавлять новые устройства, не затрагивая системные файлы DOS.


Операционная система UNIX


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

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

Операционная система UNIX состоит из ядра (Kernel), интерпретатора команд (Shell) и служебных программ – утилит. Утилиты UNIX делятся на пять групп:


- утилиты управления файловой системой;

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

-    утилиты управления коммуникацией данных;

-    библиотеки служебных подпрограмм;

-    среда программирования.

Ядро в свою очередь можно условно разделить на четыре части:

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

-    поддержка файловой системы;

-    размещение системных ресорсов;

-    обеспечение прав доступа.

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


Операционная система Windows


Операционная система Windows разработана фирмой Microsoft  и обеспечивает большое количество возможностей и удобств для пользователей и программистов по сравнению с MS DOS. Она основана на принципах, придуманных создателями машин фирмы Apple.  Широчайшее распространение Windows сделало ее фактическим стандартом для IBM PC-подобных компьютеров: подавляющее большинство пользователей таких компьютеров работают в Windows, поэтому в последнее время практически все новые программы разрабатываются для их эксплуатации в среде Windows.

В основу операционной системы Windows были положены совсем другие принципы, чем в основу MS DOS. От нее в первую очередь требовался естественный, простой и прозрачный интерфейс, ориентированный на пользователя-непрофессионала. Этот общий принцип реализован в Windows достаточно успешно.

Одно из основных достижений Windows - удобный графический интерфейс. Пользователю нет необходимости вводить команды в виде текстовых строк. Достаточно ориентироваться в деталях картинки, представленной в текущий момент на экране, с помощью манипулятора “мышь”  выбрать нужный элемент и щелчком мыши на нем осуществить нужное действие. С помощью той же мыши можно перемещать объекты (Drag and Drop - перетащить и положить)., менять их размер, открывать и закрывать окна на экране - и все это без применения клавиатуры. Очень удачно выбраны пропорции элементов окна, размеры диалоговых окон и размещение элементов в них, шрифты, сочетания цветов.

Достоинством Windows является персонализация программного окружения на пользовательском компьютере. Вообще, работу в среде Windows можно назвать документоориентированной или объектноориентированной. Объектно-ориентированный подход реализуется через модель ра­бочего стола. Пользователь сам формирует содержание рабочего стола, включив в него интересующие его в настоящий момент программы и документы. Вызов программы или документа осуществляется двойным щелчком мышью на пиктограмме. Существенно то, что состав рабочего стола не зависит от расположения соответствующих программ на винчестере.
Пользователь работает с задачами и приложениями так же, как с документами на своем письменном столе. Одно из главных отличий Windows  состо­ит в том, что основной упор в ней делается на документ, а програм­ма рассматри­вается только как инструмент для работы с документом.

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

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

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


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

Важнейшей особенностью Windows является вариативность средств поддержки работы приложений. Один и тот же результат можно получить, как минимум, тремя, а зачастую четырьмя и более способами. При этом основным является выполнение функций приложения посредством команд главного меню. За редчайшим исключением, любое действие приложения можно осуществить с помощью одной из команд. Кроме того, для наиболее важных и наиболее часто встречающихся операций в приложениях Windows  предусмотрены специальные кнопки с картинками  и подписями - пикто­граммы или иконки. Щелчок на такой кнопке сразу вызывает нужное действие. Третий стандартный способ выполнение типовых действий - нажатие соответст­вующей комбинации клавиш (так называемых горячих клавиш). Имеется в виду нажатие некоторой клавиши при нажатой клавише Alt, Ctrl или Shift (а иногда при нажатой паре этих клавиш). Кроме того, во многих случаях то или иное действие можно выполнить путем определенных манипуляций мышью - щелчком, двойным щелчком (возможно, при нажатой клавише Alt, Ctrl или Shift)  на каком-либо элементе окна или буксировкой мышью.

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

Windows – интегрированная система. В нее входит целый комплекс подпрограмм специального назначения - редакторы, графические редакто­ры,  программы настройки, программы печати и т.д., которые могут взять на себя часть функций, необходимых для работы приложений.


Windows стандартизирует операции обмена информацией между различными Windows-приложениями. В среде Windows можно составлять документы из частей, которые готовятся в различных приложениях. Так, при вставке в текст, подготовленный в текстовом процессоре Word,

рисунка, созданного в Paintbrush, рисунок рассматривается как объект. Он сохраняется, загру­жается и печатается совместно с документом. Но если, работая с текстом в Word,

вы захотите изменить рисунок, то достаточно выполнить двойной щелчок на рисунке, чтобы вызвать графический редактор Paintbrush с автоматической загрузкой рисунка. Все внесенные после этого в рисунок изменения авто­матически отобразятся и во вставке в текстовой документ. Пользователь в этом случае работает в редакторе Word так, как будто он снабжен дополнительными возможностями редактирования рисунков в полном объеме Paintb­rush.

Работа с объектами предусматривает также и операции с пиктограм­мами. Пиктограммы можно использовать внутри документов для вы­полнения функций таким же образом, как это делается в среде Windows. Это означает, что наряду с пиктограммами Windows-приложений можно использовать пиктограммы документов, которые формируются Windows-приложениями. Эти пиктограммы можно вставить в другой документ, который обрабатывается совсем другим приложением. При двойном щелчке на пиктограмме документа вызовется соответствующее приложение, которое вызовет выбранный документ. Этот метод называется методом редактирования доку­ментов «на месте» (in-place), а сам принцип объектного связывания и встраивания получил название OLE. Например, если в тексте, который обрабаты­вается в редакторе Word, есть таблица, созданная в программе Excel, то при щелчке на ней произойдет замена панелей инструментов Word панелью программы Excel. Пользователь может обрабатывать документ совсем другим приложе­нием, даже не подозревая об этом,

В частности, Windows берет на себя все взаимодействие приложений с внешними устройствами: монитором, клавиатурой, дисками, принтерами.


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

Для использования всех возможностей Windows программы должны быть спроектированны по требованиям Windows. Такие программы не могут выполняться вне среды Windows. В среде Windows могут выполняться и обычные программы, разработанные для MS DOS, но при этом такие программы не используют преимуществ Windows и работают медленнее, чем при непосредственном вызове из MS DOS.

Основное отличие программ для DOS и для Windows состоит в том, что DOS-программа может работать с аппаратными средствами компьютера непосредственно, минуя DOS, в то время как Windows-программа может обращаться к внешним устройствам  только через посредство Windows. Это снимает с разработчиков проблемму совместимости с конкретными внешними устройствами, так как ее берет на себя Windows. Поэтому любая Windows-программа не зависит от конкретных особенностей внешних устройств и может работать с внешним устройством, если с ним может работать Windows. Для подключения к компьютеру любого нового устройства достаточно установить драйвер этого устройства, прдназначенный для Windows, после чего все Windows-программы смогут работать с устройством.

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


Управление этими поцессами полностью берет на себя Windows.

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

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

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

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

Windows использует стандарт Plug & Play (пере­водится как «включил-и-работай»). Основная его идея заключается в том, что каждое устройство, соответствую­щее этому стандарту, сообщает при включении компьютера операционной системе о себе определенную информацию, благодаря которой операционная система выполняет автоматичес­кую конфигурацию периферийных устройств и разрешает аппарат­ные конфликты. Стандарту Plug & Play должен в первую очередь удовлетворять BIOS материнской платы и, разумеется, периферий­ные устройства. Таким образом, операционная система обеспечивает автоматическое подключение и конфигурирование устройств, соответствующих требованиям стандарта  Plug and Play, поддерживает совместимость с устаревшими устройствами и создает динамическую среду для подключения и отключения мобильных компонентов.



Windows является 32-разрядной операционной системой ( то есть для задания адресов в ОЗУ используется 32 разряда) и работает только в защищенном режиме процессора. Ядро, включающее уп­равление памятью и диспетчеризацию процессов, содержит команды с только 32-разрядными адресами. Это уменьшает издержки и ускоряет работу. Windows используется 32-разрядный код везде, где только возможно, что позволяет обеспечить повышенную надежность и отказоустойчивость системы. Однако помимо этого, для совместимости с устаревшими приложениями и драйверами используется и 16-разрядный код.

Windows поддерживает при­оритетную многозадачность (preemptive multitasking) и параллель­ные процессы (multithreading). За распределение времени процессора отвечает ядро системы, что обеспечивает нормальную работу фоновых задач. Windows поддерживает многопоточность - технологию, которая позволяет соответствующим образом осуществлять многозадачное выполнение своих собственных процессов.

Windows с самого начала создавалась для работы в сети, благодаря чему возможность совместного использования файлов и устройств полностью интегрирована в интерфейс пользователя Windows. В Windows вы можете получить доступ к сети без установки сете­вого адаптера. Его могут заменить модем и использование специального протокола РРР (point-to-point protocol - от-точки-к-точке). В этом случае скорость работы ограничена скоростью вашего модема. Система предоставля­ет развитые программные средства для доступа к таким сетям, как Internet.

Современную операционную систему сложно представить себе без средств мультимедиа. Для работы с аудио- и видеофайлами различ­ных форматов в составе Windows имеется набор кодеров — эффективных программных средств сжатия и распаковки этих фай­лов и преобразования их форматов для вывода на различные устрой­ства мультимедиа (слово «кодер» является сокращением слов «кодер-декодер», так же, как «модем» — сокращение от слов «модуля­тор-демодулятор»). При воспроизведении файла система запускает тот кодер, с помощью которого файл был создан.


Драйверы звуко­вых карт используют 32-разрядный код, но в тех случаях, когда сис­ тема не может распознать карту, применяется 16-разрядный драй­вер реального режима, который поставляется вместе с картой. При работе 32-разрядного драйвера защищенного режима драйвер ре­ального режима автоматически отключается.

Программы, рассчитанные на работу в MS DOS, запускаются под Windows в режиме эмуляции MS-DOS. Переключаясь в этот режим, Windows завершает все работающие приложения, а потом удаляет из памяти и саму себя, оставляя лишь маленький загрузочный модуль. Когда программа заканчивает свою работу, все восстанавливается.

Windows автоматически освобождает всю память, отведенную приложению, после того, как оно заканчивает работу. Бывает так, что некорректно написанные приложения освобождают не всю запрошенную ими память. Время от времени памяти оказыва­лось настолько мало, что единственным выходом оставался переза­пуск системы (а иногда и перезагрузка машины). Такая неприятность носит название «утечка памяти» («memory leak») и случается с про­граммными произведениями даже известнейших фирм. При за­вершении приложения в Windows вся память, занимаемая им, освобождается автоматически, и таких проблем не возникает.

Су­ществен­ный недостаток Windows состоит в относительно слабой защищенности от плохо рабо­тающих программ, содержащих ошибки.

Рассмотрим способ, каким операционная система Windows работает с оперативной памятью. Использование 32-разрядной адресации (4-байтный адрес) означает, что можно прямо адресовать пространство в 232 байт памяти. Windows полностью использует это пространство. Она всегда работает с воображаемой (виртуальной) оперативной памятью размером 232

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


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

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

Каждая собственная прикладная про­грамма Windows обслуживается подсистемой Win32. Прикладная программа загружается в виртуальное адресное про­странство объемом 4 Гбайт после отметки 2 Гбайт. Однако каждая программа видит собственное адресное пространство и не может видеть пространства, занятого другой программой. Случившиеся здесь ошибки, как правило, могут быть перехвачены обработчиком особых ситуаций и не в состоянии воздействовать на операционную систему. Хотя 32-разрядные приклад­ные программы «не видят» друг друга, они могут обмениваться данными через буфер обмена (Clipboard), механизмы DDE и OLE.

В нижней части виртуального адресного пространства (ниже метки 1 Мбайт) размещаются драй­веры устройств реального режима, обеспечивающие взаимодействие с периферийными под­системами, такими, как видеоплаты или принтеры. Эти программы нужны для обеспечения старых DOS-приложений.


Оперативная память


Основная память компьютера включает ОЗУ - оперативное запоминающее устройство (или память прямого доступа, англ. Random Access Memory – RAM), и ПЗУ – постоянное запоминающее устройство (или память только для чтения, англ. Read-Only Memory – ROM). Оперативное запоминающее устройство или оперативная память является основным средством хранения информации при работе компьютера. Все данные, которые должны быть обработаны в компьютере, сначала должны быть помещены в оперативную память. В оперативной памяти также хранятся промежуточные и конечные результаты работы компьютера. Кроме того, в оперативной памяти располагаются все работающие программы.

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

Постоянное запоминающее устройство содержит ту начальную программу, которая начинает работать при включении компьютера, и некоторые служебные программы операционной системы. В частности, в ПЗУ хранятся так называемые базовые программы ввода – вывода (англ. Base Input Output System - BIOS) и программы, предназначенные для проверки исправности и обслуживания аппаратуры самого компьютера. Они также выполняют первоначальную загрузку главной обслуживающей программы компьютера - так называемой операционной системы. Эти данные не уничтожаются при выключении компьютера.

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


В персональном компьютере ОЗУ представляет собой автономное устройство, которое присоединяется к разъему на материнской плате компьютера. Оперативная память может состоять из нескольких блоков. ОЗУ представляет собой интегральную схему, эквивалентную последовательности триггеров. Триггером принято называть прибор, который может находиться в одном из двух состояний , одно из которых считается единицей, а другое - нулем.  ПЗУ представляет собой интегральную схему, в которой программы зашифрованы соединениями, а не электрическими потенциалами, именно поэтому они сохраняются при выключении питания.

Запоминающие устройства ЭВМ, обладающие большим объемом памяти, как правило, обладают меньшим быстродействием (то есть для них увеличивается время чтения и записи информации в память). Наибольшим быстродействием обладают регистры процессора (регистры общего назначения – РОН). Быстродействие ОЗУ должно быть не меньше, чем быстродействие электронных схем операционной части. Объема памяти должно быть достаточно для записи программы решаемой задачи, а также исходных данных и промежуточных и конечных результатов. В то же время внешние запоминающие устройства обладают практически неограниченным объемом памяти, но зато и наименьшим быстродействием.

Для ускорения работы ОЗУ используется так называемая КЭШ-память процессора. Она имеет меньший объем, чем ОЗУ, но зато большее быстродействие. При наличии КЭШ-памяти данные из ОЗУ сначала переписываются туда, и лишь затем в процессор. При повторном обращении к памяти те данные, которые уже находятся в КЭШ-памяти, сразу переносятся в регистры процессора, за счет чего происходит экономия времени.

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


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

Наибольший номер ячейки ОЗУ равен величине ОЗУ минус единица. Адрес ячейки ОЗУ при работе компьютера передается по адресной шине. Адресная шина имеет такое количество разрядов, чтобы по ней мог пройти наибольший возможный адрес байта ОЗУ. При 20-разрядной шине это число 220-1 = 1 048 576, а при 32 разрядной шине – число 232-1, что больше четырех миллиардов. При современных объемах памяти 20-разрядной шины совершенно недостаточно даже для персональных компьютеров, и приходится прибегать к всевозможным ухищрениям. Для суперкомпьютеров недостаточно и 32-разрядной адресной шины.


Оператор безусловного перехода


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

<метка>.

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

<метка>  : <оператор - объект безусловного перехода>

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



Оператор цикла с постусловием


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

repeat

    <оператор> ;

    . . . ;

    <оператор>

until  <условие окончания цикла>

Этот оператор сначала выполняет последовательность внутренних операто­ров цикла. После этого он проверяет условие окончание цикла и, если оно ложно, снова выполняет внутренние операторы и т.д. Процесс заканчивается тогда, когда когда при проверке условия окончания цикла окажется, что оно истинно. Очевидно, что компоненты выражения, входящие в условие, также должны изменяться внутри цикла, иначе программа тоже зациклится.

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



Оператор цикла с предусловием


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

while  <условие выполнения цикла>  do  <оператор>

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

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



Оператор цикла со счетчиком


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

for

<счетчик> := <наименьшее значение> to  <наибольшее значение>  do  <оператор>

или

for

<счетчик> := <наибольшее значение> downto

<наименьшее значение> do  <оператор>

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

Внутри циклов всех трех типов можно использовать вспомогательные функции break и continue. Функция break прекращает выполнение цикла и передает управление на первый оператор после цикла. Функция continue

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



Оператор присваивания и выражения


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

<выражение - мишень присваивания> := <выражение>

Мишень присваивания - это либо имя переменной, либо индексированный элемент массива (вида a[n]), либо поле записи, либо ссылка на значение (вида p^, см. раздел 6.Указатели). Две литеры “:=“ называются знаком присваивания. Выражением в правой части присваивания является либо запись константы, либо имя другой переменной  или константы, либо формула, служащая для вычисления присваиваемого значения. Типы выражений в правой и левой части присваивания должны быть согласованы. В большинстве случаев они должны быть равны. Допускается два различных целых типа или два различных вещественных типа в обеих частях присваивания, а также присваивание целого типа вещественной переменной.

Формальное определение выражения основывается на принципе индукции (по-другому, рекурсии). Выражения строятся от простого к сложному. Элементарное выражение - это запись числовой или строковой константы, значение логического типа true  или  false, разрешенное значение перечислимого типа, имя переменной или константы. конструктор множества. Простое выражение - это либо элементарное выражение, либо любое выражение, заключенное в круглые скобки, либо вызов функции, имеющий синтаксис

<имя функции>  ( <список параметров через запятую> ).

Составное выражение представляет собой последовательность простых выражений, разделенных символами операций.

Числовые константы делятся на десятичные и шестнадцатиричные целые, вещественные в формате с фиксиро­ванной точкой и вещественные в экспоненциальном формате. Чтобы отличить запись целого шестнадцати­ричного числа от десятичного, перед числом ставится знак доллара “$”, например: $12, $ABCDEF.
Вещественное число в формате с фиксированной точкой записывается в виде: целая часть, точка, дробная часть (без пробелов). В экспоненциальном формате число предварительно представляется в виде m*10n, где m  называется мантиссой, а n

- порядком числа (n - целое). Сначала записывается мантисса в формате с фиксированной точкой, затем символ “E” и затем порядок в формате целого числа. Примеры числовых констант: 1, 55, 999999, 3.1415926, 2.71828, 0.5E-3.

Строковая константа - это произвольная последовательность символов, заключенная в кавычки: ‘Текст’. Если сама константа содержит кавычки, то для правильного ее задания кавычки внутри константы должны быть удвоены: запись ’Переведите слово ’’function’’ на русский язык’ означает текст: Переведите слово ’function’ на русский язык. Вместо записи символа внутри текстовой константы можно употреблять комбинацию символа # (решетки) и кода символа. Например, вместо ‘c’ можно написать #99, а вместо ‘S’ можно написать #83. В итоге может получиться запись типа ‘код_символа’#101’or’#80.

Конструктор множества - это список элементов множества, заключенный в квадратные скобки. Элементы множества отделяются друг от друга запятыми. Допускается запись диапазона вместо элемента: [1,3..7,7,13..21,90], [white..black, red], [ ].

Составное выражение - это несколько простых выражений , между которыми располагаются знаки операций. Знак операции может стоять и перед всем выражением. Операции бывают унарные и бинарные. Унарные опрации имеют один операнд, который располагается после знака операции. Бинарные операции  имеют два операнда, и символ операции располагаются между операндами. Если в составном выражении более двух компонентов, то возникает проблема, какие операции выполнять вначале. Для того, чтобы разрешить возникающие при этом противоречия, вводится понятие старшинства или приоритета операций. Операции с большим приоритетом выполняются раньше, операции с одинаковым приоритетом выполняются слева направо.

Все операции согласно их старшинству разбиты на четыре группы:



1. @         - переход от значения к указателю на значение;

not       - логическое отрицание;

2.     *          - умножение целых и вещественных чисел, пересечение множеств;

/           - деление чисел;

div       - деление целых чисел с остатком;

mod     - остаток от деления целых чисел;

and      - конъюнкция логических значений (и);

shl       - сдвиг двоичного представления целого числа влево;

shr       - сдвиг двоичного представления целого числа вправо;

3.     +          - сложение целых и вещественных чисел, объединение множеств,                      конкатенация строк;

-           - вычитание целых и вещественных чисел, дополнение множеств:

or         - дизъюнкция логических значений (или);

xor      - эксклюзивная дизъюнкция логических значений (исключающее или);

4.     =          - проверка равенства;

<>        - проверка неравенства;

<          - меньше;

>          - больше;

<=        - меньше или равно;

>=        - больше или равно;

in         - элемент содержится в множестве.

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

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

Допускается присваивание массивов или записей одинакового типа, при этом происходит копирование всех элементов массива или полей записи в правой части присваивания элементам массива или полям записи в левой части присваивания. Примеры присваиваний:

type

    color = (white, black, red, blue, green, yellow, brown);

    array1 = array  [0..10]  of  integer;

    record1 = record xx,yy: real;

                                     nn: color



                        end;

    set1 = set of color;

const

    ca: array1 = (2,4,56,-2,45,-34,678,4,-3,0,3);

    cr: record1 = (1.0, 1.456, green);

var

    x: real;

    b1: boolean;

    c1: string;

    a1: array1;

    s1:set1;

    r1: record1;

begin

x             := 3.1415926;                                 {Присваивание вещественного значения}

a1          := ca;                                                 { Копирование массива целиком из ca в a1}

b1          := ( (x>3) and  (a1[9]=0) );          {В данном случае b1 станет равным true}

c1           := ‘Пример строки’                      {Присваивание строки символов}

a1[9]    := 7;                                                   {Присваивание 9-му элементу массива a1}

s1           := [red, blue, green];                     {Присваивание множества}

r1           := cr;                                                 {Копирование записи целиком из cr в r1}

r1.yy      := 2.719281928;                             {Присваивание значения полю yy

записи r1}

r1.nn     := white;                                           {Присваивание значения полю nn записи r1}

end;


Оператор выбора


Иногда в процессе выполнения алгоритма может потребоваться выбор не из двух, а из трех и более альтернатив. Например, одно действие нужно сделать, если некоторая величина x равна 1 или 2, другое, если она равна 3,4 или 5, и третье, если она равна  6. Во всех остальных случаях нужно выполнить четвертое действие. Это можно записать с помощью нескольких вложенных условных операторов (обратите внимание на стиль записи):


if  (x=1) or  (x=2)

    then  <оператор1>

    else

        if  (x=3) or (x=4)) or (x=5)

            then  <оператор2>

            else

                if  (x=6)

                    then        <оператор3>

                    else <оператор4> ;

Для такой хотя и сложной, но стандартной конструкции более удобно использовать следующий стиль записи:

if      (x=1) or (x=2)                                  then     <оператор1>

else if    (x=3) or

(x=4) or (x=5)           then     <оператор2>

else if    (x=6)                                           then     <оператор3>

else                                                                          <оператор4> ;

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

case  x  of

    1,2:        <оператор1> ;

    3,4,5:    <оператор2> ;

    6:           <оператор3> ;

else            <оператор4>

end

Вместо  списка  3,4,5  можно указать диапазон  3..5. В общем случае формат оператора выбора следующий:

case  <выражение>  of

      <список значений выражения (через запятую)> :     <оператор_1> ;

      <список значений выражения (через запятую)> :     <оператор_2> ;

      . . .

      <список значений выражения (через запятую)> :     <оператор_n> ;

[ else      <оператор_0> ]

end

Обязательно требуется, чтобы элементы каждого списка значений выражения были различными. Выражение после case не может быть вещественного типа. При выполнении оператора выбора выраже­ние вычисляется, и выполняется тот оператор, в список которого вычислен­ное значение попадает. Если такой список отсутствует, выполня­ется оператор_0 из ELSE-конструкции (или ничего не делается, если ELSE-конст­рукция отсутствует).



Организация TCP/IP


В отличие от многих других сетей, в TCP/IP практически на каждой машине следует иметь массу информации, необходимой для ее настройки, которая по сети не передается. В этом есть как свои преимущества, так и свои недостатки.

Недостатки сводятся к довольно большой ручной работе по настройке каждой машины и даже каждого ее сетевого интерфейса. При этом предварительно должна быть продумана топология сети, ее физическая и логическая схемы, определено оборудование. Обязательным условием для организации TCP/IP сети является получение блока IP-адресов Internet для всего множества сетевых интерфейсов. Данную процедуру принято называть "получение сетки".  Блок IP-адресов выделяется провайдером, через которого локальная сеть подключается к Internet. При организации локальной сети, которая не будет подключена к Internet, можно официально никакой сетки не получать, а ее номер придумать, но если позже возникнет необходимость подключения к Internet, получить адреса все равно придется, но при этом придется также производить изменения во всех машинах локальной сети, меняя настройки сетевых интерфейсов.

Подключение локальной сети TCP/IP к Internet осуществляется через местного провайдера. Обычно это та же организация, у которой был получен блок адресов для локальной сети. 

После того, как физическая сеть собрана, администратор должен собственноручно назначить каждой машине IP-адреc. Причиной, заставляющей жестко назначать адреса компьютерам сети, является необходимость организации информационных сервисов на серверах сети. TCP/IP не имеет механизма оповещения рабочих мест о месте нахождения сервиса. Широковещание вообще не очень распространено в сетях TCP/IP, в отличии от сетей Novell или Microsoft. Каждый узел знает о наличии того или иного сервиса либо из файла своей настройки (например, указываются шлюз в другие сети или сервер доменных имен), либо из файлов настроек прикладного программного обеспечения. Так, например, сервер WWW не посылает никакого широковещательного сообщения о том, что он установлен на данном компьютере в данной сети.


Преимущество такого подхода заключается в низком трафике, порождаемом сетью TCP/IP. Этот трафик иногда очень значительно отличается от трафика Novell, например. Кроме того, практически любое оборудование позволяет фильтровать трафик TCP/IP, что сильно облегчает сегментацию сети и делает ее легко структурируемой. Сеть TCP/IP обладает практически теми же базовыми сервисами, что и другие локальные сетевые технологии. Система позволяет работать в режиме удаленного терминала, организовывать распределенную файловую систему, сетевую печать и т.п.

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

В рамках организации сети TCP/IP в последнее время все больше внимание уделяется организации удаленных рабочих мест. Особенно это характерно для организаций, которые используют труд надомников. Здесь имеются в виду программисты и другие сотрудники, которые используют модемную связь для оперативного обмена информацией, доступа к информационным ресурсам или обмена электронной почтой.

Развитие средств коммуникации и наличие специального набора протоколов и программного обеспечения, их реализующего, позволяет организовать такие рабочие места в рамках сетей TCP/IP без особых проблем. 

Задача подключения локальной сети довольно простая, если только это не сеть, распределенная в пространстве, т.е. не Wide Area Network (WAN). Здесь проблема подключения к Internet приобретает как бы два направления:

¨ собственно подключение различных сегментов к Internet;



¨       организация сети компании средствами Internet.

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

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

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

Обычно все книги и руководства по управлению сетями TCP/IP сводятся к четырем вещам: настройка сетевых интерфейсов, маршрутизация, служба доменных имен и электронная почта. Таким образом, лишний раз подчеркивается важность этого средства коммуникации пользователей сети Internet. 

Существование электронной почты в Internet имеет свою историю, которая очень сильно влияет на принципы администрирования этого информационного ресурса. На заре становления сети электронная почта пересылалась между машинами по протоколу UUCP. В эту пору использовалась совсем другая форма адреса электронной почты, нежели та, которая используется в настоящее время. После того, как скорость передачи данных по сети резко увеличилась и стало возможным передавать почту с той же скоростью, что и сообщения режима on-line, в Internet был принят другой стандарт протокола обмена электронной почтой - SMTP (Simple Mail Transfer Protocol).


Кроме этого, была введена новая форма почтового адреса абонента электронной почты, основанная на доменном имени. 

К сожалению, российский сектор Internet успел захватить период работы с электронной почтой, когда в качестве основного протокола использовался протокол UUCP. Сеть Relcom начинала как сеть электронной почты, где у пользователей устанавливалась программf UUPC - адаптированный вариант коммуникационной программы из системы UUCP. Главной причиной того, что в Relcom использовался протокол UUCP, называют наилучшую его приспособленность для работы по медленным телефонным линиям связи, хорошие средства управления соединением и портами в системе UNIX и возможность автоматического дозвона. На самом деле это только часть причин. Система разрабатывалась специалистами, которые до этого занимались адаптацией системы Unix для отечественных компьютеров. Для связи между Unix-системами использовалась система UUCP. Разработчики отечественного клона Unix естественным образом использовали свои знания для организации системы электронной почты, тем более, что к тому времени свободно распространялись программы для организации такого взаимодействия. В мире уже во всю разворачивались новые системы на базе протокола SMTP, а Relcom приступил к внедрению системы на основе протокола UUCP. 

В настоящее время в стране доступ по протоколам TCP/IP через телефонную сеть  в качестве транспорта использует протоколы SLIP и PPP. Если в сравнении SLIP и UUCP можно говорить о каких-то преимуществах последнего, то в случае PPP таких преимуществ у UUCP нет.






Основные понятия и сетевая терминология


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

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

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

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


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

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

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

Наиболее дешевым кабельным соединением является витое двух­жильное или трехжильное про­водное соединение часто называемое "витой парой". Она позволяет пе­редавать информацию со скоростью до 10 Мбит/с, легко наращивается, однако явля­ется помехонезащищенной. Длина кабеля не может превышать 1000 м при скорости передачи 1 Мбит/с. Преимущест­вами являются низкая цена и беспроблемная уста­новка. Для повышения помехозащищенности информации часто используют экраниро­ванную ви­тую пару, т.е. витую пару, помещенную в экранирующую оболочку, подобно экрану коаксиального кабеля. Это увеличивает стоимость витой пары и при­ближает ее цену к цене коаксиального кабеля.



Коаксиальный кабель имеет среднюю цену, хорошо помехозащитен и применя­ется для связи на большие расстояния (несколько километров). Скорость передачи информации от 1 до 10 Мбит/с, а в некоторых случаях может достигать 50 Мбит/с. Ко­аксиальный кабель используется для основ­ной и широкополосной передачи инфор­мации.

Широкополосный коаксиальный кабель невосприимчив к помехам, легко на­ращива­ется, но цена его высокая. Скорость передачи информации равна 500 Мбит/с. При пе­редачи информации в базисной полосе частот на рас­стояние более 1,5 км требуется усилитель, или так называемый репитер (повторитель). Поэтому суммарное расстоя­ние при передаче информации увеличивается до 10 км. Для вычислительных сетей с топологией шина или дерево коаксиальный кабель должен иметь на конце согласую­щий резистор (терминатор).

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

Показатели трех типовых сред для передачи приведены в таблице.

Показатели

Среда передачи данных

Двухжильный кабель - витая пара

Коаксиальный кабель

Оптоволоконный кабель

Цена

Невысокая

Относительно высокая

Высокая

Наращивание

Очень простое

Проблематично

Простое

Защита от прослушивания

Незначительная

Хорошая

Высокая

Проблемы с заземлением

Нет

Возможны

Нет

Восприимчивость к помехам

Существует

Существует

Отсутствует

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


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

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

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

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

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


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

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

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

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