a block of zeros. If reading a de-allocated block always returns zeros, this shortcut is transparent to the user, except for faster writing (and reading) of all-zero blocks, in addition to the usual benefit of faster writing into unused areas. Operating systems don't write all-zeros to "wipe" files or free space, but some utilities do. Hardware support ATA The TRIM command specification has been standardized as part of the AT Attachment (ATA) interface standard, led by Technical Committee T13 of the International Committee for Information Technology Standards (INCITS). TRIM is implemented under the DATA SET MANAGEMENT command (opcode 06h) of the draft ACS-2 specification. The ATA standard is supported by both parallel (IDE, PATA) and serial (SATA) ATA hardware. A drawback of the original ATA TRIM command is that it was defined as a non-queueable command and therefore could not easily be mixed with a normal workload of queued read and write operations. SATA 3.1 introduced a queued TRIM command to remedy this. There are different types of TRIM defined by SATA Words 69 and 169 returned from an ATA IDENTIFY DEVICE command: Non-deterministic TRIM: Each read command to the logical block address (LBA) after a TRIM may return different data. Deterministic TRIM (DRAT): All read commands to the LBA after a TRIM shall return the same data, or become determinate. Deterministic Read Zero after TRIM (RZAT): All read commands to the LBA after a TRIM shall return zero. There is additional information in SATA Word 105 that describes the Maximum number of 512-byte blocks per DATA SET MANAGEMENT command that a drive can support. Typically this defaults to 8 (or 4 kB) but many drives reduce this to 1 to meet the Microsoft Windows Hardware Requirements for TRIM, that command completion time shall not exceed 20 ms or 8 ms × (number of LBA range entries), whichever is greater, and shall always be less than 600 ms. An individual LBA range is called an LBA Range Entry and is represented by eight bytes. The LBA is expressed by the LBA Range Entry's first six bytes and the Range Length is a zero-based counter (e.g., 0=0 and 1=1) represented by the remaining two bytes. If the two-byte range length is zero, then the LBA Range Entry shall be discarded as padding. This means that for each 512-byte block of TRIM ranges that a device supports, the maximum is 64 ranges