
- •Министерство образования и науки Российской Федерации
- •Цель лекции
- •План лекции
- •1 Происхождение вычислительных машин
- •2 Изучение алгоритмов
- •Контрольные вопросы
- •Цель лекции
- •План лекции
- •1 Биты и их хранение
- •2 Оперативная память
- •Контрольные вопросы
- •Цель лекции
- •План лекции
- •1 Устройства внешней памяти
- •3 Хранение и поиск файлов
- •Контрольные вопросы
- •Цель лекции
- •План лекции
- •1 Представление числовых значений
- •2 Хранение целых чисел
- •3 Хранение дробей
- •Контрольные вопросы
- •Цель лекции
- •План лекции
- •1 Представление текста
- •2 Представление изображений
- •Достоинства пиксельной графики
- •Недостатки пиксельной графики
- •Достоинства векторной графики
- •Недостатки векторной графики
- •3 Представление звука
- •Контрольные вопросы
- •Цель лекции
- •План лекции
- •1 Сжатие изображений
- •2 Ошибки передачи данных
- •Контрольные вопросы
- •Цель лекции
- •План лекции
- •1 Архитектура эвм
- •2 Связь процессора с другими устройствами
- •3 Другие архитектуры
- •Контрольные вопросы
- •Цель лекции
- •План лекции
- •1 Машинный язык
- •2 Пример машинного языка
- •Контрольные вопросы
- •Цель лекции
- •План лекции
- •1 Выполнение программы
- •2 Пример выполнения программы
- •3 Программы и данные
- •Контрольные вопросы
- •Цель лекции
- •План лекции
- •1 Логические операции
- •2 Операции сдвига
- •3 Арифметические операции
- •Контрольные вопросы
- •Цель лекции
- •План лекции
- •1 Эволюция операционных систем
- •2 Архитектура операционных систем
- •Контрольные вопросы
- •Цель лекции
- •План лекции
- •1 Понятие процесса
- •2 Управление процессами
- •Контрольные вопросы
- •Цель лекции
- •План лекции
- •1 Классификация сетей
- •2 Сетевые протоколы*
- •3 Безопасность сетей
- •Контрольные вопросы
- •Цель лекции
- •План лекции
- •1 Понятие алгоритма
- •2 Представление алгоритма
- •Контрольные вопросы
- •Цель лекции
- •План лекции
- •1 Теория решения задач
- •2 Общие методы решения задач
- •Контрольные вопросы
- •Цель лекции
- •План лекции
- •1 Алгоритм последовательного поиска
- •2 Управление циклами
- •3 Алгоритм сортировки методом вставки
- •Контрольные вопросы
- •Цель лекции
- •План лекции
- •1 Алгоритмы поиска и сортировки
- •2 Управление рекурсией
- •3 Разработка рекурсивных процедур
- •Контрольные вопросы
- •Цель лекции
- •План лекции
- •1 Эффективность алгоритмов
- •2 Верификация программ
- •Контрольные вопросы
- •Цель лекции
- •План лекции
- •1 Эволюция и классификация языков программирования
- •2 Концепции традиционного программирования
- •Контрольные вопросы
- •Цель лекции
- •План лекции
- •1 Процедурные единицы
- •2 Реализация языка программирования
- •Контрольные вопросы
- •Цель лекции
- •План лекции
- •1 Объектно-ориентированное программирование
- •2 Декларативное программирование
- •Контрольные вопросы
- •Цель лекции
- •План лекции
- •1 Структуры данных
- •Integer Scores (2.9).
- •2 Статические и динамические структуры
- •3 Указатели
- •Контрольные вопросы
- •Цель лекции
- •План лекции
- •1 Массивы
- •2 Списки
- •Контрольные вопросы
- •Цель лекции
- •План лекции
- •1 Структура и функции стека
- •2 Реализация стека
- •Контрольные вопросы
- •Цель лекции
- •План лекции
- •1 Очереди
- •2 Деревья
- •Контрольные вопросы
- •Цель лекции
- •План лекции
- •1 Пользовательские типы данных
- •Int Age;
- •2 Классы
- •Int *StackEntries;
- •3 Стандартная библиотека шаблонов
- •Контрольные вопросы
- •Цель лекции
- •План лекции
- •1 Роль операционной системы
- •2 Последовательные файлы
- •3 Вопросы программирования
- •0000000010000110
- •001100010011001100110100
- •Контрольные вопросы
- •Цель лекции
- •План лекции
- •1 Основные положения индексации
- •2 Вопросы программирования
- •Контрольные вопросы
- •Цель лекции
- •План лекции
- •1 Основные положения хеширования
- •2 Вопросы программирования
- •Контрольные вопросы
- •Цель лекции
- •План лекции
- •1 Общие вопросы
- •2 Система управления базой данных
- •3 Поддержка целостности баз данных
- •Контрольные вопросы
- •Цель лекции
- •План лекции
- •1 Модели баз данных
- •2 Реляционная модель баз данных
- •3 Объектно-ориентированные базы данных
- •Контрольные вопросы
- •Цель лекции
- •План лекции
- •1 Интеллект и машины
- •2 Распознавание образов
- •3 Мышление
- •Контрольные вопросы
- •Цель лекции
- •План лекции
- •1 Искусственные нейронные сети
- •2 Генетические алгоритмы
- •Контрольные вопросы
- •Невычислимые функции Цель лекции
- •План лекции
- •1 Основы машины Тьюринга
- •2 Невычислимая функция
- •3 Сложность задач
- •Листинг 1. Процедура MergeLists для объединения двух упорядоченных списков
- •Листинг 2. Алгоритм сортировки слиянием, реализованный в процедуре MergeSort
- •Контрольные вопросы
- •Цель лекции
- •План лекции
- •1 Шифрование с открытым ключом
- •2 Модульная арифметика
- •Контрольные вопросы
- •Литература
- •Internet-ресурсы
3 Стандартная библиотека шаблонов
Структуры данных, рассмотренные в этих лекциях, превратились в стандартные структуры программирования — настолько стандартные, что многие среды программирования используют их практически как примитивы. Пример этому можно найти в программной среде C++, которую зачастую усиливают за счет стандартной библиотеки шаблонов (Standard Template Library, STL). STL — это набор предопределенных классов (схожих с классом StackOflntegers из листинга 2), описывающих часто используемые структуры данных. Следовательно, включив STL в программу на C++, программист избавляется от необходимости детально описывать все эти структуры. Вместо этого он просто объявляет идентификаторы тех типов, которые присутствуют в библиотеке, так же, как мы объявляли ранее, что StackOne принадлежит типу StackOflntegers.
Контрольные вопросы
1. Что означает термин «пользовательский тип данных»?
2. Что представляет из себя тип данных «перечисления»? Покажите на примере.
3. Что представляет из себя тип данных «структуры»? Покажите на примере.
4. Что представляет из себя тип данных «объединения»? Покажите на примере.
5. Как осуществить переименование типов? Покажите на примере.
Лекция № 27 Последовательные файлы
Цель лекции
Изучить соотношение между представлениями абстрактных и способами организации и хранения фактических структур данных.
План лекции
1. Роль операционной системы.
2. Последовательные файлы.
3. Вопросы программирования.
Метод доступа к информации играет важную роль при выборе способа ее хранения. Как и во время изучения структур данных, мы увидим, что форма, в которой пользователь в конечном итоге видит данные, не всегда соответствует организации этих данных в системах хранения. Далее мы будем обсуждать и сравнивать абстрактные и фактические структуры данных.
1 Роль операционной системы
Программные приложения обычно пишутся на языках программирования высокого уровня, которые предоставляют примитивы обращения к файлам через операционную систему. Эти примитивы позволяют приложению манипулировать файлами в совместимых с приложением блоках, называемых логическими записями (logical record). Например, приложению, работающему с файлом данных о персонале, было бы удобно обращаться к этим данным в терминах логических записей, каждая из которых составлена из информации, относящейся к одному человеку. Временами информация логической записи разделяется на более мелкие блоки, называемые полями (fields). Например, каждую логическую запись в файле персонала можно было бы разделить на такие поля, как имя, адрес, идентификационный номер и т. д.
В отличие от подобной логической структуры, хранение файла на запоминающих устройствах предписывает, что файл должен быть разделен на блоки, являющиеся физическими записями (physical records), совместимыми с используемым устройством хранения. К примеру, файлы, записанные на диски, должны делиться на блоки размером с сектор. Управление файлами в терминах физических записей осуществляется операционной системой. Если приложению необходимо найти часть файла, измеряемую в логических записях, оно обращается к операционной системе, чтобы та произвела нужное обращение. Операционная система считывает достаточное для выполнения запроса количество физических записей, размещая полученные данные в области оперативной памяти, называемой буфером, а затем предоставляет этот буфер приложению (рис. 1). Аналогично, для записи информации приложение передает данные операционной системе. Операционная система хранит их в буфере до тех пор, пока не накопится полная физическая запись1, а затем передает эту запись на запоминающее устройство.
Рисунок 1 - Роль операционной системы при доступе к файлу
Для извлечения файлов, записанных на магнитные диски, операционная система поддерживает списки секторов, предоставленных каждому файлу. В действительности же дисковое пространство выделяется файлу блоками, называемыми кластерами, состоящими из нескольких секторов. Обычно один кластер на ПК состоит из 4-16 секторов, а на запоминающих устройствах большого объема содержатся тысячи кластеров. Чтобы запомнить, какие кластеры (clusters) назначены файлу, на каждом диске операционная система поддерживает таблицу размещения файлов (file allocation table, FAT). В этой таблице для каждого кластера на диске есть отдельная ячейка. Если на диске хранится файл, операционная система записывает номер первого выделенного файлу кластера в каталог, куда записана информация об этом файле (имя, размер, дата создания и т. д.). Затем в ячейку FAT, представляющую первый кластер, операционная система записывает номер следующего кластера, выделенного файлу, а в ячейку FAT для этого кластера записывает номер следующего за ним кластера. Таким образом, начав с каталога, где хранится файл, и следуя описанному пути в FAT, операционная система может восстановить файл в правильном порядке кластеров.
В ранних версиях операционной системы Microsoft Windows использовались FAT с 16-битными записями, то есть можно было пронумеровать только 65536 кластеров. Поскольку размер кластера равнялся 2 Кбайт, одна FAT могла представить только 128 Мбайт дискового пространства — что было вполне достаточно, если в системе установлен жесткий диск объемом до 128 Мбайт. В современных операционных системах используются 32-битные записи, то есть FAT можно применять для хранения адресов файлов на дисках, объемы которых измеряются в терабайтах — эквивалентно 240 байт.
Для выполнения всех условий доступа к файлам операционная система должна хранить информацию о файле, к которому идет обращение. Например, она должна знать, на каком устройстве записан файл, имя файла, расположение буфера, через который передаются данные, и будет ли файл сохранен после того, как приложение завершит работу. Подобная информация содержится в таблице, называемой дескриптором файла (file descriptor) или блоком управления файлом, хранящейся в оперативной памяти. Дескриптор файла создается, когда приложение уведомляет операционную систему, что ей потребуется доступ к файлу, и удаляется, когда приложение сообщает, что файл более не требуется. Процесс создания дескриптора файла называется открытием файла (opening the file); процесс удаления дескриптора файла называется закрытием файла (closing the file).
Перед тем как программа сможет обратиться к файлу через операционную систему, она должна запросить операционную систему открыть файл. Открытие файла обычно запрашивается оператором, значение которого можно записать на псевдокоде так:
Открыть файл document.txt как DocFile для ввода
В данном случае запрашивается открытие документа document.txt. Этот оператор указывает, что файл должен уже существовать на запоминающем устройстве («для ввода», а не «для вывода») и что в программе к этому файлу нужно будет обращаться как к DocFile. В программе используется псевдоним файла (DocFile), а не его настоящее имя по двум причинам. Во-первых, настоящее имя, которое используется в операционной системе, может быть не совместимо с синтаксическими правилами языка программирования высокого уровня. Например, имя файла document.txt не совместимо с языком, в котором идентификаторы не должны содержать точек. Во-вторых, если вы используете псевдонимы, то для того, чтобы программа обратилась к другому файлу, нужно просто написать другое имя в операторе открытия файла, а не искать и изменять каждое упоминание имени файла в программе.
В объектно-ориентированных языках программирования файлы рассматриваются как объекты, и открытие файла производится в контексте определения объекта, который будет представлять этот файл. Так, в объектно-ориентированной среде инструкция определения дескриптора файла будет эквивалентна следующей:
Создать объект DocFile как входной файл document.txt
При этом создается объект под названием DocFile, при помощи которого мы сможем обратиться к файлу document.txt как к файлу, из которого будет получена информация. Далее в программе данные можно прочесть из файла, отправив подходящее сообщение объекту DocFile. Например, оператор, эквивалентный команде:
Отправить сообщение GetCharacter к DocFile для получения Symbol
можно использовать для получения одного символа из файла, представленного объектом DocFile.
Когда программа закончит работу с файлом, она должна приказать операционной системе закрыть файл. Во время закрытия файла операционная система может не ограничиться удалением дескриптора файла. Например, если существует частично заполненная физическая запись, содержащая данные для записи в файл, операционная система должна передать эту запись на запоминающее устройство.
Для закрытия файла программа обычно выполняет инструкцию, эквивалентную следующей:
Закрыть файл DocFile
Закрытие файла в объектно-ориентированной среде выполняется путем отправки соответствующему объекту сообщения, приказывающего закрыть его файл. Например,
Отправить сообщение Close объекту DocFile
отправляет объекту DocFile приказ закрыть его файл.