GeoSELECT.ru



Компьютеры / Реферат: Internet. Службы и возможности (Компьютеры)

Космонавтика
Уфология
Авиация
Административное право
Арбитражный процесс
Архитектура
Астрология
Астрономия
Аудит
Банковское дело
Безопасность жизнедеятельности
Биология
Биржевое дело
Ботаника
Бухгалтерский учет
Валютные отношения
Ветеринария
Военная кафедра
География
Геодезия
Геология
Геополитика
Государство и право
Гражданское право и процесс
Делопроизводство
Деньги и кредит
Естествознание
Журналистика
Зоология
Инвестиции
Иностранные языки
Информатика
Искусство и культура
Исторические личности
История
Кибернетика
Коммуникации и связь
Компьютеры
Косметология
Криминалистика
Криминология
Криптология
Кулинария
Культурология
Литература
Литература : зарубежная
Литература : русская
Логика
Логистика
Маркетинг
Масс-медиа и реклама
Математика
Международное публичное право
Международное частное право
Международные отношения
Менеджмент
Металлургия
Мифология
Москвоведение
Музыка
Муниципальное право
Налоги
Начертательная геометрия
Оккультизм
Педагогика
Полиграфия
Политология
Право
Предпринимательство
Программирование
Психология
Радиоэлектроника
Религия
Риторика
Сельское хозяйство
Социология
Спорт
Статистика
Страхование
Строительство
Схемотехника
Таможенная система
Теория государства и права
Теория организации
Теплотехника
Технология
Товароведение
Транспорт
Трудовое право
Туризм
Уголовное право и процесс
Управление
Физика
Физкультура
Философия
Финансы
Фотография
Химия
Хозяйственное право
Цифровые устройства
Экологическое право
   

Реферат: Internet. Службы и возможности (Компьютеры)


Мурманский морской рыбопромышленный коледж

Имени Месяцева.



Реферат по теме:
Internet. Службы и возможности.


Студента Гарбар Игоря , Группы АСОИ-11
Преподаватель Перов Максим Алексеевич


Оценка.



Мурманск 2002



Содержание.

1) Вступление
3
2) Что такое Internet?
3
3) Internet, как средство массовой информации 4
4) Службы Internet
6
5) Из чего состоит Internet?
8
6) Административное устройство Internet 9



Вступление.

В начале 90-х в Латвии об Интернете говорили немногие, сегодня же
практически не обходится без постоянного упоминания об этом феномене
последней четверти XX столетия в таких средствах массовой информации как
газеты, радио и телевидение. Происходит это по нескольким причинам. Во-
первых, Интернет прочно вошел в жизнь многих людей (по крайней мере, в
развитых и развивающихся странах); во-вторых, он не только претендует, но
уже занял определенное место среди традиционных СМИ. И очевидно, учитывая
очень быстрый прогресс научной мысли в наше время, в ближайшее десятилетие,
быть может двадцатилетие, займет главное место среди традиционных
источников информации. Причем, уже сегодня многие предрекают смерть
практически всех традиционных средств передачи информации (бумага,
телевизор, радиоприемник) в связи с глобализацией Интернета. Так ли это и
как скоро ожидается? Насколько широко распространен Интернет сегодня? Какие
у него перспективы в сфере СМИ? Эти вопросы я постаралась рассмотреть в
своей работе. Которая, в свою очередь, основана именно на публикациях как в
традиционных СМИ, так и в самой Сети.



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

В начале семидесятых годов отдел Министерства обороны США, известный
под названием ARPA (Агентство исследовательских проектов особой сложности),
занимался проблемами поддержки и сохранения коммуникационного контроля в
случае потери основных систем связи при ядерном взрыве, произведенном
Советским Союзом. Следуя терминологии военных стратегов, опасения вызывала
возможность «обезглавливающего» удара по национальному коммуникационному
центру, который лишил бы военачальников связи с Американскими
стратегическими силами и, тем самым, способности нанести ответный удар.
Единственным способом формирования такой компьютерной сети было особое
соединение компьютеров, при котором коммуникация не зависела бы от какого-
либо центрального сервера. При потере одного, нескольких или даже большей
части компьютеров, подсистемы должны были продолжать работать, обеспечивая
неотвратимость ответного удара.
В известном смысле это казалось нетрудной задачей. Каждое здание имеет
систему электропроводки, при которой одна перегоревшая лампочка не влияет
на работу других. Но с компьютерами это было невозможно. В американской
компьютерной индустрии 1970х-80х годов разные производства выпускали массу
компьютеров с различными оперативными системами (например, IBM, цифровые
вычислительные машины, Microsoft и Apple), всевозможные устройства памяти с
разными разрешающими возможностями. Пятьдесят компьютеров IBM могли быть
успешно объединены в сеть IBM компьютеров, также как и пятьдесят отдельных
компьютеров Макинтош, но пятьдесят IBM и пятьдесят Макинтошей было намного
труднее объединить в сеть из ста компьютеров, способных на обмен
информацией.
Некоторые историки Интернета ведут отсчет глобальной Сети с 1961 года,
когда Леонард Кейнрок, нередко называемый отцом Интернета, опубликовал
статью с изложением пакетной пересылки информации (packet switching
theory). Сам же профессор считает, что первый значительный шаг в создании
Интернета был сделан 2 сентября 1969 года в Калифорнийском университете
(КУ), он вместе со своей командой успешно соединил компьютер с
маршрутизатором (сетевое устройство передачи данных), известным под
названием Interphase Message Processor, размером с холодильник. Первая же
попытка соединить два компьютера в сеть закончилась неудачей. В интервью
агентству Рейтер Леонард Клейнрок описал это следующим образом: 20 октября
1969 года группа компьютерщиков Калифорнийского университета решила
соединить свой компьютер с компьютером в Стенфордском исследовательском
институте (СИИ) на севере Калифорнии. Один ученый сидел за компьютером в КУ
и разговаривал по телефону с ученым из СИИ. Когда все было соединено,
первый должен был написать слово “log”, а специалист в СИИ в ответ должен
был написать “in”, в результате чего должно было образоваться слово “login”
(процедура идентификации пользователя при подключении к компьютеру по линии
связи). Сидящий в КУ написал “l” и спросил по телефону коллегу в Стенфорде,
получил ли тот букву. Ответ был положительный. Успешно была отправлена и
буква “o”. Однако затем «все рухнуло». Но начало было положено. Поначалу
сеть помогала лишь ученым пользоваться информацией, находящейся в
компьютерах коллег в других центрах. Тогда еще никому не приходило в
голову, каких масштабов достигнет Интернет. Однако профессор не считает,
что он вместе с коллегами породил монстра.
Итак, первая проблема была связана с развитием программного
обеспечения, способного объединить несколько сетей с разными оперативными
системами. Вторая проблема заключалась в создании такого программного
обеспечения, чтобы «сеть из сетей» могла продолжать функционирование даже в
случае потери нескольких компьютеров. Решение этих двух проблем требовало
огромного объема работы и талантливых специалистов, что, в конечном
результате, привело к созданию программы TCP/IP.[1]
Среди преимуществ программы TCP/IP - ее крайне децентрализованная система.
Ни правительство, ни корпорационные монополии не имеют контроль над ее
работой. Соединение с Интернетом также не требует официального разрешения.
Наоборот, как дикая земляника, ветви Интернета разрастаются горизонтально,
демократично, в то время как новые региональные компьютерные службы
Интернета (Internet Service Providers - ISPs) во всем мире покупают мощные
серверы, устанавливают программу TCP/IP, подсоединяются к другому TCP/IP
компьютеру сети и предоставляют доступ к Интернету отдельным лицам и
местным организациям. Интернет развивается так быстро, что его рост
измеряется в процентах в месяц.



Интернет как средство массовой информации.

Сегодня уже ни у кого не вызывает сомнения, что электронные цифровые
технологии в сочетании с Интернетом (и технологиями следующего поколения
информационных сетей) определяют будущее коммуникаций. Естественно, что
традиционные поставщики информационных продуктов, начиная с компаний,
выпускающих словари и энциклопедии и заканчивая масс-медиа, не хотят
смириться с тем, что их время прошло, и делают все для того, чтобы
наверстать упущенное.
С точки зрения динамики рынка информационных продуктов на цифровых
носителях и on-line, безусловно, заслуживает внимания факт перехода большей
части энциклопедических словарей в электронный формат. Этот процесс начался
в 1992 году с покупки компанией "Майкрософт" аутсайдера энциклопедического
рынка "Энциклопедии Функа и Уогнеллса", которая была отредактирована,
дополнена свежей информацией и иллюстрациями, после чего стала одним из
наиболее продаваемых изданий на CD-ROM под названием "Майкрософт-Энкарта".
Только в 1994 году было продано более 6 млн. экземпляров "Энкарты", сегодня
энциклопедии принадлежит более 60% рынка электронных энциклопедий.
Если в 1988 году было продано 200 тысяч комплектов 32-томной
энциклопедии "Британника", то в 1995 году ее тираж снизился более чем в
четыре раза, а в 1997 году практически сошел на нет. Зато электронная
версия "Британники" является одним из лидеров рынка энциклопедических
словарей на цифровых носителях, который растет со скоростью в среднем 20% в
год. При этом стоимость энциклопедий продолжает падать. Если в начале 1997
года "Британника CD 97" на CD-ROM стоила 1000 долларов, то к концу года
цена снизилась до 125 долларов. Новая версия "Британника CD 98" стоит
столько же.
Сетевые версии этих энциклопедий, часть из которых работает бесплатно
("Энкарта"), а часть - по подписке ("Британника"), являются прообразом
интегрированных информационных систем будущего, доступных on-line и не
ограниченных в объемах информации размером бумажных носителей, компакт-
дисков и дисков DVD.
Как считают многие специалисты, мы присутствуем при кончине
традиционных средств массовой информации или того, что подразумевалось под
этим понятием на протяжении большей части ХХ века. Единственное, что пока
не до конца ясно, - это когда же состоятся похороны и каков будет их
размах. Однако, известно, что Интернет, каким мы его знаем сейчас, является
первой интерактивной медиа.
Что же принципиально нового по пользовательским характеристикам вносит
Интернет в информационное пространство?


| |ТВ |Радио|Пресса|Интерне|
| | | | |т |
|Возможность выбора времени пользователем |X |X |+ |+ |
|Возможность хранения для повторного |X |X |+ |+ |
|использования | | | | |
|Возможность получения/передачи информации |+ |+ |- |+ |
|одновременно с событием | | | | |
|Форма передачи: | | | | |
|Текст |+ |+ |+ |+ |
|Неподвижное изображение |+ |+ |- |+ |
|Движущееся изображение |+ |+ |- |+ |
|Звук |+ |+ |- |+ |
|Необходимость в специальном оборудовании |+ |+ |- |+ |


Примечание: + да, - нет, X-с использованием специальных дополнительных
устройств.
Из таблицы видны все преимущества Интернета, так насколько же реальна
замена традиционных СМИ?


Службы Internet
1) Сетевая пресса
Не только сетевой аналог печатной прессы можно встретить в Интернете.
Все чаще на верхние строчки рейтингов попадают сетевые издания,
существующие лишь в Сети. Почему же возрастает спрос именно на такие
издания? Чем сетевая газета отличается от обычной?
o Во-первых: жанр "сетевой" прессы определяется спецификой Сети как
медийной среды и особенностями восприятия информации с экрана монитора. В
первую очередь это гипертекстовые ссылки, которые обеспечивают доступ к
архивам и другим электронным ресурсам. Таким образом, читатель имеет дело
не с линейным текстом, а с расширенным объемом информации.
o Во-вторых: многочисленные формы обратной связи (гостевые книги, форумы,
конференции, интерактив) дают читателю возможность участвовать в
производстве информационного продукта и размывают грань между автором и
читателем. Стилистические особенности сетевого текста отчасти связаны с
тем, что еще в обозримом прошлом читатели сетевой прессы знали авторов
лично или по переписке. Отсюда некоторая вольность в обращении со словами
и тяготение к разговорной лексике. Кроме того, обычное для "нормальной"
прессы подавление авторской индивидуальности через тщательную редактуру в
сетевой прессе пока широко не распространено.
o В-третьих: сетевые СМИ обладают целым рядом преимуществ по сравнению с
печатной прессой. Это возможность незамедлительной публикации материалов,
благодаря которой сетевые издания оказываются оперативнее газет и
телевидения, ведь оперативность газеты ограничена сроком выхода номера, а
оперативность телевидения - временем выхода в эфир новостей;
оперативность же сетевого издания вообще ничем не ограничена. Эта идея
породила "ленту новостей". Однако, по мнению некоторых сетевых
журналистов, по-настоящему в ней заинтересован весьма и весьма узкий круг
потребителей информации. Представитель "молчаливого большинства" не
нуждается в том безумном количестве разнообразных новостей, которые
проходят по каналам информационных агентств.
o В-четвертых: относительно малая себестоимость сетевых проектов и
отсутствие централизации благоприятствуют расцвету специализированных газет
и журналов. Тем самым обеспечивается гарантированная Конституцией свобода
слова и самовыражения.
К сожалению, все вышеперечисленное имеет и свою обратную сторону.
Легкость публикации при возможности сохранения анонимности приводит иногда
к злоупотреблениям: дезинформации, плагиату, экстремизму, порнографии,
скрытой рекламе. Хотя, в крупных сетевых газетах такое недопустимо.
В качестве примера можно привести политическую сетевую интернет-газету
"Полит.Ру", зарегистрированную в Министерстве печати РФ. Издается
"Полит.Ру" “Объединенным Гуманитарным Издательством”.
Газета возникла в недрах одного из самых известных проектов раннего
русского Интернета Zhurnal.ru и ставило с самого начала не политические, а
гуманитарные цели. Сотрудники не испытывали особого пристрастия к политике
как таковой и не мыслили становиться политическими журналистами. Им было
интересно попытаться рассказать о канве событий не с позиции "игрока
информационного рынка", "делающего" информацию, а с позиции рядового
потребителя информационного политического шума, пытающегося найти в нем
осмысленный сюжет. Однако оказалось, что политика в русской сети – предмет
интеллектуального спроса. Как ни странно, в сегодняшней России люди много
думают о политике, несмотря на компроматы, пиары, заговоры и информационные
войны последнего десятилетия. Поэтому создатели интернет-издания захотели
противопоставить модным словосочетаниям с термином "технология"
(политическая, информационная) - идеологию. Идеология - это потребность
человека выяснить свои личные взаимоотношения с текущей историей
собственной страны.
"Полит.Ру" - это редакционный коллектив. Те, кто пишут, звонят,
придумывают, редактируют, создают технологический механизм. Отличие состоит
в том, что "Полит.Ру" - это еще и сообщество. Читатели часто становятся
авторами или корреспондентами, а редакция, в свою очередь, - их адептами
или критиками.
Авторы не утверждают, что их информация объективна, т.к. по мнению
редакции, объективность — это придуманный способ обмана, которому мы
пытаемся противопоставить собственную заинтересованность в событиях и
персонажах. Поэтому политику газеты определяет фраза - мы рассказываем
новости такими, какими сами их видим, а ваш выбор - принять или отвергнуть
наше видение.
Структура Полит.Ру.

Все новости - Лента новостей содержит преимущественно российские новости
текущего дня. Обновляется с 9.00 до 21.00. Переход к странице
осуществляется нажатием либо на заголовок календаря, либо на логотип
"ПОЛИТ.РУ" вверху страницы.

English - Англоязычная версия основных новостей и выбранных статей.
Обстоятельства - Справки и комментарии к тематическим новостям, подоплека
событий, горячие отзывы специалистов и политических ньюсмейкеров.
Сюжеты - Тематический подбор материалов: жизнь в разрезе, самые острые темы
политической жизни в их развитии.
Статьи - Раздел содержит разнообразные статьи по текущим политическим и
экономическим проблемам, стратегические и идеологические материалы, а также
статьи постоянных рубрик (Галерея “Партинформа”, “Ближневосточная неделя” и
другие).
Интервью - Интервью и комментарии ведущих политиков, экономистов и
бизнесменов (С. Алексашенко, А. Головкова, Б. Йордана, Ю. Маслюкова, Б.
Немцова, В. Панскова, В. Рыжкова, Б. Федорова, А. Шохина, А. Чубайса, С.
Ястржембского, и др.).
Монитор - Обзоры СМИ и информационных агентств (четыре выпуска ежедневно по
будням), а также еженедельные Информационные итоги недели и Анонсы событий
следующей недели, перепечатка избранных интервью и статей из ведущих
мировых СМИ, касающихся русской политической жизни.
Заграница - Ежедневные новости планеты, ее странностей и безумств с
фотографиями и ссылками на сайты.
Ресурсы - Раздел содержит рубрицированные ссылки, обнаруженные "Полит.Ру"
за время своей деятельности, либо поставленные самими читателями.
Подписка - Рассылка новостей текущего дня (в win или koi форматах). Новости
отправляются в 21.00.
Дискуссия - Место встречи читателей.
Леонтьев - Совместный проект с передачей ОРТ “Однако”. Транскрипты
авторских комментариев Михаила Леонтьева в Интернете.
ПРАЙМ-ТАСС - Совместный проект с агентством ПРАЙМ-ТАСС предоставляет полный
обзор экономической информации за день.
ВЦИОМ - Совместный проект со Всероссийским центром общественного мнения.
Либертариум - Совместный проект с Московским Либертариумом направлен на
поддержку идеологии либертарианства.
Панорама - Совместный проект с информационно-экспертной группой "Панорама".
Экспертно-аналитические материалы об институтах и реалиях политической
жизни России последнего десятилетия.
"Индекс-досье" - Совместный проект с журналом Индекс-досье способствует
решению задач по защите информационной среды человека.
Статистика.
По прошествии двух лет работы на "Полит.Ру" создатели газеты так
описывают своих постоянных читателей: в первую очередь, это люди
принимающие решения: директора и руководители отделов крупных и мелких
компаний, менеджеры банков, представители финансовых корпораций, ректоры и
деканы высших учебных заведений. Также публикации на "Полит.Ру" постоянно
отслеживаются журналистами различных СМИ, среди которых новостные программы
телекомпаний ОРТ и НТВ; радиостанции “Наше Радио”, “Радио Максимум”;
печатные издания “Деньги”, “Известия”.
Рейтинг.
На поисковом сервере Рамблер - стабильное первое место в разделе
“Политика”. А также сайт входит в первую 10 в общем рейтинге Рамблер. На
серверах Stars и List.Ru - первая десятка самых популярных русскоязычных
ресурсов сети. "Полит.Ру" ежедневно посещают 15 - 20 тысяч человек.
На сайтах других сетевых газет (например, Utro.Ru, Gazeta.Ru,
Vesti.Ru, SMI.Ru, Lenta.Ru) можно также найти прогноз погоды, курс валют,
ссылки на другие материалы по конкретной теме, архив, а также прямой доступ
к почтовому и поисковому серверам. Откуда можно сделать, что аналогам
печатных изданий в Интернете надо не только публиковать статьи, но и
удовлетворять потребности читателей в других видах коммуникации. У
Интернета свои правила, потому что у сетевых потребителей несколько другие
запросы.



Из чего состоит Internet?

Это довольно сложный вопрос, ответ на который всё время меняется.
Пять лет назад ответ был прост: Internet – это все сети, которые,
взаимодействуя с помощью протокола IP, образуют «бесшовную» сеть для своих
коллективных пользователей. Сюда относятся различные федеральные сети,
совокупность региональных сетей, университетские сети и некоторые
зарубежные сети.
В последнее время появилась заинтересованность в подсоединении к
Internet сетей, которые не используют протокол IP. Для того чтобы
предоставлять клиентам этих сетей услуги Internet, были разработаны методы
подключения этих «чужих» сетей (например, BITNET, DECnets и др.) к
Internet. Сначала эти подключения, названные шлюзами, предназначались
просто для пересылки электронной почты между двумя сетями, но некоторые из
них выросли до возможности обеспечения и других услуг на межсетевой основе.
Являются ли они частью Internet? И да и нет – всё зависит от того, хотят ли
они того сами.
Фактически Internet состоит из множества локальных и глобальных
сетей, принадлежащих различным компаниям и предприятиям, связанных между
собой различными линиями связи. Internet можно представить себе в виде
мозаики сложенной из небольших сетей разной величины, которые активно
взаимодействуют одна с другой, пересылая файлы, сообщения и т.п.


ICQ – новая возможность общения.
Этот программный продукт сочетает в себе большинство возможностей IRC, но
при этом имеет более удобный интерфейс и более простую настройку. В
последние годы он стал не просто популярен, но завоевал такую популярность,
что сервер компании, разработавшей эту программу, занимает четвертое место
в Internet по посещаемости, уступая лишь серверу Yahoo! и серверам
корпораций Netscape Corp. и Microsoft Corp. Этот продукт разработан
компанией Mirabilis Ltd. И называется Mirabilis ICQ ( “I seek you” – “Я ищу
тебя”). Работает программа по такому же принципу, что и все средства IRC,
т.е. в сети существуют несколько серверов, специально предназначенных для
работы этой программы. При входе в сеть пользователи соединяются с одним из
серверов, который обеспечивает весь дальнейший сервис программы.

Административное устройство Internet


Internet по организации во многом напоминает церковь. Это организация
с полностью добровольным участием. Управляется она чем-то наподобие совета
старейшин, однако, у Internet нет патриарха, президента или Папы.
Составляющие сети могут иметь своих президентов или аналогичных вождей, но
это совсем другое дело; в Internet нет единственной авторитарной фигуры.
Высшая власть, где бы Internet ни была, остается за ISOC (Internet
Society). ISOC - общество с добровольным членством. Его цель -
способствовать глобальному обмену информацией через Internet. Оно назначает
совет старейшин, который отвечает за техническую политику, поддержку и
управление Internet.
Совет старейшин представляет собой группу приглашенных добровольцев,
называемую IAB (Совет по архитектуре Internet.). IAB регулярно собирается,
чтобы ``благословить'' стандарты и распределить ресурсы, такие, например,
как адреса. Internet работает, поскольку имеются стандартные способы
общения между компьютерами и прикладными программами. Это позволяет
компьютерам разного типа связываться без особых проблем. IAB ответственен
за стандарты; он решает, когда стандарт необходим и каким ему следует быть.
Когда требуется стандарт, совет рассматривает проблему, принимает стандарт
и по сети оповещает о нем мир. IAB также следит за различными номерами (и
другими вещами), которые должны оставаться уникальными. Например, каждый
компьютер в Internet имеет свой уникальный 32-разрядный двоичный адрес;
никакой другой компьютер не имеет такого же. Как присваивается этот адрес?
IAB заботится о такого рода проблемах. Он не присваивает адресов самолично,
но разрабатывает правила, как эти адреса присваивать.
Пользователи Internet высказывают свои жалобы и предложения на встречах
IETF (Оперативного инженерного отряда Internet). IETF - это другая
добровольная организация; также собирается регулярно, чтобы обсудить
текущие эксплуатационные и назревающие технические проблемы. При обсуждении
достаточно важной проблемы IETF создает рабочую группу для ее дальнейшего
исследования. (На практике ``достаточно важная'' обычно означает, что для
рабочей группы находится достаточное количество добровольцев). Посещать
встречи IETF и состоять в рабочих группах могут все; главное, чтобы люди
работали, дело-то добровольное. Рабочие группы имеют различные функции: это
может быть выпуск документации, выработка стратегии действий при
возникновении проблем, стратегические исследования, разработка новых
стандартов и протоколов, доработка уже существующих (например, изменение
значений отдельных полей). Рабочая группа обычно выпускает доклад. В
зависимости от вида рекомендации, это может быть просто документацией и
быть доступной для любого желающего, что может быть принято добровольно как
здравая идея, или же это может быть послано в IAB и быть объявленной
стандартом.
Если некая сеть принимает учение Internet, присоединяется к ней и
считает себя ее частью, тогда она и является частью Internet. Возможно ей
многое покажется неразумным, странным, сомнительным - она может поделиться
своими сомнениями с IETF. Некоторые жалобы-предложения могут оказаться
вполне разумными и, возможно, Internet соответственно изменится. Что-то
может показаться просто делом вкуса или традиции, тогда эти возражения
будут отклонены. Если сеть делает что-либо, что может навредить Internet,
она может быть исключена из сообщества до тех пор, пока она не исправится.
Сейчас Internet состоит из более чем 12 тысяч объединенных между собой
сетей.



-----------------------
[1] Transmission Control Protocol / Internet Protocol (протокол управления
передачей / межсетевой протокол), по определению Эдуарда Якубайтиса - "пара
взаимосвязанных протоколов сетевого уровня и транспортного уровня,
предложенных в США Агентством перспективных оборонных исследовательских
проектов".





Реферат на тему: Interprocess Communication

Лекция №17


Interprocess Communication


Мы с вами говорили, что далее речь пойдет о разделяемых ресурсах,
доступ к которым может осуществляться со стороны произвольных процессов, в
общем случае, в произвольном порядке. Эти ресурсы доступны любому
процессу, а процессы не обязательно должны быть родственными. При наличии
такой схемы возникают две принципиальные проблемы:
1. Именование;
2. Синхронизация;

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

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

#include
#include
key_t ftok(char *s, char c);

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


Разделяемая память.

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

Первая функция - создание общей памяти.
int shmget (key_t key, int size, int shmemflg);
key - ключ разделяемой памяти
size - размер раздела памяти, который должен быть создан
shmemflg - флаги

Данная функция возвращает идентификатор ресурса, который
ассоциируется с созданным по данному запросу разделяемым ресурсом. То есть
в рамках процесса по аналогии с файловыми дескрипторами каждому
разделяемому ресурсу определяется его идентификатор. Надо разделять ключ -
это общесистемный атрибут, и идентификатор, используя который мы работаем с
конкретным разделяемым ресурсом в рамках процесса.
С помощью этой функции можно как создать новый разделяемый ресурс
“память” (в этом случае во флагах должен быть указан IPC_CREAT)?, а также
можно подключиться к существующему разделяемому ресурсу. Кроме того, в
возможных флагах может быть указан флаг IPC_EXECL, он позволяет проверить и
подключиться к существующему ресурсу - если ресурс существует, то функция
подключает к нему процесс и возвращает код идентификатора, если же ресурс
не существует, то функция возвращает -1 и соответствующий код в errno.

Следующая функция - доступ к разделяемой памяти:
char *shmat(int shmid, char *shmaddr, int shmflg);
shmid - идентификатор разделяемого ресурса
shmaddr - адрес, с которого мы хотели бы разместить разделяемую
память

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

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

Третья функция - открепление разделяемой памяти:
int shmdt(char *shmaddr);
shmaddr - адрес прикрепленной к процессу памяти, который был получен
при подключении памяти в начале работы.

Четвертая функция - управление разделяемой памятью:
int shmctl(int shmid, int cmd, struct shmid_ds *buf);
shmid - идентификатор разделяемой памяти
cmd - команда управления.

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

Передача сообщений.

[pic]
Следующим средством взаимодействия процессов в системе IPC - это
передача сообщений. Ее суть в следующем: в системе имеется так называемая
очередь сообщений, в которой каждое сообщение представляет из себя
структуру данных, с которой ассоциирован буфер, содержащий тело сообщения и
признак, который называется типом сообщения. Очередь сообщений может быть
рассмотрена двояко:
1. очередь рассматривается, как одна единственная сквозная очередь, порядок
сообщений в которой определяется хронологией их попадания в эту очередь.
2. кроме того, так как каждое сообщение имеет тип (на схеме - буква рядом с
номером сообщения), то эту очередь можно рассматривать, как суперпозицию
очередей, связанную с сообщениями одного типа.

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

Создание очереди сообщений:
int msgget(key_t key, int flags);
В зависимости от флагов при обращении к данной функции либо создается
разделяемый ресурс, либо осуществляется подключение к уже
существующему.

Отправка сообщения:
int msgsnd( int id, struct msgbuf *buf, int size, int flags);
id - идентификатор очереди сообщения;
struct msgbuf {
long type; /* тип сообщения */
char mtext[s] /* указатель на тело сообщения */
}
size - размер сообщения, здесь указывается размер сообщения,
размещенного по указателю buf;
flags - флаги, в частности, флагом может быть константа IPC_NOWAIT.
При наличии такого флага будут следующие действия - возможна ситуация,
когда буфера, предусмотренные системой под очередь сообщений,
переполнены. В этом случае возможны два варианта - процесс будет
ожидать освобождения пространства, если не указано IPC_NOWAIT, либо
функция вернет -1 (с соответствующим кодом в errno), если было указано
IPC_NOWAIT.

Прием сообщения:
int msgrcv( int id, struct msgbuf *buf, int size, long type, int
flags);
id - идентификатор очереди;
buf - указатель на буфер, куда будет принято сообщение;
size - размер буфера, в котором будет размещено тело сообщения;
type - если тип равен нулю, то будет принято первое сообщение из
сквозной очереди, если тип больше нуля, то в этом случае будет принято
первое сообщение из очереди сообщений, связанной с типом, равным
значению этого параметра.
flags - флаги, в частности, IPC_NOWAIT, он обеспечит работу запроса
без ожидания прихода сообщения, если такого сообщения в момент
обращения функции к ресурсу не было, иначе процесс будет ждать.

Управление очередью:
int msgctl( int id, int cmd, struct msgid_dl *buf);
id - идентификатор очереди;
cmd - команда управления, для нас интерес представляет IPC_RMID,
которая уничтожит ресурс.
buf - этот параметр будет оставлен без комментария.

Мы описали два средства взаимодействия между процессами. Что же мы
увидели? Понятно, что названия и описания интерфейсов мало понятны. Прежде
всего следует заметить то, что как только мы переходим к вопросу
взаимодействия процессов, у нас возникает проблема синхронизации. И здесь
мы уже видим проблемы, связанные с тем, что после того, как мы поработали с
разделяемой памятью или очередью сообщений, в системе может оставаться
“хлам”, например, процессы, которые ожидают сообщений, которые в свою
очередь не были посланы. Так, если мы обратились к функции получения
сообщений с типом, которое вообще не пришло, и если не стоит ключ
IPC_NOWAIT, то процесс будет ждать его появления, пока не исчезнет ресурс.
Или мы можем забыть уничтожить ресурс (и система никого не поправит) - этот
ресурс останется в виде загрязняющего элемента системы.
Когда человек начинает работать с подобными средствами, то он берет
на себя ответственность за все последствия, которые могут возникнуть. Это
первый набор проблем - системная синхронизация и аккуратность. Вторая
проблема - синхронизация данных, когда приемник и передатчик работают
синхронно. Заметим, что самый плохой по синхронизации ресурс из
рассмотренных нами - разделяемая память. Это означает, что корректная
работа с разделяемой памятью не может осуществляться без использования
средств синхронизации, и, в частности, некоторым элементом синхронизации
может быть очередь сообщений. Например, мы можем записать в память данные и
послать сообщение приемнику, что информация поступила в ресурс, после чего
приемник, получив сообщение, начинает считывать данные. Также в качестве
синхронизирующего средства могут применяться сигналы.
И это главное - не язык интерфейсов, а проблемы, которые могут
возникнуть при взаимодействии параллельных процессов.
Лекция №18

К сегодняшнему дню мы разобрали два механизма взаимодействия процессов
в системе IPC - это механизм общей (или разделяемой) памяти и механизм
сообщений. Мы с вами выяснили, что одной из основных проблем, возникающей
при взаимодействии процессов, является проблема синхронизации. Ярким
примером механизма, для которого эта проблема является наиболее острой,
является механизм взаимодействия процессов с использованием разделяемой
памяти.
Вы помните, что механизм разделяемой памяти позволяет создавать
объект, который становится доступным всем процессам, подтвердившим ключ
доступа к этому объекту, а также имеют соответствующие права. После этого
общая память становится, с точки зрения каждого из этих процессов, как бы
фрагментом адресного пространства каждого из них, к которому этот процесс
может добираться через указатель этого адресного пространства. С другой
стороны нет никаких средств, которые позволили бы синхронизовать чтение и
запись в эту область данных. Так как в эту область данных одновременно
имеет доступ произвольное количество процессов, то проблема синхронизации
здесь имеет место быть.
Возможна ситуация, когда один из процессов начал запись в разделяемую
память, но еще не закончил, но другой процесс не дождался завершения
записи, считал и начал пользоваться этой информацией. В этом случае
возможны коллизии. Т.е. без синхронизации использовать механизм разделяемой
памяти невозможно.
Следующий механизм, который мы с вами рассмотрели - очередь сообщений.
Имеется возможность совместной работы с разделяемым объектом, который
называется очередь сообщений. Имеется сообщение, которое состоит из
некоторого спецификатора типа, и некоторого набора данных. Процесс,
подтвердив ключ и имея права доступа к этому разделяемому ресурсу, может
осуществлять действия по записи сообщений в очередь, и по чтению сообщений
из очереди.
Порядок чтения и записи сообщений из очереди соответствует названию
этой структуры - очередь. Кроме того, за счет того, что каждое сообщение
типизировано, есть возможность рассмотрения этой очереди с нескольких точек
зрения. Первая точка зрения - это одна очередь и порядок в ней
хронологический. Вторая точка зрения - это возможность представление этой
очереди в виде нескольких очередей, каждая из которых содержит элементы
определенного типа.
Понятно, что механизм сообщений может выступать в двух ролях: как
средство передача данных, и как средство синхронизации (понятно каким
образом).
Итак, к сегодняшнему дню мы познакомились с двумя этими механизмами.
Напомню, как только мы переходим к работе от однопроцессной задачи к задаче
многопроцессной, у нас сразу же возникают проблемы, связанные с тем, что
любой параллелизм накладывает определенную ответственность на программу.
Это ответственность по синхронизации доступа к разделяемой памяти,
ответственность за правильность подпрограммы, занимающейся приемом и
передачей сообщений и т.д. Можно, например, ошибиться в механизме передачи
и приема сообщений за счет того, что какой-то процесс будет бесконечно
долго ожидать несуществующее сообщение, то, которое никогда в очереди не
появится, и система вам никогда такую ошибку не зафиксирует. Т.е. возможны
зависания процессов, могут образоваться неосвобожденные ресурсы ("мусор"),
и это приводит к деградации системы.
Сейчас мы напишем следующую программу: первый процесс будет читать
некоторую текстовую строку из стандартного ввода и в случае, если строка
начинается с буквы 'a', то эта строка в качестве сообщения будет передана
процессу А, если 'b' - процессу В, если 'q' - то процессам А и В и затем
будет осуществлен выход. Процессы А и В распечатывают полученные строки на
стандартный вывод.

Основной процесс
#include
#include
#include
#include
struct { long mtype; /* тип сообщения */
char Data[256]; /* сообщение */
} Message;

int main()
{ key_t key; int msgid; char str[256];
key=ftok("/usr/mash",'s'); /*получаем уникальный ключ, однозначно
определяющий доступ к ресурсу данного типа */
msgid=msgget(key, 0666 | IPC_CREAT); /*создаем очередь сообщений , 0666
определяет права доступа */
for(;;) { /* запускаем вечный цикл */
gets(str); /* читаем из стандартного ввода строку
*/
strcpy(Message.Data, str); /* и копируем ее в буфер сообщения
*/
switch(str[0]){
case 'a':
case 'A': Message.mtype=1; /* устанавливаем тип и посылаем
сообщение в очередь*/
msgsnd(msgid, (struct msgbuf*) (&Message),
strlen(str)+1, 0);
break;
case 'b':
case 'B': Message.mtype=2;
msgsnd(msgid, (struct msgbuf*) (&Message),
strlen(str)+1, 0);
break;
case q':
case 'Q': Message.mtype=1;
msgsnd(msgid, (struct msgbuf*) (&Message),
strlen(str)+1, 0);
Message.mtype=2;
msgsnd(msgid, (struct msgbuf*) (&Message),
strlen(str)+1, 0);
sleep(10); /* ждем получения сообщений
процессами А и В */
msgctl(msgid, IPC_RMID, NULL); /* уничтожаем очередь*/
exit(0);
default: break;
}
}
}
Процесс-приемник А /* процесс В аналогичен с точностью до четвертого
параметра в msgrcv */
#include
#include
#include
#include
struct { long mtype;
char Data[256];
} Message;

int main()
{ key_t key; int msgid;
key=ftok("/usr/mash",'s'); /* получаем ключ по тем же параметрам */
msgid=msgget(key, 0666 | IPC_CREAT); /*создаем очередь сообщений */
for(;;) { /* запускаем вечный цикл */
msgrcv(msgid, (struct msgbuf*) (&Message), 256, 1, 0); /* читаем
сообщение с типом 1*/
if (Message.Data[0]='q' || Message.Data[0]='Q') break;
printf("%s",Message.Data);
}
exit(0);
}

Семафоры

С точки зрения тех проблем, с которыми мы знакомимся, семафоры - это
есть вполне законное и существующее понятие. Впервые ввел это понятие
достаточно известный ученый Дейкстра. Семафор - это некоторый объект,
который имеет целочисленное значение S, и с которым связаны две операции:
V(S) и P(S).
Операция P(S) уменьшает значение семафора на 1, и если S(0 процесс
продолжает работу. Если S0, то процесс
продолжает выполнение. Если S(0, то разблокируется один из процессов,
ожидающий в очереди процессов, связанной с семафором S, и текущий процесс
продолжит выполнение.
Считается, что операции P(S) и V(S) неделимы. Это означает, что
выполнение этих операций не может прерваться до их завершения. Т.е. если
семафор реализован в системе, то это должна быть одна команда.

Частным случаем продекларированного семафора является двоичный
семафор, максимальное значение которого равно единичке. При этом значение S
может быть равно 1, это означает, что ни один из процессов (связанных с
этим семафором) не находится в критическом участке. При S=0 один из
процессов находится в критическом участке {вот-вот попадет в очередь}, а
другой нормально функционирует. При S= -1 один из процессов находится в
критическом участке, а другой заблокирован и находится в очереди.
На самом деле двоичные семафоры наиболее часто находили применение в
аппаратных реализациях, например, в многомашинных комплексах с общей
оперативной памятью.

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

int semget(key_t key, int n, int flags);
int semop(int semid, struct sembuf * sops, int n);

struct sembuf{
short sem_num; /* номер семафора в массиве семафоров */
short sem_op; /* код операции, которую надо выполнить */
short sem_flg; /* флаги */
}

Первый параметр функции semget - ключ, второй - количество семафоров
(длина массива семафоров) и третий параметр - флаги. Через флаги можно
определить права доступа и те операции, которые должны выполняться
(открытие семафора, проверка, и т.д.). Функция semget возвращает
целочисленный идентификатор созданного разделяемого ресурса, либо -1, если
ресурс не удалось создать (причина - в errno).
Первый параметр функции semop - идентификатор семафора, второй -
указатель на структуру sembuf и третий параметр - количество указателей на
эту структуру, которые передаются функцией semop. В структуре содержится
вся информация о необходимом действии.
Поле операции интерпретируется следующим образом. Пусть значение
семафора с номером sem_num равно sem_val. В этом случае, если значение
операции не равно нулю, то оценивается значение суммы (sem_val + sem_op).
Если эта сумма больше либо равна нулю, то значение данного семафора
устанавливается равным сумме предыдущего значения и кода операции. Если эта
сумма меньше нуля, то действие процесса будет приостановлено до наступления
одного из следующих событий:
1. Значение суммы (sem_val + sem_op) станет больше либо равно нулю.
2. Пришел какой-то сигнал. (Значение semop в этом случае будет равно
-1).

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

Функция управления массивом семафоров.

int semctl(int id, int sem_num, int cmd, union sem_buf arg);

Первый параметр - идентификатор, второй - номер семафора в массиве, с
которым мы будем выполнять команду cmd из третьего параметра. Последний
параметр - некоторое объединение типа sembuf.
Команды могут быть традиционные (IPC_RMID), и кроме них есть другие
команды, и среди них IPC_SET, которая устанавливает значение семафора, при
этом значение передается через объединение arg. При установке семафора этой
функцией, задержек, которые определяют основной смысл работы семафора, не
будет.

Вот те функции, которые предназначены для работы с семафорами. Пример
работы с семафорами рассмотрим на следующей лекции.
Лекция №19

Мы остановились на средствах синхронизации доступа к разделяемым
ресурсам - на семафорах. Мы говорили о том, что семафоры - это тот
формализм, который изначально был предложен ученым в области компьютерных
наук Дейкстрой, поэтому часто в литературе их называют семафорами Дейкстры.
Семафор - это есть некоторая переменная и над ней определены операции P и
V. Одна позволяет увеличивать значение семафора, другая - уменьшать. Причем
с этими изменениями связаны возможности блокировки процесса и разблокировки
процесса. Обратим внимание, что речь идет о неразделяемых операциях, то
есть тех операциях, которые не могут быть прерваны, если начались. То есть
не может быть так, чтобы во время выполнения P или V пришло прерывание, и
система передала управление другому процессу. Это принципиально. Поэтому
семафоры можно реализовывать программно, но при этом мы должны понимать,
что эта реализация не совсем корректна, так как
1) программа пишется человеком, а прерывается аппаратурой, отсюда
возможно нарушение неразделяемости;
2) в развитых вычислительных системах, которые поддерживают
многопроцессорную обработку или обработку разделяемых ресурсов в
рамках одного процесса, предусмотрены семафорные команды, которые
фактически реализовывают операции P и V. Это важно.

Мы говорили о реализации семафоров в Unix в системе IPC и о том, что
эта система позволяет создать разделяемый ресурс “массив семафоров”,
соответственно, как и к любому разделяемому ресурсу, к этому массиву может
быть обеспечен доступ со стороны различных процессов, обладающих нужными
правами и ключом к данному ресурсу.
Каждый элемент массива - семафор. Для управления работой семафора
есть функции:
A. semop, которая позволяет реализовывать операции P и V над одним
или несколькими семафорами;
B. segctl - управление ресурсом. Под управлением здесь понимается
три вещи:
1. - получение информации о состоянии семафора;
2. - возможность создания некоторого режима работы семафора,
уничтожение семафора;
3. - изменение значения семафора (под изменением значения
здесь понимается установление начальных значений, чтобы
использовать в дальнейшем семафоры, как семафоры, а не
ящички для передачи значений, другие изменения - только с
помощью semop);


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

1й процесс:
#include
#include
#include
#include

int main(void)
{ key_t key;
int semid, shmid;
struct sembuf sops;
char *shmaddr;
char str[256];
key = ftok(“/usr/mash/exmpl”,’S’); /* создаем уникальный
ключ */
semid = semget(key,1,0666 | IPC_CREAT); /* создаем один семафор с
определенными
правами доступа */
shmid = shmget(key,256, 0666 | IPC_CREAT); /*создаем разделяемую
память на 256
элементов */
shmaddr = shmat(shmid, NULL, 0); /* подключаемся к разделу памяти, в
shaddr - указатель на буфер с
разделяемой памятью*/
semctl(semid,0,IPC_SET, (union semun) 0); /*инициализируем семафор со
значением 0 */
sops.sem_num = 0; sops.sem_flg = 0;

/* запуск бесконечного цикла */
while(1) { printf(“Введите строку:”);
if ((str = gets(str)) == NULL) break;
sops.sem_op=0; /* ожидание обнуления семафора */
semop(semid, &sops, 1);
strcpy(shmaddr, str); /* копируем строку в
разд. память */
sops.sem_op=3; /* увеличение семафора на 3 */
semop(semid, &sops, 1);
}

shmaddr[0]=’Q’; /* укажем 2ому процессу на то,
*/
sops.sem_op=3; /* что пора завершаться */
semop(semid, &sops, 1);
sops.sem_op = 0; /* ждем, пока обнулится семафор */
semop(semid, &sops, 1);
shmdt(shmaddr); /* отключаемся от разд. памяти */
semctl(semid, 0, IPC_RMID, (union semun) 0); /* убиваем семафор
*/
shmctl(shmid, IPC_RMID, NULL); /* уничтожаем разделяемую
память */
exit(0);
}


2й процесс:

/* здесь нам надо корректно определить существование ресурса, если он есть
- подключиться, если нет - сделать что-то еще, но как раз этого мы делать
не будем */
#include
#include
#include
#include

int main(void)
{ key_t key; int semid;
struct sembuf sops;
char *shmaddr;
char st=0;

/* далее аналогично предыдущему процессу - инициализации ресурсов */
semid = semget(key,1,0666 | IPC_CREAT);
shmid = shmget(key,256, 0666 | IPC_CREAT);
shmaddr = shmat(shmid, NULL, 0);
sops.sem_num = 0; sops.sem_flg = 0;

/* запускаем цикл */
while(st!=’Q’) {
printf(“Ждем открытия семафора n”);
/* ожидание положительного значения
семафора */
sops.sem_op=-2;
semop(semid, &sops, 1);
/* будем ожидать, пока “значение семафора”+”значение sem_op” не
перевалит за 0, то есть
если придет “3”, то “3-2=1” */
/* теперь значение семафора равно 1 */
st = shmaddr[0];
{ /*критическая секция - работа с разделяемой памятью - в
этот момент первый процесс к разделяемой памяти
доступа не имеет*/}
/*после работы - закроем семафор*/
sem.sem_op=-1;
semop(semid, &sops, 1);
/* вернувшись в начало цикла мы опять
будем ждать, пока значение семафора не
станет больше нуля */
}
shmdt(shmaddr); /* освобождаем разделяемую память и выходим */
exit(0);
}

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

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


Системы программирования.

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

Этап проектирования

Было сказано, что на сегодняшний день достаточно сложно, а
практически невозможно создавать программное обеспечение без этапа
проектирования, такого же долгого, нудного и детального периода, который
проходит во время проектирования любого технического объекта. Следует
понять, что те программы, которые пишутся студентами в качестве
практических и дипломных задач не являются по сути дела программами - это
игрушки, так как их сложность невелика, объемы незначительны и такого рода
программы можно писать слегка. Реальные же программы так не создаются, так
же, как и не создаются сложные технические объекты. Никто никогда не может
себе представить, чтобы какая-нибудь авиационная компания продекларировала
создание нового самолета и дала команду своим заводам слепить лайнер с
такими-то параметрами. Так не бывает. Каждый из элементов такого объекта,
как самолет, проходит сложный этап проектирования.
Например, фирма Боинг подняла в воздух самолет “Боинг-777”,
замечательность этого факта заключается в том, что самолет взлетел без
предварительной продувки в аэродинамической трубе. Это означает, что весь
самолет был спроектирован и промоделирован на программных моделях, и это
проектирование и моделирование было настолько четким и правильным, что
позволило сразу же поднять самолет в воздух. Для справки - продувка
самолета в аэродинамической трубе стоит сумасшедшие деньги.
Примерно та же ситуация происходит при создании сложных современных
программных систем. В начале 80х гг была начата СОИ (стратегическая
оборонная инициатива), ее идея была в том, чтобы создать сложной
технической системы, которая бы в автоматическом режиме установила контроль
за пусковыми установками СССР и стран Варшавского блока, и в случае
фиксации старта с наших позиций какого-то непродекларированного объекта
автоматически начиналась война. То есть запускались бы средства уничтожения
данного объекта и средства для ответных действий. Реально тот департамент
вооруженных сил, который занимался этим проектом, испытал ряд кризисов в
связи с тем, что ведущие специалисты в области программного обеспечения
отказывались участвовать в реализации этого проекта из-за невозможности
корректно его спроектировать, потому что система обладала гигантским
потоком входных данных, на основе которых должны были быть приняты
однозначные решения, ответственность за которые оценить весьма сложно. На
самом деле эта проблема подтолкнула к развитию с одной стороны - языков
программирования, которые обладали надежностью, в частности, язык Ада,
одной из целью которого было создание безошибочного ПО. В таких языках
наклады

Новинки рефератов ::

Реферат: Растворы и растворимость (Химия)


Реферат: Написание БД "Распределение затрат аварийно-диспетчерской службы предприятия" (Программирование)


Реферат: Залог как способ обеспечения обязательства (Гражданское право и процесс)


Реферат: Многопроцессорный вычислительный комплекс на основе коммутационной матрицы с симметричной обработкой заданий всеми процессорами (Компьютеры)


Реферат: Основы школьного законодательства (Педагогика)


Реферат: Кредитный рынок и его участники (Деньги и кредит)


Реферат: Никон и возникновение раскола (История)


Реферат: Системы исследования (Социология)


Реферат: Понятие и принципы гражданства (Право)


Реферат: Государственная Дума РФ и ее полномочия (Политология)


Реферат: Видеоустройства персональных ЭВМ и их основные характеристики (Программирование)


Реферат: Проблема мотивации в различных психологических теориях (Психология)


Реферат: Учет и аудит отгруженной и реализованной продукции (Бухгалтерский учет)


Реферат: Технология изготовления волоконнооптических световодов для передачи изображения (Технология)


Реферат: Влияние физической культуры на организм человека (Спорт)


Реферат: Страхование (Страхование)


Реферат: Розробка та виконання програм на мові Pascal (Программирование)


Реферат: Расследование тяжких преступлений против личности (Уголовное право и процесс)


Реферат: Налоговое планирование (Бухгалтерский учет)


Реферат: Движение "Талибан" (Политология)



Copyright © GeoRUS, Геологические сайты альтруист