Размещение данных на жестком диске

Тема в разделе "WASM.BEGINNERS", создана пользователем stellaco, 7 янв 2009.

  1. stellaco

    stellaco New Member

    Публикаций:
    0
    Регистрация:
    11 дек 2008
    Сообщения:
    193
    Добрый день.
    Мне нужно разместить 96 бит данных в начале кластера ext3.
    16 бит в старшие биты, затем должны идти 32 бита (которые будут интерпретироваться, как некие отдельные данные ) и 16 бит ещё под одни уникальные данные ...+32 бита(в которые буду писать какойто адресс на жестком диске).
    И тут вопрос, собственно как это сделать?

    Эти данные должны размещаться через каждые 4000 байт. Как мне кажется в таком случае 96 байт будут попадать на начало кластера в ext3 ( 4096 байт )
     
  2. stellaco

    stellaco New Member

    Публикаций:
    0
    Регистрация:
    11 дек 2008
    Сообщения:
    193
    Второй день нет ответа..
     
  3. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    Вопрос какой-то мутный. На диск обычно пишут в файлы, а не в кластеры.
    Опиши подробнее задачу.
     
  4. stellaco

    stellaco New Member

    Публикаций:
    0
    Регистрация:
    11 дек 2008
    Сообщения:
    193
    Думаю, этот рисунок принесёт больше ясности чем моё объяснение.
    [​IMG]

    Красным помечены места, куда мне нужно будет записывать данные.
    Они находятся в начале сектора (а в unix это называется блоком) на жёстком диске.
    Это делается для того, чтобы считывающие головки на харде, быстрее находили нужную информацию.

    серым слева помечены избыточные данные.
     
  5. Stariy

    Stariy Member

    Публикаций:
    0
    Регистрация:
    22 окт 2003
    Сообщения:
    529
    Адрес:
    Russia
    Ну так и в чем проблема то?
     
  6. stellaco

    stellaco New Member

    Публикаций:
    0
    Регистрация:
    11 дек 2008
    Сообщения:
    193
    Мне нужно получить указатель на начало сектора..как это сделать?
    ..........или... я сейчас жостко туплю......?
     
  7. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    Диск это блочное устройство, с него нельзя считать/записать несколько байт. Чтение/запись идет, как минимум, посекторно.
    Считывается сектор, изменяются нужные байты и сектор записыватся назад.
    Или ты пишешь прошивку для контроллера хард диска ?
     
  8. Stariy

    Stariy Member

    Публикаций:
    0
    Регистрация:
    22 окт 2003
    Сообщения:
    529
    Адрес:
    Russia
    Номер сектора умножаешь на размер сектора - и все.
     
  9. stellaco

    stellaco New Member

    Публикаций:
    0
    Регистрация:
    11 дек 2008
    Сообщения:
    193
    Нет я хочу всеголишь организовать быстрый доступ и запись к своим данным =)

    Stariy
    Спасибо.
    И ещё один вопрос... как определить место на харде, с последовательно свободными секторами?
    Чтоб я к примеру сразу разметил 100 последовательно расположенных секторов и знал,что никакие данные расположенные до записи на харде, не затронуты..
     
  10. Stariy

    Stariy Member

    Публикаций:
    0
    Регистрация:
    22 окт 2003
    Сообщения:
    529
    Адрес:
    Russia
    Зависит от файловой системы, для фата проще, для нтфс посложней. Идея такая - читаешь бут-сектор, рассчитываешь начало фат и начало области данных. Ищешь в фате последовательность свободных кластеров нужной длины, ну и дальше ясно.
     
  11. stellaco

    stellaco New Member

    Публикаций:
    0
    Регистрация:
    11 дек 2008
    Сообщения:
    193
    Stariy
    Извеняюсь за глупый вопрос ....
    как прочесть бут-сектор?
     
  12. Stariy

    Stariy Member

    Публикаций:
    0
    Регистрация:
    22 окт 2003
    Сообщения:
    529
    Адрес:
    Russia
    открыть раздел функцией CreateFile, затем читать функцией ReadFile первые 512 байт, там он обычно и лежит. Это если под Win2000/XP
     
  13. stellaco

    stellaco New Member

    Публикаций:
    0
    Регистрация:
    11 дек 2008
    Сообщения:
    193
    Stariy
    Тоесть получается, что в начале сектора уже расположены некие данные (от файловой системы которые я не смогу затереть?)..тоесть
    я хотел сделать так, чтоб в секторе из 4096 байт, первые 96 байт были заняты моими служебными данными, а остальные 4000байт - любые данные которые можно записать.
    Такое не получится сделать?
     
  14. Stariy

    Stariy Member

    Публикаций:
    0
    Регистрация:
    22 окт 2003
    Сообщения:
    529
    Адрес:
    Russia
    есть сектора, есть кластера. Сектор в подавляющем большинстве случаев состоит из 512 байт (один раз за всю жизнь попадался сектор 2048 байт). Кластер состоит из секторов, бывает 2, 4, 8, 16 и т.д. секторов.
    А насчет частичной занятости сектора или кластера - скорее всего, не получится. Вернее, записать то можно, только ОС при записи каких-либо данных в это место затрет все.
     
  15. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    Идея писать на диск помимо файловой системы - бредовая.
    Во-первых рискуешь потереть данные в файлах, а то и убить файловую систему.
    Во-вторых твои данные для системы - свободное место. При первом же случае на этом месте окажется какой-нибудь файл.
     
  16. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    аааа... а ты не пробовал создать для себя не отформатированный раздел и поэкспериментировать с ним.
     
  17. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    stellaco
    Интересно, каким образом добавление собственного заголовка в начало каждого кластера\страницы может ускорить доступ ? А если хочешь создать нечто вроде собственного файла подкачки, то причем тут хард\сектора\кластеры - определись со структурой файла и юзай обычные Read\WriteFile с кэшированием или без (FILE_FLAG_NO_BUFFERING)