КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Вазиева А.Р., Шулаева М.В
Работа с файлами. Файлы, отображаемые в память.Win32 API содержит традиционный набор функций для работы с файлами, который обычно имеют все сколько-нибудь развитые операционные системы. Методика работы с файлами этими средствами также стандартна. Файлы, отображаемые в память. Многие алгоритмы работы с данными разработаны в предположении, что обрабатываемые данные представляют собой массив в ОЗУ компьютера. Иногда возникает необходимость применения этих алгоритмов к данным, хранящимся в файлах. Если при этом следовать стандартной методике работы с файлами, описанной выше, то придётся либо существенно переработать алгоритм, либо согласиться с серьёзной потерей производительности. Как уже было сказано, программа читает и записывает данные блоками. Чем больше мелких блоков должна переместить на диск или с диска программа, тем медленнее идёт обработка, ведь для каждого блока должен пройти вызов API, а при чтении/записи блока каждый раз выполняется обращение к диску, которое занимает относительно много времени. Кэширование диска частично оптимизирует эти операции, но полностью исключить лишние обращения к диску не может. Для того, чтобы программа могла применять к файлам в точности те же алгоритмы, что и к массивам в ОЗУ, ОС может предоставлять программам возможность работы с файлами, отображаемыми в память. Это не какой-то особый вид файлов, это просто другая методика работы с теми же самыми файлами. С помощью одного или нескольких вызовов функций API программа может потребовать от ОС после открытия файла отобразить этот файл на адресное пространство программы. При этом ОС возвращает программе некоторый адрес в памяти. Затем программа может обращаться к блоку памяти, начинающемуся по указанному адресу и имеющего размер, соответствующий размеру файла. При этом все операции чтения и записи памяти в пределах этого блока будут фактически приводить к чтению или записи данных в открытый файл. Операции чтения и записи на диск при этом выполняет сама ОС, причём специальные программные модули обеспечивают оптимизацию этого процесса с целью минимизировать обмен данными с диском. Используя файлы, отображаемые в память, программа может работать с файлом с помощью тех же алгоритмов, что и с областью памяти. Более того, если в программе уже имеется ранее откомпилированный модуль, реализующий нужный алгоритм для данных в ОЗУ, его можно безо всяких изменений и без перекомпиляции использовать для работы с данными в файле.
Win32 предполагает, что каждый процесс имеет своё отдельное адресное пространство размером 4 Гб. Это адресное пространство делится на регионы. Адресное пространство делится на четыре региона. · Адреса 00000000 – 0000FFFF – регион размером 64 Кб, предназначенный для выявления пустых указателей. Обращение из программы по любому адресу в этом регионе приведёт к возникновению ошибки GPF (General Protection Fault) – общей ошибки защиты. Известно, что одной из наиболее частых и наиболее труднообнаруживаемых ошибок в программах является обращение в память по неправильному адресу. Такая ошибка может произойти, например, если не инициализирована (или неверно инициализирована) переменная-указатель. Попытка обращения в память по этому указателю может привести к непредсказуемым последствиям. Как правило, пустой (неинициализированный) указатель содержит адрес в диапазоне от 0000 до FFFF или от 7FFF0000 до 7FFFFFFF. Поэтому система просто запрещает обращение по этим адресам, в результате чего на ошибки такого рода следует немедленная реакция. · Адреса 00010000 – 7FFEFFFF – регион размером 2Гб минус 64 Кб, собственная память процесса. В этот регион проецируется сама программа (код программы из exe-файла), все её данные, все блоки памяти, выделяемые программе для работы, все ресурсы. В этот же регион проецируются системные динамические библиотеки и объекты ядра. В Windows NT процесс имеет право обращаться к памяти только в этом регионе. Регион полностью защищён от попыток обращения из других процессов. · Адреса 7FFF0000 –7FFFFFFF – регион для выявления пустых указателей. Регион, аналогичный ранее рассмотренному региону 00000000 – 0000FFFF.
Для того чтобы использовать данные, находящиеся в файле на внешнем носителе, либо сохранить результаты работы программы в файле, программа должна, прежде всего, выполнить операцию открытия файла. Открытие файла выполняется с помощью вызова функции API CreateFile. Необходимо понимать, что файл для Win32 – это объект ядра. Поэтому смысл функции CreateFile состоит именно в создании объекта ядра «файл». Заголовок функции CreateFile выглядит следующим образом. function CreateFile(lpFileName: PChar; dwDesiredAccess, dwShareMode: DWORD; lpSecurityAttributes: PSecurityAttributes; dwCreationDisposition, dwFlagsAndAttributes: DWORD; hTemplateFile: THandle): THandle; stdcall;
lpFileName – имя файла. Если имя не содержит полного пути, то файл будет открыт только в том случае, если он находится в текущем каталоге. dwDesiredAccess – способ доступа к файлу. Может принимать значения GENERIC_READ (доступ на чтение), GENERIC_WRITE (доступ на запись) и 0 (доступ, без права чтения или записи, используется только для проверки атрибутов файла), а также быть комбинацией этих значений, объединённых операцией OR. dwShareMode – режим совместного доступа к файлу. Может принимать значения FILE_SHARE_READ (разрешено открытие файла другим приложением на чтение), FILE_SHARE_WRITE (разрешено открытие файла на запись) или FILE_SHARE_DELETE (разрешено удаление, доступно только в Windows NT). lpSecurityAttributes – указатель на структуру атрибутов защиты, обычно nil, в Windows 95 этот параметр не используется. dwCreationDisposition – параметр, определяющий требуемую операцию (открытие существующего файла или его создание) и действия, которые должны быть произведены, если файл существует и если файл не существует. Возможны значения: CREATE_NEW (создаётся новый файл, а если файл уже существует, то выполнение функции заканчивается ошибкой), CREATE_ALWAYS (создаётся новый файл, либо существующий файл открывается и обрезается до нулевой длины), OPEN_EXISTING (открывается существующий файл, если файла нет, то происходит ошибка), OPEN_ALWAYS (существующий файл открывается, а если его нет, то он создаётся пустым). TRUNCATE_EXISTING (существующий файл открывается и обрезается до нулевой длины, если файл не существует, то происходит ошибка). dwFlagsAndAttributes – набор флагов, устанавливающих атрибуты файла и влияющих на работу с ним. Используются атрибуты: FILE_ATTRIBUTE_ARCHIVE (устанавливается атрибут «архивный файл»), FILE_ATTRIBUTE_COMPRESSED (устанавливается атрибут «сжатый файл», под Windows NT он влияет на способ хранения данных), FILE_ATTRIBUTE_HIDDEN (атрибут «скрытый файл»), FILE_ATTRIBUTE_NORMAL (сбрасываются все прочие атрибуты файла, этот параметр не может использоваться в комбинации с другими), FILE_ATTRIBUTE_OFFLINE (атрибут указывает на то, что в данный момент данные, находящиеся в файле, физически недоступны), FILE_ATTRIBUTE_READONLY (атрибут «файл только для чтения»), FILE_ATTRIBUTE_SYSTEM (атрибут «системный файл»), FILE_ATTRIBUTE_TEMPORARY (атрибут «временный файл», указывает системе на то, что данные записываются в файл для временного хранения, поэтому необходимо по возможности не сбрасывать их на диск, а держать в оперативной памяти). Кроме того, могут использоваться флаги: FILE_FLAG_WRITE_THROW (указывает на то, что данные, записываемые в файл, должны сбрасываться ОС на диск немедленно, а не оставаться в кэше для отложенной записи), FILE_FLAG_OVERLAPPED (указывает на то, что с данным файлом возможно выполнение одновременно нескольких операций чтения и записи, ввиду чего осуществляющие эти операции фрагменты программы должны следовать некоторым специальным правилам), FILE_FLAG_NO_BUFFERING (требует от ОС не выполнять с данным файлом операции чтения/записи без промежуточной буферизации; в специальных случаях может повысить эффективность, но накладывает дополнительные ограничения на порядок работы с файлом), FILE_FLAG_DELETE_ON_CLOSE (указывает, что ОС должна удалить файл немедленно после его закрытия всеми приложениями, которые его открыли), FILE_FLAG_RANDOM_ACCESS (сообщает ОС, что программа будет работать с файлом в режиме произвольного доступа), FILE_FLAG_SEQUENTIAL_ACCESS (сообщает ОС, что приложение будет читать/записывать файл в последовательном режиме, строго от начала к концу). Последние два флага используются для оптимизации кэширования файла. ОС выбирает режим кэширования в зависимости от предполагаемого режима доступа. Указание одного этих из флагов не накладывает никаких ограничений на режим доступа программы к файлу, но если режим доступа не будет соответствовать установленному флагу, то скорость работы с файлом будет несколько меньше. Кроме того, имеются ещё два редко используемых флага, которые мы не будем рассматривать. hTemplateFile – хэндл файла, атрибуты и флаги которого будут скопированы и использованы при открытии нового файла. Файл, хэндл которого указывается, должен быть открыт на чтение или на чтение и запись. Параметр может использоваться, когда нужно открыть несколько файлов с совпадающими наборами атрибутов. Если параметр не используется, нужно передать вместо него нуль. Функция CreateFile возвращает хэндл открытого файла. Если файл открыт корректно, то функция GetLastError, вызванная непосредственно после CreateFile, вернёт значение ERROR_SUCCESS, в противном случае – вернёт код ошибки. После завершения работы с файлом приложение должно закрыть файл, вызвав функцию API CloseHandle с одним параметром - хэндлом открытого ранее файла. Если приложение не закроет файл, то файл будет автоматически закрыт по завершении этого приложения. Win32 API предоставляет программисту возможность использовать файлы, отображаемые в память. Эта возможность реализуется через объекты ядра FileMapping. Хотя в Win32 имеются более традиционные средства работы с файлами, именно FileMapping является наиболее быстрым и наиболее оптимальным способом работы с данными на внешних носителях. Для создания объекта «проецируемый файл» необходимо вызвать функцию CreateFileMapping. function CreateFileMapping(hFile: THandle; lpFileMappingAttributes: PSecurityAttributes; flProtect, dwMaximumSizeHigh, dwMaximumSizeLow: DWORD; lpName: PChar): THandle; stdcall;
hFile – хэндл ранее открытого файла, который проецируется в память. Если в качестве хэндла передаётся шестнадцатеричное значение FFFFFFFF, то объект связывается не с физическим файлом на диске, а с группой страниц страничного файла ОС, то есть происходит просто резервирование памяти, не связанной с каким-либо конкретным файлом. lpFileMappingAttributes – указатель на структуру параметров защиты, обычно nil, в Windows 95 игнорируется. flProtect – набор объединённых операцией OR флагов. Поддерживаются флаги: PAGE_READONLY (данные в спроецированном файле будут доступны только для чтения), PAGE_READWRITE (данные будут доступны на чтение и запись), PAGE_WRITECOPY (данные будут доступны на чтение и запись, но при записи изменённые данные будут попадать на специально созданные дополнительные копии изменённой страницы в памяти и не будут видны другим процессам, работающим с тем же проецируемым файлом), SEC_IMAGE (указывает ОС, что открываемый файл является исполнимым файлом Win32, при его проецировании необходимо следовать некоторым специальным правилам; Windows 95 этот флаг игнорирует), SEC_NOCAСHE (запрещает кэшировать страницы, относящиеся к файлу, используется редко, Windows 95 его игнорирует), SEC_COMMIT и SEC_RESERVE - флаги, используемые только для объектов «проецируемый файл», не связанных с физическим файлом на диске. dwMaximumSizeHigh и dwMaximumSizeLow – старшие 4 байта и младшие 4 байта размера файла. Если проецируется файл на диске и известно, что его не понадобится дополнять, то можно указать в обоих параметрах нули – размер будет установлен равным размеру файла. Для обеспечения возможности дописывания файла нужно устанавливать размер больше реального (с запасом). Можно указать размер до 18 экзабайт (18 квинтиллионов байт). Фактически, обычно нет необходимости работать с файлами более 4 Гб, поэтому в старшие разряды передаётся нуль, а в младшие – необходимый размер. lpName – указатель на строку, завершающуюся нулём, задающую имя объекта «проецируемый файл». Если имя не нужно, можно передать nil. Функция создаёт объект и возвращает его хэндл. Чтобы получить возможность работать со спроецированным файлом, необходимо выполнить ещё одну операцию. Нужно, чтобы ОС передала содержимое файла в выделенные для этого страницы и сообщила приложению адрес, по которому в его адресном пространстве находится выделенный регион. Эта операция выполняется с помощью вызова функции MapViewOfFile. function MapViewOfFile(hFileMappingObject: THandle; dwDesiredAccess: DWORD; dwFileOffsetHigh, dwFileOffsetLow, dwNumberOfBytesToMap: DWORD): Pointer; stdcall;
hFileMappingObject – хэндл объекта «проецируемый файл», созданного ранее. dwDesiredAccess – указывает способ доступа к данным. Возможные значения: FILE_MAP_WRITE (разрешены чтение и запись), FILE_MAP_READ (разрешено только считывание), FILE_MAP_ALL_ACCESS (аналогично FILE_MAP_WRITE), FILE_MAP_COPY (разрешены чтение и запись, запись приводит к копированию изменённой страницы). dwFileOffsetHigh, dwFileOffsetLow – старшие и младшие четыре байта смещения в файле, с которого начнётся проецирование (указание в этих параметрах 0 и 65536 соответственно приведёт к тому, что файл будет спроецирован начиная с 65-го килобайта). Смещение должно быть чётным числом, кратным гранулярности выделения ресурсов в системе, которая во всех существующих реализациях Win32 равна 64 Кбайт. dwNumberOfBytesToMap – размер спроецированного фрагмента в байтах. Последние три параметра позволяют спроецировать на адресное пространство процесса не весь файл сразу, а его отдельные фрагменты. Указав те или иные параметры, приложение создаёт своего рода «окно», имеющее заданный размер, не превышающий 4 Гбайт и начинающееся с произвольного места в файле. Обычно это необходимо, когда файл очень велик и его полное проецирование невозможно либо приводит к слишком большому расходу ресурсов. Если же у системы нет сложностей с выделением памяти при проецировании файла (файл не очень велик), то при прочих равных условиях быстрее будет работать программа, проецирующая сразу весь файл. Для того чтобы спроецировать весь файл сразу, необходимо указать оба параметра смещения нулевыми, а размер – равным размеру файла. Функция MapViewOfFile возвращает указатель, ссылающийся на область адресного пространства процесса, в которую спроецирован указанный фрагмент файла. Обращаясь по этому адресу, процесс получает доступ к данным, хранящимся в файле. Данные можно изменять, если в вызовах функций открытия файла и проецирования его указаны соответствующие флаги. Чтобы дописать данные в конец файла, необходимо при создании объекта «проецируемый файл» указать б о льший размер, чем фактический размер файла. При указании флагов, определяющих режим доступа к данным, необходимо учитывать, что попытка установка флага, требующего б о льших прав, чем те, которые уже были предоставлены, приведёт к ошибке. Так, если файл открыт функцией CreateFile в режиме «только для чтения», попытка указать в вызовах функций CreateFileMapping или MapViewOfFile флага, разрешающего запись, приведёт к тому, что эти функции завершатся с сообщением об ошибке. При неоднократном вызове функции MapViewOfFile каждый раз резервируется новый регион адресного пространства, при этом ранее выделенные регионы не освобождаются. Для освобождения выделенного региона нужно вызвать функцию UnmapViewOfFile(lpBaseAddress: Pointer), передав ей в качестве параметра ранее полученный адрес региона. Если эта функция не будет вызвана, то все выделенные и не освобождённые регионы автоматически освободятся при завершении процесса, их создавшего. После того, как завершена работа с объектом «проецируемый файл», объект нужно освободить, вызвав функцию CloseHandle с параметром – хэндлом объекта. Важным моментом при использовании проецируемых файлов является тот факт, что функция MapViewOfFile, будучи вызвана, увеличивает счётчики числа пользователей объектов «файл» и «проецируемый файл», с которыми она работает, на единицу, а функция UnmapViewOfFile, соответственно, уменьшает эти счётчики на единицу. Поэтому, если создаётся только один регион, на который проецируется файл, а хэндлы файла и объекта «проецируемый файл» не нужны в программе, то можно вызвать CloseHandle для файла сразу после создания объекта «проецируемый файл», а CloseHandle для проецируемого файла – сразу после вызова MapViewOfFile. При этом файл останется открытым, а объект «проецируемый файл» не будет уничтожен до тех пор, пока не будет вызвана процедура UnmapViewOfFile для выделенного региона. Задание (выполняются с использованием справочных изданий) Пусть необходимо описать с помощью сетей Петри фрагмент операционной системы, управляющей обменами между тремя накопителями на дисках d1, d2, d3 и центральным процессором через два канала a и b. При этом требуется, чтобы d1 использовал канал a, d2 - канал b, d3 – оба канала: a и b. Для адекватного описания подобных ситуаций необходимо использовать модификацию сетей Петри, в которой фишкам приписаны некоторые признаки, например, различные цвета, а условия срабатываний переходов и правила изменения разметки сети задаются специальной таблицей, учитывающей цвета фишек. Такая сеть показана на рис.10.1. В этой сети использованы следующие фишки с признаками: d1, d2, d3 – фишки, отмечающие возможность связи с дисководами; a, b – фишки, отмечающие доступность соответствующих каналов; x1, x2, x3, x4, x5 – вспомогательные фишки для запоминания предыстории функционирования системы. Для каждого из шести переходов сети имеется индивидуальная таблица условий срабатывания. В ней столбцы, связанные с входными местами перехода, содержат сочетание конкретных признаков фишек, при которых переход может сработать. Столбцы, связанные с выходными местами перехода, указывают признаки, с которыми переход добавляет фишки в свои выходные места для каждого входного сочетания признаков. Признаки фишек указаны на рисунке рядом с ними.
p1
t1
p1 p6 p2
t2
p2 p7 p3
t3
p3 p4
t4
p4 p5 p6 p7
t5
p5
t6
При выполнении задания рекомендуется придерживаться следующей методики. 1. В качестве каналов связи, создайте два процесса: А и В соответственно. 2. В качестве трех дисковых устройств, создайте три файла, отображаемые в память. 3. Создайте программный продукт, реализующий модель фрагмента работы операционной системы в соответствии с рис.10.1.
Рис.10.1. Фрагмент работы операционной системы.
Контрольные вопросы 1. Файловая система: цели, задачи. 2. Файловая система: структура, имена и типы файлов, атрибуты. 3. Файловая система: понятие о монтировании. 4. Файловая система: логическая организация файла. 5. Представление о каталогах. 6. Файловые операции: способы организации. 7. Файловая операция - открытие. 8. Файловая операция - блокировка. 9. Обмен данными с файлом. 10. Стандартные файлы ввода-вывода. 11. Контроль доступа к файлам, понятие и механизм. Список литературы
1. Справочник программиста и пользователя / Под ред. А.Г. Шевчика, Т.В. Демьякова. - М.: Квант, 1993. – 128 с. - (Сер. “Карманная энциклопедия”). 2. Богумирский Б. Эффективная работа на IBM PC. – СПб.: Питер, 1995. – 688 c. 3. Финогенов К.Г. MS-DOS 4.01. – М.: МП “Малип”, 1991. – 129 с. 4. Богумирский Б.С. MS-DOS 6.0: Новые возможности для пользователя. СПб.: Питер, 1994. 5. Франкен Г., Молявко С.М. MS-DOS 6.2 для пользователя: - Kиев: Торгово-издательское бюро BHV, 1994. – 448 c. 6. Франкен Г., Корольков К.Ю. Novell DOS 7 для пользователя: - Киев: Торгово-издательское бюро BHV, 1994. - 400 c. 7. Козловский Е.А. Norton Commander 4.0. – М.: ABF, 1993. – 144 c. 8. Ахметов К.С. Windows 95 для всех. - М.: ТОО "Компьютер-Пресс", 1995. - 280 с. 9. Гукин Д. Оптимизация Windows: Руководство фирмы Microsoft: Пер. с англ. - СПб.: Питер, 1995. 10. Титроу Роб. Управление реестром Windows 95 / Пер на рус. - СПб.: BHV-Санкт-Петербург, 1997. - 280 с. 11. Шиб Йорг. WINDOWS 95: Сотни полезных рецептов / Пер. с нем. – Киев: BHV, 1996. – 560 c. 12. Берлинер Э.М., Глазырин Б.Э., Глазырина И.Б. Офис от Microsoft: Начинающему пользователю о работес Windows 95. Русская версия. - 2-е изд., перераб. и доп. – М.: ABF, 1997. 13. Ресурсы Windows NT: Пер. с. англ. – СПб.: BHV- Санкт-Петербург, 1995. – 720 с. 14. Титтел Э., Хадсон К., Стюарт Дж. М. NT Server 4. Сертифицированный экзамен – экстерном (экзамен 70-067). – СПб.: Питер Ком, 1999. – 400 с. 15. Пильщиков В.П. Программирование на языке ассемблера IBM PC. – М.: Диалог-МИФИ, 1994. – 288 c. 16. Юров В. Assembler. - СПб.: Питер, 2000. 17. Юров В. Assembler: Специальный справочник. – СПб.: Питер, 2000. 18. Гук M., Юров В. Процессоры Pentium III, Athlon и другие. - СПб.: Питер, 2000. 19. Пирогов В.Ю. Assembler: Учебный курс. - М.: Издатель Молгачева С.В.; Изд-во Нолидж, 2001. – 848 с. 20. Пирогов В.Ю. Assembler для Windows. - М.: Издатель Молгачева С.В., 2002. – 552 c. 21. Ирвин Кип. Язык ассемблера для процессоров Intel.: Пер. с англ. - 3-е изд. - М.: Издательский дом “Вильямс”, 2002. – 616 с. 22. Аssembler: Практикум (+дискета) / В. Юров. - СПб.: Питер, 2002. – 400 с. 23. Герберт Шилдт. Программирование на С и С++ для Windows 95. - Киев, 1996. 24. Румянцев П.В. Азбука программирования Win32 API, - 3-е изд., доп. - М.: Горячая линия - Телеком, 2001. - 312 с. 25. Румянцев В.П. Работа с файлами Win32, API. - 2-е изд., доп. – М.: Горячая линия – Телеком, 2002. – 216 с. 26. Сетевые операционные системы: Учеб. для вузов/ Олифер В.Г. - СПб.: ЗАО Издательство "Питер", 2001. 27. Олифер В.Г. Сетевые операционные системы: Учебник для вузов/ Олифер В.Г., Олифер Н.А. – Санкт-Петербург., Питер, 2002.-538 с. 28. Гордеев А.В. Операционные системы: учебник для вузов.-2-е изд.-СПб: Питер, 2005.-416 с.: ил. 29. Берлинер Э.М., Глазырин Б.Э., Глазырина И.Б. Microsoft Windows 95. Русская версия. 2-е изд., перераб. и доп. ABF, 1997.
Оглавление
Введение............................................................................................................. Р а з д е л I. Программа мониторинга работы вычислительной Системы…………………………………………………………………... Р а з д е л II. Программа визуализации работы системных и пользовательских процессов……………………………………….…... Р а з д е л III. Программы реализации алгоритмов планирования FIFO и RR………………………………………………………………… Р а з д е л IV. Программы реализации алгоритмов планирования MultilevelQueue, Multilevel Feedback Queue……………………………….. Р а з д е л V. Программа реализации алгоритма взаимоисключения.. Р а з д е л VI. Программа синхронизации на основе семафоров и мьютексов………………………………………………………………… Р а з д е л VII. Программа реализации задачи производитель-потребитель…………………………………………….. Р а з д е л VIII. Программа реализации задачи об обедающих философах………………………………………………………………… Р а з д е л IX. Программа реализации алгоритма работы с виртуальной памятью…………………………………………………. Р а з д е л X. Программа визуализации работы файловой системы… Список литературы …………………………………………………..
Редактор Компьютерная верстка
Сдано в Подписано к Тир. 25 экз. Уч.-изд. л. 1,15. Формат 60´84 1/16. Усл. печ. л. Гарнитура Таймс. Зак. ГОУ ВПО Череповецкий государственный университет 162600, г. Череповец, пр. Луначарского, 5
Дата добавления: 2014-12-07; Просмотров: 519; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |