По предназначению файловые системы можно классифицировать на нижеследующие категории.
- Для носителей с произвольным доступом (например, жёсткий диск): FAT32, HPFS, ext2 и др. Поскольку доступ к дискам в разы медленнее, чем доступ к оперативной памяти, для прироста производительности во многих файловых системах применяется асинхронная запись изменений на диск. Для этого применяется либо журналирование, например в ext3, ReiserFS, JFS, NTFS, XFS, либо механизм soft updates и др. Журналирование широко распространено в Linux, применяется в NTFS. Soft updates — в BSD системах.
- Для носителей с последовательным доступом (например, магнитные ленты): QIC и др.
- Для оптических носителей — CD и DVD: ISO9660, HFS, UDF и др.
- Виртуальные файловые системы: AEFS и др.
- Сетевые файловые системы: NFS, CIFS, SSHFS, GmailFS и др.
- Для флэш-памяти: YAFFS, ExtremeFFS, exFAT.
- Немного выпадают из общей классификации специализированные файловые системы: ZFS (собственно файловой системой является только часть ZFS), VMFS (т. н. кластерная файловая система, которая предназначена для хранения других файловых систем) и др.
Задачи файловой системы
Основные функции любой файловой системы нацелены на решение следующих задач:
- именование файлов;
- программный интерфейс работы с файлами для приложений;
- отображения логической модели файловой системы на физическую организацию хранилища данных;
- организация устойчивости файловой системы к сбоям питания, ошибкам аппаратных и программных средств;
- содержание параметров файла, необходимых для правильного его взаимодействия с другими объектами системы (ядро, приложения и пр.).
В многопользовательских системах появляется ещё одна задача: защита файлов одного пользователя от несанкционированного доступа другого пользователя, а также обеспечение совместной работы с файлами, к примеру, при открытии файла одним из пользователей, для других этот же файл временно будет доступен в режиме «только чтение».
17) - Этапы разработки программ для ЭВМ. Данные и алгоритмы, как модельное отражение реальных объектов. Языки программирования.
В процессе создания любой программы можно выделить несколько этапов.
1. Постановка задачи — выполняется специалистом в предметной области на естественном языке (русском, английском и т. д.). Необходимо определить цель задачи, ее содержание и общий подход к решению. Возможно, что задача решается точно (аналитически), и без компьютера можно обойтись. Уже на этапе постановки надо учитывать эффективность алгоритма решения задачи на ЭВМ, ограничения, накладываемые аппаратным и программным обеспечением (АО и ПО).
2. Анализ задачи и моделирование — определяются исходные данные и результат, выявляются ограничения на их значения, выполняется формализованное описание задачи и построение (выбор) математической модели, пригодной для решения на компьютере.
3. Разработка или выбор алгоритма решения задачи — выполняется на основе ее математического описания. Многие задачи можно решить различными способами. Программист должен выбрать оптимальное решение. Неточности в постановке, анализе задачи или разработке алгоритма могут привести к скрытой ошибке — программист получит неверный результат, считая его правильным.
4. Проектирование общей структуры программы — формируется модель решения с последующей детализацией и разбивкой на подпрограммы, определяется "архитектура" программы, способ хранения информации (набор переменных, массивов и т. п.).
5. Кодирование — запись алгоритма на языке программирования. Современные системы программирования позволяют ускорить процесс разработки программы, автоматически создавая часть ее текста, однако творческая работа по-прежнему лежит на программисте. Для успешной реализации целей проекта программисту необходимо использовать методы структурного программирования.
6. Отладка и тестирование программы. Под отладкой понимается устранение ошибок в программе. Тестирование позволяет вести их поиск и, в конечном счете, убедиться в том, что полностью отлаженная программа дает правильный результат. Для этого разрабатывается система тестов — специально подобранных контрольных примеров с такими наборами параметров, для которых решение задачи известно. Тестирование должно охватывать все возможные ветвления в программе, т. е. проверять все ее инструкции, и включать такие исходные данные, для которых решение невозможно. Проверка особых, исключительных ситуаций, необходима для анализа корректности. Например, программа должна отказать клиенту банка в просьбе выдать сумму, отсутствующую на его счете. В ответственных проектах большое внимание уделяется так называемой "защите от дурака" подразумевающей устойчивость программы к неумелому обращению пользователя. Использование специальных программ — отладчиков, которые позволяют выполнять программу по отдельным шагам, просматривая при этом значения переменных, значительно упрощает этот этап.
7. Анализ результатов — если программа выполняет моделирование какого-либо известного процесса, следует сопоставить результаты вычислений с результатами наблюдений. В случае существенного расхождения необходимо изменить модель.
8. Публикация результатов работы, передача заказчику для эксплуатации.
9. Сопровождение программы — включает консультации представителей заказчика по работе с программой и обучение персонала. Недостатки и ошибки, замеченные в процессе эксплуатации, должны устраняться.
Язык программирования- искусственный язык, являющийся промежуточным при переходе от естественного человеческого языка к машинным двоичным кодам. языки программирования
бывают высокого и низкого уровней. языки программирования высокого уровня (как видно из схемы) являются более близкими к естественному человеческому языку по сравнению с языками программирования низкого уровня. создание текста программы на языке программирования выполняется человеком вручную, а перевод текста программы в машинные двоичные коды - трансляция (англ.translation - перевод) выполняется специальными программами- трансляторами.
программирование на языках высокого уровня, очевидно, проще, чем на языках низкого
уровня. оно не требует глубоких знаний устройства компьютера и поэтому вполне
доступно людям, не являющимися специалистами в вычислительной технике. однако,
программы, написанные на языках низкого уровня, как правило, отличаются более
высокой скоростью работы, меньшим объемом и более полным использованием ресурсов вычислительной техники. к языкам высокого уровня относятся: фортран, бейсик, паскаль, си, алгол, алмир, ада, си++, delphi, java и сотни других. старейшим языком программирования высокого уровня является фортран (англ. formula translation, перевод формул). он был создан группой программистов
американской фирмы ibm под руководством джона бекуса в 1957 году. несколько позже в европе был разработан язык алгол (англ.algorythmic language, алгоритмический язык). эти языки послужили основой для других новых языков программирования. так, язык бейсик (англ. basic, базовый, или beginner's all-purpose symbolic instruction code, многоцелевой язык символических команд для начинающих) был создан джоном кемени в сша в 1965 году. он представляет собой упрощенную версию фортрана, который оказался сложным для большинства пользователей из-за своей избыточности. Язык алгол послужил основой для не менее популярного языка паскаля, созданного в 1969 году швейцарским математиком никласом виртом. паскаль не сложнее бейсика, но в него изначально были заложены более широкие возможности. дальнейшее развитие язык паскаль получил в виде системы программирования delphi. на украине в 1965 году на базе алгола был создан язык алмир, отличавшийся использованием символики на основе русского, а не английского языка. этот язык считается первым в мире языком программирования на основе национального языка (native language). язык си, в котором использованы элементы паскаля, был создан в 1972 году в американской фирме bell laboratories под руководством дениса ритчи. название языка си связано с тем, что наиболее удачной оказалась его третья версия ( си- третья буква английского алфавита). си считается наиболее эффективным среди языков программирования высокого уровня. с одной стороны он не намного сложнее паскаляи или фортрана, но с другой обладает возможностями, присущими языкам программирования низкого уровня. поэтому си иногда называют языком программирования среднего уровня и используют как при написании прикладных программ, так и при разработке системных. дальнейшим развитием языка си стали языки си++ и java. к языкам низкого уровня отноятся ассемблер и автокод. ассемблер, как язык низкого уровня, фактически состоит из набора команд данной машины, записанных в виде сокращений на английском языке. автокод- вариант ассемблера на основе русского языка.
17) - Базовые и структурные типы данных, используемые для описания свойств объектов.