Цитата(Dima_G @ Jan 21 2009, 10:53)

По поводу алгоритма поиска - сравниваем индекс следующей страницы с текущей. Если он не равен текущий индекс + 1, то текущая страница - последняя.
...........
Про ошибочные номера нужно подробнее. Не понял что там может получиться
Чтобы найти злополучный номер последней записи, я перебираю адреса страниц в обратном направлении, т.е. от 127 до 0. При этом я сравниваю разность соседних прочитанных номеров (которые от 0 до 255). Если разность больше 127, то это и есть граница последней записи. Например могут быть записаны такие номера:
0, 1, 2, 3, 4, 5, 86, 87 , 88... FE, FF - здесь последняя запись на номере 5
Или такие:
80, 81, 82, 83, 4, 5, 6, 7 .... 7E, 7F - здесь последняя запись на номере 83
В частном случае когда искомой разности не находится, например номера идут: 0, 1, 2 .... 7E, 7F то естественно последней записью считается последний адрес 7F.
Но все это в идеале. А в результате некорректной работы программы может быть искаженная последовательность:
0, 1, 2, 83, 84, 85, 6, 7 ... 7E, 7F
Здесь алгоритм определяет последнюю запись на номере 85. Далее до конца памяти исправно заполняется записями:
0, 1, 2, 83, 84, 85, 86, 87 .... FE, FF
И тут происходит сбой алгоритма. Теперь последней записью он находит старый номер 2, а все более новые записи с 83 по FF безвозвратно теряются!
Кстати, каждую запись я проверяю по CRC32, и если он неверен, запись пропускается.
Еще думаю, может что даст увеличение номера не на каждом следующем адресе, а только при циклическом возврате на нулевой адрес?
Цитата(Сергей Борщ @ Jan 21 2009, 12:26)

Если использовать нумерацию по моджулю, не кратному количеству страниц (например, страниц 128, а нумеровать 0,1,2,3,4,5,0,1), то можно использовать количество номеров меньшее, чем количество страниц. Можно нумеровать вообще одним битом, если брать его с выхода генератора псевдослучайной последовательности. При поиске сдвиговый регистр загружается из подряд идущих страниц, замыкается обратная связь и он начинает генерить эталонную последовательность. Она сравнивается со считываемой из страниц. Несовпадение указывает на точку "разрыва" или на ошибочный номер. Можно сделать предположение о сбойнувшем номере и подставить вместо него номер с генератора образцовой последовательности. Если после этого синхронизация восстановилась - это был действительно сбой. Если нет - это была точка разрыва. Очень подробно эти приемы описаны в книге "
синхронизация в телекоммуникационных системах. Анализ инженерных решений.". В интернете встречались сканы.
одним битом кодировать действительно можно. Но для этого достаточно просто инвертировать его при циклическом возврате к началу. А что дает такое усложнение как псевдослучайная последовательность, я не понял. И спасет ли этот метод от сбойных записей?
ps
что то ссылка не работает