Взаимодействие между клиентом и сервером в WWW
Содержание.
1.Обработчик прерываний в ОС с разделением времени. Промоделировать предлагаемое решение ……………………………………………………..3
2. Методы обнаружения тупика по наличию
замкнутой цепочки запросов…………………………………………………………
3.Разработка и
моделирование способов репликации (тиражирования)
файлов……………………………………...…………………
4.Почтовые ящики………………………………………………..………10
5.Принцип параметрической настраиваемости………….….….……….14
5.1 Понятие дистрибутива ОС………………………….…….………16
5.2 Генерация версий ОС…………………………………………….17
6.Взаимодействие между клиентом и сервером в WWW………………18
Список литературы………………………………………………..
1. Обработчик прерываний в ОС с разделением времени. Промоделировать предлагаемое решение
При разработке первых систем ресурсами считались процессорное время, память, каналы ввода / вывода и периферийные устройства. Однако очень скоро понятие ресурса стало гораздо более универсальным и общим. Различного рода программные и информационные ресурсы также могут быть определены для системы как объекты, которые могут разделяться и распределяться и доступ к которым необходимо соответствующим образом контролировать. В настоящее время понятие ресурса превратилось в абстрактную структуру с целым рядом атрибутов, характеризующих способы доступа к этой структуре и её физическое представление в системе. Более того, помимо системных ресурсов, о которых мы сейчас говорили, как ресурс стали толковать и такие объекты, как сообщения и синхросигналы, которыми обмениваются задачи.
В первых вычислительных системах любая программа могла выполняться только после полного завершения предыдущей. Поскольку эти первые вычислительные системы были построены в соответствии с принципами, изложенными в известной работе Яноша Джон фон Неймана, все подсистемы и устройства компьютера управлялись исключительно центральным процессором. Центральный процессор осуществлял и выполнение вычислений, и управление операциями ввода / вывода данных. Соответственно, пока осуществлялся обмен данными между оперативной памятью и внешними устройствами, процессор не мог выполнять вычисления. Введение в состав вычислительной машины специальных контроллеров позволило совместить во времени (распараллелить) операции вывода полученных данных и последующие вычисления на центральном процессоре. Однако все равно процессор продолжал часто и долго простаивать, дожидаясь завершения очередной операции ввода / вывода. Поэтому было предложено организовать так называемый мультипрограммный (мультизадачный) режим работы вычислительной системы. Суть его заключается в том, что пока одна программа (один вычислительный процесс или задача, как мы теперь говорим) ожидает завершения очередной операции ввода / вывода, другая программа (а точнее, другая задача) может быть поставлена на решение.
При мультипрограммировании повышается пропускная способность системы, но отдельный процесс никогда не может быть выполнен быстрее, чем если бы он выполнялся в однопрограммном режиме (всякое разделение ресурсов замедляет работу одного из участников за счёт дополнительных затрат времени на ожидание освобождения ресурса).
Как мы уже отмечали, операционная система поддерживает мультипрограммирование (многопроцессность) и старается эффективно использовать ресурсы путём организации к ним очередей запросов, составляемых тем или иным способом. Это требование достигается поддерживанием в памяти более одного процесса, ожидающего процессор, и более одного процесса, готового использовать другие ресурсы, как только последние станут доступными. Общая схема выделения ресурсов такова. При необходимости использовать какой-либо ресурс (оперативную память, устройство ввода / вывода, массив данных и т.п.) задача обращается к супервизору операционной системы - её центральному управляющему модулю, который может состоять из нескольких модулей, например: супервизор ввода / вывода, супервизор прерываний, супервизор программ, диспетчер задач и т.д. - посредством специальных вызовов (команд, директив) и сообщает о своём требовании. При этом указывается вид ресурса и, если надо, его объём (например, количество адресуемых ячеек оперативной памяти, количество дорожек или секторов на системном диске, устройство печати и объём выводимых данных и т.п.).
Директива обращения к операционной системе передаёт ей управление, переводя процессор в привилегированный режим работы, если такой существует. Не все вычислительные комплексы имеют два (и более) режима работы: привилегированный (режим супервизора), пользовательский, режим эмуляции какого-нибудь другого компьютера и т.д.
Ресурс может быть выделен задаче, обратившейся к супервизору с соответствующим запросом, если:
1) он свободен и в системе нет запросов от задач более высокого приоритета к этому же ресурсу;
2) текущий запрос и ранее выданные запросы допускают совместное использование ресурсов;
3) ресурс используется задачей низшего приоритета и может быть временно отобран (разделяемый ресурс).
Получив запрос, операционная система либо удовлетворяет его и возвращает управление задаче, выдавшей данный запрос, либо, если ресурс занят, ставит задачу в очередь к ресурсу, переводя её в состояние ожидания (блокируя). Очередь к ресурсу может быть организована несколькими способами, но чаще всего это осуществляется с помощью списковой структуры.
После окончания работы с ресурсом задача опять с помощью специального вызова супервизора (посредством соответствующей директивы) сообщает операционной системе об отказе от ресурса, или операционная система забирает ресурс сама, если управление возвращается супервизору после выполнения какой-либо системной функции. Супервизор операционной системы, получив управление по этому обращению, освобождает ресурс и проверяет, имеется ли очередь к освободившемуся ресурсу. Если очередь есть - в зависимости от принятой дисциплины обслуживания (правила обслуживания) и приоритетов заявок он выводит из состояния ожидания задачу, ждущую ресурс, и переводит её в состояние готовности к выполнению. После этого управление либо передаётся данной задаче, либо возвращается той, которая только что освободила ресурс.
При выдаче запроса на ресурс задача может указать, хочет ли она владеть ресурсом монопольно или допускает совместное использование с другими задачами. Например, с файлом можно работать монопольно, а можно и совместно с другими задачами.
Если в системе имеется некоторая совокупность ресурсов, то управлять их использованием можно на основе определенной стратегии. Стратегия подразумевает четкую формулировку целей, следуя которым можно добиться эффективного распределения ресурсов.
При организации управления ресурсами всегда требуется принять решение о том, что в данной ситуации выгоднее: быстро обслуживать отдельные наиболее важные запросы, предоставлять всем процессам равные возможности либо обслуживать максимально возможное количество процессов и наиболее полно использовать ресурсы.
2. Методы обнаружения тупика по наличию замкнутой цепочки запросов.
Алгоритм был разработан сотрудниками
фирмы IBM и использовался в одной из ОС
этой компании. Он использует информацию
о состоянии системы,
содержащуюся в двух таблицах:
1) RATBL -
таблица текущего распределения (назначения)
ресурсов;
2) PWTBL - таблица заблокированных процессов
(для каждого вида ресурса может быть свой
список заблокированных процессов).
При каждом запросе на получение или
освобождении ресурсов содержимое этих
таблиц модифицируется, а при запросе
- анализируется в соответствии со следующим
алгоритмом.
1.Запрос от процесса J на занятый ресурс I.
2 Поместить номер ресурса I в PWTBL в строке с номером процесса J.
3 Использовать I в качестве
смещения в RATBL, чтобы найти номер процесса К, который владеет
ресурсом.
4.Использовать К в качестве смещения в PWTBL.
5.Проверить, ждет ли процесс К освобождения какого-либо ресурса I¢. Если нет, то перейти к шагу 6, в противном случае -- к шагу 7
6.Перевести J в состояние ожидания и выйти из алгоритма.
7. Использовать I¢ в качестве
смещения в RATBL, чтобы найти номер блокирующего его
процесса К'.
8 .Проверить К' = J.
Если нет, то перейти к шагу 9, в противном
случае - к шагу 11.
9. Проверить, вся ли таблица PWTBL просмотрена.
Если да, то перейти к шагу 6, в противном
случае - к шагу 10.
10.Присвоить К:= К' и перейти к шагу 4.
11. Сделать вывод о наличии тупика с последующим восстановлением.
Конец алгоритма.
Пример 5.6. Рассмотрим следующую последовательность
событий.
1 Процесс Р2 занимает ресурс R1.
2 Процесс Р3 занимает ресурс R2.
3 Процесс Р3 занимает ресурс R3.
4 Процесс Р1 занимает ресурс R4.
Таблица распределения ресурсов
(RATBL) будет иметь вид
таблицы 5.2.
Таблица 5.2 - Таблица распределения ресурсов RATBL
Ресурсы |
Процессы |
1 |
2 |
2 |
3 |
3 |
3 |
4 |
1 |
Выполним алгоритм
по шагам.
1 Пусть
процесс Р1 пытается занять ресурс R1, тогда J = 1, I = 1, К=2.
Процесс К не
ждет никакого ресурса I¢, поэтому процесс Р1 блокируется
по ресурсу R1.
2 Пусть
процесс Р2 пытается занять ресурс R2, тогда J =2, I =2, К =3.
3 Процесс К не ждет никакого ресурса, поэтому процесс Р2 блокируется по ресурсу R2.
4 Теперь
пусть процесс Р3 пытается обратиться к ресурсу R4. Тогда J=3, I = 4, К = 1, I¢ = 1, К¢= 2, К'<> J, поэтому берем К = 2, I¢ = 2, К¢ = 3.
В этом
случае К' = J,
то есть тупик определен. Таблица заблокированных процессов (PWTBL) теперь имеет вид таблицы
5.3.
Таблица 5.3 - Таблица заблокированных процессов PWTBL
Процесс |
Ресурс |
1 |
1 |
2 |
2 |
3 |
4 |
Равенство J = К' означает,
что существует замкнутая цепь взаимоисключающих и ожидающих процессов, то
есть выполняются все четыре условия существования тупика.
Модель
Холта для описанного примера приведена
на рисунке 5.7. На рисунке пронумерованы
дуги запросов, которые процессы последовательно
генерировали
в соответствии с примером. Из рисунка
сразу видно, что в результате такой последовательности
запросов образовалась замкнутая цепочка:
(5, 1, 6, 2, 7, 4), что и говорит о существовании
тупика.
Рисунок 5.7 - Граф распределения ресурсов
3. Разработка и моделирование способов репликации (тиражирования) файлов
Распределенные системы часто обеспечивают репликацию (тиражирование) файлов в качестве одной из услуг, предоставляемых клиентам. Репликация - это асинхронный перенос изменений данных исходной файловой системы в файловые системы, принадлежащие различным узлам распределенной файловой системы. Другими словами, система оперирует несколькими копиями файлов, причем каждая копия находится на отдельном файловом сервере. Имеется несколько причин для предоставления этого сервиса, главными из которых являются:
1) увеличение надежности за счет наличия независимых копий каждого файла на разных файл-серверах;
2) распределение нагрузки между несколькими серверами.
Как обычно, ключевым вопросом, связанным с репликацией является прозрачность. До какой степени пользователи должны быть в курсе того, что некоторые файлы реплицируются? Должны ли они играть какую-либо роль в процессе репликации или репликация должна выполняться полностью автоматически? В одних системах пользователи полностью вовлечены в этот процесс, в других система все делает без их ведома. В последнем случае говорят, что система репликационно прозрачна.
При использовании первого способа (а) программист сам управляет всем процессом репликации. Когда процесс создает файл, он делает это на одном определенном сервере. Затем, если пожелает, он может сделать дополнительные копии на других серверах. Если сервер каталогов разрешает сделать несколько копий файла, то сетевые адреса всех копий могут быть ассоциированы с именем файла, как показано на рисунке снизу, и когда имя найдено, это означает, что найдены все копии. Чтобы сделать концепцию репликации более понятной, рассмотрим, как может быть реализована репликация в системах, основанных на удаленном монтировании, типа UNIX. Предположим, что рабочий каталог программиста имеет имя /machine1/usr/ast. После создания файла, например, /machine1/usr/ast/xyz, программист, процесс или библиотека могут использовать команду копирования для того, чтобы сделать копии /machine2/usr/ast/xyz и machine3/usr/ast/xyz. Возможно программа использует в качестве аргумента строку /usr/ast/xyz и последовательно попытается открывать копии, пока не достигнет успеха. Эта схема хотя и работает, но имеет много недостатков, и по этим причинам ее не стоит использовать в распределенных системах.
4. Почтовые ящики
Тесное взаимодействие между процессами предполагает не только синхронизацию - обмен временными сигналами, но также передачу и получение произвольных данных, то есть обмен сообщениями. В системе с одним процессором посылающий и получающий процессы не могут работать одновременно. В мультипроцессорных системах также нет никакой гарантии их одновременного исполнения. Следовательно, для хранения посланного, но еще не полученного сообщения необходимо место. Оно называется буфером сообщений, или почтовым ящиком.
Если процесс Р1 хочет общаться с процессом Р2, то Р1 просит систему предоставить или образовать почтовый ящик, который свяжет эти два процесса так, чтобы они могли передавать друг другу сообщения. Для того чтобы послать процессу Р2 какое-то сообщение, процесс Р1 просто помещает это сообщение в почтовый ящик, откуда процесс Р2 может его в любое время получить. При применении почтового ящика процесс Р2 в конце концов обязательно получит сообщение, когда обратится за ним (если вообще обратится). Естественно, что процесс Р2 должен знать о существовании почтового ящика. Поскольку в системе может быть много почтовых ящиков, необходимо обеспечить доступ процессу к конкретному почтовому ящику. Почтовые ящики являются системными объектами, и для пользования таким объектом необходимо получить его у операционной системы, что осуществляется с помощью соответствующих запросов.
Если объем передаваемых данных велик, то эффективнее не передавать их непосредственно, а отправлять в почтовый ящик сообщение, информирующее процесс-получатель о том, где можно их найти.
Почтовый ящик может быть связан с парой процессов, только с отправителем, только с получателем, или его можно получить из множества почтовых ящиков, которые используют все или несколько процессов. Почтовый ящик, связанный с процессом-получателем, облегчает посылку сообщений от нескольких процессов в фиксированный пункт назначения. Если почтовый ящик не связан жестко с процессами, то сообщение должно содержать идентификаторы и процесса-отправителя, и процесса-получателя.
Итак, почтовый ящик - это информационная структура, поддерживаемая операционной системой. Она состоит из головного элемента, в котором находится информация о данном почтовом ящике, и нескольких буферов (гнезд), в которые помещают сообщения. Размер каждого буфера и их количество обычно задаются при образовании почтового ящика.
Правила работы почтового ящика могут быть различными в зависимости от его сложности. В простейшем случае сообщения передаются только в одном направлении. Процесс Р1 может посылать сообщения до тех пор, пока имеются свободные гнезда. Если все гнезда заполнены, то Р1 может либо ждать, либо заняться другими делами и попытаться послать сообщение позже. Аналогично процесс Р2 может получать сообщения до тех пор, пока имеются заполненные гнезда. Если сообщений нет, то он может либо ждать сообщений, либо продолжать свою работу. Эту простую схему работы почтового ящика можно усложнять в нескольких направлениях и получать более хитроумные системы общения - двунаправленные и миоговходовые почтовые ящики.
Двунаправленный почтовый ящик, связанный с парой процессов, позволяет подтверждать прием сообщений. При наличии множества гнезд каждое из них хранит либо сообщение, либо подтверждение. Чтобы гарантировать передачу подтверждений, когда все гнезда заняты, подтверждение на сообщение помещается в то же гнездо, в котором находится сообщение, и это гнездо уже не используется для другого сообщения до тех пор, пока подтверждение не будет получено. Из-за того, что некоторые процессы не забрали свои сообщения, связь может быть приостановлена. Если каждое сообщение снабдить пометкой времени, то управляющая программа может периодически удалять старые сообщения.
Процессы могут быть также остановлены в связи с тем, что другие процессы не смогли послать им сообщения. Если время поступления каждого остановленного процесса в очередь заблокированных процессов регистрируется, то управляющая программа может периодически посылать им пустые сообщения, чтобы они не ждали чересчур долго.
Реализация почтовых ящиков требует использования примитивных операторов низкого уровня, таких как операции Р и V или каких-либо других, но пользователям может дать средства более высокого уровня (наподобие мониторов Хоара), например, такие, как представлены ниже.
Эта операция переписывает сообщение в некоторый буфер, помещает его адрес в переменную Буфер и добавляет буфер к очереди Получатель. Процесс, выдавший операцию SEND_MESSAGE, продолжит свое исполнение.
WAITJCSSAGE (Отправитель. Сообщение. Буфер)
Эта операция блокирует процесс, выдавший операцию, до тех пор, пока в его очереди не появится какое-либо сообщение. Когда процесс передается на процессор, он получает имя отправителя с помощью переменной Отправитель, текст сообщения через переменную Сообщение и адрес буфера в переменной Буфер. Затем буфер удаляется из очереди, и процесс может записать в него ответ отправителю.
SEND_ANSWER (Результат, Ответ, Буфер)
Эта операция записывает информацию, определяемую через переменную Ответ в тот буфер, номер которого указывается переменной Буфер (из этого буфера было получено сообщение), и добавляет буфер к очереди отправителя. Если отправитель ждет ответ, он деблокируется.
WAIT_ANSWER (Результат, Ответ, Буфер)
Эта операция блокирует процесс, выдавший операцию, до тех пор, пока в буфер не поступит ответ; доступ к нему возможен через переменную Буфер. После того как ответ поступил и процесс передан на процессор, ответ, доступ к которому определяется через переменную Ответ, переписывается в память процессу, а буфер освобождается. Значение переменной Результат указывает, является ли ответ пустым, то есть выданным операционной системой, так как сообщение было адресовано несуществующему (или так и не ставшему активным) процессу.
Основные достоинства почтовых ящиков:
1) процессу не нужно знать о существовании других процессов до тех пор, пока он не получит сообщения от них;
2) два процесса могут обменяться более чем одним сообщением за один раз;
3) операционная система может гарантировать, что никакой иной процесс не вмешается во взаимодействие процессов, ведущих между собой «переписку»;
4) очереди буферов позволяют процессу-отправителю продолжать работу, не обращая внимания на получателя.
Основным недостатком буферизации сообщений является появление еще одного ресурса, которым нужно управлять. Этим ресурсом являются сами почтовые ящики.
К другому недостатку можно отнести статический характер этого ресурса: количество буферов для передачи сообщений через почтовый ящик фиксировано. Поэтому естественным стало появление механизмов, подобных почтовым ящикам, но реализованных на принципах динамического выделения памяти под передаваемые сообщения.
В операционных системах компании Microsoft тоже имеются почтовые ящики (mailslots). В частности, они достаточно часто используются при создании распределенных приложений для сети. При работе с ними в приложении, которое должно отправить сообщение другому приложению, необходимо указывать класс доставки сообщений. Различают два класса доставки. Первый класс (first-class delivery) гарантирует доставку сообщений; он ориентирован на сеансовое взаимодействие между процессами и позволяет организовать посылки типа «один к одному» и «один ко многим». Второй класс (second-class delivery) основан на механизме датаграмм, и он уже не гарантирует доставку сообщений получателю.
5. Принцип параметрической настраиваемости. Понятие дистрибутива ОС. Генерация версий ОС.
Накоплен уже значительный опыт в разработке и эксплуатации операционных систем. Большинство из них следует отнести к сложным системам, хотя иногда встречаются и относительно простые. Считается, что логическая структура ОС по сути своей сложнее, чем, например, у трансляторов или пользовательских программ. ОС обычно строится по иерархическому принципу и включает в себя несколько подсистем, рассматриваемых в следующих разделах.
Так, для операционных систем, обслуживающих совокупность пользователей, выделяют ряд базовых принципов: модульности; перемещаемости; генерируемости; параметрической настраиваемости; функциональной избыточности; функциональной избирательности; «по умолчанию»; защиты; совместимости (для систем ЭВМ).
Модульность означает, что система состоит из модулей, для которых разработан стандарт на межмодульные связи. Модуль -- функционально определенная единица, состоящая из одной или нескольких программ. В зависимости от характера взаимосвязей модули могут допускать параллельное или только последовательное их исполнение. По характеру использования выделяют модули: однократные, изменяющиеся в процессе исполнения и потому непригодные для повторного использования; многократные, которые после единственной загрузки допускают многократное использование; параллельно используемые, способные обрабатывать параллельно несколько запросов.
Перемещаемость предполагает построение модулей безотносительно к месту их загрузки и исполнения. Принципы модульности и перемещаемости позволили прежде всего эффективно организовать работу коллективов программистов при создании ОС (как, впрочем, и других сложных программных систем).
Генерируемость означает возможность построения конкретной структуры, или, иначе, конкретного экземпляра ОС, в зависимости от конфигурации вычислительного комплекса, состава его оборудования, необходимых режимов работы и других варьируемых параметров. Обычно для реализации этого принципа используются: а) программа-генератор; б) входной язык описания генерируемой системы; в) системная библиотека со всеми наличными модулями ОС.
Принцип параметрической настраиваемости полезен в тех случаях, когда в ЭВМ допускается широкий набор периферийных устройств. В этом случае все программы, в которых имеются операции с периферийными устройствами, составляются с параметрами. Конкретные значения этих параметров, отображающие количество и типы периферийных устройств, задаются, например, при генерации, а иногда при начальном диалоге с ОС.
Понятие о дистрибутивах
В любой операционной системе можно выделить 4 основных части: ядро, файловую систему, интерпретатор команд пользователя и утилиты.
Ядро - это основная, определяющая часть ОС, которая управляет аппаратными средствами и выполнением программ. Файловая система - это способ организации хранения файлов на запоминающих устройствах. Интерпретатор команд или оболочка - это программа, организующая взаимодействие пользователя с компьютером. Утилиты - это отдельные программы, выполняющие различные служебные функции.
Ядро ОС Linux разрабатывается под общим руководством Линуса Торвальдса и распространяется свободно, как и огромное количество другого программного обеспечения, утилит и прикладных программ. Одним из следствий свободного распространения ПО для Linux явилось то, что большое число разных фирм и компаний, а также просто независимых групп разработчиков стали выпускать так называемые дистрибутивы Linux.
Дистрибутив - это набор программного обеспечения, включающий все 4 основные составные части ОС. Однако различные дистрибутивы отличаются друг от друга по составу включенных в них программ - они содержат как стандартные для всех дистрибутивов программы (например, оболочку bash или ядро, хотя версии ядра и оболочки тоже могут различаться в разных дистрибутивах), так и уникальные разработки авторов дистрибутива, например, программы для конфигурирования системы, разные графические оболочки, утилиты для работы с ядром и т.д. Некоторые дистрибутивы выпускаются фирмами на коммерческой основе, другие распространяются на условиях лицензии GPL. Существует уже более двух десятков дистрибутивов Linux-а. Поскольку Линус Торвальдс продолжает координировать разработку ядра, версии ядра развиваются последовательно, а не ветвятся как дистрибутивы.
Принцип генерируемости
Согласно принципу генерируемости исходное представление центральной системной управляющей части ОС (ядра и основных компонентов, которые должны постоянно находиться в оперативной памяти) должно обеспечивать возможность настройки, исходя из конкретной конфигурации конкретного вычислительного комплекса и круга решаемых задач.
Генерация ОС - это сборка (компоновка) ОС из отдельных программных модулей. В результате генерации получаются скомпонованные двоичные коды операционной системы и построенные системные таблицы, отражающие конкретную конфигурацию компьютера. Эта процедура проводится редко перед достаточно протяженным периодом эксплуатации операционной системы. Генерация осуществляется с помощью специальной программы-генератора и соответствующего входного языка для этой программы, позволяющего описывать программные возможности системы и конфигурацию машины. В результате генерации получается полная версия операционной системы. Сгенерированная версия ОС представляет собой совокупность системных наборов модулей и данных.
При генерации операционной системы принцип модульности существенно упрощает ее настройку на требуемую конфигурацию вычислительной системы. В настоящее время с принципом генерируемости ОС можно столкнуться при работе с Linux. В этой ОС имеется возможность не только использовать какое-либо готовое ядро операционной системы, но и самому сгенерировать (скомпилировать) такое ядро, которое будет оптимальным для данного конкретного персонального компьютера и решаемых на нем задач.
Кроме генерации ядра, в Linux имеется возможность указать и набор подгружаемых драйверов и служб, то есть часть функций может реализовываться модулями, непосредственно входящими в ядро системы, а часть - модулями, имеющими статус подгружаемых, транзитных.
В остальных современных распространенных ОС, в том числе и для персональных компьютеров, конфигурирование системы под соответствующий состав оборудования осуществляется на этапе установки, причем в большинстве случаев не представляется возможным серьезно вмешаться в этот процесс. В дальнейшем, при эксплуатации компьютера, можно изменить состав драйверов, служб, отдельных параметров и режимов работы. Как правило, внесение подобных изменений может быть осуществлено посредством редактирования конфигурационного файла или реестра. Например, можно отключить ненужное устройство, заменить для какого-нибудь устройства драйвер, отключить или добавить какую-то службу. Для большей гибкости часто вводится механизм поддержки нескольких конфигураций. Например, ОС Windows 98/NT/2000/XP, предоставляют возможность создавать до девяти конфигураций, одну из которых пользователь может выбрать при загрузке ОС. Таким образом, имея всего одну операционную систему, за счет нескольких различающихся конфигураций пользователь может получить несколько виртуальных систем, различающихся составом установленного (работающего) оборудования, драйверов и служб, и на выбор запускать одну из этих систем.
6 Взаимодействие между клиентом и сервером в WWW.
Доступ к базе данных от прикладной программы или пользователя производится путем обращения к клиентской части системы. В качестве основного интерфейса между клиентской и серверной частями выступает язык баз данных SQL.
Это язык по сути дела представляет собой текущий стандарт интерфейса СУБД в открытых системах. Собирательное название SQL-сервер относится ко всем серверам баз данных, основанных на SQL. Соблюдая предосторожности при программировании, некоторые из которых были рассмотрены на предыдущих лекциях, можно создавать прикладные информационные системы, мобильные в классе SQL-серверов.

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