Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #30 : 23-05-2008 07:12 » |
|
по формуле - вроде нет.
|
|
|
Записан
|
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #31 : 26-05-2008 06:49 » |
|
А не проще ли использовать табличный метод? Нужно всего 256 байт... char bits[256] = { 0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4, // первая строка .... // каждая след. строка будет из значений bits[номер строки] + bits[номер элемента в строке] };
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
McZim
|
|
« Ответ #32 : 26-05-2008 07:09 » |
|
RXL, мне пока место экономить не нужно а вот узнать текущий bitmap не мешало бы s_bmap_nr; /* Количество bitmap-блоков, необходимых для отслеживания каждого блока в файловой системе */ вот не пойму как отследить?
|
|
|
Записан
|
The CBO without stats is like a morning without coffee. (c) T.Kyte.
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #33 : 26-05-2008 07:15 » |
|
256 байт - не большой расход, а сокращает и ускоряет код значительно. Можно минимизировать: использовать только одну строку в 16 байт и конвертировать по ниблам.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #34 : 26-05-2008 07:26 » |
|
Ром, там и так табличный поиск, просто таблица заполняется компом, а не вручную
|
|
|
Записан
|
|
|
|
McZim
|
|
« Ответ #35 : 26-05-2008 08:28 » |
|
хм, по идеи текущий битмап должен выглядеть вот так: buff2 = (super->s_blocksize * super->s_blocksize * super->s_blocksize * 8 * 1 + ((unsigned char*)(super->s_block_count / (super->s_blocksize * 8))));
но функция byte_c->GetZeroBitInBuf(buff2,len2); все равно валится по SIGSEG.
|
|
|
Записан
|
The CBO without stats is like a morning without coffee. (c) T.Kyte.
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #36 : 26-05-2008 08:57 » |
|
ну не знаю, я в формуле не увидел часть +((unsigned char*)(super->s_block_count / (super->s_blocksize * 8)))
|
|
|
Записан
|
|
|
|
McZim
|
|
« Ответ #37 : 26-05-2008 09:00 » |
|
Алексей1153++, ну вообще (........+(unsigned char*)super);
это ты меня подтолкнул, для передачи указателя а super->s_block_count / (super->s_blocksize * 8)
это (мне кажется) текущий Bitmap который нужно передать, а не всю структуру.
|
|
|
Записан
|
The CBO without stats is like a morning without coffee. (c) T.Kyte.
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #38 : 26-05-2008 09:09 » |
|
McZim, ммм, что то я не понял перехода :
(unsigned char*)super - это я говорил, это указатель на начало блока памяти, куда указывает super
а это ((unsigned char*)(super->s_block_count / (super->s_blocksize * 8 ))) это указатель на начало блока памяти, с адресом "super->s_block_count / (super->s_blocksize * 8 )" - понятия не имею, куда ты попадёшь )
|
|
|
Записан
|
|
|
|
McZim
|
|
« Ответ #39 : 26-05-2008 09:14 » |
|
Алексей1153++, ок, я немного запутался, вот по этой формуле ((super->s_blocksize * 8 ) / super->s_block_count), можно получить текущий Bitmap именно мне его нужно передавать в цикле, вместо простого (unsigned char*)super или в месте с ним З.Ы.: формула ((unsigned char*)(super->s_block_count / (super->s_blocksize * 8 ))) поменялась на ((unsigned char*)((super->s_blocksize * 8 ) / super->s_block_count)) был не прав вот и вопрос как мне передать текущий Bitmap зная его по формуле ((super->s_blocksize * 8 ) / super->s_block_count)
|
|
|
Записан
|
The CBO without stats is like a morning without coffee. (c) T.Kyte.
|
|
|
McZim
|
|
« Ответ #40 : 26-05-2008 09:19 » |
|
можно конечно оформить это в качестве функции структуры, но мне кажется это не кашерно.
|
|
|
Записан
|
The CBO without stats is like a morning without coffee. (c) T.Kyte.
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #41 : 26-05-2008 09:28 » |
|
вот и вопрос как мне передать текущий Bitmap зная его по формуле ((super->s_blocksize * 8 ) / super->s_block_count)
я не совсем понимаю, что ты имеешь в виду под "зная его по формуле"... Смысл формулы тоже чёта понять не могу . Вот если бы знать смещение каждого битмапа от начала super, тогда в цикле: { DWORD dwdCurrentOffset= ... ; buf2 = ((BYTE*)super) + dwdCurrentOffset; ... }
|
|
|
Записан
|
|
|
|
McZim
|
|
« Ответ #42 : 26-05-2008 11:02 » |
|
ага разобрались если цикл то нужно передавать по одному блоку, а мы передавали все сразу, если все сразу то нужно убрать цикл!
|
|
|
Записан
|
The CBO without stats is like a morning without coffee. (c) T.Kyte.
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #43 : 26-05-2008 11:14 » |
|
короче, вот так for(int k=0; k < super->s_bmap_nr; k++) { if(k == 0) { buff1 = (REISERFS_DISK_OFFSET_IN_BYTES + super->s_blocksize + (unsigned char* )super) ; } else { buff1 = (super->s_blocksize * super->s_blocksize * super->s_blocksize * 8 * k + (unsigned char* )super) ; }
len1 = super->s_blocksize; totalcount += byte_c->GetZeroBitInBuf(buff1,len1); }
или так buff1 = (REISERFS_DISK_OFFSET_IN_BYTES + super->s_blocksize + (unsigned char* )super) ; len1 = super->s_blocksize; totalcount += byte_c->GetZeroBitInBuf(buff1,len1);
if(super->s_bmap_n>=1) { buff2 = (super->s_blocksize * super->s_blocksize * super->s_blocksize * 8 * 1 + (unsigned char* )super) ; len2 = super->s_blocksize * (super->s_bmap_nr-1); totalcount += byte_c->GetZeroBitInBuf(buff2,len2); }
))
|
|
|
Записан
|
|
|
|
McZim
|
|
« Ответ #44 : 26-05-2008 11:37 » |
|
не большая поправочка. Вот тут buff2 = (super->s_blocksize * super->s_blocksize * super->s_blocksize * 8 * 1 + (unsigned char* )super) ;
1 -- это говорится что передается первый Bitmap, для второго битмапа будет цифра 2 и т.д. максимально битмапов может быть 8.
|
|
|
Записан
|
The CBO without stats is like a morning without coffee. (c) T.Kyte.
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #45 : 26-05-2008 11:43 » |
|
Макс, опять меня запутал ? ))) (super->s_blocksize * super->s_blocksize * super->s_blocksize * 8 * 1 - это же смещение к БЛОКУ ( 1,2,3... (zb)) , а не к битмапу Я так понял, по крайней мере )
|
|
|
Записан
|
|
|
|
McZim
|
|
« Ответ #46 : 26-05-2008 11:51 » |
|
вот смотри: http://p-nand-q.com/download/rfstool/reiserfs_docs.htmlтут: Finding the first bitmap block: REISERFS_DISK_OFFSET_IN_BYTES + REISERFS_BLOCKSIZE
Finding the next bitmap blocks: REISERFS_BLOCKSIZE * REISERFS_BLOCKSIZE * REISERFS_BLOCKSIZE * 8 * n
ключевая фраза: bitmap
|
|
|
Записан
|
The CBO without stats is like a morning without coffee. (c) T.Kyte.
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #47 : 26-05-2008 11:54 » |
|
вообще то bitmap blocks
|
|
|
Записан
|
|
|
|
McZim
|
|
« Ответ #48 : 26-05-2008 11:54 » |
|
и потом, когда ты делаешь цикл вида for(int k=0; k < super->s_bmap_nr; k++)
и потом используешь К вот так buff1 = (super->s_blocksize * super->s_blocksize * super->s_blocksize * 8 * k + (unsigned char* )super);
то это и говорит что ты перебираешь БитМапы. З.Ы.: а вот сама структура супер блока: struct reiserfs_super_block { uint32_t s_block_count; uint32_t s_free_blocks; /* free blocks count */ uint32_t s_root_block; /* root block number */ uint32_t s_journal_block; /* journal block number */ uint32_t s_journal_dev; /* journal device number */
/* Since journal size is currently a #define in a header file, if ** someone creates a disk with a 16MB journal and moves it to a ** system with 32MB journal default, they will overflow their journal ** when they mount the disk. s_orig_journal_size, plus some checks ** while mounting (inside journal_init) prevent that from happening */
/* great comment Chris. Thanks. -Hans */
uint32_t s_orig_journal_size; uint32_t s_journal_trans_max; /* max number of blocks in a transaction. */ uint32_t s_journal_block_count; /* total size of the journal. can change over time */ uint32_t s_journal_max_batch; /* max number of blocks to batch into a trans */ uint32_t s_journal_max_commit_age; /* in seconds, how old can an async commit be */ uint32_t s_journal_max_trans_age; /* in seconds, how old can a transaction be */ uint16_t s_blocksize; /* block size */ uint16_t s_oid_maxsize; /* max size of object id array, see get_objectid() commentary */ uint16_t s_oid_cursize; /* current size of object id array */ uint16_t s_state; /* valid or error */ char s_magic[12]; /* reiserfs magic string indicates that file system is reiserfs */ uint32_t s_hash_function_code; /* indicate, what hash function is being use to sort names in a directory*/ uint16_t s_tree_height; /* height of disk tree */ uint16_t s_bmap_nr; /* amount of bitmap blocks needed to address each block of file system */ uint16_t s_version; /* I'd prefer it if this was a string, something like "3.6.4", and maybe 16 bytes long mostly unused. We don't need to save bytes in the superblock. -Hans */ uint16_t s_reserved; uint32_t s_inode_generation; char s_unused[124] ; /* zero filled by mkreiserfs */ } __attribute__ ((__packed__));
интересующая строка uint16_t s_bmap_nr; /* amount of bitmap blocks needed to address each block of file system */
|
|
|
Записан
|
The CBO without stats is like a morning without coffee. (c) T.Kyte.
|
|
|
McZim
|
|
« Ответ #49 : 26-05-2008 11:55 » |
|
Алексей1153++, я к тому что не просто Блокс а именно БитМап Блокс
|
|
|
Записан
|
The CBO without stats is like a morning without coffee. (c) T.Kyte.
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #50 : 26-05-2008 14:01 » |
|
McZim, я и говорю - блоки ) Что ты мне бабушку лохматишь
|
|
|
Записан
|
|
|
|
McZim
|
|
« Ответ #51 : 26-05-2008 14:07 » |
|
Алексей1153++, это БитМап блоки их может быть от 1 до 8 в них входят простые блоки размером по 4096 их в каждом битмап блоке может быть 4096*8 максимум!!!
|
|
|
Записан
|
The CBO without stats is like a morning without coffee. (c) T.Kyte.
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #52 : 26-05-2008 14:33 » |
|
фсё, понял. Термины юниксовые незнакомые, плаваю ) . Главное - решили )))
|
|
|
Записан
|
|
|
|
McZim
|
|
« Ответ #53 : 26-05-2008 19:43 » |
|
Алексей1153++, ага, спасибо.
|
|
|
Записан
|
The CBO without stats is like a morning without coffee. (c) T.Kyte.
|
|
|
|