Обработка прерывания при работе с ядром

Похоже, это файловая система с прямым распределением блоков, а не с экстентами, например ext3.

Это означает, что каждый блок данных имеет запись в таблице (в иноде ). Первые 12 записей являются прямыми блоками, т.е. прямо указывают на блоки данных. Следующая запись является косвенным блоком, который указывает на блок, который снова содержит номера блоков. 13-й блок — это двойной непрямой блок, а 14-й блок — тройной косвенный блок.

Все это означает, что для больших файлов, таких как ваш файл размером 370 ГБ, существует огромное количество блоков, задействованных в адресации всех блоков данных. Вероятно, отсюда и разница; duучитывает все блоки , а не только блоки данных. lsпоказывает размер файла, но общее пространство в каталоге снова показывается со всем использованным пространством, а не только с блоками данных.

Для больших файлов я не рекомендую использовать ext3 и уж точно не ext2. Используйте современную файловую систему на основе экстента -, такую ​​как ext4. В файловой системе на основе экстента -блоки индексируются как «первый блок имеет номер 3874, а он расширяется до 342 блоков», и при необходимости добавляются дополнительные экстенты. Таким образом, можно найти множество блоков, используя всего два числа. Это не только намного эффективнее -места, но и намного быстрее, так как все эти дополнительные блоки не нужно загружать.

0
08.03.2020, 16:02
1 ответ

Точно так же. Однако, если мы обрабатываем прерывание, то, возможно, ничего или ничего, пока мы не закончим.

Что мы делаем во всех случаях:

  • безусловное сохранение режима и установка режима в режим супервизора (аппаратно. Запускается по прерыванию)
  • безусловное сохранение состояния и стек переключения
  • запуск кода прерывания
  • безусловное переключение стека, восстановление состояния и режима восстановления

Фраза «установить режим супервизора» может быть прочитана как любая из этих:

  • Убедитесь, что режим является режимом супервизора.
  • записать единицу в бит S регистра состояния

Прерывание прерывания

Возможны множественные (, но конечные )уровни приоритета прерывания. Для каждого уровня будет стек. Прерывание может быть прервано только прерыванием с более высоким приоритетом. Прерывания с более низким приоритетом могут быть заблокированы более высоким приоритетом. Это решает большинство проблем, а не стеки не могут быть повреждены.

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

Стеки

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

Ядро также будет иметь стек для каждого уровня приоритета прерывания. См. раздел о прерывании прерывания.

0
28.04.2021, 23:21

Теги

Похожие вопросы