Чтение и запись файла
В разд. "Системные вызовы read и writeQ" главы 12 описано, как реализованы системные вызовы read и write . Соответствующие служебные процедуры сводятся к выполнению методов read и write файловых объектов, причем эти методы могут быть специфичными для файловой системы. У дисковых файловых систем эти методы находят физические блоки, содержащие необходимые данные, и активизируют драйвер устройства, который запускает пересылку данных.
Чтение файла происходит постранично; ядро всегда пересылает целые страницы данных за один прием. Если процесс делает системный вызов read о, чтобы получить несколько байтов, а эти данные еще не находятся в оперативной памяти, ядро выделяет новый страничный кадр, заполняет его соответствующей порцией данных из файла, добавляет страницу в кэш страниц и копирует запрошенные байты в адресное пространство процесса. В большинстве файловых систем чтение страницы данных из файла сводится к выяснению, какой блок на диске содержит требуемые данные. Когда это сделано, ядро заполняет страницы, выдавая необходимые команды ввода/вывода общему слою работы с блочными устройствами. На практике метод read у всех ДИСКОВЫХ файловых систем реализован общей функцией generic_file_read.
Операции записи в файлы на диске несколько сложнее, поскольку размер файла может увеличиться, и, следовательно, ядро может выделить на диске несколько физических блоков. Конечно, конкретная реализация этих действий зависит от типа файловой системы. Тем не менее многие дисковые файловые системы реализуют свои методы write с помощью общей физической функции, называемой generic_f iie_write . Примерами таких файловых систем являются Ext2, System V/Coherent/Xenix и MINIX. С другой стороны, некоторые файловые системы, например, журналируемые или сетевые, реализуют метод write специализированными функциями.
Предыдущая страница | 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 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 | Следующая страница