Предположим, что большой файл сохранен на диске, и я хочу запустить вычисление на каждом фрагменте данных, содержащихся в файле.Использование прерываний при чтении файла с диска
Код C/C++, который я бы написал для этого, загрузит часть файла, затем обработает, затем загрузит следующую часть, затем обработает эту следующую часть и так далее.
Если меня заинтересовало это в кратчайшие сроки, я мог бы сделать следующее: во-первых, скажите DMA-контроллеру загрузить первую часть файла. Когда эта часть загружена, сообщите DMA-контроллеру, чтобы загрузить вторую часть (в некоторой другой части памяти), а затем сразу же начать обработку первой части.
Если я получаю прерывание от DMA во время обработки первой части, я завершаю первую часть, а затем передаю DMA, чтобы перезаписать ее третьей частью файла; затем обрабатываю вторую часть.
Если я не получаю прерывание от DMA во время обработки первой части, я заканчиваю первую часть и жду прерывания DMA.
В зависимости от того, сколько времени занимает обработка в связи с чтением диска, это должно быть в два раза быстрее. На самом деле, конечно, нужно было бы измерить. Но это не вопрос, который я задаю.
Вопрос: возможно ли это сделать: a) в C с использованием нестандартного расширения или b) в сборке? Или операционные системы вообще не допускают таких вещей? Вопрос подразумевается прежде всего в контексте с одним потоком, хотя мне также будет интересно узнать, как это сделать с помощью двух потоков. Кроме того, меня интересует конкретный код; это скорее теоретический вопрос.
Разве это не те трубы, которые предназначены для операционных систем? –
Вы слишком низкоуровневый для кода пользователя. Не забывайте, что ваше приложение работает не только, а дисковые контроллеры совместно используются. И вы действительно не знаете, где ваши данные находятся на диске в целом. Посмотрите на асинхронные I/O и/или файлы с отображением памяти и какие опции у вашей ОС есть для них. – Mat
Любая нетривиальная операционная система уже работает именно так. Очень непонятно, почему вы думаете, что вам нужно помочь. –