Как отформатировать карту с интерфейсом USB на 1 ГБ к FAT32 с 512-байтовым сектором?

Одним из способов получить хорошее и глубокое понимание этих концепций было бы просмотреть учебник, подобный тому, что находится на osdev.org или James Molloy's Tutorial.

Linux имеет монолитное ядро, это означает, что его код на архитектуре x86 выполняется полностью в кольцевом 0, как заявил Брюс. Таким образом, имея полный контроль над всеми ресурсами, ядро будет управлять всеми запросами к ним приложениями пользовательского уровня (запущенными с уровнем наименьших привилегий 3)

Подумайте об этом: если бы приложения из пользовательского пространства имели полный доступ к виртуальной памяти - оперативной памяти - они могли бы выкидывать все, от стека или кучи других процессов до внутренних буферов ядра. Ядро отображает страницы в каталог страниц каждого процесса, и если приложение неправильно работает, пытаясь получить доступ к местоположению, не принадлежащему его адресному пространству, то оно будет принудительно выключено.

Далее подумайте, что случилось бы, если бы каждая программа имела прямой доступ к принтеру или какому-нибудь другому устройству вывода. Два параллельных экземпляра процессов, пытающихся напечатать на принтере, будут схватывать всё, но если эти запросы пройдут через ядро, то они будут поставлены в очередь и обработаны отдельно, в результате чего будут напечатаны две отдельные страницы.

Далее, так как на машинах обычно используется меньшее количество процессоров, чем в настоящее время, ядро использует планировщик для переключения между процессами, каждый из которых получает своё конечное время для использования процессора. По истечении этого времени он будет перемещен в конец списка активных процессов или в список неактивных - если процесс ждал данных от какого-то устройства. Таким образом, кажется, что все процессы работают одновременно, хотя в данный момент времени используется только один процесс, либо ядро получает возможность использовать один процессор. Это понятие называется псевдопараллелизм.

Относительно вашего последнего вопроса о драйверах на земле пользователя: это возможно, однако, ядро сохраняет полный контроль над взаимодействием с устройством. Например, ядро может сопоставить область памяти ядра с областью памяти драйвера в пользовательском пространстве, тем самым предоставив ему доступ к памяти устройства. Ядро по-прежнему имеет возможность пересылать изменения в устройство или нет. Этот пользовательский драйвер земли обеспечит хороший интерфейс для управления устройством для других пользовательских приложений, и если каким-то образом драйвер выйдет из строя, могут быть хорошие шансы, что он будет перезагружен без необходимости перезагрузки машины. Если бы драйвер был в пространстве ядра, скажем модуля, если бы модуль застрял и его нельзя было бы выгрузить, то и его нельзя было бы перезагрузить, потому что его символы уже есть, так что единственный шанс - это перезагрузить машину.

В заключение, такие приложения, как cat top или "hello world", запускаются только в пользовательском пространстве, имея доступ к системным ресурсам ТОЛЬКО через API ядра, которое представляет собой набор функций, называемых системными вызовами. Таким образом, когда приложение производит системный вызов read() для чтения из файла, то ядро принимает управление процессором, читает данные, используя соответствующий драйвер (например, драйвер HDD), а затем копирует эти данные обратно по адресу, указанному указателем, переданным на системный вызов read(), позволяя приложению продолжить работу, как только эти данные станут доступны.

.

1
14.08.2014, 13:17
2 ответа

Хорошо, итак, в компьютерной науке я не слишком люблю говорить "вы не можете попасть туда отсюда ", но в данном случае вы пытаетесь поместить квадратный колышек в круглое отверстие.

Размер сектора - обычно устанавливается значением DEVICE . Размер сектора 2048B, о котором сообщается, является нормальным для CD/DVD приводов, в то время как 512B (или 520B - вот почему я сказал USUALLY - некоторые жесткие диски на самом деле могут переключаться с 512 на 520 и обратно).

Когда вы запустили fdisk, это четко показало, что размер сектора носителя является 2048B. Вы не можете легко изменить это, и, по всей вероятности, вы не можете изменить этот период . Вы можете попробовать связаться с производителем USB-накопителя, чтобы узнать, есть ли инструмент для сброса размера сектора на этом устройстве... или вы можете заехать в магазин (Walmart? Target? Staples? you name it!) и потратить от 5 до 10 долларов на покупку нового USB-накопителя.

1
27.01.2020, 23:28

For:

ВНИМАНИЕ: Недостаточно кластеров для 32-битного FAT!

вы можете использовать параметр -s2 в команде mkfs.fat.

С другой стороны

if (sector_size_set)
{
  if (ioctl(dev, BLKSSZGET, &min_sector_size) >= 0)
      if (sector_size < min_sector_size)
        {
      sector_size = min_sector_size;
          fprintf(stderr, "Warning: sector size was set to %d (minimal for this device)\n", sector_size);
        }
}

- это фрагмент кода, который выдает первое предупреждение. Как видно, если установлен размер сектора, то он получает минимальный размер логического сектора устройства, а если задан размер сектора меньше минимального, то выдается предупреждение и минимальный размер сектора назначается размером сектора.

.
2
27.01.2020, 23:28

Теги

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