Файловые операции
Определение оптимального размера заказа
Неоновые лампы в университете заменяются с интенсивностью 100 штук в день. Подразделение материального обеспечения городка заказывает эти лампы с определенной периодичностью. Стоимость размещения заказа на покупку ламп составляет 100 у.е. Стоимость хранения лампы на складе оценивается в 0,02 у.е. в день для 1 варианта (каждый следующий вариант прибавляет к этому значению 0,005). Срок выполнения заказа от момента его размещения до реальной поставки равен 12 дней.
Задача экономичного размера заказа с разрывами цен
Данная модель отличается тем, что продукция может быть приобретена со скидкой, если объем заказа превышает некоторый фиксированный уровень ; таким образом, стоимость единицы продукции
определяется как
и
. Следовательно
интенсивность спроса
продолжительность цикла заказа.
объем заказа
затраты на хранение
затраты на размещение заказа
Запишем общие затраты в единицу времени следующим образом
Графики функций представлены на рисунке. Так как значения этих функций отличаются только на постоянную величину, то точки минимума совпадают и находятся в точке
График функции затрат , если идти от минимальных значений аргументов, совпадает с графиком функции
до точки
, в которой меняется цена продукции, а затем совпадает с графиком функции
. Рисунок показывает, что определение оптимального объема заказа зависит от того, где находится точка разрыва цены
по отношению к указанным на рисунке зонам I, II, III, которые определены как интервалы
соответственно. Величина
определяется из уравнения
Рисунок показывает, как определяется оптимальное значение .
Алгоритм определения можно сформулировать в следующем виде.
Шаг1. Вычисляем . Если
попадает в зону I, полагаем
В противном случае переходим к шагу 2.
Шаг 2. Находим из уравнения
и определяем зоны II, III. Если
находится в зоне II, полагаем
Иначе
находится в зоне III, тогда
Исходные данные. Автомобильная мастерская специализируется на быстрой замене масла в автомобилях. Мастерская покупает масло в большом количестве по 3 доллара за галлон. Цена может быть снижена до 2,5 долларов при условии, что мастерская покупает более 1000 галлонов. За день в мастерской обслуживается около 150 автомобилей, и на каждый из них для замены требуется 1,25 галлона масла. мастерская хранит на складе большие объемы масла, что обходится в 0,02 доллара в день на 1 галлон. Стоимость размещения заказа на большой объем масла равна 20 долларов. Срок выполнения заказа равен 2 дня. Требуется определить оптимальную стратегию управления запасами.
Рандомизированная модель экономичного размера заказа
В 4.1 был определен экономичный размер заказа. Требуется определить размер резервного запаса таким образом, чтобы вероятность истощения запаса не превышала при условии, что дневной спрос является нормально распределенной случайной величиной с математическим ожиданием = 100 ламп и среднеквадратическим отклонением 10 ламп.
Файловые операции — это действия с файлами, не учитывающие содержания документов. Средства для выполнения таких действий всегда заложены в операционную систему. Основных файловых операций пять:
-создание контейнера в операционной системе Windows файловыми контейнерами являются папки Windows
-копирование файлов между контейнерами;
-перемещение файлов между контейнерами;
-удаление файлов и контейнеров;
-переименование файлов и контейнеров.
Система Windows ХР предоставляет немало средств для выполнения файловых операций. Все они опираются на использование окон папок и программы Проводник. Если вы хотите, чтобы выполнять эти операции было удобно, навсегда забудьте про Проводник, да и про окна папок забудьте тоже.
Единственными окнами Проводника, которыми стоит пользоваться, являются: окно Мой компьютер и окно Панель управления. Первое полезно для просмотра списка носителей и для доступа к настройкам их свойств, а второе является центральным постом всех настроек Windows.
Программа Проводник — чудовищно неудобное и неэффективное средство. Такое творение нельзя создать случайно — его производители ставили перед собой грандиозную цель: создать что-то, отличное от традиционных средств для работы с файлами. Они хотели отличиться — вот и отличились!
Выполняя файловые операции с помощью Проводника, вы столкнетесь с массой неудобств и даже будете периодически совершать ошибки. Разработчиков этой центральной программы Windows совершенно не заботят ваши проблемы, ваш комфорт, ваши задачи. Программа выполнена как демонстрационный пример того, как можно выполнять файловые операции. Но можно — не значит удобно и нужно.
В общем, забудьте про Проводник, про разные способы представления значков файлов в окнах, про типичные приемы работы с файлами, характерные для этой программы. Их использование — это ходьба на протезах при наличии здоровых ног. Да, так работать можно, но это совершенно бессмысленно.
Дата добавления: 2015-05-08 ; Просмотров: 610 ; Нарушение авторских прав?
Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет
Подсистема ввода-вывода. Файловые системы
7.18. Файловые операции
Набор файловых операций
Файловая система ОС должна предоставлять пользователям набор операций для работы с файлами, оформленный в виде системных вызовов. В различных ОС имеются различные наборы файловых операций. Наиболее часто встречающимися системными вызовами для работы с файлами являются [13, 17]:
- Create (создание). Файл создается без данных. Этот системный вызов объявляет о появлении нового файла и позволяет установить некоторые его атрибуты;
- Delete (удаление). Ненужный файл удаляется, чтобы освободить пространство на диске;
- Open (открытие). До использования файла его нужно открыть. Данный вызов позволяет прочитать атрибуты файла и список дисковых адресов для быстрого доступа к содержимому файла;
- Close (закрытие). После завершения операций с файлом его атрибуты и дисковые адреса не нужны. Файл следует закрыть, чтобы освободить пространство во внутренней таблице;
- Read (чтение). Файл читается с текущей позиции. Процесс, работающий с файлом, должен указать (открыть) буфер и количество читаемых данных;
- Write (запись). Данные записываются в файл в текущую позицию. Если она находится в конце файла, его размер автоматически увеличивается. В противном случае запись производится поверх существующих данных;
- Append (добавление). Это усеченная форма предыдущего вызова. Данные добавляются в конец файла;
- Seek (поиск). Данный системный вызов устанавливает файловый указатель в определенную позицию;
- Get attributes (получение атрибутов). Процессам для работы с файлами бывает необходимо получить их атрибуты;
- Set attributes (установка атрибутов). Этот вызов позволяет установить необходимые атрибуты файлу после его создания;
- Rename (переименование). Этот системный вызов позволяет изменить имя файла. Однако такое действие можно выполнить копированием файла. Поэтому данный системный вызов не является необходимым;
- Execute (выполнить). Используя этот системный вызов, файл можно запустить на выполнение.
Рассмотрим примеры файловых операций в ОС Windows 2000 и UNIX . Как и в других ОС, в Windows 2000 есть свой набор системных вызовов, которые она может выполнять. Однако корпорация Microsoft никогда не публиковала список системных вызовов Windows , кроме того, она постоянно меняет их от одного выпуска к другому [17]. Вместо этого Microsoft определила набор функциональных вызовов, называемый Win 32 API ( Win 32 Application Programming Interface ). Эти вызовы опубликованы и полностью документированы. Они представляют собой библиотечные процедуры, которые либо обращаются к системным вызовам, чтобы выполнить требуемую работу, либо выполняют ее прямо в пространстве пользователя.
Философия Win 32 API заключается в предоставлении всеобъемлющего интерфейса, с возможностью выполнить одно и то же требование несколькими (тремя-четырьмя) способами. В ОС UNIX все системные вызовы формируют минимальный интерфейс : удаление даже одного из них приведет к снижению функциональности ОС.
Многие вызовы API создают объекты ядра того или иного типа (файлы, процессы, потоки, каналы и т.д.). Каждый вызов, создающий объект , возвращает вызывающему процессу результат, называемый дескриптором (небольшое целое число ). Дескриптор используется впоследствии для выполнения операций с объектами. Он не может быть передан другому процессу и использован им. Однако при определенных обстоятельствах дескриптор может быть дублирован и передан другому процессу защищенным способом, что предоставляет второму процессу контролируемый доступ к объекту, принадлежащему первому процессу. С каждым объектом ассоциирован дескриптор безопасности, описывающий, кто и какие действия может, а какие не может выполнять с данным объектом.
Основные функции Win 32 API для файлового ввода-вывода и соответствующие системные вызовы ОС UNIX приведены ниже.
Функция Win 32 API | Системные вызовы UNIX | Описание |
CreateFile | open | Создать или открыть файл; вернуть дескриптор файла |
DeleteFile | unlink | Удалить существующий файл |
CloseHandle | close | Закрыть файл |
ReadFile | read | Прочитать данные из файла |
WriteFile | write | Записать данные в файл |
SetFilePointer | lseek | Установить указатель в файле в определенную позицию |
GetFileAttributes | stat | Вернуть атрибуты файла |
LockFile | fcntl | Заблокировать область файла для обеспечения взаимного исключения |
UnlockFile | fcntl | Отменить блокировку области файла |
Аналогично файловым операциям обстоит дело с операциями управления каталогами. Основные функции Win 32 API и системные вызовы UNIX для управления каталогами приведены ниже.
Функция Win 32 API | Системные вызовы UNIX | Описание |
CreateDirectory | mkdir | Создать новый каталог |
RemoveDirectory | rmdir | Удалить пустой каталог |
FindFirstFile | opendir | Инициализация, чтобы начать чтение записей каталога |
FindNextFile | readdir | Прочитать следующую запись каталога |
MoveFile | rename | Переместить файл из одного каталога в другой |
SetCurrentDirectory | chdir | Изменить текущий рабочий каталог |
Способы выполнения файловых операций
Чаще всего с одним и тем же файлом пользователь выполняет не одну, а последовательность операций. Независимо от набора этих операций операционной системе необходимо выполнить ряд постоянных (универсальных) для всех операций действий.
- По символьному имени файла найти его характеристики, которые хранятся в файловой системе на диске.
- Скопировать характеристики в оперативную память, поскольку только в этом случае программный код может их использовать.
- На основании характеристик файла проверить права пользователя на выполнение запрошенной операции.
- Очисть область памяти, отведенную под временное хранение характеристик файла.
Кроме того, каждая операция включает ряд уникальных для нее действий, например, чтение определенного набора кластеров диска, удаление файла , изменение его атрибутов и т.п.
ОС может выполнить последовательность действий над файлами двумя способами (см. рис. рис. 7.22).
- Для каждой операции выполняются как универсальные, так и уникальные действия. Такая схема иногда называется схемой без заполнения состояния операции ( stateless ).
- Все универсальные действия выполняются в начале и конце последовательности операций, а для каждой промежуточной операции выполняются только уникальные действия.
Подавляющее большинство файловых систем поддерживает второй способ, как более экономичный и быстрый. Однако первый способ более устойчив к сбоям в работе системы, так как каждая операция является самодостаточной и не зависит от результата предыдущей. Поэтому первый способ иногда применяется в распределенных сетевых файловых системах, когда сбои из-за потерь пакетов или отказов одного из сетевых узлов более вероятны, чем при локальном доступе к данным.
При втором способе в ФС вводится два специальных системных вызова: open и close. Первый выполняется перед началом любой последовательности операций с файлом, а второй – после окончания работы с файлом.
Основной задачей вызова open является преобразование символьного имени файла в его уникальное числовое имя, копирование характеристик файла из дисковой области в буфер оперативной памяти и проверка прав пользователя на выполнение запрошенной операции . Вызов close освобождает буфер с характеристиками файла и делает невозможным продолжение операций с файлами без его повторного открытия.
Приведем несколько примеров системных вызовов для работы с файлами. Системный вызов create в ОС UNIX работает с двумя аргументами: символьным именем открываемого файла и режимом защиты. Так команда
создает файл abc с режимом защиты, указанным в переменной mode . Биты mode определяют круг пользователей, которые могут получить доступ к файлам, и уровень предоставляемого им доступа. Системный вызов create не только создает новый файл , но также открывает его для записи. Чтобы последующие системные вызовы могли получить доступ к файлу, успешный системный вызов create возвращает небольшое неотрицательное целое число – дескриптор файла – fd . Если системный вызов выполняется с существующим файлом, длина этого файла уменьшается до 0, а все содержимое теряется.
Чтобы прочитать данные из существующего файла или записать в него данные, файл сначала нужно открыть с помощью системного вызова open с двумя аргументами: символьным именем файла и режимом открытия файла (для записи, чтения или того т другого), например
Системные вызовы create и open возвращают наименьший неиспользуемый в данный момент дескриптор файла. Когда программа начинает выполнение стандартным образом, файлы с дескрипторами 0, 1 и 2 уже открыты для стандартного ввода, стандартного вывода и стандартного потока сообщений об ошибках.
В стандарте языка Си отсутствуют средства ввода-вывода. Все операции ввода-вывода реализуются с помощью функций, находящихся в библиотеке языка, поставляемой в составе системы программирования Си . На стандартный поток ввода ссылаются через указатель stdin , вывода – stdout , сообщений об ошибках – stderr . По умолчанию потоку ввода stdin ставится в соответствие клавиатура, а потокам stdout и stderr – экран дисплея.
Для ввода-вывода данных с помощью стандартных потоков в библиотеке Си определены функции:
- getchar ( )/putchar ( ) – ввод-вывод отдельного символа;
- gets ( )/ puts ( ) – ввод-вывод строки;
- scanf ( )/ printf ( ) – ввод-вывод в режиме форматирования данных.
Процесс в любое время может организовать ввод данных из стандартного файла ввода, выполнить символьный вызов:
Аналогично организуется вывод в стандартный файл вывода
При работе в Windows 2000 с помощью функции CreateFile можно создать файл и получить дескриптор к нему. Эту же функцию следует применять и для открытия уже существующего файла, так как в Win 32 API нет специальной функции File Open . Параметры функций, как правило, многочисленны, например, функция CreateFile имеет семь параметров: