| [ CnUnix ] in KIDS 글 쓴 이(By): pictor (홍헌수) 날 짜 (Date): 1996년09월22일(일) 03시30분29초 KDT 제 목(Title): [Re][Re][Re] block block이란 의미는 그 단어를 쓰는 사람의 맘인 것 같습니다. block란 말 자체가 애매하기 때문에.. 무어라 말하기 힘들지만.. device에 관께되는 block이란 계념이 있는가 하면, filesystem에 관계되는 block이란 개념이 있습니다. 아마도 device에 관계된 block은 disk IO 의 기본 단위인 것 같기도 하고 아닌 것 같기도 하고 그런데, 아무튼 이는 sunos.4.1.3에선 /usr/include/sys/param.h에 512로 define이 되어 있네요.. 이 DEV_BSIZE는 또 BSD계열 UNIX의 directory size의 기본 size인 것으로 알고 있습니다. sunos.4.1.3에서 mkdir하여 directory를 만들면 벌써 그 directory size는 512 byte가 되어 나옵니다. directory가 커지면 나중에는 1024가 되고 더 커지면 512 X 3 이 되고.. 합니다. directory size가 512의 정수배가 되는 이유는, directory라는 file이 UNIX의 kernel 이 밥먹듯이 읽고쓰고 해야 하는, 그 어떤 regular file보다도 많이 읽고 쓰고 해야 하는 file이기 때문에, 되도록 DEV_BSIZE의 정수배로 해놓으면 좋을 것이다...??? directory size가 512이면 단 한번의 action으로 읽어올 수 있으니까?? 맞나? 그런데 filesystem에서 보는 block은 다릅니다. 보통 제가 만난 system들은 다들 filesystem에서의 blocksize는 1024였습니다. 이런 경우 이 filesystem 은 처음부터 끝부분까지 1024단위로 주소를 가지고 있습니다. 그래서 file 을 저장할때, 그 저장장소는 /usr/include/ufs/inode.h의 struct icommon 으로 들어가는데 이때, struct icommon의 daddr_t ic_db[NDADDR]; 에 저장되게 되는 주소는 바로 이 1024을 했을때의 주소입니다. 그런데 file을 저장할땐 file을 거의 8K단위로 저장하는데, 그렇기 때문에 위의 daddr_t ic_db[] array는 보통 8의 배수들이됩니다. 그러니까 ic_db[0]=1000이면 ic_db[1]=1008, ic_db[2]=1016, ic_db[3]=... 등으로 되는데, file을 8K단위로만 저장하면 1K짜리 file에겐 너무나 큰 hard disk손실이므로 이런 경우는 1K단위로 저장하는데..그런 경우..ic_db[0]=128, ic_db[1]=136, ic_db[2]=323(이것을 8의 배수가 아님)것 처럼 저장됩니다. 즉, file은 기본적으로 8K 단위로 저장하려 하는데, 마지막 짜투리는 1K단위로 저장하려 애쓴다. --------------- device입장에서의 block size와 filesystem입장에서의 block size는 다르다. 그래서 sunos.4.1.3의 /usr/include/ufs/fs.h에는 #define dbtofsb(fs,b) ((b) >> (fs)->fs_fsbtodb) #define fsbtodb(fs,b) ((b) << (fs)->fs_fsbtodb) 란 macro가 있음. /* 참고: 보통 fs->fs_fsbtodb== 1 이었음 */ fsb == filesystem block db == device block |