Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпорка-информатика.doc
Скачиваний:
2
Добавлен:
03.08.2019
Размер:
901.63 Кб
Скачать

1.4. Информационное и математическое обеспечение

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

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

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

В персональных компьютерах «памятью» часто называют один из её видов — динамическая память с произвольным доступом (DRAM), — которая в настоящее время используется в качестве ОЗУ персонального компьютера.

Задачей компьютерной памяти является хранение в своих ячейках состояния внешнего воздействия, запись информации. Эти ячейки могут фиксировать самые разнообразные физические воздействия (см. ниже). Они функционально аналогичны обычному электромеханическому переключателю и информация в них записывается в виде двух чётко различимых состояний — 0 и 1 («выключено»/«включено»). Специальные механизмы обеспечивают доступ (считывание, произвольное или последовательное) к состоянию этих ячеек.

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

Также различают операцию стирания памяти — занесение (запись) в ячейки памяти одинаковых значений, обычно 0016 или FF16.

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

Функции памяти

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

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

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

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

[править]Физические основы функционирования

В основе работы запоминающего устройства может лежать любой физический эффект, обеспечивающий приведение системы к двум или более устойчивым состояниям. В современнойкомпьютерной технике часто используются физические свойства полупроводников, когда прохождение тока через полупроводник или его отсутствие трактуются как наличие логических сигналов 0 или 1. Устойчивые состояния, определяемые направлением намагниченности, позволяют использовать для хранения данных разнообразные магнитные материалы. Наличие или отсутствие заряда в конденсаторе также может быть положено в основу системы хранения. Отражение или рассеяние света от поверхности CD, DVD или Blu-ray-диска также позволяет хранить информацию.

[править]Классификация типов памяти

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

[править]Доступные операции с данными

Память только для чтения (read-only memory, ROM)

Память для чтения/записи

Память на программируемых и перепрограммируемых ПЗУ (ППЗУ и ПППЗУ) не имеет общепринятого места в этой классификации. Её относят либо к подвиду памяти «только для чтения»[1], либо выделяют в отдельный вид.

Также предлагается относить память к тому или иному виду по характерной частоте её перезаписи на практике: к RAM относить виды, в которых информация часто меняется в процессе работы, а к ROM — предназначенные для хранения относительно неизменных данных.[1]

[править]Энергозависимость

Энергонезависимая память (англ. nonvolatile storage) — память, реализованная ЗУ, записи в которых не стираются при снятии электропитания. К этому типу памяти относятся все виды памяти на ПЗУ и ППЗУ;

Энергозависимая память (англ. volatile storage) — память, реализованная ЗУ, записи в которых стираются при снятии электропитания. К этому типу памяти относятся память, реализованная на ОЗУ, кэш-память.

Статическая память (англ. static storage) — энергозависимая память, которой для хранения информации достаточно сохранения питающего напряжения;

Динамическая память (англ. dynamic storage) — энергозависимая память, в которой информация со временем разрушается (деградирует), и, кроме подачи электропитания, необходимо производить её периодическое восстановление (регенерацию).

[править]Метод доступа

Последовательный доступ (англ. sequential access memory, SAM) — ячейки памяти выбираются (считываются) последовательно, одна за другой, в очерёдности их расположения. Вариант такой памяти — стековая память.

Произвольный доступ (англ. random access memory, RAM) — вычислительное устройство может обратиться к произвольной ячейке памяти по любому адресу.

[править]Назначение

Буферная память (англ. buffer storage) — память, предназначенная для временного хранения данных при обмене ими между различными устройствами или программами.

Временная (промежуточная) память (англ. temporary (intermediate) storage) — память для хранения промежуточных результатов обработки.

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

Корректирующая память (англ. patch memory) — часть памяти ЭВМ, предназначенная для хранения адресов неисправных ячеек основной памяти. Также используются термины «relocation table» и «remap table».

Управляющая память (англ. control storage) — память, содержащая управляющие программы или микропрограммы. Обычно реализуется в виде ПЗУ.

Разделяемая память или память коллективного доступа (англ. shared memory, shared access memory) — память, доступная одновременно нескольким пользователям, процессам или процессорам.

И др.

[править]Организация адресного пространства

Реальная или физическая память (англ. real (physical) memory) — память, способ адресации которой соответствует физическому расположению её данных;

Виртуальная память (англ. virtual memory) — память, способ адресации которой не отражает физического расположения её данных;

Оверлейная память (англ. overlayable storage) — память, в которой присутствует несколько областей с одинаковыми адресами, из которых в каждый момент доступна только одна.

[править]Удалённость и доступность для процессора

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

регистры процессора (процессорная или регистровая память) — регистры, расположенные непосредственно в АЛУ;

кэш процессора — кэш, используемый микропроцессором для уменьшения среднего времени доступа к компьютерной памяти. Разделяется на несколько уровней, различающихся скоростью и объёмом (например, L1, L2, L3).

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

Третичная память — доступна только путём нетривиальной последовательности действий. Сюда входят все виды внешней памяти — доступной через устройства ввода-вывода. Взаимодействие с третичной памятью ведётся по определённым правилам (протоколам) и требует присутствия в памяти соответствующих программ. Программы, обеспечивающие минимально необходимое взаимодействие, помещаются в ПЗУ, входящее во вторичную память (у PC-совместимых ПК — это ПЗУ BIOS);

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

[править]Управление процессором

Непосредственно управляемая (оперативно доступная) память (англ. on-line storage) — память, непосредственно доступная в данный момент времени центральному процессору.[источник не указан 705 дней]

Автономная память — память, реализованная, например при помощи службы внешних носителей в Windows 2000, предусматривающей оперативное управление библиотеками носителей и устройствами с автоматической подачей дисков, облегчающей использование съёмных носителей типа магнитных лент и съёмных дисков, магнитных или оптических[3].

[править]Организация хранения данных и алгоритмы доступа к ним

Повторяет классификацию структур данных:

Адресуемая память — адресация осуществляется по местоположению данных.

Ассоциативная память (англ. associative memory, content-addressable memory, CAM) — адресация осуществляется по содержанию данных, а не по их местоположению.

Магазинная (стековая) память (англ. pushdown storage) — реализация стека.

Матричная память (англ. matrix storage) — ячейки памяти расположены так, что доступ к ним осуществляется по двум или более координатам.

Объектная память (англ. object storage) — память, система управления которой ориентирована на хранение объектов. При этом каждый объект характеризуется типом и размером записи.

Семантическая память (англ. semantic storage) — данные размещаются и списываются в соответствии с некоторой структурой понятийных признаков.

И др.

Разновидности магнитной памяти

Память на магнитной ленте (англ. magnetic tape memory) — представляет собой пластиковую узкую ленту с магнитным покрытием и механизм с блоком головок записи-воспроизведения (БГЗВ). Лента намотана на бобину, и последовательно протягивается лентопротяжным механизмом (ЛПМ) возле БГЗВ. Запись производится перемагничиванием частиц магнитного слоя ленты при прохождении их возле зазора головки записи. Считывание записанной информации происходит при прохождении намагниченного ранее участка плёнки возле зазора головки воспроизведения.

Память на магнитных дисках (англ. magnetic disk memory) — представляет собой круглый пластиковый диск с магнитным покрытием и механизм с БГЗВ. Данные при этом наносятся радиально, при вращении диска вокруг своей оси и радиальном сдвиге БГЗВ на шаг головки. Запись производится перемагничиванием частиц магнитного слоя диска при прохождении их возле зазора головки записи. Считывание записанной информации происходит при прохождении намагниченного ранее участка возле зазора головки воспроизведения.

Память на магнитной проволоке (англ. plated wire memory) Использовалась в магнитофонах до магнитной ленты. В настоящее время по этому принципу конструируется большинство авиационных т. н. «чёрных ящиков» — данный носитель имеет наиболее высокую устойчивость к внешним воздействиям и высокую сохранность даже при повреждениях в аварийных ситуациях.

Ферритовая память (англ. core storage) — ячейка представляет собой ферритовый сердечник, изменение состояния которого (перемагничивание) происходит при пропускании тока через намотанный на него проводник. В настоящее время имеет ограниченное применение, в основном в военной сфере.

[править]Разновидности оптической памяти

Фазоинверсная память (англ. Phase Change Rewritable storage, PCR) — оптическая память, в которой рабочий (отражающий) слой выполнен из полимерного вещества, способного при нагреве менять фазовое состояние (кристаллическое↔аморфное) и отражающие характеристики в зависимости от режима нагрева. Применяется в перезаписываемых оптических дисках (CD-RW, DVD-RW).

Периферийные устройства персонального компьютера

Сб, 10/09/2010 - 14:47 — pypath

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

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

Рассмотрим некоторые из периферийных устройств.

Принтер (print - печатать) – устройство для вывода на печать текстовой и графической информации. Принтеры, как правило, работают с бумагой формата А4 или А3. Наиболее распространены на сегодняшний день лазерные и струйные принтеры, матричные принтеры уже вышли из обихода.

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

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

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

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

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

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

Дисковод CD-ROM – устройство для чтения информации, записанной на лазерных компакт-дисках (CD ROM – Compact Disk Read Only Memory, что в переводе означает компакт-диск с памятью только для чтения). На компакт-дисках можно хранить большое количество информации (до 650 Мбайт). Такие диски используются для хранения справочной информации, больших энциклопедий, баз данных, музыки, видеоинформации и т.д.

Основной показатель для дисковода CD-ROM – это скорость считывания информации с компакт-диска.

Дисковод DVD является дальнейшим развитием лазерных технологий. В нем применяется усовершенствованная технология использования лазерного луча для записи и чтения информации с компакт-дисков. Аббревиатура DVD означает Digital Video Disk (цифровой видеодиск) или в другой трактовке - Digital Versatile Disk (цифровой многоцелевой диск).

В отличие от дисков CD-ROM диски DVD могут использовать для работы обе поверхности. Причем технология позволяет записывать на каждой из сторон два слоя данных.

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

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

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

В большинстве вычислительных систем операционная система является основной, наиболее важной (а иногда и единственной) частью системного программного обеспечения. С 1990-х годов наиболее распространёнными операционными системами являются системы семейства Microsoft Windows и системы класса UNIX (особенно Linux иMac OS).

Функции операционных систем

Основные функции:

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

Загрузка программ в оперативную память и их выполнение.

Стандартизованный доступ к периферийным устройствам (устройства ввода-вывода).

Управление оперативной памятью (распределение между процессами, организация виртуальной памяти).

Управление доступом к данным на энергонезависимых носителях (таких как жёсткий диск, оптические диски и др.), организованным в той или иной файловой системе.

Обеспечение пользовательского интерфейса.

Сохранение информации об ошибках системы.

Дополнительные функции:

Параллельное или псевдопараллельное выполнение задач (многозадачность).

Эффективное распределение ресурсов вычислительной системы между процессами.

Разграничение доступа различных процессов к ресурсам.

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

Взаимодействие между процессами: обмен данными, взаимная синхронизация.

Защита самой системы, а также пользовательских данных и программ от действий пользователей (злонамеренных или по незнанию) или приложений.

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

Компоненты операционной системы

Загрузчик

Ядро

Командный процессор (интерпретатор)[1]

Драйверы устройств

Интерфейс

[править]Понятие операционной системы

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

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

Операционные системы нужны, если:

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

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

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

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

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

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

использующие файловые системы (с универсальным механизмом доступа к данным),

многопользовательские (с разделением полномочий),

многозадачные (с разделением времени).

Многозадачность и распределение полномочий требуют определённой иерархии привилегий компонентов самой операционной системе. В составе операционной системы различают три группы компонентов:

ядро, содержащее планировщик; драйверы устройств, непосредственно управляющие оборудованием; сетевая подсистема, файловая система;

системные библиотеки;

оболочка с утилитами.

Большинство программ, как системных (входящих в операционную систему), так и прикладных, исполняются в непривилегированном («пользовательском») режиме работы процессора и получают доступ к оборудованию (и, при необходимости, к другим ресурсам ядра, а также ресурсам иных программ) только посредством системных вызовов. Ядро исполняется в привилегированном режиме: именно в этом смысле говорят, что система (точнее, её ядро) управляет оборудованием.

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

[править]Ядро операционной системы

Основная статья: Ядро операционной системы

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

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

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

Объекты ядра ОС:

Процессы

Файлы

События

Потоки

Семафоры

Мьютексы

Каналы

Файлы, проецируемые в память

[править]Эволюция операционных систем и основные идеи

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

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

[править]Пакетный режим

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

[править]Разделение времени и многозадачность

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

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

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

[править]Разделение полномочий

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

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

[править]Реальный масштаб времени

Основная статья: Операционная система реального времени

Применение универсальных компьютеров для управления производственными процессами потребовало реализации «реального масштаба времени» («реального времени») — синхронизации исполнения программ с внешними физическими процессами.

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

[править]Файловые системы и структуры

Постепенная замена носителей с последовательным доступом (перфолент, перфокарт и магнитных лент) накопителями произвольного доступа (на магнитных дисках).

Файловая система — способ хранения данных на внешних запоминающих устройствах.

[править]Существующие операционные системы

Основная статья: Список операционных систем

[[]]== UNIX, стандартизация операционных систем и POSIX == К концу 1960-х годов отраслью и научно-образовательным сообществом был создан целый ряд операционных систем, реализующих все или часть очерченных выше функций. К ним относятся Atlas (Манчестерский университет), CTTS и ITSS (Массачусетский технологический институт, MIT), THE(Эйндховенский технологический университет), RS4000 (Университет Орхуса) и др. (всего эксплуатировалось более сотни различных ОС).

Наиболее развитые операционные системы, такие как OS/360 (IBM), SCOPE (CDC (англ.)) и завершённый уже в 1970-х годах MULTICS (MIT и Bell Labs), предусматривали возможность исполнения на многопроцессорных компьютерах.

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

Задуманная и реализованная в 1969 году Кеном Томпсоном при участии нескольких коллег (включая Денниса Ритчи и Брайана Кернигана), операционная система UNIX (первоначально UNICS, что обыгрывало название MULTICS) вобрала в себя многие черты более ранних систем, но обладала целым рядом свойств, отличающих её от большинства предшественниц:

простая метафорика (два ключевых понятия: вычислительный процесс и файл);

компонентная архитектура: принцип «одна программа — одна функция» плюс мощные средства связывания различных программ для решения возникающих задач («оболочка»);

минимизация ядра (кода, выполняющегося в «реальном» (привилегированном) режиме процессора) и количества системных вызовов;

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

унификация файлов.

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

В конце 1970-х годов сотрудники Калифорнийского университета в Беркли внесли ряд усовершенствований в исходные коды UNIX, включая работу с протоколами TCP/IP. Их разработка стала известна под именем BSD (Berkeley Software Distribution).

Задачу разработать независимую (от авторских прав Bell Labs) реализацию той же архитектуры поставил и Ричард Столлман, основатель проекта GNU.

Благодаря конкурентности реализаций архитектура UNIX стала вначале фактическим отраслевым стандартом, а затем обрела статус и стандарта юридического — ISO/IEC 9945[2].

Только системы, отвечающие спецификации Single UNIX Specification, имеют право носить имя UNIX. К таким системам относятся AIX, HP-UX, IRIX, Mac OS X, SCO OpenServer, Solaris, Tru64и z/OS.

Операционные системы, следующие стандарту POSIX или опирающиеся на него, называют «POSIX-совместимыми» (чаще встречается словоупотребление «UNIX-подобные» или «семейство UNIX», но оно противоречит статусу торгового знака «UNIX», принадлежащего консорциуму The Open Group и зарезервированному для обозначения только операционных систем, строго следующих стандарту). Сертификация на совместимость со стандартом платная, из-за чего некоторые системы не проходили этот процесс, однако считаются POSIX-совместимыми по существу.

К UNIX-подобным относятся операционные системы, основанные на последней версии UNIX, выпущенной Bell Labs (System V), на разработках университета Беркли (FreeBSD, OpenBSD,NetBSD), на основе Solaris (OpenSolaris, BeleniX, Nexenta), а также Linux, разработанная в части утилит и библиотек проектом GNU и в части ядра — сообществом, возглавляемым Линусом Торвальдсом.

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

Самым заметным эффектом существования этого стандарта стало эффективное разворачивание Интернета в 1990-х годах.

[править]Пост-UNIX-архитектуры операционных систем

Коллектив, создавший UNIX, развил концепцию унификации объектов операционной системы, включив в исходную концепцию UNIX «устройство — это тоже файл» также и процессы, и любые другие системные, сетевые и прикладные сервисы, создав новую концепцию: «что угодно — это файл». Эта концепция стала одним из основных принципов системы Plan9 (название было позаимствовано из фантастического триллера «План 9 из открытого космоса» Эдварда Вуда-младшего), призванной преодолеть принципиальные недостатки дизайна UNIX и сменившей «рабочую лошадку» UNIX System V на компьютерах сети Bell Labs в 1992 году.

Кроме реализации всех объектов системы в виде файлов и размещения их на едином и персональном для каждого терминала вычислительной сети пространстве (namespace), были пересмотрены другие архитектурные решения UNIX. Например, в Plan9 отсутствует понятие «суперпользователь», и, соответственно, исключаются любые нарушения режима безопасности, связанные с нелегальным получением прав суперпользователя в системе. Для представления (хранения, обмена) информации Роб Пайк и Кен Томпсон разработали универсальную кодировку UTF-8, на сегодняшний день ставшую стандартом де-факто. Для доступа к файлам используется единый универсальный протокол 9P, по сети работающий поверх сетевого протокола (TCP или UDP). Таким образом, для прикладного ПО сети не существует — доступ к локальным и к удалённым файлам единообразен. 9P — байт-ориентированный протокол, в отличие от других подобных протоколов, являющихся блок-ориентированными. Это также результат работы концепции: доступ побайтно — к унифицированным файлам, а не поблочно — к разнообразным и сильно изменяющимися с развитием технологий устройствам. Для контроля доступа к объектам не требуется иных решений, кроме уже существующего в операционной системе контроля доступа к файлам. Новая концепция системы хранения избавила администратора системы от изнурительного труда по сопровождению архивов и предвосхитила современные системы управления версиями файлов.

Операционные системы, созданные на базе или идеях UNIX, такие как всё семейство BSD и системы GNU/Linux, постепенно перенимают новые идеи из Bell Labs. Возможно, эти новые идеи ждёт большое будущее и признание ИТ-разработчиков.

Новые концепции были использованы Робом Пайком в «Inferno».

На основе Plan9 в Испании разрабатываются системы Off++ и Plan B, носящие экспериментальный характер.

К попыткам создать пост-UNIX-архитектуру можно также отнести разработку системы программирования и операционной среды Оберон в Швейцарском федеральном технологическом институте (ETH Zurich) под руководством профессора Никлауса Вирта.

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

Файловая система связывает носитель информации с одной стороны и API для доступа к файлам — с другой. Когда прикладная программа обращается к файлу, она не имеет никакого представления о том, каким образом расположена информация в конкретном файле, так же, как и на каком физическом типе носителя (CD, жёстком диске, магнитной ленте, блоке флеш-памяти или другом) он записан. Всё, что знает программа — это имя файла, его размер и атрибуты. Эти данные она получает от драйвера файловой системы. Именно файловая система устанавливает, где и как будет записан файл на физическом носителе (например, жёстком диске).

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

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

Задачи файловой системы

Основные функции любой файловой системы нацелены на решение следующих задач:

именование файлов;

программный интерфейс работы с файлами для приложений;

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

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

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

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

Paint – простейший графический редактор, предназначенный для создания и редактирования растровых графических изображений в основном формате Windows (BMP) и форматах  Интернета (GIFи JPEG). Он приемлем для создания простейших  графических иллюстраций, в основном схем, диаграмм и графиков, которые можно встраивать в текстовые документы; в Paint можно создавать рекламу, буклеты, объявления, приглашения, поздравления и др.

 Графический редактор Paint ориентирован на процесс “рисования” изображения и комбинирования готовых фрагментов,  а не на обработку (“доводку”) готовых изображений, таких как отсканированные фотографии.

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

 Основные возможности Paint

·  Проведение прямых и кривых линий различной толщины и цвета.

·  Использование кистей различной формы, ширины и цвета.

·  Построение различных фигур - прямоугольников, многоугольников, овалов, эллипсов - закрашенных и не закрашенных.

·  Помещение текста на рисунок.

·  Использование преобразований - поворотов, отражений, растяжений и наклона.

Запуск и элементы окна.

Начало и завершение работы с Paint.

Для запуска графического редактора Paint используется следующий способ: кнопка “Пуск”, пункты подменю “Программы”, “Стандартные” и “Графический редактор Paint”.

Или можно выбрать в окне “Проводник” или “Мой компьютер” файл типа “Точечный рисунок bmp” и дать команду его открыть.

Для окончания работы с Paint можно использовать пункты меню “Файл”, и далее “Выход”.

 Вид окна Paint.

Окно графического редактора Paint имеет стандартный вид (см. рис. № 7). В левом верхнем углу выводится имя файла рисунка, и затем название редактора Paint. В меню редактора входят команды “Файл”, “Правка”, “Вид”, “Рисунок”, “Параметры” и “?”. В палитру инструментов входят кнопки “Выделение произвольной области” и “Выделение”, “Ластик” и “Заливка”, “Выбор цветов” и “Масштаб”, “Карандаш” и “Кисть”, “Распылитель” и “Надпись”, “Линия” и “Кривая”, “Прямоугольник” и “Многоугольник”, “Эллипс” и “Скругленный прямоугольник” (по порядку сверху вниз). В левом нижнем углу расположена Панель цветов. При некоторых операциях с рисунком на экране временно появляются и другие Панели. Управлять работой в Paint можно посредством меню и панели инструментов. Существуют команды, вызываемые или только через меню, или только через панель инструментов.

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

Важными характеристиками изображения являются:

количество пикселей — размер. Может указываться отдельно количество пикселей по ширине и высоте (1024×768, 640×480, …) или же, редко, общее количество пикселей (часто измеряется в мегапикселях);

количество используемых цветов или глубина цвета (эти характеристики имеют следующую зависимость: N = 2k, где N — количество цветов, аk — глубина цвета);

цветовое пространство (цветовая модель) RGB, CMYK, XYZ, YCbCr и др.

разрешение — справочная величина, говорящая об рекомендуемом размере пиксела изображения.

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

Достоинства

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

Распространённость — растровая графика используется сейчас практически везде: от маленьких значков до плакатов.

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

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

[править]Недостатки

Большой размер файлов с простыми изображениями.

Невозможность идеального масштабирования.

Невозможность вывода на печать на плоттер.

Из‑за этих недостатков для хранения простых рисунков рекомендуют вместо даже сжатой растровой графики использовать векторную графику.

[править]Форматы

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

[править]Сжатие без потерь

Основная статья: Сжатие без потерь

Использует алгоритмы сжатия, основанные на уменьшении избыточности информации.

BMP или Windows Bitmap — обычно используется без сжатия, хотя возможно использование алгоритма RLE.

GIF (Graphics Interchange Format) — устаревающий формат, поддерживающий не более 256 цветов одновременно. Всё ещё популярен из‑за поддержки анимации, которая отсутствует в чистом PNG, хотя ПО начинает поддерживать APNG.

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

PNG (Portable Network Graphics)

[править]Сжатие с потерями

Основная статья: Сжатие данных с потерями

Основано на отбрасывании части информации (как правило наименее воспринимаемой глазом).

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

[править]Разное

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

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

[править]История

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

В 1961 году программист С. Рассел возглавил проект по созданию первой компьютерной игры с графикой. Создание игры «Spacewar» («Космические войны») заняло около 200 человеко-часов. Игра была создана на машине PDP-1.

В 1963 году американский учёный Айвен Сазерленд создал программно-аппаратный комплекс Sketchpad, который позволял рисовать точки, линии и окружности на трубке цифровым пером. Поддерживались базовые действия с примитивами: перемещение, копирование и др. По сути, это был первый векторный редактор, реализованный на компьютере. Также программу можно назвать первым графическим интерфейсом, причём она являлась таковой ещё до появления самого термина.

В середине 1960-х гг. появились разработки в промышленных приложениях компьютерной графики. Так, под руководством Т. Мофетта и Н. Тейлора фирма Itek разработала цифровую электронную чертёжную машину. В 1964 году General Motors представила систему автоматизированного проектирования DAC-1, разработанную совместно с IBM.

В 1968 году группой под руководством Константинова Н. Н. была создана компьютерная математическая модель движения кошки. Машина БЭСМ-4, выполняя написанную программу решения дифференциальных уравнений, рисовала мультфильм «Кошечка», который для своего времени являлся прорывом. Для визуализации использовался алфавитно-цифровой принтер. Существенный прогресс компьютерная графика испытала с появлением возможности запоминать изображения и выводить их на компьютерном дисплее.

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

Обзор

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

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

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

Термин «векторная графика» используется в основном в контексте двухмерной компьютерной графики.

[править]Способ хранения изображения

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

координаты центра окружности;

значение радиуса r;

цвет заполнения (если окружность не прозрачная);

цвет и толщина контура (в случае наличия контура).

[править]Преимущества векторного способа описания графики над растровой графикой

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

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

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

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

[править]Фундаментальные недостатки векторной графики

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

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

Преимущество векторной картинки — масштабируемость — пропадает, когда начинаем иметь дело с особо малыми разрешениями графики (например, иконки 32×32 или 16×16). Чтобы не было «грязи», картинку под такие разрешения приходится подгонять вручную.

[править]Типичные примитивные объекты

Линии и ломаные линии.

Многоугольники.

Окружности и эллипсы.

Кривые Безье.

Безигоны.

Текст (в компьютерных шрифтах, таких как TrueType, каждая буква создаётся из кривых Безье).

Этот список неполон. Есть разные типы кривых (Catmull-Rom сплайны, NURBS и т. д.), которые используются в различных приложениях.

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

[править]Векторные операции

Векторные графические редакторы, типично, позволяют вращать, перемещать, отражать, растягивать, скашивать, выполнять основные аффинные преобразования над объектами, изменятьz-order и комбинировать примитивы в более сложные объекты.

Более изощрённые преобразования включают булевы операции на замкнутых фигурах: объединение, дополнение, пересечение и т. д.

Векторная графика идеальна для простых или составных рисунков, которые должны быть аппаратно-независимыми или не нуждаются в фотореализме. К примеру, PostScript и PDFиспользуют модель векторной графики.

Microsoft Word (часто — MS Word, WinWord или просто Word) — текстовый процессор, предназначенный для создания, просмотра и редактирования текстовых документов, с локальным применением простейших форм таблично-матричных алгоритмов. Выпускаетсякорпорацией Microsoft в составе пакета Microsoft Office. Первая версия была написана Ричардом Броди (Richard Brodie) для IBM PC, использующих DOS, в 1983 году. Позднее выпускались версии для Apple Macintosh (1984), SCO UNIX и Microsoft Windows (1989).

Microsoft Excel (также иногда называется Microsoft Office Excel[1]) — программа для работы с электронными таблицами, созданная корпорацией Microsoft для Microsoft Windows, Windows NT и Mac OS. Она предоставляет возможности экономико-статистических расчетов, графические инструменты и, за исключением Excel 2008 под Mac OS X, язык макропрограммирования VBA (Visual Basic для приложений). Microsoft Excel входит в состав Microsoft Office и на сегодняшний день Excel является одним из наиболее популярных приложений в мире

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

Классификация антивирусных продуктов

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

По используемым технологиям антивирусной защиты:

Классические антивирусные продукты (продукты, применяющие только сигнатурный метод детектирования)

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

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

По функционалу продуктов:

Антивирусные продукты (продукты, обеспечивающие только антивирусную защиту)

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

По целевым платформам:

Антивирусные продукты для ОС семейства Windows

Антивирусные продукты для ОС семейства *NIX (к данному семейству относятся ОС BSD, Linux, Mac OS X и др.)

Антивирусные продукты для мобильных платформ (Windows Mobile, Symbian, iOS, BlackBerry, Android, Windows Phone 7 и др.)

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

Антивирусные продукты для защиты рабочих станций

Антивирусные продукты для защиты файловых и терминальных серверов

Антивирусные продукты для защиты почтовых и Интернет-шлюзов

Антивирусные продукты для защиты серверов виртуализации

Виды баз данных

Существует огромное количество разновидностей баз данных, отличающихся по различным критериям. Например, в «Энциклопедии технологий баз данных»,[1] по материалам которой написан данный раздел, определяются свыше 50 видов БД.

Основные классификации приведены ниже.

[править]Классификация по модели данных

Примеры:

Иерархическая

Сетевая

Реляционная

Объектная и объектно-ориентированная

Объектно-реляционная

Функциональная.

[править]Классификация по среде постоянного хранения

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

В оперативной памяти (англ. in-memory database, memory-resident database, main memory database): все данные на стадии исполнения находятся в оперативной памяти.

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

[править]Классификация по содержимому

Примеры:

Географическая

Историческая

Научная

Мультимедийная.

[править]Классификация по степени распределённости

Централизованная, или сосредоточенная (англ. centralized database): БД, полностью поддерживаемая на одном компьютере.

Распределённая (англ. distributed database): БД, составные части которой размещаются в различных узлах компьютерной сети в соответствии с каким-либо критерием.

Неоднородная (англ. heterogeneous distributed database): фрагменты распределённой БД в разных узлах сети поддерживаются средствами более одной СУБД

Однородная (англ. homogeneous distributed database): фрагменты распределённой БД в разных узлах сети поддерживаются средствами одной и той же СУБД.

Фрагментированная, или секционированная (англ. partitioned database): методом распределения данных является фрагментирование (партиционирование, секционирование), вертикальное или горизонтальное.

Тиражированная (англ. replicated database): методом распределения данных является тиражирование (репликация).

[править]Другие виды БД

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

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

АРХИТЕКТУРА ЛОКАЛЬНОЙ СЕТИ

Для характеристики архитектура сети используют понятия логической и физической топологии.

Физическая топология [physical topology] – это физическая структура сети, способ физического соединения всех аппаратных компонентов сети. Существует несколько видов физической топологии.

Наиболее простой является физическая шинная топология [bus topology], в которой кабель идёт от ЭВМ к ЭВМ, связывая их в цепочку. Различают толстые и тонкие сети.Толстая сеть [thicknet] использует толстый коаксиальный кабель в качестве магистрали, от которого отходят более тонкие кабели.

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

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

При физической звездообразной топологии [star topology] каждый сервер и рабочая станция подключаются к специальному устройству – центральному концентратору[hub], который осуществляет соединение пары узлов сети – коммутацию.

Если сеть имеет много узлов, причём многие располагаются на большом удалении друг от друга, то расход кабеля при использовании звездообразной топологии будет большим. Кроме того, к концентратору можно подключить лишь ограниченное число кабелей. В таких случаях применяется распределённая звездообразная топология [distributed star topology], при которой несколько концентраторов соединяются друг с другом.

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

Логическая топология сети [logical topology] определяет способ, в соответствии с которым устройства сети передают информацию от одного узла к следующему. Физическая топология не имеет прямого отношения к логической.

Различают два вида логической топологии: шинную и кольцевую.

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

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

Интерне́т (произносится [интэрнэ́т]; англ. Internet) — всемирная система объединённых компьютерных сетей, построенная на использовании протокола IP и маршрутизации пакетов данных. Интернет образует глобальное информационное пространство, служит физической основой для Всемирной паутины (World Wide Web (WWW) и множества других систем (протоколов) передачи данных. Часто упоминается как Всемирная сеть и Глобальная сеть, в обиходе иногда употребляют сокращённое наименование Ине́т.

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

В России День Интернета празднуется 30 сентября [1]

К середине 2008 года число пользователей, регулярно использующих Интернет, составило около 1,5 млрд человек (около четверти населения Земли).[2] Вместе с подключёнными к нему компьютерами, Интернет служит основой для развития информационного общества.

История

В 1957 году Министерство обороны США посчитало, что на случай войны Америке нужна надёжная система передачи информации. Агентство передовых оборонных исследовательских проектов США (DARPA) предложило разработать для этого компьютерную сеть. Разработка такой сети была поручена Калифорнийскому университету в Лос-Анджелесе, Стэнфордскому исследовательскому центру, Университету Юты и Университету штата Калифорния в Санта-Барбаре. Компьютерная сеть была названа ARPANET (англ. Advanced Research Projects Agency Network), и в 1969 году в рамках проекта сеть объединила четыре указанных научных учреждения. Все работы финансировались Министерством обороны США. Затем сеть ARPANET начала активно расти и развиваться, её начали использовать учёные из разных областей науки.

Первый сервер ARPANET был установлен 2 сентября 1969 года в Калифорнийском университете в Лос-Анджелесе. Компьютер Honeywell DP-516 имел 24 Кб оперативной памяти[6].

29 октября 1969 года в 21:00 между двумя первыми узлами сети ARPANET, находящимися на расстоянии в 640 км — в Калифорнийском университете Лос-Анджелеса (UCLA) и в Стэнфордском исследовательском институте (SRI) — провели сеанс связи. Чарли Клайн (Charley Kline) пытался выполнить удалённое подключение к компьютеру в SRI. Успешную передачу каждого введённого символа его коллега Билл Дювалль (Bill Duvall) из SRI подтверждал по телефону.

В первый раз удалось отправить всего три символа «LOG», после чего сеть перестала функционировать. LOG должно было быть словом LOGON (команда входа в систему). В рабочее состояние систему вернули уже к 22:30 и следующая попытка оказалась успешной. Именно эту дату можно считать днём рождения Интернета.[7]

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

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

В 1970-х годах сеть в основном использовалась для пересылки электронной почты, тогда же появились первые списки почтовой рассылки, новостные группы и доски объявлений. Однако в то время сеть ещё не могла легко взаимодействовать с другими сетями, построенными на других технических стандартах. К концу 1970-х годов начали бурно развиваться протоколы передачи данных, которые были стандартизированы в 1982—83 годах. Активную роль в разработке и стандартизации сетевых протоколов играл Джон Постел. 1 января 1983 года сеть ARPANET перешла с протокола NCP на TCP/IP, который успешно применяется до сих пор для объединения (или, как ещё говорят, «наслоения») сетей. Именно в 1983 году термин «Интернет» закрепился за сетью ARPANET.

В 1984 году была разработана система доменных имён (англ. Domain Name System, DNS).

В 1984 году у сети ARPANET появился серьёзный соперник: Национальный научный фонд США (NSF) основал обширную межуниверситетскую сеть NSFNet (англ. National Science Foundation Network), которая была составлена из более мелких сетей (включая известные тогда сети Usenet и Bitnet) и имела гораздо бо́льшую пропускную способность, чем ARPANET. К этой сети за год подключились около 10 тыс. компьютеров, звание «Интернет» начало плавно переходить к NSFNet.

В 1988 году был разработан протокол Internet Relay Chat (IRC), благодаря чему в Интернете стало возможно общение в реальном времени (чат).

В 1989 году в Европе, в стенах Европейского совета по ядерным исследованиям (фр. Conseil Européen pour la Recherche Nucléaire, CERN) родилась концепция Всемирной паутины. Её предложил знаменитый британский учёный Тим Бернерс-Ли, он же в течение двух лет разработал протокол HTTP, язык HTML и идентификаторы URI.

Соавтор Тима Бернерса-Ли по формулировке целей и задач проекта World Wide Web в CERN, бельгийский исследователь Роберт Каиллиалу (Robert Cailliau) разъяснял позднее его понимание истоков этого проекта:

История всех великих изобретений, как это давно и хорошо известно, базируется на большом числе им предшествующих. В случае Всемирной паутины (WWW) следовало бы в этом контексте, видимо, отметить по крайней мере два важнейших для успеха проекта пути развития и накопления знаний и технологий: 1) история развития систем типа гипертекста …; 2) Интернет-протокол, который собственно и сделал всемирную сеть компьютеров наблюдаемой реальностью.

— Из речи на открытии Европейского отделения W3 Консорциума. Париж. Ноябрь 1995.[8]

В 1990 году сеть ARPANET прекратила своё существование, полностью проиграв конкуренцию NSFNet. В том же году было зафиксировано первое подключение к Интернету по телефонной линии (т. н. «дозво́н» — англ. Dialup access).

В 1991 году Всемирная паутина стала общедоступна в Интернете, а в 1993 году появился знаменитый веб-браузер NCSA Mosaic. Всемирная паутина набирала популярность.

Можно считать что существует две ясно различимые эры в истории Web: [до браузера Mosaic] Марка Андриссена и после. Именно сочетание веб-протокола от Тима Бернерс-Ли, который обеспечивал коммуникацию, и браузера (Mosaic) от Марка Андриссена, который предоставил функционально совершенный пользовательский интерфейс, создало условия для наблюдаемого взрыва (интереса к Веб). За первые 24 месяца, истекшие после появления браузера Моsaic, Web прошел стадию от полной неизвестности (за пределами считанного числа людей внутри узкой группы ученых и специалистов лишь одного мало кому известного профиля деятельности) до полной и абсолютно везде в мире его распространенности.

— A Brief History of Cyberspace, Mark Pesce, ZDNet, 15 октября 1995[9]

В 1995 году NSFNet вернулась к роли исследовательской сети, маршрутизацией всего трафика Интернета теперь занимались сетевые провайдеры, а не суперкомпьютеры Национального научного фонда.

В том же 1995 году Всемирная паутина стала основным поставщиком информации в Интернете, обогнав по трафику протокол пересылки файлов FTP. Был образован Консорциум всемирной паутины (W3C). Можно сказать, что Всемирная паутина преобразила Интернет и создала его современный облик. С 1996 года Всемирная паутина почти полностью подменяет собой понятие «Интернет».

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

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

В течение пяти лет Интернет достиг аудитории свыше 50 миллионов пользователей. Другим средствам массовой информации требовалось гораздо больше времени для достижения такой популярности[10]:

Ключевые принципы

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

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

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

Сам протокол IP был рождён в дискуссиях внутри организации IETF (англ. Internet Engineering Task Force; Task force — группа специалистов для решения конкретной задачи), чьё название можно вольно перевести как «Группа по решению задач проектирования Интернета». IETF и её рабочие группы по сей день занимаются развитием протоколов Всемирной сети. IETF открыта для публичного участия и обсуждения. Комитеты организации публикуют так называемые документы RFC. В этих документах даются технические спецификации и точные объяснения по многим вопросам. Некоторые документы RFC возводятся организацией IAB (англ. Internet Architecture Board — Совет по архитектуре Интернета) в статус стандартов Интернета (англ. Internet Standard). С 1992 года IETF, IAB и ряд других интернет-организаций входят в Общество Интернета (англ. Internet Society, ISOC). Общество Интернета предоставляет организационную основу для разных исследовательских и консультативных групп, занимающихся развитием Интернета.

Рунет

Основная статья: Рунет

Рунет (с прописной буквы, читается [рунэ́т]) — русскоязычная часть всемирной сети Интернет. Более узкое определение гласит, что Рунет — это часть Всемирной паутины, принадлежащая к национальным доменам .su, .ru и .рф. 1987—94 годы стали ключевыми в зарождении русскоязычного Интернета. 28 августа 1990 года профессиональная научная сеть, выросшая в недрах Института атомной энергии им. И. В. Курчатова и ИПК Минавтопрома и объединившая учёных-физиков и программистов, соединилась с мировой сетью Интернет, положив начало современным российским сетям. 19 сентября 1990 года был зарегистрирован домен первого уровня .su в базе данных Международного информационного центра InterNIC. В результате этого Советский Союз стал доступен через Интернет. 7 апреля 1994 года в InterNIC был зарегистрирован российский домен .ru.

Домен «.рф» (punycode: xn--p1ai; Российская Федерация), позволяющий использовать в адресе URL кириллические символы, делегирован в корневой зоне DNS 12 мая 2010 года около 17:20 по московскому времени[16]. По статистике Технического центра «Интернет»[17], на конец 2010 года в зоне .рф зарегистрировано около 700 000 доменов, около 350 000 из них делегировано. По данным Координационного центра национального домена сети Интернет, из доменных имен в зоне .рф, зарегистрированных к настоящему времени, только 8 % представляют собой общеупотребительные слова русского языка. Еще 30 % образованы несколькими словами, все остальные домены представляют собой имена людей, литературных персонажей, названий компаний. Подавляющее большинство имен принадлежит владельцам товарных знаков. Почти половина имен была зарегистрирована в Москве, еще 9 % — в Московской области, 8 % — в Санкт-Петербурге[18].

Алгори́тм, от имени учёного аль-Хорезми (перс. خوارزمی‎ [al-Khwārazmī]) — точный набор инструкций, описывающих порядок действий исполнителя для достижения результата решения задачи за конечное время. В старой трактовке вместо слова «порядок» использовалось слово «последовательность», но по мере развития параллельности в работе компьютеров слово «последовательность» стали заменять более общим словом «порядок». Это связано с тем, что работа каких-то инструкций алгоритма может быть зависима от других инструкций или результатов их работы. Таким образом, некоторые инструкции должны выполняться строго после завершения работы инструкций, от которых они зависят. Независимые инструкции или инструкции, ставшие независимыми из-за завершения работы инструкций, от которых они зависят, могут выполняться в произвольном порядке, параллельно или одновременно, если это позволяют используемые процессор и операционная система.

Ранее часто писали «алгорифм», сейчас такое написание используется редко, но, тем не менее, имеет место (например, Нормальный алгорифмМаркова).

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

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

Частичная формализация понятия алгоритма началась с попыток решения проблемы разрешения (нем. Entscheidungsproblem), которую сформулировал Давид Гильберт в 1928 году. Следующие этапы формализации были необходимы для определения эффективных вычислений[1] или «эффективного метода»[2]; среди таких формализаций — рекурсивные функции Геделя — Эрбрана — Клини 1930, 1934 и 1935 гг., λ-исчисление Алонзо Чёрча 1936 г., «Формулировка 1»Эмиля Поста 1936 года и машина Тьюринга. В методологии алгоритм является базисным понятием и получает качественно новое понятие как оптимальности по мере приближения к прогнозируемому абсолюту. В современном мире алгоритм в формализованном выражении составляет основу образования на примерах, по подобию. На основе сходства алгоритмов различных сфер деятельности была сформирована концепция (теория) экспертных систем.

Формальные свойства алгоритмов

Различные определения алгоритма в явной или неявной форме содержат следующий ряд общих требований:

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

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

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

Завершаемость (конечность) — при корректно заданных исходных данных алгоритм должен завершать работу и выдавать результат за конечное число шагов.[источник не указан 386 дней] С другой стороны, вероятностный алгоритм может и никогда не выдать результат, но вероятность этого равна 0.

Массовость (универсальность). Алгоритм должен быть применим к разным наборам исходных данных.

Результативность — завершение алгоритма определёнными результатами.

Алгоритм содержит ошибки, если приводит к получению неправильных результатов либо не даёт результатов вовсе.

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

Виды алгоритмов

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

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

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

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

Создатели языков по-разному толкуют понятие язык программирования. К наиболее распространённым утверждениям, признаваемым большинством разработчиков, относятся следующие:[источник не указан 906 дней]

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

Задача: язык программирования отличается от естественных языков тем, что предназначен для передачи команд и данных от человека к компьютеру, в то время как естественные языки используются для общения людей между собой. Можно обобщить определение «языков программирования» — это способ передачи команд, приказов, чёткого руководства к действию; тогда как человеческие языки служат также для обмена информацией.

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

Стандартизация языков программирования

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

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

[править]Типы данных

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

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

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

[править]Структуры данных

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

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

[править]Семантика языков программирования

Существует несколько подходов к определению семантики языков программирования.

Наиболее широко распространены разновидности следующих трёх: операционного, деривационного (аксиоматического) и денотационного (математического).

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

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

Денотационная семантика оперирует понятиями, типичными для математики — множества, соответствия, а также суждения, утверждения и др.

[править]Парадигма программирования

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

Несмотря на то, что большинство языков ориентировано на императивную модель вычислений, задаваемую фон-неймановской архитектурой ЭВМ, существуют и другие подходы. Можно упомянуть языки со стековой вычислительной моделью (Forth, Factor, Postscript и др.), а также функциональное (Лисп, Haskell, ML и др.) и логическое программирование (Пролог) и языкРефал, основанный на модели вычислений, введённой советским математиком А. А. Марковым-младшим.

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

[править]Способы реализации языков

Языки программирования могут быть реализованы как компилируемые и интерпретируемые.

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

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

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

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

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

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

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

Некоторые языки, например, Java и C#, находятся между компилируемыми и интерпретируемыми. А именно, программа компилируется не в машинный язык, а в машинно-независимый код низкого уровня, байт-код. Далее байт-код выполняется виртуальной машиной. Для выполнения байт-кода обычно используется интерпретация, хотя отдельные его части для ускорения работы программы могут быть транслированы в машинный код непосредственно во время выполнения программы по технологии компиляции «на лету» (Just-in-time compilation, JIT). Для Java байт-код исполняется виртуальной машиной Java (Java Virtual Machine, JVM), для C# — Common Language Runtime.

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

[править]Используемые символы

Современные языки программирования рассчитаны на использование ASCII, то есть доступность всех графических символов ASCII является необходимым и достаточным условием для записи любых конструкций языка. Управляющие символы ASCII используются ограниченно: допускаются только возврат каретки CR, перевод строки LF и горизонтальная табуляция HT (иногда также вертикальная табуляция VT и переход к следующей странице FF).

Подробнее по этой теме см.: Переносимый набор символов.

Ранние языки, возникшие в эпоху 6-битных символов, использовали более ограниченный набор. Например, алфавит Фортрана включает 49 символов (включая пробел): A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 = + - * / () . , $ ' :

Заметным исключением является язык APL, в котором используется очень много специальных символов.

Использование символов за пределами ASCII (например, символов KOI8-R или символов Юникода) зависит от реализации: иногда они разрешаются только в комментариях и символьных/строковых константах, а иногда и в идентификаторах. В СССР существовали языки, где все ключевые слова писались русскими буквами, но большу́ю популярность подобные языки не завоевали (исключение составляет Встроенный язык программирования 1С:Предприятие).

Подробнее по этой теме см.: Русские языки программирования.

Расширение набора используемых символов сдерживается тем, что многие проекты по разработке программного обеспечения являются международными. Очень сложно было бы работать с кодом, где имена одних переменных записаны русскими буквами, других — арабскими, а третьих — китайскими иероглифами. Вместе с тем, для работы с текстовыми данными языки программирования нового поколения (Delphi 2006, C#, Java, PureBasic) поддерживают Unicode.

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

узнавать текущие значения переменных;

выяснять, по какому пути выполнялась программа.

Существуют две взаимодополняющие технологии отладки.

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

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

Место отладки в цикле разработки программы

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

Программирование — внесение в программу новой функциональности, исправление ошибок в имеющейся.

Тестирование (ручное или автоматизированное; программистом, тестером или пользователем; «дымовое», в режиме чёрного ящика или модульное…) — обнаружение факта ошибки.

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

Отладка — обнаружение причины ошибки.

Инструменты

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

[править]Инструменты отладки

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

Также полезными инструментами в руках программиста могут оказаться:

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

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

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

Сниферы помогут программисту проследить сетевой трафик генерируемой программой

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

Логи системы.

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

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

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

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

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

— Брайан Керниган и Роб Пайк

[править]Инструменты, снижающие потребность в отладке

Другое направление — сделать, чтобы отладка нужна была как можно реже. Для этого применяются:

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

Модульное тестирование — проверка поведения программы по частям.

Статический анализ кода — проверка кода на стандартные ошибки «по недосмотру».

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

Широкое использование проверенных внешних библиотек.

[править]Безопасность программного кода и отладка

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

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

Устранение небезопасного кода

Выделяют такие методы:

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

фаззинг. Это процесс подачи на вход программы случайных или некорректных данных и анализ реакции программы.

Reverse engineering (Обратная инженерия). Этот случай возникает, когда независимые исследователи ищут уязвимости и недокументированные возможности программы.

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

Целые числа - это целые числа :-), например: 1, 5, -21 и 752.

Вещественные числа имеют дробные части (3.14159) и экспоненты (2.579x1024). Их также называют "числа с плавающей точкой".

Символы являются символами алфавита и цифрами 0-9. Они могут использоваться отдельно (a, Z, !, 3) или же они могут быть объединенными в строки символов ('Например, это строка символов.').

Логические или булевы выражения имеют одно из двух возможных значений: Истина (True) или Ложь (False). Они используются в условных выражениях.

Указатели содержат адреса в памяти компьютера, в которых находится информация.

INTEGER - целочисленные данные, во внутреннем представлении занимают 2 байта; диапазон возможных значений - от -32768 до +32767; данные представляются точно;

REAL - вещественные данные, занимают 6 байт; диапазон возможных значений модуля - от 2.9Е-39 до 1.7Е+38; точность представления данных - 11...12 значащих цифр;

CHAR - символ, занимает 1 байт;

STRING - строка символов, занимает МАХ+1 байт, где МАХ - максимальное число символов в строке;

BOOLEAN - логический тип, занимает 1 байт и имеет два значения: FALSE(ложь) и TRUE (истина).

Стандартные функции Турбо Паскаля

abs(x); {модуль, абсолютная величина}

exp(x); {еx- экспонента}

sqr(x); {x2 - квадрат числа}

sqrt(x); {  - корень квадратный}

ln(x); {вычисление натурального логарифма }

{  - вычисление логарифма по произвольному основанию}

{xa=exp(a*ln(x)) - возведение в степень}

sin(x); {-вычисление синуса}

cos(x); {-вычисление косинуса}

{tg(x) = sin(x)/cos(x) - вычисление тангенса}

{ctg(x) = cos(x)/sin(x) - вычисление котангенса}

arctan(x); {вычисление арктангенса}

round(x); {округление: x=4.9; y=round(x), ⇒ y=5 }

trunc(x); { выделение целой части: x=4.9; y=trunc(x), ⇒ y=4}

i mod j; { остаток целочисленного деления 10 mod 3 → 1 {10:3=3(1)}

i div j ; { целочисленное деление 10 div 3 → 3}

chr(i) ; { по порядковому номеру i возвращает символ}

ord(b); {функция, обратная предыдущей (возвращение порядкового номера)}

int(r) ;{возвращение целой части числа}

frac(r) ;{возвращение дробной части числа}

Стандартные процедуры

Dec(i); {i:=i-1}

inc(i); {i:=i+1}

GotoXY(i,j); {перемещение курсора в указанную точку экрана с координатами i, j}

str(x,S); {идентификатор численного типа x переводит в строковую переменную S: x→S. }{ Требуется модуль Crt}

Clrscr; {очистка экрана} {Требуется модуль Crt }

Константы

Pi{число π = 3.14…}

Вывод результатов

Write(x); {вывод на экран значения x: при реальном x=4, на экран выводится "4.0000000000E+00"}

Write(x:5:1); {вывод форматированных данных, то есть выделение на экране заданного количества позиций для вывода идентификатора: 5 показывает общее число позиций, 1 – число знаков после запятой: при x=4 , на экран выводится "4.0"}

Writeln(x); {вывод с новой строки}

Writeln(x,y); {вывод двух значений идентификаторов}

Writeln(‘x= ’,x:4:1); {вывод с комментариями и форматированием: "x= 4.0"}

Writeln(‘Площадь круга радиусом 3 м равна’,3.14*sqr(3):4:1); {Вывод с комментариями и выполнением расчетов: "Площадь круга радиусом 3 м равна 28.3"}

Основные математические соотношения и операции Турбо Паскаль:

+ { сложение}

– { вычитание}

* { умножение}

/ { деление}

= {равенство (используется при описании констант, типов и т.д.)}

:= {присваивание}

> { больше}

< { меньше}

>= { больше либо равно}

<= { меньше либо равно}

<> { не равно}.

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

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

Оператор условного перехода в Турбо Паскаль имеет вид:

if условие then оператор 1 else оператор 2;

условие - это логическое выражение, в зависимости от которого выбирается одна из двух альтернативных ветвей алгоритма. Если значение условия истинно (TRUE), то будет выполняться оператор 1, записанный после ключевого слова then. В противном случае будет выполнен оператор 2, следующий за словом else, при этом оператор 1 пропускается. После выполнения указанных операторов программа переходит к выполеннию команды, стоящей непосредственно после оператора if.

Необходимо помнить, что перед ключевым словом else точка с запятой никогда не ставится!

else - часть в операторе if может отсутствовать:

if условие then оператор 1;

Тогда в случае невыполнения логического условия управление сразу передается оператору, стоящему в программе после конструкции if.

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

оператор цикла While (с предусловием)

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

Синтаксис в Turbo Pascal

While выражение Do оператор

Режим

Windows, Real, Protected

Замечания

Оператор While после зарезервированного слова Do будет выполняться до тех пор, пока логическое выражение является истинным (True).

Логическое выражение оценивается до начала выполнения оператора. Если логическое выражение с самого начала было ложным (False), то оператор не выполнится ни разу. (В отличие от оператора цикла с постусловием Repeat, у который выполнится минимум один раз до проверки логического условия).

Условный цикл с проверкой после выполнения блока операторов.

Repeat <тело цикла> Until <условие>

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

Оператор выбора одного из вариантов.

Case <ключ выбора> Of <список выбора> Else <оператор> End;

<ключ выбора> - выражение любого перечислимого типа,  <список выбора> - одна или более конструкций вида <значение ключа>:<блок операторов>.

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

Операторы повторений

Цикл с предопределенным числом повторений.(с параметром)

1)     for <имя переменной> := <начальное значение> to <конечное значение> do

<тело цикла>

2)     for <имя переменной> := <начальное значение> downto <конечное значение> do

       <тело цикла>

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

Условия выполнения цикла проверяются перед выполнением блока операторов. Если условие не выполнено, цикл For не выполняется.

Операторы ветвлений

 

Условный оператор

IF <условие> THEN <оператор1> [ELSE <оператор2>]   

Условие – значение типа BOOLEAN или логическая операция. Если условие верно, выполняется оператор, или блок операторов, следующий за THEN, в противном случае выполняется блок операторов после ELSE, если он есть.

 

Условия могут быть вложенными и в таком случае, любая встретившаяся часть ELSE соответствует ближайшей к ней "сверху" части THEN.

Составной и пустой операторы

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

Турбо-Паскаль допускает произвольную глубину вложенности:  Begin  ...    Begin    ...      Begin      ...      End;    End;  End;  Наличие ; перед End - пустой оператор.

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

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

Массиву присваивается имя, посредством которого можно ссылаться на него, как на единое целое. Элементы, образующие массив, упорядочены так, что каждому элементу соответствует совокупность номеров (индексов), определяющих его место в общей последовательности. Индексы представляют собой выражения простого типа. Доступ  к каждому отдельному элементу осуществляется обращением к имени массива с указанием индекса нужного элемента: <имя массива>[<индекс>].

Описание массива определяет его имя, размер массива и тип данных. Общий вид описания массива:

Type <имя нового типа данных>=array[<тип индекса>] of <тип компонентов>;

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

 Var <имя массива>: array [<тип индекса>] of <тип компонентов>;

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

Одномерные массивы

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

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

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

Алгоритм решения задач с использованием массивов:

·        Описание массива

·        Заполнение массива

·        Вывод (распечатка) массива

·        Выполнение условий задачи

·        Вывод результата

Вычисление индекса массива Паскаля

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

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

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

Var a: array [1..10] of array [1.. 20] of real;

Var a: array [1..10, 1..20] of real;

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

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

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

Данный метод достаточно прост и содержит всего два действия. Сначала находится переменная х – середина интервала [a,b]. После чего вычисляется значение функции в середине интервала. Затем определяется, совпадает ли по знаку значение функции в середине интервала, со знаком функции в левой части. В случаи если их знаки равны, то новой левой границей считается середина интервала, в ином же случаи правой граница интервала считается его середина. Таким образом, при каждой итерации интервал сокращается вдовое то справа, то слева. Очень часто можно встретить следующую реализацию данного метода.

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

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