2011-11-18 3 views
0

현재 Ramdisk 소스 코드를 읽고 있습니다. RamDiskFormatDisk 함수에서 문제가 발생합니다.FAT12/FAT16 - 섹터 수를 결정하는 요소는 무엇입니까?

if (fatEntries > 4087) { 
    fatType = 16; 
    fatSectorCnt = (fatEntries * 2 + 511)/512; 
    fatEntries = fatEntries + fatSectorCnt; 
    fatSectorCnt = (fatEntries * 2 + 511)/512; 
} 
else { 
    fatType = 12; 
    fatSectorCnt = (((fatEntries * 3 + 1)/2) + 511)/512; 
    fatEntries = fatEntries + fatSectorCnt; 
    fatSectorCnt = (((fatEntries * 3 + 1)/2) + 511)/512; 
} 

당신이 나에게 무엇을 그 의미를 설명 할 수 :

코드의 조각은 다음과 같습니다?

+1

어떤 부분에 문제가 있습니까? – Adam

+0

방정식. 왜 fatSectorCnt가 그렇게 계산되어야합니까? – XiaoMing

+1

이 상수 4087은 FAT12 형식의 한계입니다. FAT12는 4K 개 이상의 항목이있는 FAT 테이블을 가질 수 없습니다. 그리고 그 수는 2^12에서 FAT12 자체의 서비스 데이터에 대한 여러 항목을 뺀 것입니다. 이것은 FAT12의 클러스터가 12 비트 숫자를 가지기 때문입니다. – osgx

답변

1

그냥 몇 줄을 스크롤 : http://jcomeau.unternet.net/src/ramdisk/RAMDISK.C

이 fatEntries 및 주석의 계산이다

직전 인용 코드 :

// 
// Calculate number of sectors required for FAT 
// 
fatEntries = 
    (bootSector->bsSectors - bootSector->bsResSectors - 
     bootSector->bsRootDirEnts/DIR_ENTRIES_PER_SECTOR)/
      bootSector->bsSecPerClus + 2; 

// 
// Choose between 12 and 16 bit FAT based on number of clusters we 
// need to map 
// 

는이 기능이 RamDiskFormatDisk

이 루틴 형식입니다 새로운 디스크.

따라서이 기능의 (간접적 인) 입력 인 RAM 디스크 크기에 따라 RAM 디스크에 얼마나 많은 섹터 (섹터 = 512 바이트)가 있는지 계산 한 다음 거대한 FAT 테이블이 얼마나 될까요? 모든 분야를 기술하는 데 필요한 (FatEntries) FAT 테이블의 각 항목은 단일 클러스터를 설명하며 기본값은 2 섹터 = 1 클러스터입니다.

클러스터 수가 적 으면 작은 FAT 테이블이 더 좋을 것이며 FAT12가 디스크 포맷으로 선택됩니다. RAM 디스크의 클러스터가 FAT12에서 사용 된 것과 같이 짧은 FAT 테이블을 사용하여 설명 될 수없는 경우 기능은 FAT32를 선택합니다.

실제 한계 : http://en.wikipedia.org/wiki/File_Allocation_Table

FAT12 - 최대 4084까지 클러스터 (12-12^2); 가장 거친 클러스터가있는 32 MB.

FAT16 - 최대 65524 클러스터 (2^16-12); 가장 거친 클러스터에서 최대 2GB

따라서 FAT12는 플로피 또는 수 MB의 RAM 디스크에 적합합니다. FAT16은 GB 램 디스크까지 모든 크기에서 작동합니다.

+0

질문이 닫힙니다? – XiaoMing

+0

예, "코드 (x + 511)/512'는 무엇이고 왜"와 같은 너무 간단한 질문을하는 것은 대개 환영받지 못하기 때문입니다. 추천 링크는 http://stackoverflow.com/faq#close입니다. – osgx

관련 문제