Системное программное обеспечение

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

Рубрика Программирование, компьютеры и кибернетика
Вид методичка
Язык русский
Дата добавления 15.02.2012
Размер файла 219,8 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

1.3.3 Иерархия запоминающих устройств. Принцип кэширования данных

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

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

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

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

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

1. Просматривается содержимое кэш-памяти с целью определения, не находятся ли нужные данные в кэш-памяти; кэш-память не является адресуемой, поэтому поиск нужных данных осуществляется по содержимому - значению поля "адрес в оперативной памяти", взятому из запроса.

2. Если данные обнаруживаются в кэш-памяти, то они считываются из нее, и результат передается в процессор.

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

Контрольные вопросы к третьей главе

1. Поясните суть метода распределения памяти фиксированными разделами?

2. Поясните суть метода распределения памяти динамическими разделами?

3. Поясните суть метода распределения памяти перемещаемыми разделами?

4. Что такое сжатие? Каковы недостатки данного метода?

5. Что такое фрагментация оперативной памяти? Какие существуют методы устранения этого недостатка?

6. Какие виды адресов программы Вы знаете?

7. Что такое виртуальное адресное пространство процесса?

8. Что такое виртуальная страница?

9. Что такое физическая страница?

10. Что такое страничное прерывание?

11. Что такое фиктивная область страницы?

12. Что такое таблица страниц? Какая информация там находится?

13. Что такое сегмент процесса?

14. Какую информацию содержит таблица сегментов процесса?

15. Поясните суть метода страничного распределения оперативной памяти?

16. Поясните суть метода сегментного распределения оперативной памяти?

17. Поясните суть метода сегментно-страничного распределения оперативной памяти?

18. Что такое признак модификации страницы? Где сохраняется информация о модификации загруженной в память страницы?

19. По какому алгоритму модифицируемая страница из ОП помещается на жесткий диск?

20. Где хранится информация о размещении таблицы страниц (таблицы сегментов) активного процесса?

21. Где сохраняется контекст прерванного процесса?

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

23. Перечислите виды запоминающих устройств, их характеристики (время записи/считывания, емкость ЗУ)?

24. Какое ЗУ самое "быстрое", самое "медленное"?

25. Оперативная память является энергозависимым или энергонезависимым устройством?

26. Жесткий диск является энергозависимым или энергонезависимым устройством?

27. Что такое кэш-память? Каков алгоритм работы операционной системы при использовании кэш-памяти?

28. В чем преимущества работы вычислительной машины при использовании кэш-памяти?

1.4 Файловая система

1.4.1 Имена файлов, типы файлов

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

1) совокупность всех файлов на диске;

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

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

Файлы идентифицируются именами. Пользователи дают файлам символьные имена, при этом учитываются ограничения ОС как на используемые символы, так и на длину имени. Так в популярной файловой системе FAT длина имен ограничивалась схемой 8.3 (8 символов - собственно имя, 3 символа - расширение имени), а в ОС UNIX System V имя не может содержать более 14 символов. Однако пользователю гораздо удобнее работать с длинными именами. Современные файловые системы, как правило, поддерживают длинные символьные имена файлов (до 255 символов, не считая завершающего нулевого символа).

Файлы бывают разных типов: обычные файлы, специальные файлы, файлы-каталоги.

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

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

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

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

Каталоги могут непосредственно содержать значения характеристик файлов, как это сделано в файловой системе MS-DOS, или ссылаться на таблицы, содержащие эти характеристики, как это реализовано в ОС UNIX. Каталоги могут образовывать иерархическую структуру за счет того, что каталог более низкого уровня может входить в каталог более высокого уровня. Иерархия каталогов может быть деревом или сетью. Каталоги образуют дерево, если файлу разрешено входить только в один каталог, и сеть - если файл может входить сразу в несколько каталогов. В MS-DOS каталоги образуют древовидную структуру, а в UNIX'е - сетевую.

1.4.2 Логическая организация файла

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

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

Для идентификации записи может быть использовано специальное поле записи, называемое ключом. Ключи могут включаться в запись, могут входить в специальную индексную таблицу. Индексная таблица может храниться в специальном индексном файле. В файловых системах ОС UNIX и MS-DOS файл имеет простейшую логическую структуру - последовательность однобайтовых записей.

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

1.4.3 Физическая организация и адрес файла

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

Следующий способ физической организации - размещение в виде связанного списка блоков дисковой памяти. При таком способе в начале каждого блока содержится указатель на следующий блок. В этом случае адрес файла также может быть задан одним числом - номером первого блока. В отличие от предыдущего способа, каждый блок может быть присоединен в цепочку какого-либо файла, следовательно, фрагментация отсутствует. Файл может изменяться во время своего существования, наращивая число блоков. Недостатком является сложность реализации доступа к произвольно заданному месту файла. Кроме того, при этом способе количество данных файла, содержащихся в одном блоке, не равно степени двойки (одно слово израсходовано на номер следующего блока), а многие программы читают данные блоками, размер которых равен степени двойки. Популярным способом, используемым, например, в файловой системе FAT операционной системы MS-DOS, является использование связанного списка индексов. С каждым блоком связывается некоторый элемент - индекс. Индексы располагаются в отдельной области диска (в MS-DOS это таблица FAT). Если некоторый блок распределен некоторому файлу, то индекс этого блока содержит номер следующего блока данного файла.

Пример организации FAT представлен на рисунке 4.1.

Адрес кластера диска (последовательная нумерация всех кластеров диска)

Адрес кластера диска (адрес продолжение размещения файла на диске)

Пояснение

0

x

занято

1

x

занято

2

x

занято

3

5

файл 1

4

6

файл 2

5

7

файл 1

6

8

файл 2

7

end

файл 1

8

end

файл 2

Рисунок 4.1 - Пример информации в FAT

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

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

во-вторых, данные файла занимают блок целиком, а, значит, имеют объем, равный степени двойки.

Другой способ - задание физического расположения файла путем простого перечисления номеров блоков, занимаемых этим файлом. ОС UNIX использует вариант данного способа, позволяющий обеспечить фиксированную длину адреса, независимо от размера файла. Для хранения адреса файла выделено 13 полей. Если размер файла меньше или равен 10 блокам, то номера этих блоков непосредственно перечислены в первых десяти полях адреса. Если размер файла больше 10 блоков, то следующее 11-е поле содержит адрес блока, в котором могут быть расположены еще 128 номеров следующих блоков файла. Если файл больше, чем 10+128 блоков, то используется 12-е поле, в котором находится номер блока, содержащего 128 номеров блоков, которые содержат по 128 номеров блоков данного файла. И, наконец, если файл больше 10 + 128 + 128 * 128, то используется последнее 13-е поле для тройной косвенной адресации, что позволяет задать адрес файла, имеющего размер максимум 10 + 128 + 128 * 128 + 128 * 128 * 128.

Современные ФС Unix-систем используют более чем 128 адресов (1024).

1.4.4 Права доступа к файлу

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

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

Различают два основных подхода к определению прав доступа:

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

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

1.4.5 Кэширование диска

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

1.4.6 Общая модель файловой системы

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

Задачей символьного уровня является определение по символьному имени файла его уникального имени. В файловых системах, в которых каждый файл может иметь только одно символьное имя (например, MS-DOS), этот уровень отсутствует, так как символьное имя, присвоенное файлу пользователем, является одновременно уникальным и может быть использовано операционной системой. В других файловых системах, в которых один и тот же файл может иметь несколько символьных имен, на данном уровне просматривается цепочка каталогов для определения уникального имени файла. В файловой системе UNIX, например, уникальным именем является номер индексного дескриптора файла (i-node).

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

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

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

Например, если файл организован как последовательность логических записей фиксированной длины l, то n-ая логическая запись имеет смещение l((n-1) байт. Для определения координат логической записи в файле с индексно-последовательной организацией выполняется чтение таблицы индексов (ключей), в которой непосредственно указывается адрес логической записи.

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

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

1.4.7 Современные архитектуры файловых систем

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

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

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

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

1.4.8 Системные вызовы операций ввода-вывода

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

СИСТЕМНЫЙ ВЫЗОВ ОРЕN

Системный вызов ореn (открыть файл) имеет следующий формат:

#include <sys/file.h>

char *name;

int flags, mode;

open(name, flags, mode)

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

0_RDONLY - открыть только для чтения.

0_WRONLY -открыть только для записи.

0_RDWR - открыть для чтения и записи.

0_NDELAY - не блокировать при открытии. Если операция открытия задерживается по каким-либо причинам, например, при отсутствии готовности линии связи, процесс не приостанавливается. Возвращается код ошибки.

0_АРРЕND - открыть для дозаписи. Обычно, при открытии файла, указатель текущей позиции чтения/записи устанавливается на его начало, но, если задан режим 0_АРРЕND, этот указатель устанавливается на конец файла.

0_СRЕАТ - создать файл, если он не существует.

0_TRUNC - сократить размер файла. В режиме 0_ТRUNC, если указанный файл существует, его размер усекается до нуля.

0_ЕХСL - выдавать ошибку при попытке создания существующего файла. (Этот признак используется в сочетании с признаком 0_СRЕАТ). Режим может применяться для организации простого механизма блокировки.

В случае успешного завершения вызова Ореn, возвращается дескриптор открытого файла, иначе - значение -1 и в переменную еrrnо записывается код ошибки.

При неудачном завершении, переменная еrrnо может принимать следующие значения:

[ЕNOTDIR] - указанное имя, содержит компоненту, которая^ не является справочником;

[ЕNOENT] - указанный файл не существует и режим 0_СRЕАТ не был определен;

[ЕРЕКМ] - указанное имя содержит символ, отсутствующий в коде АSCП*);

[ЕLООР] - число косвенных ссылок в указанном имени превышает максимально допустимое значение;

[ЕROFS] - указанный файл содержится в файловой системе закрытой по записи и не может быть модифицирован;

[ЕTXTBSY] - попытка открыть на запись файл, содержащий загрузочный модуль выполняющейся реентерабельной программы;

[ЕАССЕS] - режим доступа указанного файла не соответствует

запросу;

[ЕFAULТ] - адрес параметра системного вызова выходит за границы адресного пространства процесса;

[ЕISDIR] Попытка открыть на запись справочник;

[ЕМFILЕ] - переполнена таблица дескрипторов открытых файлов процесса;

[ЕNXIO] - указанный файл является внешним устройством, которое в данный момент не готово к работе;

Примечание. В ранних версиях операционной системы Unix (Unix 6, Unix 7) системный вызов oреn имел следующий формат:

сhar *name;

int flags;

int ореn(name, flags)

Файл с именем name должен существовать к моменту его открытия. Режим открытия файла flags может принимать следующие значения:

0 - файл открывается для чтения;

1 - файл открывается для записи;

2 - файл открывается для чтения и записи.

СИСТЕМНЫЙ ВЫЗОВ СRЕАT

Системный вызов сrеаt (создать файл) имеет следующий формат:

сhar *name;

int mode;

сreat(name,mode)

Функция сгеаt создает новый (или подготавливает к повторной записи уже существующий) файл с именем name. Если файл еще не существует, значение параметра mode используется для формирования режимов доступа создаваемого файла, при этом учитывается значение маски режимов процесса. Значение параметра mode составляется по правилам, приведенным в описание системного вызова chmod. Если указанный файл существует, то его владелец и режим доступа остаются прежними, а файл усекается до нулевой длины. Кроме того, файл открывается для записи и возвращается его дескриптор. При неудачном завершении, операции сгеаt возвращается значение -1, в остальных случаях возвращается дескриптор открытого файла (целое положительное число). После неудачного завершения системного вызова сгеаt переменная еrrnо может принимать следующие значения:

[ЕNOTDIR] - указанное имя содержит компоненту, которая не является справочником;

[ЕNOENТ] - задано слишком длинное или пустое имя файла, или указанный файл не существует или какой-либо из справочников, входящих в имя файла, не доступен для просмотра;

[ЕРЕКМ] - указанное имя содержит символ, отсутствующий в коде АSСП;

[ELООР] - число косвенных ссылок в указанном имени превышает максимально допустимое значение;

[ЕROFS] - попытка создания файла в файловой системе, закрытой на запись;

[ЕТХТВSУ] - попытка сократить длину файла, содержащего загрузочный модуль реентерабельной программы (разделяемый текстовый сегмент), которая в настоящей момент выполняется;

[ЕАССЕS] - режим доступа указанного файла не соответствует запросу;

[ЕFAULТ] - адреса аргументов системного вызова выходят за границы памяти, доступной данному процессу;

[ЕISDIR] - указанное имя файла является именем справочника;

[ЕМFILЕ] - переполнилась таблица открытых файлов процесса;

[ЕNXIO] - указано имя специального файла, для которого нет соответствующего устройства.

Параметр mode задается произвольно, в нем не обязательно должно быть разрешение на запись. Эта возможность используется программами, которые работают с временными файлами с фиксированными именами. Создание производится с режимом, запрещающим запись. Затем, если другая программа пытается выполнить вызов сгеаt, возвращается ошибка и программе становится известно, что в данный момент это имя использовать нельзя. Все действия, перечисленные для вызова сгеаtе, можно выполнить с помощью системного вызова ореn. Вызов сгеаtе оставлен для совместимости с ранними версиями ОС Unix.

СИСТЕМНЫЙ ВЫЗОВ READ

Системеный вызов геаd (чтение файла) имеет следующий формат:

char *buf;

int fd, nbytes;

read (fd, buf, nbytes)

Системный вызов read обеспечивает считывание nbytes данных в массив buf из файла с дескриптором fd. Информация читается из файла по текущему указателю позиции чтения/записи. После завершения пересылки данных значение указателя увеличивается на число считанных байт. Для некоторых файлов значение указателя позиции чтения/записи не имеет смысла (например, для терминала), тем не менее, данные передаются. При успешном завершении вызова, возвращается число считанных байт, в случае ошибки - значение -1, при достижении конца файла в процессе чтения - число 0.

При возникновении ошибки чтения, переменная еrrnо может принимать следующие значения:

[ЕВАDF] - указанный дескриптор не является дескриптором файла, открытого для чтения;

[ЕFAULТ] - адрес параметра системного вызова не входит в адресное пространство процесса;

[ЕINTR] - чтение с медленного устройства прервано до передачи данных.

СИСТЕМНЫЙ ВЫЗОВ WRITE

Системный вызов write (запись в файл) имеет следующий формат:

char *buf;

int fd, nbytes;

write (fd, buf, nbytes)

Системный вызов write записывает nbytes данных из массива buf в файл с дескриптором fd. Информация записывается в файл по текущему указателю позиции чтения/записи. После завершения пересылки данных, значение указателя увеличивается на число записанных байт.'Для некоторых файлов значение указателя позиции чтения/записи не имеет смысла, (например, для терминала), тем не менее данные передаются.

Если статус файла, в который записывается информация, содержит признак set-UID и процесс работает в непривилегированном режиме, данный признак удаляется (в целях защиты информации).

При успешном завершении вызова возвращается число записанных байт, в случае ошибки - значение -1.

При возникновении ошибки, переменная еrrnо может принимать следующие значения:

[ЕВАDF] - указанный дескриптор не является дескриптором файла, открытого для записи;

[ЕРIРЕ] - попытка записи в программный канал, который никто не читает;

[ЕРIРЕ] - запись в файл типа "гнездо" в режиме S0СК_SТRЕАМ, при отсутствии соединения;

[ЕFВIG] - при записи в файл превышается допустимый размер файла;

[ЕFAULТ] - адрес параметра системного вызова не входит в адресное пространство процесса.

СИСТЕМНЫЙ ВЫЗОВ СLOSE

Системный вызов сlose (закрыть файл) имеет следующий формат:

int fd; аns;

аns = сlоsе (fd)

Системный вызов сlosе удаляет дескриптор fd из таблицы дескрипторов открытых файлов процесса. Если удаленный дескриптор был последним ссылающимся на данный файл, то весь контекст работы с файлом теряется. Для обычного файла это указатель позиции чтения/записи и режим блокировки. Хотя, при завершении процесса, все открытые им файлы автоматически закрываются, число одновременно открытых файлов ограничено, поэтому данный вызов может оказаться необходимым для программ, работающих с большим количеством файлов.

При порождении нового процесса (см описание вызова fork) все его дескрипторы указывают на те же объекты, что и дескрипторы процесса-предка. После выполнения вызова ехесvе в порожденном процессе, новая программа также наследует все активные дескрипторы. Для того, чтобы сделать недоступными новой программе уже открытые файлы, соответствующие дескрипторы можно переопределить с помощью dup2 или удалить с помощью системного вызова unlink. Однако бывают ситуации, в которых уже открытые файлы могут потребоваться при неудачном завершении системного вызова execvе. В таких случаях, применение вызова fcntl обеспечивает закрытие определенных файлов после успешного старта новой программы.

В случае успешного завершения, системный вызов с1оsе возвращает значение 0, иначе - значение -1 и код ошибки в переменной еrrnо.

Код ошибки:

[ЕВАDF] - указанный дескриптор не является дескриптором открытого файла.

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

#include <sys/file.h>

##include <stdio.h>

main(argc, argv)

int argc;

char *argv[];

{

int fd1, fd2;

int nbytes, mode;

char buf[BUFSIZ];

if (argc<3) {

fprintf (stderr, “%s: Неправильное количество параметров\n”, argv[0]);

exit(1);

}

/* Открываем первый файл для чтения */

if (fd1 = open(argv[1], 0_RDONLY)<0) {

fprintf (stderr, “Не могу открыть файл%s\n”, argv[1]);

exit (1); }

/* Создаем новый файл для записи */

if (fd2 = open(argv[2], 0_WRONLY | O_CREAT, mode)<0)

{ fprintf (stderr, “Не могу создать файл%s\n”, argv[2]);

exit (1);

}

/*Считываем BUFSIZ байт в массив buf */

while(nbytes = read(fd1, buf, BUFSIZ)<0) {

/* Записываем во второй файл из массива buf nbytes байт */

if (write(fd2, buf, nbytes)<0) {

fprintf (stderr, “Ошибка записи \n”); break;

} }

if(nbytes<0) fprintf (stderr, “Oшибка чтения\n”);

/* Закрываем оба файла */

close (fd1);

close (fd2);

exit(0);

}

СИСТЕМНЫЙ ВЫЗОВ LSЕЕK

Системный вызов lsееk (установка указателя чтения/записи) имеет следующий формат:

#define L_SЕТ 0 /*установка */

# define L_INCR 1 /* смещение */

# define L_ХТND 2 /*увеличение размера файла*/

long lseek (fd, offset, whence)

int fd, whence;

long offset;

Системный вызов lsееk изменяет значение указателя позиции чтения/записи дескриптора fd следующим образом: если значение параметра whence равно L_SЕТ, то указателю присваивается значение параметра, если значение параметра whence равно L_INCR, значение указателя увеличивается.на значение offset, если значение параметра whence равно L_XTND, то указателю присваивается значение (offset + fsize), где fsize- размер файла. Следует отметить, что если установить указатель текущей позиции за конец файла, а затем записать что-либо, в файле получается промежуток, который физически не занимает места, а при чтении дает нули.

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

[ЕВАDF] - некорректный дескриптор файла;

[ЕSРIРЕ] - дескриптор относится не к файлу, а к программному каналу или файлу типа "гнездо";

[ЕINVAL] - недопустимое значение параметра.

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

#define L_SET 0

/* Поместить запись в файл */

putrecord (fd, rec, pos, size)

int fd; /* дескриптор открытого файла */

char *rес; /* содержимое записи */

long роs; /* положение в файле */

unsigned size; /* размер записи */

{

if (lseek (fd, pos, L_SET)<0) return (-1);

write (fd, rec,size);

return (0);

}

/* Извлечь запись иэ файла */

char *getrecord (fd, rec, pos, size)

int fd;

char *rec;

long pos;

unsigned size;

{ if (lseek (fd, pos, L_SET)<0) return ((char *)0);

read (fd, rec, size);

return (rec); }

СИСТЕМНЫЙ ВЫЗОВ UMASK

Системный вызов umask (установка маски режима доступа процесса) имеет следующий формат:

int oldmask, newmask;

oldmask =umask (newmask)

Системный вызов umask устанавливает текущему процессу маску режима доступа, которая используется при создании файлов. В качестве этой маски используются младшие 9 бит значения параметра newmask. При создании нового файла его режим доступа получается путем логического умножения значения маски и значения соответствующего параметра системного вызова (сrеаt, mknod, oреn). Например, если было указано значение 022, то все создаваемые файлы будут открыты по записи только для владельца. Значение маски режимов доступа наследуется всеми потомками данного процесса. Данные системный вызов возвращает прежнее значение маски.

СИСТЕМНЫЕ ВЫЗОВЫ DUP И DUP2

Системные вызовы dup и dup2 (дублировать дескриптор открытого файла) имеют форматы:

int old_fd;

int dup (old_fd);

int new_fd, old_fd;

int dup2 (old_fd, new_fd)

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

Системные вызовы read, write и lseek изменяют значение указателя позиции чтения/записи независимо от того, какой из дескрипторов использовался. Для получения "независимого" дескриптора необходимо заново открыть' файл с помощью вызова open.

Во второй из приведенных форм системного вызова, значение нового дескриптора задается явно. Если данный дескриптор ухе содержит ссылку на какой-либо открытый файл, этот файл закрывается посредством функции с1оsе.

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

[ЕВАDF] - некорректное значение параметров;

[ЕМFILE] - переполнена таблица открытых файлов процесса.

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

# include <stdio.h>

main (argc, argv)

char *argv[ ];

{

int fd;

extern int errno;

if (arg<2)

{

fprintf (stderr, “No file\n”);

exit (1);

}

/* Создаем файл с указанным именем */

if (fd=creat(arg[1], 0777)<0)

{

fprintf (stderr, “Cannot creat file %s\n, argv [1]);

exit (1);

}

/* Порождаем новый процесс */

switch (fork ())

{

case -1: /* ошибка */

fprintf (stderr, “Fork error\n”);

exit (1);

case 0: /* процесс сын */

close (1); /* Закрываем стандартный вывод */

dup (fd); /* Дублируем дескриптор fd */

close (fd); /* Закрываем дескриптор fd*/

/* Теперь дескриптор 1 указывает на созданный ранее файл. Запускаем команду ls без аргументов, т.е. просматриваем текущий справочник. Результат будет выводиться не на экран дисплея, а в файл */

execl (“/bin/ls”, “ls”, 0);

perror (“Exec”); /* Если ошибка */

break;

default: /* процесс отец */

wait (0); /* ждем завершения потомка */

close (fd);

}

exit (0);

}

СИСТЕМНЫЙ ВЫЗОВ PIPE

Системный вызов pipe (создание программного канала) имеет следующий формат:

int fd [2];

pipe (fd)

Системный вызов рiре реализует механизм ввода-вывода, называемый программным каналом ("рiре").

Возвращаемые по завершению этого вызова дескрипторы файлов можно использовать в операциях чтения и записи данных. Для записи по программному каналу используется дескриптор fd[1]. Прежде, чем записывающий процесс приостановится, в буфер загружается до 4096 байтов данных. Эти данные могут быть считаны с использованием дескриптора fd[0]. Предполагается, что после создания программного канала, два (или более) взаимодействующих процесса, создаваемых последующими вызовами fork, будут обмениваться данными по программному каналу с помощью системных вызовов геаd и write.

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

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

В случае успешного завершения, системный вызов рiре возвращает значение 0, иначе - значение -1 и код ошибки в переменной еrrnо. Если в цикле работы конвейера команд по какому-нибудь программному каналу будет произведена попытка считать более 4096 байтов, произойдет взаимная блокировка процессов.

Приведенная ниже программа иллюстрирует применение системного вызова pipe.

# include <stdio.h>

main (argc, argv)

char *argv[ ];

{

int fd [2], pid, status;

if (argc>1) arg=argv[1];

if (pipe (fd)<0)

{

/* Создание программного канала */

fprintf (stderr, “Pipe error\n”);

exit (1);

}

if (pid=fork()<0)

{

/* Порождение нового процесса */

fprintf (stderr, “Fork error\n”);

exit(1);

}

if (pid>0) {

/* Родительский процесс */

/* Перенаправление стандартного ввода в программный канал */

close (fd[0]);

close (1);

dup (fd[1]);

execl(“/bin/ls”, “ls”, “\”, 0); /* Запуск команды ls */

}

}

Контрольные вопросы к четвертой главе

1. Назовите основные компоненты файловой системы.

2. Перечислите способы сохранения данных внутри файла.

3. Что такое логическая запись?

4. Какие виды логических записей Вы знаете?

5. Как вычисляется адрес конкретной записи при использовании логических записей фиксированной величины?

6. Что такое файлы прямого доступа?

7. Что такое файлы последовательного доступа?

8. С какой целью разработаны индексные файлы, индексно-последовательные файлы?

9. Какие операционные системы используют способ сохранения данных в виде неструктурированной последовательности байт?

10. Охарактеризуйте алгоритм сохранения данных на диске в виде непрерывной области.

11. Охарактеризуйте алгоритм сохранения данных на диске в виде связанной списковой структуры.

12. Охарактеризуйте алгоритм сохранения данных на диске при использовании простого перечисления адресов кластеров диска. Где находится эта информация при сохранении файла?

13. Перечислите уровни многоуровневой файловой системы. Охарактеризуйте их.

14. Что такое FAT? Какая используется разрядность FAT?

15. Какой объем диска позволяет поддерживать FAT32?

16. Какая информация о файле хранится в каталоге: а) фс vfat; б) фс ext3.

17. Какая информация хранится в системной области диска: а) Windows; б) ОС семейства Unix.

18. Какие системные вызовы работы с файлами Вы знаете? Приведите примеры.

1.5 Управление вводом-выводом

1.5.1 Физическая организация устройств ввода-вывода

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

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

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

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

ОС выполняет ввод-вывод, записывая команды в регистры контроллера. Например, контроллер гибкого диска IBM PC принимает 15 команд, таких как READ, WRITE, SEEK, FORMAT и т.д. Когда команда принята, процессор оставляет контроллер и занимается другой работой. При завершении команды контроллер организует прерывание для того, чтобы передать управление процессором операционной системе, которая должна проверить результаты операции. Процессор получает результаты и статус устройства, читая информацию из регистров контроллера.

1.5.2 Организация программного обеспечения ввода-вывода

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

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

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

Для решения проблем ввода-вывода целесообразно разделить программное обеспечение ввода-вывода на четыре слоя:

­ обработка прерываний;

­ драйверы устройств;

­ независимый от устройств слой операционной системы;

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

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

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

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

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

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

Независимый от устройств слой операционной системы

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

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

­ обеспечение общего интерфейса к драйверам устройств,

­ именование устройств,

­ защита устройств,

­ обеспечение независимого размера блока,

­ буферизация,

­ распределение памяти на блок-ориентированных устройствах,

­ распределение и освобождение выделенных устройств,

­ уведомление об ошибках.

Пользовательский слой программного обеспечения

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

count = write (fd, buffer, nbytes),

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

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


Подобные документы

  • Эволюция и классификация ОС. Сетевые операционные системы. Управление памятью. Современные концепции и технологии проектирования операционных систем. Семейство операционных систем UNIX. Сетевые продукты фирмы Novell. Сетевые ОС компании Microsoft.

    творческая работа [286,2 K], добавлен 07.11.2007

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

    реферат [73,1 K], добавлен 04.06.2010

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

    курсовая работа [36,4 K], добавлен 08.01.2011

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

    презентация [15,9 K], добавлен 06.01.2014

  • Основные методы описания синтаксиса языков программирования: формальные грамматики, формы Бэкуса-Наура и диаграммы Вирта. Разработка алгоритма решения задачи. Лексический и синтаксический анализатор, семантический анализ. Структурная организация данных.

    курсовая работа [680,1 K], добавлен 12.06.2011

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

    учебное пособие [1,2 M], добавлен 24.01.2014

  • Виды системного программного обеспечения. Функции операционных систем. Системы управления базами данных. Классификация СУБД по способу доступа к базе данных. Инструментальные системы программирования, обеспечивающие создание новых программ на компьютере.

    реферат [22,1 K], добавлен 27.04.2016

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

    реферат [59,4 K], добавлен 18.12.2013

  • Основные классификации операционных систем. Операционные системы семейства OS/2, UNIX, Linux и Windows. Разграничение прав доступа и многопользовательский режим работы. Пользовательский интерфейс и сетевые операции. Управление оперативной памятью.

    реферат [22,8 K], добавлен 11.05.2011

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

    реферат [20,2 K], добавлен 01.04.2010

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.