Компьютерные сети
Автор: Пользователь скрыл имя, 09 Января 2015 в 12:25, методичка
Краткое описание
Современный уровень развития науки и производства, а также соци-
альных процессов достигнут во многом благодаря массовому применению
компьютерной техники и сетевых технологий во всех сферах человеческой
деятельности. Создание эффективных технологических комплексов и систем
различного назначения требует от их разработчиков углубленных знаний в
области архитектуры компьютеров, принципов построения программного
обеспечения, организации сетевого взаимодействия.
Файлы: 1 файл
МИНОБРНАУКИ РОССИИ
–––––––––––––––––––––––––––––––––
Санкт-Петербургский государственный
электротехнический университет «ЛЭТИ»
–––––––––––––––––––––––––––––––––––
А. В. ШЕВЧЕНКО
Компьютерные, сетевые и информационные технологии
Учебное пособие
Санкт-Петербург
Издательство СПбГЭТУ «ЛЭТИ»
2013
УДК 004(075)
ББК З 973.202я7+З 988.02я7
Ш 37
Шевченко А. В.
Ш 37 Компьютерные, сетевые и информационные технологии: Учеб. посо-
бие. СПб.: Изд-во СПбГЭТУ «ЛЭТИ», 2013. 64 с.
ISBN 978-5-7629-1351-5
Рассматриваются вопросы устройства, принципов работы и примене-
ния современной компьютерной техники; принципов построения программ-
ного обеспечения; структуры и функций операционных систем; сетевых тех-
нологий; архитектуры компьютерных систем; обеспечения информационной
безопасности.
Предназначено для студентов, обучающихся по направлению подго-
товки магистров 140400.68 «Электроэнергетика и электротехника».
УДК 004(075)
ББК З 973.202я7+З 988.02я7
Рецензенты: кафедра процессов управления и информационных систем
Северо-Западного государственного заочного технического университета;
д-р техн. наук, проф. В. И. Плескунин (АНО «АСЕРТ Бюро»).
Утверждено
редакционно-издательским советом университета
в качестве учебного пособия
ISBN 978-5-7629-1351-5
© СПбГЭТУ «ЛЭТИ», 2013
3
Введение
Современный уровень развития науки и производства, а также соци-
альных процессов достигнут во многом благодаря массовому применению
компьютерной техники и сетевых технологий во всех сферах человеческой
деятельности. Создание эффективных технологических комплексов и систем
различного назначения требует от их разработчиков углубленных знаний в
области архитектуры компьютеров, принципов построения программного
обеспечения, организации сетевого взаимодействия.
В первой главе настоящего пособия восстанавливается историческая
картина появления и развития компьютерной техники, прослеживается смена
поколений технических средств, приводится классификация компьютерных
устройств, дается оценка современного состояния данной области.
Вторая глава посвящена техническим средствам компьютерных систем –
процессорам, оперативной памяти, различным видам периферийных уст-
ройств. Наряду с классической архитектурой рассматриваются также различ-
ные варианты построения многопроцессорных систем. Большее внимание
уделяется тем характеристикам технических средств, которые оказывают
существенное влияние на эффективность использования последних в совре-
менных комплексах.
Третья глава касается принципов создания программного обеспечения
компьютерных систем. Дается классификация языков программирования,
показываются особенности программирования на языках низкого и высокого
уровней. Вводятся понятия мультипрограммирования, виртуального адрес-
ного пространства, многопоточности, реентерабильности программ.
В четвертой главе говорится о задачах и функциях операционных сис-
тем, в том числе об управлении процессами, памятью, периферийными уст-
ройствами. На примере операционной системы UNIX показываются средства
поддержки взаимодействия между процессами – сигналы, трубки, семафоры,
очереди сообщений, разделяемая память.
Пятая глава посвящена сетевым технологиям, главным образом сетям
на базе IP-протокола. На примерах рассматриваются варианты программной
реализации клиент-серверного взаимодействия.
В шестой главе говорится о различных вариантах построения компью-
терных систем – мэйнфреймах, клиент-серверных и облачных технологиях.
Последняя, седьмая глава посвящена информационной безопасности.
4
Глава 1. ИСТОРИЯ РАЗВИТИЯ И СОВРЕМЕННОЕ СОСТОЯНИЕ
КОМПЬЮТЕРНОЙ ТЕХНИКИ
Компьютеры и все, что с ними связано, является относительно молодой
и бурно развивающейся отраслью науки и техники. Поэтому для оценки со-
временного состояния в этой области, а также для понимания тенденций и
дальнейших перспектив, важно знать историю и пути развития отдельных
составляющих компьютерных, сетевых и информационных технологий.
1.1. История создания компьютеров
Потребность в технических средствах, облегчающих и ускоряющих
процессы счета, человечество испытывало очень давно и первые такие уст-
ройства – счетные палочки – появились задолго до нашей эры. В IV в. до н. э.
был придуман абак (счеты), который дошел практически до наших дней, пока
не был вытеснен массовым распространением калькуляторов.
В 1623 г. Вильгельм Шикард придумал «Считающие часы» – первый
механический калькулятор, способный выполнять четыре арифметических
действия. Считающими часами устройство было названо потому, что как и в
настоящих часах работа механизма была основана на использовании звездо-
чек и шестеренок. За этим последовали машины Блеза Паскаля (1642) и Гот-
фрида Лейбница.
В 1804 г. Жозеф Жаккар разработал ткацкий станок, в котором выши-
ваемый узор определялся сменными перфокартами. Это стало прообразом
программируемой машины.
Примерно в 1820 г. Чарльз Томас создал первый серийно выпускаемый
механический калькулятор – арифмометр, который мог складывать, вычи-
тать, умножать и делить. Механические калькуляторы, считающие десятич-
ные числа, использовались до 1970-х гг.
В 1835 г. Чарльз Бэббидж описал свою аналитическую машину. Это
был проект компьютера общего назначения с десятичной системой счисле-
ния, с применением перфокарт в качестве носителя входных данных и про-
граммы, а также парового двигателя в качестве источника энергии. Одной из
ключевых идей было использование шестерней для выполнения математиче-
ских функций. Воплотить проект в жизнь автору не удалось.
В 1936 г. немецкий инженер Конрад Цузе начал работу над вычислите-
лем серии Z, имеющим память и возможность программирования. Созданная
5
в 1938 г. на базе двоичной логики и механических операций, модель Z1 так и
не заработала достаточно надежно, из-за проблем с изготовлением деталей.
Третья машина Цузе была завершена в 1941 г. Она называлась Z3 и
была построена на телефонных реле. Z3 стала первым управляемым про-
граммой компьютером, в ней впервые был представлен ряд новшеств, таких
как арифметика с плавающей запятой. Замена сложной в реализации деся-
тичной системы на двоичную, сделала машины Цузе более простыми и на-
дежными.
В 1939 г. Джон Атанасов и Клиффорд Берри из разработали компьютер
ABC, названный по их инициалам. Это был первый в мире электронный
цифровой компьютер, конструкция которого насчитывала более 300 электро-
вакуумных ламп, а в качестве памяти использовался вращающийся барабан.
Созданный в 1945 г. американский ENIAC называют первым электрон-
ным компьютером общего назначения. Он делал несколько тысяч операций в
секунду и потреблял приблизительно 160 кВт. ENIAC использовался, глав-
ным образом, для баллистических расчетов.
1.2. Первое поколение компьютеров
В 1946 г. трое ученых – Артур Беркс, Герман Голдстайн и Джон фон
Нейман – опубликовали статью «Предварительное рассмотрение логического
конструирования электронного вычислительного устройства». В статье обос-
новывалось использование двоичной системы для представления данных,
выдвигалась идея использования общей памяти для программы и данных.
Имя фон Неймана было достаточно широко известно в науке того времени,
что отодвинуло на второй план его соавторов, и данные идеи получили на-
звание «принципы фон Неймана». Они перечислены ниже:
• использование двоичной системы счисления для данных и команд;
• программное управление (процессор исполняет команды из памяти);
• однородность памяти (команды и данные хранятся в одной памяти);
• адресуемость памяти (все ячейки одинаково доступны процессору);
• последовательное выполнение команд (одна за другой);
• условный переход (возможность изменения порядка команд).
Указанные принципы позволили при достаточно ограниченных техни-
ческих возможностях того времени реализовать первые работоспособные
вычислительные системы.
6
Первой работающей машиной с архитектурой фон Неймана считают
«Baby», созданный в Манчестерском университете в 1948 г. В 1949 г. за ним
последовал компьютер Марк I, который уже был полноценной системой, с
магнитным барабаном в качестве памяти. Другим претендентом на звание
первого цифрового компьютера с хранимой программой является EDSAC,
разработанный и сконструированный в Кембриджском университете.
В 1951 г. в компании Remington Rand был создан UNIVAC, который
стал первым массово производимым компьютером, было выпущено 46 эк-
земпляров. Компьютер состоял из 5200 электровакуумных ламп, и потреблял
125 кВт энергии. Использовались ртутные линии задержки, хранящие 1000 слов
памяти, каждое по 11 десятичных цифр плюс знак (72-битные слова).
Первой советской серийной ЭВМ стала «Стрела» (1953 г.), относящая-
ся к классу больших универсальных ЭВМ. «Стрела» имела быстродействие
2–3 тыс. опер./с. В качестве внешней памяти использовались два накопителя
на магнитной ленте емкостью 200 тыс. слов, объем оперативной памяти –
2048 ячеек по 43 разряда. Компьютер состоял из 6200 ламп, 60 тыс. полупро-
водниковых диодов и потреблял 150 кВт энергии.
В 1954 г. фирма IBM выпускает машину IBM 650, ставшую довольно
популярной – всего было выпущено более 2000 машин. Память на магнитном
барабане хранит 2000 10-знаковых слов. В 1956 г. IBM впервые продает уст-
ройство для хранения информации на магнитных дисках – RAMAC. Оно ис-
пользует 50 металлических дисков диаметром 24 дюйма, по 100 дорожек с
каждой стороны. Устройство хранило до 5 Мбайт данных.
1.3. Второе и третье поколения компьютеров
Элементной базой компьютеров второго поколения (50-е – начало 60-х гг.
ХХ в.) стали пришедшие на смену электронным лампам транзисторы.
В 1959 г. на основе транзисторов IBM выпустила мейнфрейм IBM 7090 и
машину среднего класса IBM 1401. Последняя использовала перфокарты и
стала самым популярным компьютером общего назначения того времени
(было произведено более 100 тыс. экземпляров). В 1960 г. IBM выпустила
транзисторную IBM 1620, которая стала популярна в качестве научного ком-
пьютера, было выпущено около 2000 экземпляров. В машине использовалась
память на магнитных сердечниках объемом до 60 тыс. десятичных цифр.
7
В 1960 г. фирма DEC выпустила свою первую модель – PDP-1, предна-
значенную для использования техническим персоналом в лабораториях и для
исследований. На PDP-1 цикл обращения к памяти занимал 5 мкс; большин-
ство инструкций требовали 10 мкс.
Лучшей отечественной ЭВМ 2-го поколения считается созданная в
1966 г. БЭСМ-6 с производительностью 1 млн опер./с и с оперативной памя-
тью 192 Кбайт.
Следующим революционным шагом в компьютерных технологиях ста-
ло применение интегральных микросхем, которые объединяли на одном по-
лупроводниковом кристалле десятки и сотни элементов. Созданные на базе
микросхем компьютеры третьего поколения (середина 60-х – 70-е гг. ХХ в.)
положили начало массовому применению вычислительной техники не только
в военной и научных областях, но в инженерно-экономических задачах.
Фирма IBM первой реализовала семейство ЭВМ – серию совместимых
друг с другом компьютеров – от небольших до самых мощных и дорогих мо-
делей. Наибольшее распространение получило 32-битное семейство Sys-
tem/360, аналогом которого в СССР стала серия ЕС ЭВМ.
Чтобы не проиграть в конкурентной борьбе, фирма DEC создала
16-битный миникомпьютер PDP-11. Многочисленные инновации, в числе ко-
торых общая шина UNIBUS, сделали архитектуру PDP-11 лидером компью-
терной индустрии. Первой моделью стала PDP-11/20, которая затем была за-
менена на высокопроизводительные модели 11/30, 11/45 и 11/70. Эти маши-
ны имели быстродействие в 1 млн опер./с и ОЗУ емкостью 256 Кбайт.
В СССР аналогом PDP-11 была серия СМ ЭВМ.
1.4. Четвертое поколение компьютеров
Технологической базой четвертого поколения компьютеров (с 1980-х гг.)
стали большие и сверхбольшие интегральные схемы, объединяющие в не-
большом объеме миллионы транзисторов. Микроминиатюризация электрон-
ных устройств открыла путь к созданию персональных компьютеров, первым
из которых считают Altair-8800 на базе микропроцессора Intel 8080. В даль-
нейшем лидерство на рынке персональных компьютеров оспаривали фирмы
Apple (модель Apple-2) и IBM (модель IBM PC).
В настоящее время основной элементной базой персональных компью-
теров являются 64-битные процессоры фирм Intel и AMD с тактовой часто-
8
той порядка 2 ГГц. Размер оперативной памяти составляет примерно 4–
16 Гбайт, дисковые накопители позволяют хранить до нескольких терабай-
тов. Среди персональных компьютеров выделяют следующие классы:
• настольные компьютеры, конструктивно выполняемые в виде от-
дельного системного блока, к которому подключаются периферий-
ные устройства (монитор, клавиатура, мышь и т. д.);
• портативные компьютеры (ноутбуки, нетбуки), имеющие вид скла-
дывающейся книжки, внутри которой находится экран, клавиатура и
устройство управления курсором;
• планшетные компьютеры, отличающиеся плоским корпусом, с од-
ной стороны которого находится тактильный экран, и малым весом,
ориентированные на работу в беспроводных сетях.
Бурно развивающимся классом компьютерной техники явяются мо-
бильные устройства – коммуникаторы и смартфоны. Последние представля-
ют собой малогабаритные компьютеры, в которых программно реализована
функция телефона. Вычислительные возможности смартфонов позволяют
решать вполне серьезные с технической точки зрения задачи, например вос-
произведение видео высокой четкости (в формате HD).
На другом полюсе вычислительной техники с точки зрения функцио-
нальных возможностей и габаритов находятся серверы и суперкомпьютеры.
Серверы предназначены для хранения и обработки данных, а также для вы-
полнения различных приложений. Наибольшую известность получили серве-
ры баз данных и веб-серверы. В этих целях применяются мощные многопро-
цессорные машины с оперативной памятью до 512 Гбайт и дисковыми нако-
пителями в десятки и сотни терабайтов. Для серверных машин важнейшим
показателем является надежность, которая может достигать 99,999 % (это оз-
начает 6 мин простоя в год при непрерывной работе).
Начало классу современных суперЭВМ положила созданная в 1976 г.
модель Cray-1 (фирма Cray Research), имевшая пиковое быстродействие в
130 мегафлопсов. Современные суперкомпьютеры достигают производи-
тельности в десятки петафлопсов. Лидером на ноябрь 2012 г. считается уста-
новленная в Национальной лаборатории Оук-Ридж (США) машина Cray
XK7, имеющая 560 640 ядер центральных процессоров. На этой машине
достигнута производительность в 27 петафлопсов.
9
Глава 2. ТЕХНИЧЕСКИЕ СРЕДСТВА КОМПЬЮТЕРНЫХ СИСТЕМ
Современные компьютеры в основном унаследовали архитектуру, раз-
работанную фон Нейманом. В составе любого компьютера присутствует цен-
тральная часть, включающая процессор (один или несколько) и оперативную
память (ОЗУ), а также периферийные устройства (рис. 2.1). Взаимодействие
между составными частями компьютера обеспечивается через шину, при
этом для передачи адресов и данных могут использоваться отдельные шины
(шина адреса и шина данных), либо применяться универсальная шина.
Рис. 2.1
Центральная часть обеспечивает выполнение программ (процессор вы-
полняет операции над хранящимися в оперативной памяти данными). Сами
программы (команды процессора) также хранятся в оперативной памяти и
могут рассматриваться как данные. Периферийные устройства обеспечивают
операции ввода-вывода, долговременное хранение данных, а также взаимо-
действие с пользователем.
2.1. Процессор
Основным элементом компьютера является процессор, который состо-
ит из арифметико-логического устройства (АЛУ), устройства управления
(УУ) и регистров. Регистры используются для оперативного хранения дан-
ных или адресов в процессе выполнения программы. Размер регистров опре-
деляется архитектурой процессора (16, 32, 64 бит). Среди регистров выделя-
ют регистры общего назначения, а также три специальных регистра – про-
граммный счетчик (PC – programm counter), указатель стека (SP – stack
pointer) и слово состояния программы (PS – programm status).
Центральная часть
Процессор
ОЗУ
Видео-
контроллер
Контроллер
дисков
Контроллер
USB
7
;
:
Периферийные устройства
Шина
10
Процессор работает следующим образом. По адресу, находящемуся в
PC, из ОЗУ получается команда. УУ декодирует команду, определяет ее раз-
мер и число операндов (операнды могут находиться в ОЗУ или в регистрах).
Команды могут заключаться в пересылке данных из ОЗУ в регистры и на-
оборот, а также в выполнении операций над данными. В этом случае задей-
ствуется АЛУ, а по итогам операции в PS выставляются соответствующие
биты (например признак нулевого результата). После выполнения команды
PC увеличивается на размер команды, таким образом он указывает на сле-
дующую команду программы. На этом цикл работы процессора завершается
и начинается следующий. Время выполнения цикла определяется тактовой
частотой процессора. Современные процессоры работают на частотах 1...2 ГГц.
Циклическая работа процессора обеспечивает последовательное вы-
полнение команд. Для организации ветвлений и циклов в программах ис-
пользуются команды условного или безусловного переходов. Команда ус-
ловного перехода, при наличии соответствующих битов в PS, заносит в PC
адрес команды, на которую осуществляется переход. Команда безусловного
перехода просто заносит в PC адрес без всяких условий.
При выполнении программы регистр SP содержит адрес специальной
области памяти – стека, который используется, главным образом, для пере-
дачи параметров в подпрограммы, а также для хранения адресов возврата из
подпрограмм. Стек организуется по принципу LIFO (last input first output) –
«последним вошел – первым вышел». При занесении данных по находяще-
муся в SP адресу указатель стека увеличивается, а при выборке данных –
уменьшается.
Состав команд, которые может выполнять процессор, образует его сис-
тему команд, которая наряду с разрядностью является важнейшей характери-
стикой процессора. По системе команд и другим особенностям архитектуры
современные процессоры делятся на следующие классы:
CISC-процессоры (complex instruction set computing) – процессоры со
сложным набором команд. Данную архитектуру отличает небольшое число
регистров и команды переменной длины. Типичными представителями этого
класса являются процессоры x86 (фирма Intel).
RISC-процессоры (reduced instruction set computing) – процессоры с уп-
рощенным набором команд. Для этой архитектуры характерны большое чис-
ло регистров, фиксированная длина команд, широкое применение операций
11
регистр–регистр, отсутствие косвенной адресации. Упрощение команд по-
зволяет повысить быстродействие и сократить энергопотребление. Типич-
ными представителями этого класса являются процессоры Alpha, PowerPC,
SPARC, PA-RISC, MIPS. В последнее время в мобильных устройствах широ-
ко применяется процессор ARM.
Для повышения быстродействия процессоров без увеличения тактовой
частоты, которая ограничена применяемыми в настоящее время технология-
ми, применяются специальные технические решения. К ним относятся кон-
вейерные и суперскалярные процессоры.
Конвейерный процессор предполагает параллельную работу его со-
ставных частей. В то время как результат выполнения команды записывается
в память, АЛУ выполняет следующую команду, а УУ дешифрирует очеред-
ную команду. Таким образом за один такт может выполняться несколько ко-
манд. Длина конвейера в современных процессорах может достигать 30 ко-
манд, что представляет определенную проблему при условных переходах.
Суперскалярный процессор содержит несколько специализированных
АЛУ, например одно – для целочисленной арифметики, другое – для опера-
ций с плавающей точкой и третье – для логических операций. Две команды и
более выбираются из памяти параллельно, хранятся в буфере и ожидают, ко-
гда необходимое АЛУ освободится. При такой архитектуре команды могут
выполняться не в том порядке, который предписан программой, и получение
правильного результата возлагается в основном на аппаратуру процессора.
2.2. Оперативная память
Оперативная память представляет собой набор однобайтовых ячеек,
каждая из которых имеет свой адрес. Адреса начинаются с нулевого и идут
непрерывно до максимального значения. Возможности компьютера в части
размера оперативной памяти определяются разрядностью процессора и шины
адреса. Так, если 32-битная архитектура позволяет адресовать до 4 Гбайт, то
64-битная архитектура (при наличии соответствующей шины адреса) практи-
чески снимает ограничения на возможный размер ОЗУ.
Скорость обращения к данным в оперативной памяти достаточно высо-
ка – время доступа составляет приблизительно 10 нс. Это примерно на поря-
док больше, чем время доступа к регистрам процессора, зато на три порядка
меньше чем время доступа к данным на магнитном диске.
12
Основная часть ОЗУ может сохранять данные только при включенном
питании компьютера. Такая память называется RAM (random access memory).
Для хранения данных при выключенном питании служит специальная часть
памяти компьютера, которая называется постоянным запоминающим устрой-
ством (ПЗУ) или ROM (read only memory). Как правило, в такой памяти рас-
полагается программа начальной загрузки компьютера. Существуют также
перепрограммируемые ПЗУ, которые называются EPROM.
Энергонезависимой является также CMOS-память, используемая для
отсчета и хранения текущего времени, а также для хранения ряда системных
параметров. Эта память, как и системные часы, получает питание от миниа-
тюрной литиевой батарейки, энергии которой хватает на много лет работы
компьютера.
2.3. Устройства хранения данных
Среди периферийных устройств важнейшую группу представляют уст-
ройства хранения данных. Поскольку оперативная память не может хранить
данные при выключенном питании, то уже на заре компьютерной техники
появились первые устройства долговременного хранения информации, такие
как магнитные барабаны, перфокарты и перфоленты.
Перфокарта представляла собой тонкий лист картона в котором про-
бивались прямоугольные отверстия, которыми кодировались текстовые или
двоичные данные. Стандартные перфокарты имели 12 рядов и 80 колонок,
что позволяло записывать на одну перфокарту строку из 80 символов. Пер-
фокарты складывались колодами, что позволяло их автоматическую загруз-
ку. Подсчитано, что для записи 1 Гбайт информации потребовалось бы при-
мерно 22 т перфокарт. Удобством перфокарт была возможность замены од-
них карт в колоде на другие, что выполняло функции текстового редактора.
Перфолента пришла в компьютерную технику из телеграфии, где ис-
пользовалась с середины XIX в. 8-дорожечная перфолента представляла со-
бой бумажную ленту шириной 25 мм, в которой пробивались круглые отвер-
стия. В середине ленты шла транспортная дорожка с более мелкой перфора-
цией, служащая для перемещения ленты с помощью зубчатого колеса. Ши-
роко применялась в миникомпьютерах и станках ЧПУ до середины 80-х гг.
Жесткий диск (другое название – винчестер) был изобретен в 1956 г. и
представляет в настоящее время основной носитель информации как в боль-
13
ших серверных системах, так и в настольных персональных компьютерах.
Жесткий диск устроен следующим образом. На вращающемся с большой
скоростью шпинделе (от 3600 до 15 000 об./мин) закреплен пакет круглых
пластин с нанесенным ферромагнитным слоем. Каждая пластина имеет две
поверхности, вдоль которых перемещаются от центра к периферии магнит-
ные головки. Часть поверхности, равноудаленная от центра называется до-
рожкой. Дорожки всех поверхностей, находящиеся на одинаковом расстоя-
нии от центра называются цилиндром. Цилиндры делятся на секторы, кото-
рые позволяют записывать блок информации объемом 512 байт. Эта единица
информации называется блоком, устройство управления диском – контроллер –
позволяет читать или записывать блок только целиком. Поэтому жесткие
диски называют блочными устройствами. В настоящее время (2012 г.) выпу-
щены жесткие диски, позволяющие хранить 2 Тбайт информации.
Гибкий диск (дискета) был впервые выпущен в 1971 г., их производство
продолжалось до 2011 г. Гибкие диски получили широкое распространение с
1970- до 1990-х гг. как сменные носители информации. Гибкие диски имели
размеры 8", 5.25", 3.5" (в хронологическом порядке) и позволяли хранить со-
ответственно 256, 720 Кбайт и 1.44 Мбайт данных.
Оптический диск это носитель информации, запись и считывание с ко-
торого осуществляется оптическим путем (лучом лазера). Оптические носи-
тели бывают однократной и много кратной записи. Имеется много форматов
оптических дисков, наиболее распространенными являются CD, емкостью
700 Мбайт, и DVD, емкостью 4.7 Гбайт. Оптические диски используются,
главным образом, для установки программ и переноса данных с компьютера
на компьютер, а также в целях резервного копирования небольших объемов
данных.
Магнитная лента в качестве устройства хранения данных впервые бы-
ла применена в 1951 г. В 1964 г. в фирме IBM был принят стандарт 9-до-
рожечной ленты с линейной записью, который широко использовался до
1980-х гг. В 1989 г. фирмами Hewlett-Packard и Sony был разработан стандарт
хранения данных DDS на базе цифровой кассеты. Эти кассеты позволяли за-
писывать до 8 Гбайт. В настоящее время разрабатываются носители на
35 Тбайт. Для хранения больших объемов данных применяются ленточные
библиотеки, в которых кассеты находятся в специальном хранилище, а их за-
грузка в считывающее устройство выполняется автоматически.
14
К достоинствам магнитной ленты относятся большая емкость, низкая
стоимость и широкие условия хранения носителя, стабильность работы, на-
дежность, низкое энергопотребление у ленточной библиотеки большого объ-
ема. В качестве недостатков магнитных лент отмечают низкую скорость до-
ступа к данным и сравнительно высокую стоимость накопителя.
Твердотельный накопитель (SSD – solid state device) представляет со-
бой хранилище на базе микросхем памяти. При этом применяются две техно-
логии – на базе энергозависимой памяти (RAM) и на базе энергонезависимой
памяти (Flush). Первый RAM SSD-накопитель появился в 1978 г., а первый
Flush SSD-накопитель в 1985 г. Сейчас SSD-накопители достигли емкости
1 Тбайт (2009 г.) и применяются, главным образом, в мобильных устройствах –
смартфонах, ноутбуках, планшетных компьютерах.
Достоинствами твердотельных накопителей являются отсутствие по-
движных частей, высокие скорости чтения и записи, низкая потребляемая
мощность, полное отсутствие шума, высокая механическая стойкость, широ-
кий диапазон рабочих температур, стабильность времени считывания дан-
ных, малые габариты и вес. К недостаткам твердотельных накопителей отно-
сятся ограниченное число циклов перезаписи, а также высокая цена за еди-
ницу объема.
2.4. Устройства взаимодействия с пользователем
Периферийные устройства взаимодействия с пользователем очень раз-
нообразны. На заре компьютерной техники основным устройством ввода-
вывода данных была электрическая пишущая машинка (телетайп). Оператор
вводил данные с клавиатуры, выходные сообщения печатались на бумаге. За-
тем на смену телетайпам пришли алфавитно-цифровые терминалы, которые
состояли из монитора (дисплея) на базе электронно-лучевой трубки и кла-
виатуры. Типичный алфавитно-цифровой монитор имел на своем экране
24 строки, в которых отображалось по 80 символов.
В 1980-е гг. стали появляться графические мониторы, которые по
принципу работы делились на векторные и растровые. Векторные мониторы
рисовали на экране наборы линий – векторов, и применялись главным обра-
зом в системах автоматизированного проектирования.
Растровые мониторы отображают на экране прямоугольное поле то-
чек (пикселов), каждая из которых может светиться определенным цветом
15
(в цветных мониторах) или с определенной градацией яркости (в монохром-
ных мониторах). По применяемым технологиям растровые мониторы делятся
на электронно-лучевые, плазменные, светодиодные, жидкокристаллические.
Основной характеристикой растровых мониторов являются размер рас-
тра, задаваемый числом пикселов по горизонтали и вертикали, а также глу-
бина цвета, определяющая, сколько битов используется для кодирования
цвета одной точки. В настоящее время широко применяется глубина цвета в
24 бит (по 8 бит на цвет). Для профессиональной работы, требующей особой
четкости цветных изображений (автоматизированное проектирование, ком-
пьютерная графика), применяется глубина цвета 48 бит (по 16 бит на цвет).
С появлением графических мониторов появилась потребность в уст-
ройствах, позволяющих задавать координаты относительно изображения на
экране. В середине 1970-х гг. в системах автоматизированного проектирова-
ния широкое распространение получили графические планшеты, в которых
координаты вводились прикосновением специального пера.
В персональных компьютерах на роль основного устройства графиче-
ского ввода безусловно претендует манипулятор мышь. Первое такое уст-
ройство в составе компьютера фирмы Xerox было выпущено в 1981 г. В про-
цессе «эволюции» присущий первым мышам механический шаровый привод
был заменен на оптические датчики перемещения, что положительно сказа-
лось на надежности и точности работы.
В ноутбуках применяются малогабаритные манипуляторы – трекболы,
трекпойнты и тачпады. Трекбол функционально представляет собой перевер-
нутую механическую (шариковую) мышь. Шар находится сверху, и пользо-
ватель может вращать его пальцами, не перемещая при этом корпус устрой-
ства. Трекпойнт представляет собой небольшой выступ, обычно в середине
клавиатуры, при давлении на который курсор экрана перемещается в направ-
лении и со скоростью, соответствующими прилагаемому усилию. Тачпад –
сенсорная панель, как правило, прямоугольной формы. Передвижение пальца
вызывает перемещение курсора, короткое касание (одиночное или двойное)
эквивалентно нажатию кнопки мыши.
В последнее время в мобильных и стационарных электронных устрой-
ствах широкое распространение получили сенсорные экраны. В смартфонах
и планшетных компьютерах сенсорные экраны заменяют одновременно кла-
виатуру и мышь.
16
2.5. Устройства ввода-вывода информации
Устройства ввода-вывода информации предназначены для представле-
ния данных в удобной для восприятия форме на бумаге или других носите-
лях, а также для перевода данных с неэлектронных носителей в форматы,
доступные компьютерным программам.
Наиболее известным устройством для получения твердых копий явля-
ется печатающее устройство – принтер. По принципу создания изображения
принтеры делятся на механические, термические, струйные и лазерные.
В механических принтерах краска с красящей ленты переносится на
бумагу ударным способом. Первыми принтерами этого типа были электриче-
ские пишущие машинки (телетайпы). Они работали крайне медленно, по-
скольку печать символов осуществлялась последовательно.
Затем в 1960–70-х гг. появились барабанные принтеры, в которых сим-
волы шрифта располагались на поверхности барабана по окружности (обыч-
но 132 колонки). Барабан вращался с высокой скоростью, в момент прохож-
дения нужного символа бумага через ленту прижималась молоточком к бара-
бану. Печать символов строки осуществлялась практически одновременно,
поэтому барабанные принтеры отличались высокой скоростью, но низким
качеством печати и невозможностью вывода графической информации.
Другой разновидностью механических принтеров были матричные
принтеры (изобретены в 1964 г.), в которых удары наносились управляемыми
электромагнитами иголочками. Матричные принтеры отличались меньшей
стоимостью, возможностью вывода графической информации, но работали
медленно и сильно шумели. Сейчас матричные принтеры применяются там,
где требуется печать под копирку (банки, кассовые аппараты и т. п.).
Термопринтеры используют специальную термочувствительную бума-
гу, на которой «выжигаются» точки. По принципу формирования изображе-
ния похожи на матричные принтеры. Применяются, главным образом, в ма-
логабаритных устройствах – факсах, банкоматах, кассовых аппаратах.
В струйных принтерах изображение формируется чернилами, подавае-
мыми на бумагу через матрицу управляемых форсунок. Качество печати вы-
сокое, стоимость расходных материалов также высока.
В лазерных принтерах изображение создается красящим порошком
(тонером), переносимым на бумагу через электростатический барабан, заряд
с которого снимается лазерным лучом. Фиксация изображения производится
17
путем нагрева тонера. Лазерные принтеры обеспечивают высокое качество и
высокую скорость печати.
Основными характеристиками широко применяемых в настоящее вре-
мя лазерных и струйных принтеров являются размер бумаги (или другого но-
сителя), число цветов (обычно от одного до восьми), а также плотность печа-
ти, измеряемая в числе точек на дюйм (DPI – dot per inch).
Для вывода графической информации на носители крупного размера
(форматы А1 и А2) в системах автоматизированного проектирования приме-
няются плоттеры. В плоттерах лист бумаги закреплен неподвижно, а изо-
бражение рисуется перьями разного цвета и разной толщины, находящимися
в движущейся головке.
Для ввода алфавитно-цифровых символов или графических изображе-
ний применяют сканеры. Для распознавания символов применяются специ-
альные шрифты (семейство OCR). При сканировании изображений основны-
ми характеристиками являются размер изображения, плотность сканирования
(измеряется в DPI) и глубина цвета (число бит на точку).
В промышленности и торговле для автоматизированного считывания
информации широко применяются сканеры штрих-кода. В линейных штрих-
кодах информация кодируется чередованием светлых и темных полосок раз-
ной толщины. Считывание осуществляется лучом лазера.
Для ввода мультимедийной информации применяются специальные
устройства аудио- и видеозахвата, в которых звук и изображение оцифровы-
ваются, компрессируются и переводятся аппаратными средствами в один из
стандартных форматов.
2.6. Устройства передачи информации
Эта категория устройств применяется для организации взаимодействия
удаленных компютеров и создания компьютерных сетей. Еще в 1950-х гг. в
этих целях впервые были применены модемы и телефонные линии. Первый
модем для персональных компьютеров появился в 1979 г. Модем состоит из
двух устройств – модулятора, который переводит данные в звуковые сигна-
лы, и демодулятора, выполняющего обратное преобразование.
Для компьютерных сетей применяют концентраторы, коммутаторы и
маршрутизаторы. Концентраторы и коммутаторы объединяют компьютеры в
сеть, маршрутизаторы служат для соединения отдельных сегментов сетей.
18
Глава 3. ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ
КОМПЬЮТЕРНЫХ СИСТЕМ
3.1. Программирование, языки программирования
Программное обеспечение (ПО) компьютерных систем делится на сис-
темное и прикладное. Системное ПО требуется для управления аппаратными
ресурсами компьютерной техники и создания среды, в которой будет выпол-
няться прикладное ПО. В свою очередь, прикладное ПО предназначено для
решения задач конечных пользователей системы. Процесс создания ПО на-
зывают программированием.
Если на заре компьютерной техники программирование велось непо-
средственно в машинных кодах (командах процессора), то затем для ускоре-
ния этого процесса стали применять языки программирования и специальные
программы – трансляторы, которые переводят программы с языка програм-
мирования в машинный код.
Существуют языки программирования низкого и высокого уровня.
Язык низкого уровня (его называют ассемблером) позволяет разрабатывать
программы на уровне команд процессора. Ассемблер применяют там, где
требуется высокая эффективность программного кода. Программирование на
языке низкого уровня является сложной задачей и требует высокой квалифи-
кации программиста.
Программирование на языке высокого уровня не зависит от архитекту-
ры компьютера и позволяет создавать программы, которые могут перено-
ситься с одной компьютерной системы на другую. За небольшую историю
компьютерной техники было создано более 2500 языков программирования,
информация о наиболее значимых из них приведена в табл. 3.1.
Языки высокого уровня бывают процедурные, в которых с помощью
операторов задается последовательность действий, а также – непроцедурные,
в которых определяется, каким должен быть результат работы программы.
Трансляторы с языков высокого уровня делятся на компилирующие и интер-
претирующие. Первые создают программы в машинном коде, вторые непо-
средственно исполняют программы на языке высокого уровня. Достоинство
компиляторов – эффективность при выполнении программ, достоинство ин-
терпретаторов – гибкость при создании программного обеспечения.
19
Таблица 3.1
Язык
Год
выпуска
Назначение
FORTRAN
1957
Первый язык высокого уровня для научных и инженерных рас-
четов
ALGOL
1958
Универсальный алгоритмический язык широкого применения
COBOL
1959
Разработка бизнес-приложений
LISP
1960
Язык обработки списков для систем искусственного интеллекта
BASIC
1963
Язык для обучения программированию
PL/1
1964
Язык для научных, инженерных и бизнес-ориентированных
вычислений
C
1968
Эффективный язык для системного и прикладного программи-
рования
Pascal
1970
Язык общего назначения, часто используется для обучения
программированию
Prolog
1972
Язык и система логического программирования
Ada
1980
Язык программирования для встроенных систем
Smalltalk
1980
Объектно-ориентированный язык программирования
C++
1983
Объектно-ориентированный язык программирования, создан-
ный на базе языка С
Eiffel
1986
Объектно-ориентированный язык программирования с алголо-
подобным синтаксисом
Objective-C
1986
Объектно-ориентированный язык на базе C и Smalltalk
Java
1995
Объектно-ориентированный язык для виртуальной машины
C#
2000
Объектно-ориентированный язык для платформы .NET
В настоящее время (февраль 2013) наиболее популярными языками
программирования по рейтингу TIOBE (www.tiobe.com) являются Java (18 %),
C (17 %), Objective-C (10 %), C++ (9 %), C# (7 %).
3.2. Разработка ПО на языке высокого уровня
Процесс создания программного обеспечения с использованием языка
высокого уровня С включает несколько этапов (рис. 3.1). На этапе концепту-
ального дизайна определяется архитектура будущей программы или ком-
плекса программ. На этапе кодирования пишется программный код отдель-
ных модулей. Следующие два этапа – компиляция и построение – приводят к
созданию готовых к исполнению программ. Их работоспособность проверя-
ется на последнем этапе, который называется отладка.
20
Рис. 3.1
При компиляции программы, написанной на языке высокого уровня,
компилятором создается образ будущей исполняемой программы. Обычно
это делается в два этапа. На первом компилятор обрабатывает исходные фай-
лы программы и создает так называемый объектный код. На втором этапе
осуществляется построение программы – сборка всех модулей, включая биб-
лиотечные, в единый образ задачи (exe-файл).
3.3. Создание образа программы
В современных компьютерных архитектурах образ программы создает-
ся в виртуальном адресном пространстве – условном пространстве адресов,
которое начинается с нулевого адреса. Размер виртуального адресного про-
странства определяется разрядностью компьютера, например для 32-битных
компьютеров это 2
32
байт, или 4 Гбайт. Компилятор размещает в адресном
пространстве данные и команды программы, при этом формируются отдель-
ные области памяти, называемые сегментами. Пример сегментов програм-
мы, создаваемых компилятором Borland C++ Builder, показан на рис. 3.2.
Концептуальный
дизайн
Кодирование
Компиляция
Построение
Библиотеки
.h
.h
.lib
.exe
.obj
.obj
.obj
.h
.h
.cpp
.h
.h
.h
Разработка пользовательского интерфейса,
определение состава модулей, структур данных
Написание программного кода для
функций
Трансляция кода с языка
программирования в объектный код
«Сборка» приложения
в исполняемый файл
Отладка
Тестирование
приложения
21
Рис. 3.2
В начальных адресах программы находятся управляющие структуры, в
которые компилятор заносит информацию о сегментах программы (их раз-
мере и начальных адресах). Данные, значения которых не определены в про-
грамме в момент компиляции, размещаются в сегменте неинициализирован-
ных данных, расположенном вниз (в сторону младших адресов) от адреса
0х00800000 (здесь и в дальнейшем адреса представляются шестнадцатерич-
ными числами). Данные с заданными в тексте программы значениями раз-
мещаются в сегменте инициализированных данных, расположенном перед
сегментом неинициализированных данных.
Сегмент кода программы, содержащий команды процессора, размеща-
ется после адреса 0х00400000. Вниз от этого адреса располагается стек, кото-
рый может использовать адреса вплоть до конца сегмента управляющих
структур. Выше адреса 0х00800000 находится динамическая память, выде-
ляемая под данные в процессе выполнения программы. Указанные адреса яв-
ляются настройками компилятора по умолчанию и могут при необходимости
быть изменены.
При сохранении образа задачи в exe-файле в него записываются не все
сегменты программы, а только те, которые содержат сформированные ком-
пилятором данные. Такими сегментами являются инициализированные дан-
ные, код и управляющие структуры. Для остальных сегментов важно знать
их расположение и размер, а эта информация есть в управляющих структурах.
Текст программы
int A;
int B = 999;
void f()
{
int *C = new int[8];
int D;
C[0] = A+B+D;
...
}
Виртуальное адресное пространство
Динамическая
память
Неинициализированные
данные
Инициализированные
данные
Код
Стек
Управляющие
структуры
0x00000000
0x00400000
0x00800000
22
3.4. Загрузка и выполнение программы
Подготовленные к выполнению программы могут храниться, перено-
ситься на другие компьютеры, имеющие аналогичную архитектуру, и запус-
каться в тот момент, когда требуется выполнение соответствующей задачи.
При запуске программы ее образ загружается из файла в оперативную память
(рис. 3.3). Сегменты кода, инициализированных данных и управляющих струк-
тур копируются в память, остальные сегменты заполняются нулями. В регистр
SP процессора заносится адрес вершины стека. Последним действием при за-
грузке программы является занесение стартового адреса программы – точки
входа – в регистр PC процессора и процессор начинает выполнять программу.
Рис. 3.3
Рассмотренная процедура загрузки программы целиком в определен-
ные адреса оперативной памяти в настоящее время практически не применя-
ется. В современных компьютерах загрузка и выполнение программы проис-
ходит под управлением операционной системы – комплекса специальных
программ, управляющих работой компьютера. Вопросы управления памятью
и организации параллельного выполнения программ будут рассмотрены в
четвертой главе.
Оперативная память
Динамическая
память
Неинициализированные
данные
Инициализированные
данные
Код
Стек
Управляющие
структуры
Файл образа задачи (.exe)
Инициализированные
данные
Управляющие
структуры
Код
Процессор
Регистр
Регистр
АЛУ
PC – программный счетчик
Загрузка
SP – указатель стека
23
Глава 4. ОПЕРАЦИОННЫЕ СИСТЕМЫ
4.1. Назначение и характеристики операционных систем
Основное назначение операционной системы (ОС) – управление ресур-
сами компьютера (процессором, памятью и периферийными устройствами) и
их предоставление различным прикладным программам. Таким образом, ОС
является связующим звеном между аппаратной частью компьютерной систе-
мы и прикладным ПО.
По способу управления ресурсами ОС делятся на системы пакетной
обработки, системы разделения времени и системы реального времени. Сис-
темы пакетной обработки обеспечивают последовательное выполнение вход-
ного пакета программ-заданий. Системы разделения времени распределяют
время процессора между одновременно выполняемыми программами в зави-
симости от их готовности к выполнению и приоритетов. Системы реального
времени перераспределяют ресурсы при наступлении внешних событий в
пользу программ, которые должны оперативно реагировать на эти события.
Здесь ключевым моментом служит обеспечение требуемого времени реакции ОС.
По возможностям одновременного выполнения программ ОС делятся
на однозадачные и многозадачные. Однозадачные ОС позволяют выполнять
на компьютере только одну программу. Многозадачные ОС распределяют
ресурсы компьютерной системы между множеством параллельно выполняе-
мых программ.
По возможностям управления пользователями ОС делятся на однополь-
зовательские и многопользовательские. Однопользовательские ОС не со-
держат механизма управления пользователями. Многопользовательские ОС
применяются там, где требуется одновременная работа нескольких пользова-
телей на одной компьютерной системе.
Таблица 4.1
ОС
Год
выпуска
Характеристики
Multics
1965
Одна из первых ОС с разделением времени
OS/360
1965
Семейство ОС для компьютеров System/360 фирмы IBM
Unix
1969
Первая ОС UNIX, разработанная компанией AT&T
RT-11
1970
Однопользовательская ОС реального времени для PDP-11
RSX-11M
1973
Многопользовательская ОС реального времени для PDP-11
24
Окончание табл. 4.1
ОС
Год
выпуска
Характеристики
MVS
1974
ОС для больших компьютеров фирмы IBM
CP/M
1976
Первая универсальная ОС для микрокомпьютеров
VMS
1978
32-разрядная ОС для компьютеров VAX фирмы DEC
Apple DOS
1978
ОС для микрокомпьютеров Apple II
Xenix
1980
UNIX-подобная ОС для PDP-7 и микропроцессоров Intel
MS-DOS
1981
Однопользовательская однозадачная ОС для IBM PC
SunOS
1982
UNIX-подобная ОС для компьютеров фирмы Sun
Ultrix
1982
UNIX-подобная ОС реального времени для компьютеров VAX
Lisa OS
1983
ОС для персонального компьютера Lisa фирмы Apple
Mac OS
1984
ОС фирмы Apple для персонального компьютера Macintosh
QNX
1984
UNIX-подобная ОС реального времени для встроенных систем
UniCOS
1984
ОС UNIX для суперкомпьютеров компании Cray
MIPS OS
1985
UNIX-подобная ОС для компьютеров MIPS
Windows
1985
Графическая оболочка, с 1995 г. – однопользовательская ОС
AIX
1986
UNIX-подобная ОС для компьютеров IBM
HP-UX
1986
UNIX-подобная ОС для компьютеров фирмы Hewlett Packard
IRIX
1987
UNIX-подобная ОС для компьютеров фирмы Silicon Graphics
OS/2
1987
Многозадачная ОС для IBM PC/AT
OS/400
1988
Многозадачная ОС для компьютеров AS/400 фирмы IBM
NeXTSTEP
1989
Многозадачная ОС для компьютеров NeXT
SCO UNIX
1989
UNIX-подобная ОС для компьютеров на базе Intel
OSF/1
1990
64-разрядная ОС для процессоров Alpha фирмы DEC
Linux
1991
Свободная UNIX-подобная ОС для множества платформ
Solaris
1992
UNIX-подобная ОС для компьютеров фирмы Sun
FreeBSD
1993
Свободная UNIX-подобная ОС для множества платформ
Windows NT
1993
Многозадачная ОС для компьютеров на базе Intel
История операционных систем берет начало в 1950-х гг., когда были
сделаны первые попытки создать программное обеспечение, управляющее
работой компьютера. В табл. 4.1 приведены данные о наиболее значимых
операционных системах. Следует учитывать, что в ходе эволюции некоторые
операционные системы меняли названия. Так, например Windows 95, Win-
dows 98 и Window Me являются продолжением линии Windows, а Windows XP,
Windows 2000, Windows 7 и Windows 8 – продолжением линии Windows NT.
25
4.2. Структура и функции операционных систем
Поскольку целевым назначением ОС является изоляция прикладных
программ от уровня аппаратного обеспечения компьютера и создание эффек-
тивной среды для выполнения прикладного ПО, то основными функциями
каждой ОС являются:
• загрузка программ и их выполнение;
• выполнение запросов программ;
• управление процессором;
• управление оперативной памятью;
• управление периферийными устройствами;
• поддержка пользовательского интерфейса;
• сохранение информации об ошибках.
Кроме перечисленных выше функций в предназначенных для многоза-
дачной и многопользовательской работы ОС могут также выполняться сле-
дующие дополнительные функции:
• параллельное или псевдопараллельное выполнение задач;
• эффективное распределение ресурсов системы между процессами;
• разграничение доступа различных процессов к ресурсам;
• исключение взаимного влияния процессов;
• взаимодействие между процессами;
• защита системы от нежелательных действий;
• многопользовательский режим и разграничение прав доступа.
Современные ОС могут иметь различную структуру. Выделяют шесть
типов архитектуры ОС: монолитные системы, многоуровневые системы,
микроядра, клиент-серверные системы, виртуальные машины и экзоядра.
Наиболее распространены монолитные системы, в которых ОС работает как
единая программа в режиме ядра (доступ ко всем возможностям аппарату-
ры). В системах с микроядрами стремятся минимизировать функции, выпол-
няемые в режиме ядра, за счет большей работы системного ПО в режиме
пользователя (ограниченный доступ к возможностям аппаратуры). Более
подробную информацию можно получить в [1].
В состав любой ОС, как правило, входят следующие компоненты:
• загрузчик;
• ядро;
26
• драйверы;
• командный процессор;
• системные библиотеки и системные утилиты.
Загрузчик предназначен для загрузагрузки ядра операционной системы
в оперативную память при включении компьютера. Процесс загрузки доста-
точно интересен, поскольку показывает взаимодействие системного ПО раз-
ных уровней. У компьютеров на базе процессора Intel это выглядит следую-
щим образом. После включения питания компьютера первой выполняется
программа BIOS (Basic Input Output System) – базовая система ввода-вывода,
находящаяся в специальной памяти, расположенной на системной плате
компьютера. BIOS проверяет объем доступной памяти, наличие клавиатуры
и монитора, правильную работу основных периферийных устройств. Затем
из хранящегося в CMOS памяти списка устройств выбирается устройство за-
грузки. Если это жесткий (гибкий, оптический) диск, то читается и выполня-
ется программа загрузки, находящаяся в нулевом секторе диска (начальный
или первичный загрузчик). Эта программа определяет активный раздел диска
и считывает с него вторичный загрузчик, который в свою очередь загружает
в память ядро ОС.
Ядро – центральная часть операционной системы, обеспечивающая
приложениям координированный доступ к ресурсам компьютера, таким как
процессорное время, память, устройства ввода и вывода информации. Также
обычно ядро предоставляет сервисы файловой системы и сетевых протоко-
лов. Функции ядра будут более подробно рассмотрены в этой главе.
Драйверы – часть операционной системы, обеспечивающая однотип-
ную работу с периферийными устройствами. Роль и функции драйверов бу-
дут рассмотрены в 4.5.
Командный процессор – интерпретатор языка команд операционной
системы для вызова системных и прикладных программ и управления ими.
ОС могут иметь один или несколько командных процессоров, например в
UNIX используются командные процессоры (их также называют оболочка-
ми) sh, csh, ksh, bash, zsh, а в Windows – command.com.
Системные библиотеки предоставляют возможность программистам
использовать в программах функции ядра. Более подробно см. в 4.6.
Системные утилиты – программы, обеспечивающие пользователей до-
полнительными возможностями (текстовые редакторы, компиляторы и т. п.).
27
4.3. Управление процессором
Одновременное выполнение нескольких программ на одном процессо-
ре в многозадачных ОС выполняется с применением техники мультипро-
граммирования. При этом процессор периодически переключается с выпол-
нения одной программы на выполнение других.
В ОС с разделением времени процессорное время делится на кванты,
которые задаются специальным устройством – системным таймером. По ис-
течении кванта времени ядро вызывает планировщик задач, который опреде-
ляет, какая программа будет выполняться в следующий квант времени
(рис. 4.1, а). Планирование учитывает приоритеты программ и время, уже за-
траченное на их выполнение. Основная стратегия планировщика – макси-
мальная общая производительность системы.
Рис. 4.1
В ОС реального времени в дополнение к механизмам разделения вре-
мени имеются средства быстрого реагирования на внешние события и вызова
приоритетной программы, которая за приемлемый срок должна обработать это
событие (рис. 4.1, б). Это означает, что при наступлении события планиров-
щик задач должен за минимальное время предоставить необходимые ресурсы
соответствующей программе и обеспечивать их вплоть до завершения обра-
ботки события.
ОС реального времени делятся на системы жесткого и мягкого реаль-
ного времени. В первых гарантируется требуемое время ответа на любое со-
бытие, во вторых гарантируется требуемое время ответа в среднем.
Для того чтобы возобновить выполнение программы с того места, на
котором выполнение было прервано, операционная система при переключе-
Программа А
Программа В
Программа С
Время
а
Загрузка
процессора
Время
б
Загрузка
процессора
Событие
Программа А
Программа В
Программа С
28
нии сохраняет контекст выполнения программы – состояние регистров про-
цессора, включая программный счетчик и указатель стека. Контекст сохраня-
ется в оперативной памяти в адресном пространстве программы (область со-
хранения регистров). Для возобновления выполнения программы достаточно
загрузить в регистры процессора сохраненные значения – и процессор про-
должит работу над приостановленной программой (рис. 4.2).
Рис. 4.2
Наряду с многозадачностью в современных ОС также применяют мно-
гопоточность, которая заключается в том, что выполнение программы (про-
цесс) может состоять из нескольких потоков (thread), выполняющихся парал-
лельно, т. е. без предписанного порядка во времени. Многопоточность можно
рассматривать как многозадачность на уровне одного исполняемого процес-
са, при этом все потоки выполняются в одном адресном пространстве про-
цесса. Следует отметить, что при многопоточности каждый поток имеет свой
контекст, а также отдельный стек.
К достоинствам многопоточности в программировании можно отнести
следующее:
• упрощение программы в некоторых случаях, за счет использования
общего адресного пространства;
• малые временые затраты на создание потока;
• повышение производительности за счет распараллеливания процес-
сорных вычислений и операций ввода-вывода на многоядерных про-
цессорах.
Процессор
Регистр
Регистр
АЛУ
PC – программный счетчик
SP – указатель стека
Программа А
Код
Данные
Стек
Регистры
Программа В
Код
Данные
Стек
Регистры
29
4.4. Управление памятью
Одной из наиболее важных задач ОС является управление оперативной
памятью, которое заключается в распределении физической памяти между
программами и в выполнении определенных действий при ее нехватке.
В процессе эволюции компьютерной техники принципы управления памятью
претерпели существенные изменения.
Рис. 4.3
В первых компьютерах программы составлялись непосредственно в
физических адресах, задаваемых программистами. В примере на рис. 4.3 ко-
манда MOV пересылает содержимое ячейки с физическим адресом 10 в ре-
гистр процессора R1. Такой способ программирования означал, что при вы-
полнении программа могла находиться только в той области памяти, которая
ей была предопределена заранее.
Рис. 4.4
Программирование в физических адресах имело существенные недо-
статки. Так, две программы, адреса которых пересекались, не могли выпол-
няться одновременно, даже если компьютер допускал работу в мультипро-
граммном режиме. Для решения этой проблемы в ранних ОС применялось
Программа
...
MOV #10, R1
...
0
100
...
10
Физическая память
...
MOV #10, R1
...
0
100
...
10
200
Программа
...
MOV #10, R1
...
0
100
...
10
Физическая память
...
MOV #110, R1
...
0
100
...
110
200
30
статическое перемещение адресов. При загрузке программы ОС выбирала
свободный адрес, с которого программа размещалась в памяти (базовый ад-
рес), и для всех адресов программы добавлялся этот базовый адрес. Про-
грамма как бы «перемещалась» в оперативной памяти (рис. 4.4).
Рис. 4.5
Более интересным решением, примененным в первом суперкомпьюте-
ре CDC 6600, было динамическое перераспределение памяти. Для этого в
процессоре было выделено два специальных регистра – базовый и ограничи-
тельный. Базовый регистр содержал начальный физический адрес, с которо-
го размещалась программа, ограничительный – конечный физический адрес
программы. При составлении программы адреса указывались виртуальные,
как если бы программа начиналась с нулевого адреса. Перед обращением к
памяти процессор добавлял к виртуальному адресу значение базового реги-
стра и получал физический адрес (рис. 4.5). Если физический адрес был
меньше значения базового регистра или превышал значение ограничительно-
го регистра, то это означало ошибку адресации в программе.
Рассмотренные ранее статическое перемещение и динамическое пере-
распределение памяти предполагают, что программа размещается в памяти
целиком, занимая непрерывное пространство адресов. Однако на практике
часто возникала ситуация, когда программе требуется объем памяти, превы-
шающий размер физической памяти компьютера. Одним из решений этой
проблемы стало применение оверлеев, при котором программа разбивалась
на множество небольших фрагментов и загружалась в память по частям
(рис. 4.6). Разбиением на программы на оверлеи занимался программист, а
загрузку обеспечивала ОС. Замещаемые оверлеи выгружались на диск, что
было прообразом рассматриваемой далее процедуры своппинга. Часто овер-
лейная структура программы имела вид дерева, определявшего, какие фраг-
Программа
...
MOV #10, R1
...
0
100
...
10
Физическая память
...
MOV #10, R1
...
0
100
...
110
200
200
100
Ограничительный регистр
Базовый регистр
+
31
менты должны находиться в памяти совместно, а какие – перекрываться. Так,
в примере на рис. 4.5 оверлей 0 постоянно находится в памяти, оверлей 1
может находиться вместе с оверлеями 2, 6, 7, 10 или 11, но не с каким-либо
из оверлеев 3, 4, 5, 8 или 9.
Рис. 4.5
Вопрос перемещения программ в памяти и возможности выполнения
больших программ в небольшом объеме физической памяти особо актуален
для многозадачных ОС. Для его решения большинство современных ОС ис-
пользует технологию страничной организации памяти (paging). Эта техноло-
гия заключается в разбиении виртуального адресного пространства програм-
мы на непрерывные блоки определенного размера – страницы. Физическая
память также разбивается на страницы такого же размера. Программа загру-
жается в память по страницам, причем страницы программы могут отобра-
жаться на любые страницы памяти. Вся адресация в программе задается в
виртуальных адресах. Преобразование виртуальных адресов программы в
физические адреса производится специальным устройством – диспетчером
памяти (Memory Management Unit – MMU) в момент обращения процессора
к оперативной памяти.
Рассмотрим пример страничной организации памяти для 16-битного
компьютера с размером страницы 4 Кбайт (рис. 4.6). Виртуальное адресное
пространство программы разбито на 4 страницы с начальными адресами 0000,
1000, 2000 и 3000 (шестнадцатеричные). Поскольку размер страницы равен
4 Кбайт, то младшие 12 бит адреса можно рассматривать как смещение внутри
страницы, а старшие 4 бит – как номер страницы. Для ячейки памяти с адресом
3А4С (на третьей странице) смещение будет равно А4С. При загрузке страниц в
память ОС фиксирует начальные (базовые) адреса страниц в специальной таб-
Программа
0
2
1
Физическая память
3
4
5
6
7
8
9
10
11
0
3
4
5
10
11
7
Оверлеи
32
лице. Предположим, что страница 3 загружена с базового адреса 9000. Тогда
при обращении по адресу 3А4С диспетчер памяти возьмет старшие 4 бит, обра-
тится по ним в таблицу страниц, получит базовый адрес 9000, добавит к нему
смещение А4С и получит физический адрес 9А4С, по которому и будет выпол-
няться обращение к памяти.
Рис. 4.6
В настоящее время все поддерживающие страничный режим процессо-
ры для ускорения трансляции виртуального адреса в физический используют
буфер ассоциативной трансляции (Translation lookaside buffer – TLB). TLB
представляет собой специализированный кэш процессора, содержащий таб-
лицу адресов страниц. Размер TLB может составлять от 8 до 4096 записей,
содержащих пары адресов страниц в виртуальной и физической памяти.
Нужная запись находится аппаратными средствами за одну операцию чтения.
Поскольку TLB не может содержать информацию о всех страницах
программы, то полная информация хранится в оперативной памяти в виде
таблиц страниц (каждая таблица занимает целую страницу и содержит 512 за-
писей). Информация о таблицах страниц содержится в директории страниц.
Для 64-битных архитектур также применяют супер-директории, при этом
число уровней иерархии может достигать 4.
Процесс трансляции виртуального адреса в физический для 32-битной
архитектуры показан на рис. 4.7. Если адрес отсутствует в TLB, процессор
Программа
0
Физическая память
Страницы
1
2
3
0000
1000
2000
3000
1
2
3
0
Адреса
2000
4000
9000
А000
0
2000
1
4000
2
А000
3
9000
А
3
4 С
А 4 С
Смещение
А
9
4 С
Адрес
Таблица страниц
33
через директорий страниц получает адрес из таблицы страниц и сохраняет
его в TLB. Это занимает в 10...60 раз больше времени, чем получение адреса
из уже имеющейся в TLB записи. Однако вероятность промаха невелика и
составляет в среднем значительно менее 1 % от числа трансляций адресов.
Рис. 4.7
При страничной организации памяти для выполнения программы не
требуется, чтобы все страницы были загружены в оперативную память. Как и
в случае оверлеев, при запуске программы достаточно загрузить страницу, на
которой находится точка входа (стартовый адрес программы). Состояние
страниц программы отслеживается в записях таблиц страниц (загружена –
незагружена). Если процессор обращается к адресу, который находится на
незагруженной странице, то возникает так называемый отказ страницы
(page fault). В этом случае выполняется аппаратное прерывание, обработчик
которого находится в ядре ОС. В результате прерывания требуемая страница
загружается в память, и после выхода из прерывания процессор повторно об-
ращается к заданному адресу.
При нехватке оперативной памяти для выполнения программ применя-
ется свопинг – выгрузка страниц из памяти в файл. В UNIX-системах в этих
целях, как правило, используется специальный раздел диска, в Windows – на-
ходящийся в корневом каталоге системного диска файл pagefile.sys. В соот-
ветствии с заданным алгоритмом «наименее ценные» страницы перемещают-
ся в область свопинга. Обратная подкачка страниц производится аналогично
загрузке – в результате прерывания по отказу страницы. Негативными мо-
ментами, связанными со свопингом, являются невозможность использования
SSD-накопителей (из-за ограниченного числа циклов перезаписи); серьезное
Виртуальный адрес
Биты 22–31 Биты 12–21 Биты 0–11
Физический адрес
База
Смещение
TLB
Директорий
страниц
Таблица
страниц
34
замедление работы системы при сильной фрагментации файла выгрузки;
проблемы безопасности, поскольку файл выгрузки в большей мере доступен
воздействию вредоносного ПО, чем оперативная память.
Страничная организация памяти позволяет в многозадачных ОС совме-
стное использование загруженных страниц сразу несколькими программами.
Эти страницы могут содержать как совместно используемые данные (по-
дробнее см. 4.10), так и совместно используемый код. Еще на заре компью-
терной техники было отмечено, что если код программы не изменяется в хо-
де ее выполнения, то этот код может разделяться между несколькими про-
граммами, например между несколькими одновременно выполняемыми ко-
пиями некоторой программы. Такой код называют реентерабельным, или
повторно-входимым. Для написания реентерабельного кода на ассемблере
имеется ряд правил, например использование исключительно регистровой
адресации. Компиляторы с языков высокого уровня могут генерировать ре-
ентерабельный код, например этим свойством обладают компиляторы с язы-
ка С. Системные библиотеки часто оформляются как разделяемые библиоте-
ки (shared library), которые могут загружаться в память отдельно от програм-
мы и совместно использоваться многими программами.
4.5. Управление периферийными устройствами
В составе любого периферийного устройства есть электронный блок –
контроллер (или адаптер), который управляет устройством и взаимодейству-
ет с аппаратурой компьютера. Контроллер имеет регистры для записи управ-
ляющих команд, данных или результатов выполнения каких-либо действий.
Существует три способа передачи данных между регистрами контроллера и
процессором.
При первом способе каждому регистру контроллера назначается номер
порта ввода-вывода, который обычно является 8- или 16-битным целым чис-
лом. Пространство портов ввода-вывода не является частью памяти и защи-
щено от доступа пользовательских программ. Для чтения и записи данных в
порт используются специальные команды процессора, например IN и OUT
соответственно.
При втором способе регистры контроллеров устройств отображаются
на адресное пространство оперативной памяти компьютера. Впервые это бы-
ло применено в архитектуре компьютера PDP-11. Как правило, для регистров
35
устройств резервируются самые старшие адреса памяти и они недоступны
для пользовательских программ.
Третий способ является комбинацией первых двух. Например, в архи-
тектуре процессоров Pentium регистры устройств, служащие для передачи
данных, отображаются на адресное пространство (адреса от 640 Кбайт до
1 Мбайт), а работа с регистрами управления устройств производится через
порты ввода-вывода, имеющие адреса в диапазоне 0–64 Кбайт.
Независимо от способа передачи данных для ускорения операций вво-
да-вывода в современных компьютерах применяется прямой доступ к памяти
(Direct Memory Access – DMA). Это особенно важно для блочных устройств
(диски, ленты), где идет передача больших объемов данных. Чтобы не отвле-
кать процессор на передачу отдельных байтов данных, используется специ-
альный контроллер DMA.
Рис. 4.8
На рис. 4.8 приведен пример организации прямого доступа к памяти
при чтении с диска. Сначала процессор инициализирует контроллер DMA,
задавая адрес в памяти, куда будут записываться данные, и счетчик байтов
(1). Затем выдается команда контроллеру диска на чтение блока данных во
внутренний буфер. После того как данные будут считаны, контроллер DMA
запрашивает передачу данных из буфера контроллера диска в оперативную
память (2). При передаче данных (3) значение адреса в регистре DMA увели-
чивается, а счетчика – уменьшается. Когда значение счетчика уменьшится до
нуля, контроллер DMA инициирует прерывание (4), чтобы информировать
ОС о завершении ввода.
Процессор
Контроллер DMA
Адрес
Счетчик
Регистр
управления
Контроллер диска
Буфер данных
ОЗУ
1
2
3
4
Диск
Шина
Передача данных
Запрос передачи
Прерывание
Инициализация
36
Для устройств с ограниченным объемом передачи данных, например
клавиатуры, прямой доступ к памяти не требуется. В этом случае процессор
инициирует операцию ввода-вывода на контроллере устройства и продолжа-
ет свою работу. Когда операция ввода-вывода завершается, контроллер за-
прашивает прерывание работы процессора. У каждого контроллера устрой-
ства есть свой вектор прерывания – число, которое является индексом в таб-
лице адресов обработчиков прерываний. Когда прерывание разрешается,
управление передается обработчику прерывания, который, в свою очередь,
вызывает специальную программу – драйвер устройства. Обычно драйверы
разрабатываются производителями устройств, устанавливаются в ОС и яв-
ляются частью ОС. Драйверы представляют собой интерфейс между унифи-
цированными операциями ввода-вывода ядра ОС и специфическими кон-
троллерами многочисленных периферийных устройств.
4.6. Операционная система UNIX
Рассмотренные ранее вопросы управления процессором, памятью и пе-
риферийными характерны для любой ОС. Более специфические вопросы, ка-
сающиеся управления пользователями, файлами, процессами, а также меха-
низмы межпроцессного обмена будут рассматриваться далее на примере ОС
UNIX. Такой выбор обусловлен широким распространением UNIX на всех
видах компьютеров: 99 % суперкомпьютеров и мощных серверов работают
под различными версиями UNIX; на персональных компьютерах и ноутбуках
используются Linux и MacOS; на планшетных компьютерах и смартфонах
популярна ОС Android.
UNIX является многопользовательской многозадачной переносимой
ОС. Большинство вариантов UNIX работают в режиме разделения времени,
хотя имеются также варианты для режима реального времени. К достоинст-
вам UNIX относят наличие стандартов, мощный пользовательский интер-
фейс, единую иерархическая файловая система, эффективное управление ре-
сурсами, надежность.
Первая ОС UNIX была создана в 1969 г. Кеном Томпсоном и Деннисом
Ричи для компьютера PDP-7, при этом размер ядра составлял 4 Кбайт.
В 1971 г. UNIX была перенесена на PDP-11, с размером ядра 16 Кбайт.
В 1973 г. ядро было практически полностью написано на языке высокого
уровня С. В 1983 г. корпорация AT&T выпустила свою версию UNIX –
37
System V. В 1984 г. в университете Berkley была выпущена версия под назва-
нием BSD (Berkley Software Distribution). Эти две ветви дали развитие боль-
шому числу так называемых клонов UNIX. Стоит отметить ряд известных ОС
для RISC-процессоров – AIX, OSF/1, Ultrix, SunOS, Solaris, HP/UX, IRIX,
NextStep, MacOS, а также для процессоров Intel – Xenix, FreeBSD, Linux, QNX.
Широкое распространение UNIX на различных платформах вызвало
потребность в стандартизации. В 1988 г. был впервые выпущен стандарт на
переносимую ОС – POSIX. В настоящее время действует стандарт, выпу-
щенный в 2008 г. [2]–[5].
Рис. 4.9
Общая структура ОС UNIX показана на рис. 4.9. Основным компонен-
том ОС является ядро (kernel), реализующее функции управления процессо-
ром, памятью и периферийными устройствами. Взаимодействие системных и
прикладных программ с ядром осуществляется через интерфейс системных
вызовов. В стандарте POSIX определены порядка 100 системных вызовов, а
также библиотечные процедуры для обращения к системным вызовам из сис-
темных и прикладных программ.
Механизм системного вызова настолько важен для работы ОС, что его
следует рассмотреть подробнее. Предположим, что пользовательской про-
грамме требуется чтение данных из файла. Для этого в системной библиотеке
есть функция read, которая вызывает одноименный системный вызов. Про-
Ядро
Файловая подсистема
Системные
программы
Интерфейс системных вызовов
Прикладные
программы
Системные
библиотеки
Подсистема ввода-вывода
Драйверы устройств
Виртуальная
память
Управление вводом-выводом
Управление памятью
Подкачка
страниц
Управление процессами
Обработка сигналов
Создание процессов
Планировщик процессов
38
грамма (на языке С) передает функции read файловый дескриптор, адрес бу-
фера и число байтов, которое нужно прочитать. Эти параметры перед вызо-
вом функции помещаются в стек. Библиотечная функция read помещает в
определенный регистр процессора номер системного вызова и выполняет
команду процессора TRAP. Команда TRAP переключает выполнение про-
граммы из режима пользователя в режим ядра и передает управление диспет-
черу системных вызовов. Последний получает адрес процедуры – обработчи-
ка вызова, используя номер вызова в качестве индекса в таблице адресов сис-
темных процедур. После завершения процедуры, которая читает данные из
файла в буфер, управление возвращается в библиотечную функцию, а про-
цессор переключается в режим пользователя.
В следующих разделах настоящей главы будут рассмотрены некоторые
системные вызовы, связанные с управлением процессами, файлами и переда-
чай данных между процессами. Системные вызовы, поддерживающие сете-
вые протоколы, будут рассмотрены в гл. 5.
4.7. Управление пользователями в UNIX
Поскольку UINX является многопользовательской ОС, то управление
ресурсами учитывает их принадлежность к определенным пользователям,
что исключает возможность несанционированного доступа. Ввод нового поль-
зователя в систему производится системным администратором, при этом до-
бавляется запись в системный файл паролей /etc/passwd [6]. В этом файле
присутствует следующая информация: имя пользователя, зашифрованный
пароль, UID (идентификатор пользователя), GID (идентификатор группы по
умолчанию), домашний каталог, командный процессор. Пример записи:
john:A7bd53g54HJ2:36:8::/home/john:/bin/csh
При регистрации пользователя система запрашивает его имя и пароль.
По имени пользователя ищется запись в файле паролей. Пароль шифруется
односторонним алгоритмом и сравнивается с записанным в файле. При со-
впадении паролей запускается командный процессор под соответствующим
идентификатором пользователя (UID) и устанавливается домашний каталог.
Пользователь с UID = 0 называется суперпользователем (root) и обладает
очень широкими полномочиями, что представляет определенную проблему в
плане безопасности системы.
39
4.8. Файловая система UNIX
Файлы используются для хранения данных и программ. Под файлом
понимается именованный набор данных, хранящийся на внешнем устройстве
и имеющий определенный размер (в байтах). Имена файлов, наряду с другой
информацией о файлах, хранятся в специальных файлах – каталогах.
Каждый файл имеет своего владельца – пользователя, который может
устанавливать права доступа к файлу для других пользователей системы.
При установке прав доступа имеется три категории прав – чтение (r), запись
(w) и выполнение (x), а также три категории пользователей – владелец
(owner), группа (group) и прочие (other). Права доступа устанавливаются спе-
циальной маской, в которой биты соответствуют категориям доступа и поль-
зователей. Например, маска rw-r--r-- означает, что владелец может читать и
писать в файл, а члены группы и прочие пользователи могут только читать.
Под группой понимаются пользователи, которые входят в данную группу.
Категория w подразумевает возможность запуска для исполняемых программ
или интерпретации командным процессором для скриптов. Для изменения
владельца файла в UNIX имеется системный вызов chown, для изменения
группы – chgrp, для изменения прав доступа – chmod.
Каталоги организуются в иерархическую файловую структуру. На
вершине иерархии находится корневой каталог (root). Файловые системы,
связанные с физическими устройствами (диски, ленты) или другими компь-
ютерами (сетевые файловые системы), составляют части общей файловой
структуры. Как правило, в любой UNIX-системе присутствуют каталоги,
приведенные в табл. 4.2.
Таблица 4.2
Имя
Назначение
/bin
Системные утилиты
/etc
Системные данные и утилиты
/dev
Специальные файлы устройств
/lib
Системные библиотеки
/usr
Каталог для установки пользовательских программных продуктов
/home
Домашние каталоги пользователей
/tmp
Каталог для хранения временных файлов
/stand
Ядро операционной системы
40
Последовательность каталогов, используемая при доступе к файлу на-
зывается путем (path). Если путь начинается с корневого каталога, то он на-
зывается абсолютным, если с текущего, то относительным. В путях кроме
имен каталогов используются специальные символы: / – корневой каталог; . –
текущий каталог; .. – вышестоящий каталог. Для работы с каталогами ис-
пользуются следующие системные вызовы: mkdir – создать каталог; rmdir –
удалить каталог; chdir – сменить текущий каталог.
В файловой системе UNIX для каждого периферийного устройства в
каталоге /dev или его подкаталогах создается специальный файл устройства.
Это делается для унификации операций ввода-вывода. Специальный файл
устройства содержит информацию о типе устройства (блочное или символь-
ное), а также старший и младший номера устройства (major device number,
minor device number). В UNIX используются две отдельные конфигурацион-
ные таблицы для связи с блочными и символьными устройствами. Выбор
таблицы осуществляется по типу устройства, выбор процедуры для связи с
драйвером – по старшему номеру устройства. Младший номер устройства
передается драйверу для точной идентификации устройства среди однотип-
ных устройств, обслуживаемых драйвером. Пример имен специальных фай-
лов устройств приведен в табл. 4.3.
Таблица 4.3
Имя
Назначение
/dev/dsk/c0t6d0
Накопитель на жестком диске
/dev/rmt/rmt0
Накопитель на магнитной ленте
/dev/crt
Графический дисплей
/dev/ether0
Сетевая карта для протокола Ethernet
Работа с дисковыми устройствами осуществляется в UNIX следующим
образом. Логическое пространство диска (его блоки с последовательными
номерами) может быть разбито на разделы. Каждый раздел имеет определен-
ный тип: raw – не управляется файловой системой; swap – используется под
свопинг; hfs – содержит файловую систему.
Содержащие файловую систему разделы имеют следующую структуру:
• загрузочный блок (логический номер 0) может содержать программу
начальной загрузки;
• суперблок (логический номер 1) содержит информацию о файловой
системе (полное число блоков, размер таблицы индексных дескрип-
41
торов, дату и время обновления, список свободных блоков, список
свободных индексных дескрипторов), для ускорения доступа копии
суперблоков обычно хранятся в оперативной памяти;
• таблица индексных дескрипторов (inodes) имеет записи по 64 или
128 байт для каждого файла, содержащие необходимую для доступа
к данным файла информацию;
• блоки данных.
В целях повышения гибкости в UNIX применяют управление логиче-
скими томами, которое позволяет объединять разделы физических дисков в
общее пространство группы томов (volume group). Это пространство затем
может быть разделено на логические тома (logical volume), смонтированные
в общую структуру файлов операционной системы. Для монтирования томов
применяется системный вызов mount, для размонтирования – umount.
Для ускорения доступа к данным в файловой системе UNIX применя-
ется кэширование. В оперативной памяти отводится область под буферы
ввода-вывода. Прочитанные блоки данных сохраняются в буфере, при по-
вторном чтении данные берутся из буфера, физического чтения не происхо-
дит. При измении данных они записываются в буфер, что выполняется быст-
ро, затем через некоторое время ядро переписывает данные в файл. Синхро-
низация буферов и файлов происходит примерно 1 раз в 30 с. При необходи-
мости синхронизация форсируется с помощью системного вызова sync.
4.9. Управление процессами в UNIX
Понятие процесса являются ключевым для ОС UNIX. Процесс это эк-
земпляр выполняемой программы. Понятие процесса объединяет код про-
граммы, ее данные, стек, значения регистров процессора. Каждый процесс
имеет набор атрибутов: PID, PPID, статус, приоритет, UID, GID, терминал и
переменные среды. Уникальный идентификатор процесса PID является точ-
кой входа в системную таблицу процессов, в которой хранится информация о
выполняемых в системе процессах.
Процесс может порождать другие процессы. Это придает среде процес-
сов UNIX иерархическую структуру, на вершине которой находится систем-
ный процесс init (PID = 1), являющийся предком всех системных и пользова-
тельских процессов. Связь между процессом и его родителем поддерживает-
ся через идентификатор родительского процесса PPID.
42
Атрибут статус отражает состояние процесса и имеет три значения:
R (running), S (sleeping) и W (waiting). Статус R означает, что процесс в дан-
ный момент времени является активным и занимает процессор (рис. 4.10).
Если процесс запрашивает операцию ввода-вывода, то ядро переводит его в
состояние ожидания, при этом его статус меняется на S. Когда операция вво-
да-вывода завершается, ядро переводит процесс в состояние готовности со
статусом W. Процессы со статусами R и W конкурируют между собой за
право использовать процессор.
Рис. 4.10
Выбор процесса, которому должен быть предоставлен процессор, осу-
ществляет специальный компонент ядра – планировщик. Планировщик вызы-
вается ядром после завершения выделенного процессу кванта времени или
если активный процесс переходит в состояние ожидания ввода-вывода. При
выборе процесса планировщик учитывает статический и динамический при-
оритеты процесса. Квант времени, выделяемый процессу, может также зави-
сеть от приоритета, для более приоритетных процессов квант времени может
быть больше, для менее приоритетных – меньше (например 800 и 5 мс соот-
ветственно). Если ОС предназначена для работы в режиме реального време-
ни, то процессы реального времени выполняются с наивысшим приоритетом
и с неограниченным квантом времени.
Статический приоритет процесса назначается ядром при запуске про-
цесса. В ходе выполнения процесса рядовые пользователи могут изменять
его статический приоритет с помощью системного вызова nice только в сто-
рону понижения, в то время как привилегированный пользователь (root) мо-
жет приоритет также и повышать. Динамический приоритет меняется в ходе
выполнения процесса и зависит от потребления системных ресурсов по
принципу «больше ресурсов – меньше приоритет». Это делается с целью из-
бежать монополизации процессора отдельными процессами.
Процессор предоставлен другому
процессу
S
W
Процесс запросил операцию
ввода-вывода
Операция ввода-вывода завершена
R
Процессор предоставлен данному
процессу
43
Для создания новых процессов в UNIX используется системный вызов
fork, который создает копию вызвавшего fork процесса, за исключением ат-
рибутов PID и PPID. Созданному процессу присваивается свободный PID, а в
качестве PPID – PID родительского процесса. Следующая за fork команда
выполняется уже в двух процессах. Чтобы различить, в каком из процессов
после ветвления выполняется код используется возвращаемый fork результат.
В родительском процессе это PID порожденного процесса, в порожденном
процессе это 0. Пример программы с fork:
printf("Процесс до ветвления");
// вывод сообщения
int pid = fork();
// ветвление процесса
if(pid)
// проверка pid
{
// для родительского процесса
printf("Родительский процесс"); // вывод сообщения
}
else
{
// для порожденного процесса
printf("Порожденный процесс"); // вывод сообщения
}
После ветвления порожденный процесс наследует все атрибуты роди-
тельского процесса, в том числе программный код и открытые файлы. Для
того чтобы порожденный процесс исполнял код другой программы, его код
нужно «перекрыть» новым кодом.
Перекрытие процесса в UNIX выполняется с помощью семейства сис-
темных вызовов exec, которые заменяют код выполняемого процесса на но-
вый, считываемый из файла образа задачи. При успешном перекрытии сле-
дующая за exec команда не выполняется, а новый код начинает выполняться
со своей точки входа. Следует отметить, что перекрытие кода не затрагивает
открытые процессом файлы. Это часто используется командными процессо-
рами для поточной обработки данных, когда выход одной программы пода-
ется на вход другой. Пример программы с exec:
int pid = fork();
// ветвление процесса
if(pid == 0)
// проверка pid
{
// для порожденного процесса
execl("имя файла", параметры); // перекрытие кода
printf("Ошибка запуска");
// вывод сообщения
}
44
Нормальным завершением порожденного процесса в UNIX считается
случай, когда порожденный процесс завершается с помощью системного вы-
зова exit, а родительский процесс ожидает этого момента с помощью систем-
ного вызова wait:
int pid = fork();
// ветвление процесса
if(pid)
// проверка pid
{
// для родительского процесса
...
wait();
// ожидание завершения
}
else
{
// для порожденного процесса
...
exit();
// завершение процесса
}
В случае, если родительский процесс завершается раньше порожденно-
го, то родителем порожденного процесса становится системный процесс init.
Если же порожденный процесс завершается, а родительский процесс не вы-
звал wait, то порожденный процесс становится процессом-«зомби». Такие
процессы не занимают оперативную память, но продолжают занимать строку
в таблице процессов с соответствующим PID, что может неблагоприятно ска-
зываться на возможности ядра создавать новые процессы.
4.10. Механизмы межпроцессного обмена UNIX
ОС UNIX поддерживает различные механизмы для организации вза-
имодействия между параллельно выполняющимися процессами: сигналы,
файлы, трубки, очереди сообщений, семафоры, разделяемую память, сокеты,
удаленно вызываемые процедуры [7].
Сигналы представляют собой программные прерывания процесса, ини-
циируемые ядром, другими процессами или самим процессом. Перечень наи-
более часто используемых сигналов приведен в табл. 4.4. Ядро может посы-
лать процессу сигналы вследствие аварийной ситуации (нарушение границ
защиты памяти, неизвестная процессору инструкция, ошибка на шине).
Получив сигнал, процесс может выполнить одно из трех действий: иг-
норировать сигнал; выполнить системную процедуру по умолчанию; выпол-
нить пользовательскую процедуру. Способ обработки сигнала задается с по-
мощью системного вызова signal:
45
signal(SIGINT, SIG_IGN);
// игнорировать сигнал
signal(SIGTERM, SIG_DFL);
// процедура по умолчанию
signal(SIGCHLD, sigproc);
// задать процедуру пользователя
...
void sigproc(int)
// пользовательская процедура
{
...
}
Таблица 4.4
Сигнал
Назначение
SIGABRT
Аварийное завершение процесса
SIGALARM
Сигнал от таймера
SIGBUS
Ошибка на шине
SIGCHLD
Завершение порожденного процесса
SIGSTOP
Приостанов процесса
SIGCONT
Продолжение процесса
SIGILL
Недопустимая команда (инструкция процессора)
SIGINT
Пользовательское прерывание (CTRL-C)
SIGSEGV
Недопустимый адрес (ошибка сегментации)
SIGTERM
Запрос на завершение процесса
В некоторых ситуациях, когда прерывание процесса нежелательно,
процесс может блокировать получение сигналов. При поступлении сигналов
в период блокирования они откладываются, но не накапливаются. Для уста-
новки и снятия блокировки используется системный вызов sigprocmask:
sigprocmask(SIG_BLOCK, sigmask);
// установка блокировок
sigprocmask(SIG_UNBLOCK, sigmask); // снятие блокировок
sigprocmask(SIG_SETMASK, sigmask); // проверка блокировок
Процесс может посылать сигналы другим процессам или самому себе с
помощью системных вызовов kill, raise и alarm:
kill(1087, SIGTERM);
// послать сигнал процессу 1087
raise(SIGINT);
// имитировать нажатие CTRL-C
alarm(5);
// запустить таймер на 5 секунд
В UNIX все операции ввода-вывода процесса производятся через его
таблицу файловых дескрипторов. Каждая строчка таблицы соответствует от-
крытому файлу или устройству ввода-вывода. Индекс таблицы называется
файловым дескриптором. Размер таблицы и, соответственно, максимальное
число одновременно открытых файлов процесса определяется задаваемым
46
при генерации ОС параметром MAXFILES. Как правило, первые три файло-
вых дескриптора используются следующим образом:
• дескриптор 0 (stdin) – стандартное устройство ввода;
• дескриптор 1 (stdout) – стандартное устройство вывода;
• дескриптор 2 (stderr) – стандартное устройство для вывода сообще-
ний об ошибках.
Для работы с файлом сначала его открывают с помощью системного
вызова open, который возвращает процессу номер файлового дескриптора.
Затем следуют операции чтения-записи (системные вызовы read и write). По-
сле окончания работы с файлом его закрывают с помощью вызова close:
char buf[512];
// буфер данных
int fd = open("test.dat", O_RDWR); // открытие файла
read(fd, buf, 64);
// чтение из файла
...
write(fd, buf, 64);
// запись в файл
close(fd);
// закрытие файла
Для односторонней передачи данных между родительским и порож-
денным процессами используют трубки (их еще называют программными
каналами). Создаваемая с помощью системного вызова pipe трубка связывает
между собой два файловых дескриптора процесса (рис. 4.11, а).
Рис. 4.11
После ветвления процесса на два трубка как бы растягивается между
дескрипторами родительского и порожденного процессов (рис. 4.11, б). Затем
асимметрично закрывают два дескриптора и остается односторонний канал
связи между процессами. Пример создания трубки и передачи данных:
int fd[2];
// дескрипторы трубки
pipe(fd);
// создание трубки
if(fork())
// ветвление процесса
{
// родительский процесс
close(fd[1]);
// закрытие дескриптора для записи
read(fd[0], ...);
// чтение из трубки
а
Процесс 1
fd[0]
fd[1]
Процесс 1
fd[0]
fd[1]
Процесс 2
fd[0]
fd[1]
б
Процесс 1
fd[0]
fd[1]
Процесс 2
fd[0]
fd[1]
в
47
}
else
{
// порожденный процесс
close(fd[0]);
// закрытие дескриптора для чтения
write(fd[1], ...);
// запись в трубку
}
Очереди сообщений являются частью механизма межпроцессного вза-
имодействия IPC, введенного в версии UNIX System V, и позволяют органи-
зовать эффективный обмен сообщениями между процессами. Для идентифи-
кации очереди используется понятие ключа – номера, известного априорно
работающим с очередью процессам или получаемого приватно в момент
подключения к очереди и наследуемого при ветвлении процессов:
int id = msgget(IPC_PRIVATE, ...); // подключиться к очереди
msgsnd(id, buffer, size);
// послать сообщение
msgrcv(id, buffer, size);
// принять сообщение
Семафоры (автор – Эдсгер Дейкстра) являются второй частью IPC и
применяются для синхронизации выполнения процессов. Аналогично очере-
дям, наборы семафоров идентифицируются ключами – известными процес-
сам или приватными (для родственных процессов). Семафор имеет целочис-
ленное значение, которое можно увеличивать, уменьшать или проверять.
Процесс, который пытается уменьшить значение семафора до отрицательной
величины, блокируется, пока другой процесс не увеличит значение семафора
настолько, чтобы оно стало неотрицательным. Рассмотрим два примера син-
хронизации процессов при помощи семафоров.
Рис. 4.12
Пример 1. При параллельной работе процессов могут встречаться такие
участки кода, которые должны выполняться только одним процессом до
окончания участка. Такие участки называются критическими. Для их защиты
используется семафор, который принимает ненулевое значение, когда интер-
вал занят (рис. 4.12, а). Это блокирует другие процессы до момента разбло-
а
Процесс 1
0
б
Процесс 2
0
Критический
интервал
1
Семафор
Клиент 1
Клиент 2
Клиент 3
Сервер
0
+1
–1
Семафор
+1
–1
48
кировки в конце критического интервала. В приведенной ниже программе в
структуре LOCK заданы две операции с семафором – проверка на 0 и блоки-
ровка. Вторая операция выполняется, только когда успешна первая. Если се-
мафор имеет ненулевое значение, то операция тестирования блокирует про-
цесс, пока семафор не будет сброшен занимающим интервал процессом:
struct sembuf LOCK[2] =
// структура блокировки
{
{ 0, 0},
// семафор 0, тестирование
{ 0, 1}
// семафор 0, блокировка
};
struct sembuf UNLOCK[1] =
// структура разблокировки
{
{ 0, -1}
// семафор 0, разблокировка
};
int id = semget(IPC_PRIVATE, ...); // подключиться к семафору
...
semop(id, LOCK, 2);
// блокировать
...
// критический интервал
semop(id, UNLOCK, 1);
// разблокировать
Пример 2. При организации взаимодействия клиент–сервер семафор
позволяет блокировать сервер, пока один из клиентов не сделает запрос (рис.
4.12, б). Каждый запрос увеличивает семафор на 1, после обработки запроса
сервером он уменьшается на 1. Если запросов больше нет, то сервер блоки-
рует себя до следующего запроса:
struct sembuf LOCK[1] =
// структура блокировки
{
{ 0, -1}
// семафор 0, блокировка
};
struct sembuf UNLOCK[1] =
// структура разблокировки
{
{ 0, 1}
// семафор 0, разблокировка
};
int id = semget(IPC_PRIVATE, ...); // подключиться к семафору
while(true)
{
semop(id, LOCK, 1);
// блокировать
...
// работа сервера
}
49
Разделяемая память является третьим механизмом IPC и представляет
собой самый эффективный способ обмена данными между процессами, вы-
полняющимися на одной компьютерной системе. Он основан на отображе-
нии части адресов виртуального адресного пространства различных процес-
сов на одни и те же физические адреса оперативной памяти (рис. 4.13). При
этом разделяемая память может иметь различные виртуальные адреса для
подключенных к ней процессов. Программируя работу с разделяемой па-
мятью важно добиться того, чтобы процессы однозначно представляли раз-
мещаемые в ней данные. С этой целью создают общие заголовки, описы-
вающие структуру данных, а работа с данными призводится через указатель,
содержащий виртуальный адрес разделяемой памяти.
Рис. 4.13
struct SharedMemoryData
// структура данных
{
double x;
double y;
};
struct SharedMemoryData *p;
// указатель на структуру данных
int id = shmget(key, size);
// подключение к памяти
void* addr = shmat(id);
// получение адреса памяти
p = (SharedMemoryData*)addr; // настройка указателя
p->x = 100.25;
// запись данных
double y = p->y;
// чтение данных
shmdt(addr);
// отключение разделяемой памяти
Процесс 1
Физическая память
Процесс 2
Процесс 3
Процесс 1
Процесс 2
Процесс 3
50
Глава 5. СЕТЕВЫЕ ТЕХНОЛОГИИ
5.1. Сетевые протоколы
Компьютерная сеть обеспечивает обмен информацией между различ-
ными устройствами в соответствии с установленными стандартами и прото-
колами. Сетевые протоколы устанавливают набор правил и действий, позво-
ляющий осуществлять соединение и обмен данными между двумя и более
включенными в сеть устройствами. Протоколы относят к определенным
уровням организации передачи данных. Объединение взаимодействующих
протоколов разных уровней называют стеком протоколов. В табл. 5.1 показа-
на семиуровневая модель OSI (Open System Interconnection).
Таблица 5.1
Уровень
Назначение
Прикладной
Обеспечивает интерфейс между сетевыми протоколами и приклад-
ными программами
Представлений
Осуществляет преобразование данных из внутреннего формата ком-
пьютера в формат передачи
Сеансовый
Координирует связь между прикладными программами, работаю-
щими в разных узлах сети
Транспортный
Контролирует очередность прохождения компонентов сообщения
Сетевой
Отвечает за адресацию и доставку сообщений
Канальный
Определяет правила использования физического уровня узлами сети
Физический
Определяет физические (механические, электрические, оптические)
характеристики линий связи
В настоящее время наибольшее распространение получили сети на базе
интернет-протокола (IP). Стек этого протокола включает 4 уровня, показан-
ные в табл. 5.2. По сравнению с моделью OSI в стеке протоколов IP не рас-
сматривается физический уровень, а три верхних уровня (сеансовый, пред-
ставлений и прикладной) объединены в один – прикладной.
Таблица 5.2
Уровень
Протоколы
Прикладной
HTTP, FTP, SNMP, SMTP, Telnet, NTP, NFS, XWindow
Транспортный
TCP, UDP
Сетевой
IP
Канальный
Ethernet, IEEE 802.11 Wireless Ethernet, Token Ring
51
5.2. Сети с протоколом IP
IP-протокол обеспечивает передачу данных между узлами сети. Дан-
ные разбиваются на фрагменты, называемые пакетами. Пакет включает за-
головок с управляющей информацией и данные, размер пакета не должен
превышать 65 535 байт. Структура пакета IP версии 4 показана на рис. 5.1.
Рис. 5.1
Назначение полей заголовка пакета:
• версия (4 или 6);
• IHL (длина заголовка IP-пакета в 32-битных словах);
• идентификатор – предназначен для определения последовательно-
сти фрагментов при сборке потока данных;
• флаги – определяют возможность фрагментации пакета;
• смещение фрагмента – позиция фрагмента в потоке данных;
• время жизни – максимальное число маршрутизаторов, которые мо-
жет пройти этот пакет;
• протокол (идентификатор интернет-протокола следующего уровня);
• контрольная сумма заголовка.
Для идентификации отправителей и получателей пакетов в сетях на ба-
зе IP-протокола используется три типа адресов: локальные, сетевые и сим-
вольные.
Локальные адреса (их еще называют аппаратными или MAC-адресами)
задаются производителями оборудования и однозначно определяют все сете-
вые устройства. Локальные адреса используются в рамках одной подсети.
0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7
0
1
2
3
Версия
IHL
Тип обслуживания
Длина пакета
Идентификатор
Флаги
Смещение пакета
Время жизни
Протокол
Контрольная сумма заголовка
IP-адрес отправителя
IP-адрес получателя
Параметры (от 0 до 10 32-битных слов)
Данные
52
Сетевой адрес (IP-адрес) представляет собой целое число (32 бит для
IP-протокола версии 4 и 64 бит для версии 6), которое состоит из двух частей –
номера сети и номера узла в сети. Количество битов, выделяемое под эти
части, различно для разных классов адресов. Более подробную информацию
можно получить в [8].
Символьный адрес (также называемый доменным именем) введен для
удобства пользователей и представляет некоторое мнемоническое имя, на-
пример www.eltech.ru. Связь между доменными именами и IP-адресами уста-
навливается через таблицы, которые поддерживаются на локальных компью-
терах (в UNIX-системах – файл /etc/hosts) или на специальных серверах (их
называют DNS-серверы).
Кроме сетевого адреса для идентификации требуемой службы приме-
няется понятие порта IP. Порт это целое число, связанное с определенной
сетевой службой (в UNIX-системах такие службы называют демонами). На-
пример, служба FTP использует порты 20 и 21, HTTP – порты 80 и 81, DNS –
порт 53. Перечень служб и их портов в UNIX ведется в файле /etc/services.
Транспортный уровень в стеке протоколов IP представлен двумя про-
токолами: TCP и UDP. Протокол TCP построен на модели сеанса (установка
и поддержание соединения) и гарантирует доставку пакетов, а также очеред-
ность их получения. Протокол UDP, построенный на модели дейтаграмм, не
гарантирует ни доставки, ни очередности получения пакетов, его преимуще-
ством являются меньшие накладные расходы.
Таблица 5.3
Протокол
Назначение
TELNET
Протокол передачи текста. Используется для удаленного доступа
FTP
Протокол передачи файлов между компьютерами
SNMP
Протокол управления сетями
SMTP
Протокол передачи электронной почты
NFS
Протокол сетевого доступа к удаленным файловым системам
SSH
Протокол безопасной оболочки (командного процессора)
HTTP, HTTPS Протокол передачи гипертекстовых файлов (обычный и защищенный)
NTP
Протокол синхронизации внутренних часов компьютера
На прикладном уровне в стеке протоколов IP для решения различных
задач применяются десятки протоколов. Наиболее известные прикладные
протоколы приведены в табл. 5.3.
53
5.3. Поддержка сетевого взаимодействия в UNIX
В ОС UNIX сетевое взаимодействие организуется с использованием
механизма сокетов, который обеспечивает двусторонний обмен данными
между процессами, выполняющимися на одной или разных машинах. Сокеты
создаются с помощью системного вызова socket, который возвращает про-
цессу соответствующий файловый дескриптор. Через этот дескриптор осу-
ществляются все остальные операции с сокетом.
int fd = socket(domain, type, protocol);
// создать сокет
Параметр domain определяет, будет ли сокет задействован в сети (зна-
чение AF_INET) или только на локальной машине (значение AF_UNIX). Па-
раметр type задает модель соединения (SOCK_STREAM – сеансовая, SOCK_
DGRAM – дейтаграмм). Параметр protocol обычно устанавливают в 0, что оз-
начает использование протокола по умолчанию, для сеансовой модели –
TCP, для модели дейтаграмм – UDP. На рис. 5.2 показана работа с сокетами
на стороне клиентов и серверов для протоколов TCP (5.2, а) и UDP (5.2, б).
Рис. 5.2
При работе через протокол TCP-IP организация работы с сокетами на
стороне сервера и на стороне клиента осуществляется различными способа-
ми. На стороне сервера производится связывание сокета с портом IP, вклю-
чение режима «слушания» и разрешение соединения. На стороне клиента
выполняется запрос на соединение, после которого клиент и сервер могут
обмениваться данными. Код программы-сервера:
а
Создание сокета
б
Создание сокета
Связывание сокета
Слушание
Разрешение
Запрос соединения
Чтение-запись
Чтение-запись
Закрытие сокета
Закрытие сокета
Создание сокета
Создание сокета
Связывание сокета
Связывание сокета
Чтение-запись
Чтение-запись
Закрытие сокета
Закрытие сокета
Сервер
Клиент
Сервер
Клиент
54
int fd = socket(AF_INET, SOCK_STREAM, 0);
// создать сокет
struct sockaddr_in addr =
{AF_INET, 1025, INADDR_ANY};
// номер порта IP
bind(fd, addr);
// связывание
listen(fd, 5);
// слушание
while(true)
{
int newfd = accept(fd);
// разрешение
read(newfd, ...);
// чтение
write(newfd, ...);
// запись
close(newfd);
// закрыть сокет
}
Следует отметить, что сервер принимает запросы на соединение от
клиентов по одному сокету (на котором он слушает), а при разрешении со-
единения системный вызов accept создает новый сокет и возвращает соответ-
ствующий файловый дескриптор. Таким образом, для каждого соединения с
клиентом на сервере задействуется отдельный сокет. Код клиента:
int fd = socket(AF_INET, SOCK_STREAM, 0);
// создать сокет
struct sockaddr_in serv = {AF_INET, 1025};
// номер порта IP
serv.sin_addr.s_addr =
inet_addr("206.45.10.2");
// адрес сервера
connect(fd, serv);
// запрос
while(true)
{
write(fd, ...);
// чтение
read(fd, ...);
// запись
}
close(fd);
// закрыть сокет
Во время работы сервера с несколькими клиентами часто требуется
знать, на каком из сокетов есть готовые к обработке запросы на соединение
или на обмен данными. Разделенная во времени работа по нескольким кана-
лам называется мультиплексированием. В ОС UNIX при организации ввода-
вывода процесса через файловые дескрипторы (файлы, трубки, сокеты) с по-
мощью системного вызова select можно определить, на каких дескрипторах
есть данные, готовые для чтения или записи, а также на каких дескрипторах
возникли ошибочные ситуации. Таким образом можно осуществлять синхро-
низацию работы процесса с операциями ввода-вывода.
55
Глава 6. АРХИТЕКТУРА КОМПЬЮТЕРНЫХ СИСТЕМ
В настоящее время для решения многих задач требуется объединение
компьютерной техники в комплексы и системы. Под архитектурой компью-
терной системы понимается способ организации взаимодействия техниче-
ских и программных средств, нацеленный на решение поставленных перед
системой задач.
Мэйнфрейм стал исторически первым архитектурным решением для
компьютерных систем. Это терминальная система на базе центрального вы-
сокопроизводительного компьютера со значительным объемом оперативной
и внешней памяти (рис. 6.1, а). Мэйнфреймы применяются для централизо-
ванных хранилищ данных большой емкости и выполнения интенсивных вы-
числительных работ в крупных организациях.
Рис. 6.1
Клиент-серверные системы (рис. 6.1, б) предусматривают специализа-
цию средств компьютерной техники по функциональному назначению. В их
составе выделяются серверы (файловые серверы, серверы баз данных, серве-
ры приложений) и рабочие станции пользователей. Рабочие станции ориен-
тированы на работу с компьютерной графикой, серверы – на хранение и об-
работку данных. Большое развитие клиент-серверные системы получили в
области автоматизированного проектирования.
В трехзвенной архитектуре (рис. 6.1, в) разделяются функции доступа
к данным (сервер данных) и функции обработки данных (сервер приложе-
ний). Поскольку ресурсы рабочей станции обеспечивают практически только
а
в
Мэйнфрейм
Сервер
Рабочие станции
Локальная сеть
б
Сервер
приложений
Рабочие станции
Локальная сеть
Сервер
данных
56
поддержку пользовательского интерфейса, то они могут быть сведены к ми-
нимуму (так называемый тонкий клиент).
В среде UNIX разделение ресурсов компьютерной системы для трех-
звенной архитектуры поддерживается протоколами прикладного уровня NFS
и X-Window (рис. 6.2). Сетевая файловая система NFS позволяет монтиро-
вать каталоги одних машин в дерево каталогов других машин, обеспечивая
тем самым прозрачность доступа к файлам.
Графическая система X-Window позволяет программам, выполняю-
щимся на одних машинах, осуществлять графический вывод на экраны дру-
гих машин [9]. На рабочей станции запускается программа Х-сервер, которая
управляет экранами и другими периферийными устройствами пользователь-
ского интерфейса. На сервере приложений запускаются программы, назы-
ваемые Х-клиентами. Между Х-клиентами и Х-сервером устанавливаются
соединения TCP-IP, а обмен данными производится в соответствии с Х-про-
токолом. Команды этого протокола позволяют открывать окна, рисовать гра-
фические примитивы, получать события и т. д.
Рис. 6.2
Веб-технологии строятся на взаимодействии через HTTP-протокол веб-
клиентов (браузеров) и веб-серверов, находящихся в различных узлах гло-
бальной сети. Клиенты запрашивают ресурсы (URL-запросы) и получают в
ответ HTML-страницы, которые интерпретируются браузером и отобража-
ются на экране (рис. 6.3).
Веб-программирование заключается в подготовке веб-страниц (стати-
ческих) или написании приложений, формирующих веб-страницы в момент
запроса (динамических). Для подготовки веб-страниц широко используются
следующие технологии [10]–[12]:
Локальная сеть с протоколом TCP-IP
Сервер данных
Сервер приложений
Х-клиент
Х-клиент
Х-клиент
Рабочая станция
Х-сервер
Х-протокол
NFS
57
• HTML – язык разметки страниц;
• CSS – каскадные листы стилей;
• JavaScript – язык программирования на веб-страницах.
Рис. 6.3
Рис. 6.4
Облачные вычисления (cloud computing) получили широкое распро-
страние в последние годы благодаря своей простоте для конечного пользова-
теля. Эти технологии основаны на модели клиент-сервер и предусматривают
хранение и обработку данных серверами, находящимися в узлах глобальной
сети (рис. 6.4). Функции клиента сводятся к отображению данных, для этого
применяются обычные веб-браузеры.
Чтобы повысить эффективность облачных технологий, в различных
странах создаются универсальные центры обработки данных, оснащенные
мощной компьютерной техникой. В какой-то части это можно рассматривать
как возрождение архитектуры мейнфреймов. Недостатком облачных и веб-
технологий является их сильная зависимость от глобальной сети, что тянет за
собой серьезные проблемы, связанные с надежностью и безопасностью.
Глобальная сеть с протоколом TCP-IP
Сервер
Х-клиент
Х-клиент
Веб-контент
Персональный компьютер
Веб-клиент
HTTP-протокол
Веб-сервер
Х-клиент
Х-клиент
Веб-приложения
URL-запросы
HTML-
страницы
Глобальная сеть с протоколом TCP-IP
Серверы данных и приложений
Персональный компьютер
Тонкий клиент
HTTP-протокол
58
Глава 7. ЗАЩИТА ИНФОРМАЦИИ В КОМПЬЮТЕРНЫХ
СИСТЕМАХ
Широкое применение компьютерных и сетевых технологий в различ-
ных областях выдвигает на первый план вопросы информационной безопас-
ности, под которой понимают защиту конфиденциальности, целостности и
доступности информации. Конфиденциальность – свойство информацион-
ных ресурсов, связанное с тем, что они не станут доступными и не будут рас-
крыты для неуполномоченных лиц. Целостность – это неизменность ин-
формации в процессе ее хранения или передачи другим лицам. Доступ-
ность – свойство информационных ресурсов, определяющее возможность их
получения и использования по требованию уполномоченных лиц.
Для обеспечения информационной безопасности применяются специа-
лизированные технические, программные и организационные средства, среди
которых можно выделить:
• средства защиты от несанкционированного доступа (мандатное
управление доступом, избирательное управление доступом, управ-
ление доступом на основе ролей, аудит);
• системы мониторинга сетей (IDS/IPS – системы обнаружения и пред-
отвращения вторжений, DLP – системы предотвращения утечек
конфиденциальной информации);
• антивирусные средства;
• межсетевые экраны;
• криптографические средства (шифрование, цифровую подпись);
• системы резервного копирования;
• системы аутентификации (пароли, ключи доступа, сертификаты,
биометрический контроль).
Мандатное управление доступом – разграничение доступа субъектов к
объектам, основанное на назначении метки конфиденциальности для инфор-
мации, содержащейся в объектах, и выдаче официальных разрешений (до-
пуска) субъектам на обращение к информации такого уровня конфиденци-
альности. Примерами меток могут служить: не секретно; для служебного
пользования; секретно; особо секретно. Пользователь, имеющий более высо-
кую категорию доступа, всегда получает доступ к объектам низшей катего-
рии, но не наоборот.
59
Избирательное управление доступом – управление доступом субъектов
к объектам на основе списков управления доступом или матрицы доступа.
Для каждой пары (субъект–объект) должно быть задано перечисление допус-
тимых видов доступа (чтение, изменение и т. д.). Возможны несколько под-
ходов к построению избирательного управления доступом:
• каждый объект системы имеет привязанного к нему субъекта – вла-
дельца, который устанавливает права доступа к объекту;
• система имеет одного выделенного субъекта – суперпользователя,
который имеет право устанавливать права владения для всех ос-
тальных субъектов системы;
• субъект с определенным правом доступа может передать это право
любому другому субъекту.
Управление доступом на основе ролей – развитие политики избира-
тельного управления доступом, при этом права доступа субъектов системы
на объекты группируются с учетом специфики их применения, образуя роли.
Формирование ролей призвано определить четкие и понятные для пользова-
телей компьютерной системы правила доступа. Ролевое разграничение по-
зволяет реализовать гибкие, изменяющиеся динамически в процессе функ-
ционирования компьютерной системы, правила разграничения доступа.
Система обнаружения вторжений – программное или аппаратное
средство, предназначенное для выявления фактов неавторизованного доступа
в компьютерную систему или сеть либо несанкционированного управления
ими, в основном – через Интернет. Системы обнаружения вторжений исполь-
зуются для обнаружения некоторых типов вредоносной активности, которая
может нарушить безопасность компьютерной системы. К такой активности
относятся сетевые атаки против уязвимых сервисов, атаки, направленные на
повышение привилегий, неавторизованный доступ к важным файлам, а также
действия вредоносного программного обеспечения (компьютерных вирусов,
троянов и червей). Обычно архитектура системы включает предназначенную
для сбора событий сенсорную подсистему; подсистему анализа, предназна-
ченную для выявления атак и подозрительных действий; хранилище, обеспе-
чивающее накопление первичных событий и результатов анализа; консоль
управления, позволяющую наблюдать за состоянием защищаемой системы.
Системы предотвращения утечек (DLP) предназначены для предот-
вращения утечек конфиденциальной информации из информационной сис-
60
темы вовне. DLP-системы строятся на анализе потоков данных, пересекаю-
щих периметр защищаемой информационной системы. При обнаружении в
этом потоке конфиденциальной информации срабатывает активный компо-
нент системы и передача блокируется. Распознавание конфиденциальной
информации производится двумя способами: анализом формальных призна-
ков (например, грифа документа, специально введенных меток, сравнением
хэш-функции) и анализом контента. Первый способ позволяет избежать лож-
ных срабатываний, но зато требует предварительной классификации доку-
ментов, внедрения меток, сбора сигнатур и т. д. Пропуски конфиденциальной
информации при этом методе возможны, если какой-либо документ не под-
вергся предварительной классификации. Второй способ может давать лож-
ные срабатывания, зато позволяет выявить пересылку конфиденциальной
информации не только среди грифованных документов. В хороших DLP-
системах оба способа сочетаются.
Межсетевой экран (firewall) – комплекс аппаратных или программных
средств, осуществляющий контроль и фильтрацию проходящих через него
сетевых пакетов в соответствии с заданными правилами. Основной задачей
сетевого экрана является защита компьютерных сетей или отдельных узлов
от несанкционированного доступа. Также сетевые экраны часто называют
фильтрами, так как их основная задача – фильтровать пакеты, не подходящие
под заданные критерии.
Виртуальная частная сеть (Virtual Private Network – VPN) позволяет
обеспечить сетевые соединения (логическую сеть) поверх другой сети (на-
пример, Интернет). Несмотря на то что коммуникации осуществляются по
сетям с меньшим уровнем доверия, уровень доверия к построенной логиче-
ской сети не зависит от уровня доверия к базовым сетям благодаря использо-
ванию средств криптографии (шифрования, аутентификации и др.).
Шифрование применяется для хранения важной информации в нена-
дежных источниках или передачи ее по незащищенным каналам связи. Шиф-
рование включает процессы зашифровывания и расшифровывания. В зави-
симости от алгоритма преобразования данных методы шифрования подраз-
деляются на методы гарантированной и временной криптостойкости. В зави-
симости от структуры используемых ключей методы шифрования подразде-
ляются на симметричное шифрование (посторонним лицам может быть из-
вестен алгоритм шифрования, но неизвестна небольшая порция секретной
61
информации – ключа, одинакового для отправителя и получателя сообщения)
и асимметричное шифрование (посторонним лицам может быть известен ал-
горитм шифрования и, возможно, открытый ключ, но неизвестен закрытый
ключ, известный только получателю).
Для технологии открытых ключей необходимо, чтобы пользователь от-
крытого ключа был уверен, что этот ключ принадлежит именно тому удален-
ному субъекту, который будет использовать средства шифрования. Такую
уверенность дают сертификаты открытых ключей, т. е. структуры данных,
которые связывают величины открытых ключей с субъектами. Эта связь до-
стигается цифровой подписью доверенного сертификационного органа под
каждым сертификатом.
Цифровая (электронная) подпись предназначена для идентификации
лица, подписавшего электронный документ, и полноценно заменяет собст-
венноручную подпись в случаях, предусмотренных законом. Использование
электронной подписи позволяет осуществить:
• контроль целостности передаваемого документа, поскольку при лю-
бом случайном или преднамеренном изменении документа подпись
станет недействительной, потому что вычислена она на основании
исходного состояния документа и соответствует лишь ему;
• защиту от изменений (подделки) документа, поскольку гарантия
выявления подделки при контроле целостности делает подделыва-
ние нецелесообразным в большинстве случаев;
• невозможность отказа от авторства (поскольку создать корректную
подпись можно, лишь зная закрытый ключ, а он должен быть извес-
тен только владельцу, то владелец не может отказаться от своей
подписи под документом);
• доказательное подтверждение авторства документа (так как создать
корректную подпись можно, лишь зная закрытый ключ, а он должен
быть известен только владельцу, и владелец пары ключей может до-
казать свое авторство подписи под документом).
Для контроля целостности передаваемой информации наряду с шифро-
ванием применяют криптографические хэш-функции, которые на базе со-
держимого документа вычисляют небольшую порцию данных – хэш. При ма-
лейшем изменении документа хэш меняется, что позволяет выявить любое
искажение информации.
62
Список литературы
1. Таненбаум Э. Современные операционные системы. 3-е изд. – СПб.: Пи-
тер, 2012. – 1120 с.
2. POSIX.1-2008. Information technology – Portable Operating System Interface.
Part 1: Base Definitions//IEEE Std 1003.1-2008. – 462 p.
3. POSIX.1-2008. Information technology – Portable Operating System Interface.
Part 2: System Interface//IEEE Std 1003.1-2008. – 1815 p.
4. POSIX.1-2008. Information technology – Portable Operating System Interface.
Part 3: Shell and Utilities//IEEE Std 1003.1-2008. – 1130 p.
5. POSIX.1-2008. Information technology – Portable Operating System Interface.
Part 4: Rationale//IEEE Std 1003.1-2008. – 310 p.
6. Зубков С. В., Linux. Русские версии. – М.: ДМК Пресс, 2000. – 352 с.
7. Хэвиленд К., Грей Д., Салама Б. Системное программирование в UNIX.
Руководство программиста по разработке ПО. – М.: ДМК Пресс, 2000. –
368 с.
8. Олифер В. Г., Олифер В. А. Компьютерные сети. Принципы, технологии,
протоколы: уч. для вузов. 4-е изд. – СПб.: Питер, 2012. – 944 с.
9. Немнюгин С., Чаунин М., Комолкин А. Эффективная работа: UNIX. –
СПб.: Питер, 2001. – 688 с.
10. Кириленко А. Самоучитель HTML. – СПб.: Питер, 2006. – 272 с.
11. Матросов А. В., Сергеев А. О., Чаунин М. П. HTML 4.0. – СПб: БХВ-
Петербург, 2007. – 672 с.
12. Днепров А. Г. JavaScript на 100 %. – СПб.: Питер, 2008. – 304 с.
63
Оглавление
Введение...................................................................................................................3
Глава 1. ИСТОРИЯ РАЗВИТИЯ И СОВРЕМЕННОЕ СОСТОЯНИЕ
КОМПЬЮТЕРНОЙ ТЕХНИКИ.............................................................................4
1.1. История создания компьютеров........................................................4
1.2. Первое поколение компьютеров .......................................................5
1.3. Второе и третье поколения компьютеров ........................................6
1.4. Четвертое поколение компьютеров ..................................................7
Глава 2. ТЕХНИЧЕСКИЕ СРЕДСТВА КОМПЬЮТЕРНЫХ СИСТЕМ...........9
2.1. Процессор ............................................................................................9
2.2. Оперативная память..........................................................................11
2.3. Устройства хранения данных ..........................................................12
2.4. Устройства взаимодействия с пользователем................................14
2.5. Устройства ввода-вывода информации..........................................16
2.6. Устройства передачи информации..................................................17
Глава 3. ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ КОМПЬЮТЕРНЫХ СИСТЕМ...18
3.1. Программирование, языки программирования .............................18
3.2. Разработка ПО на языке высокого уровня .....................................19
3.3. Создание образа программы............................................................20
3.4. Загрузка и выполнение программы.................................................22
Глава 4. ОПЕРАЦИОННЫЕ СИСТЕМЫ...........................................................23
4.1. Назначение и характеристики операционных систем...................23
4.2. Структура и функции операционных систем.................................25
4.3. Управление процессором.................................................................27
4.4. Управление памятью ........................................................................29
4.5. Управление периферийными устройствами ..................................34
4.6. Операционная система UNIX ..........................................................36
4.7. Управление пользователями в UNIX..............................................38
4.8. Файловая система UNIX...................................................................39
4.9. Управление процессами в UNIX.....................................................41
4.10. Механизмы межпроцессного обмена UNIX.................................44
Глава 5. СЕТЕВЫЕ ТЕХНОЛОГИИ...................................................................50
5.1. Сетевые протоколы...........................................................................50
5.2. Сети с протоколом IP........................................................................51
5.3. Поддержка сетевого взаимодействия в UNIX................................53
Глава 6. АРХИТЕКТУРА КОМПЬЮТЕРНЫХ СИСТЕМ ...............................55
Глава 7. ЗАЩИТА ИНФОРМАЦИИ В КОМПЬЮТЕРНЫХ СИСТЕМАХ ...58
Список литературы ...............................................................................................62
64
Шевченко Алексей Владимирович
Компьютерные, сетевые и информационные технологии
Учебное пособие
Редактор Н. В. Лукина
Подписано в печать 04.06.13. Формат 60×84 1/16. Бумага офсетная.
Печать офсетная. Гарнитура «TimesNewRoman». Печ. л. 4,0.
Тираж 50 экз. Заказ
.
Издательство СПбГЭТУ «ЛЭТИ»
197376, С.-Петербург, ул. Проф. Попова, 5
Информация о работе Компьютерные сети