En informática (específicamente en transmisión y almacenamiento de datos ), un bloque , [ 1 ] a veces llamado registro físico , es una secuencia de bytes o bits , que generalmente contiene un número entero de registros , con una longitud fija; un tamaño de bloque . [ 2 ] Los datos estructurados de esta manera se denominan bloqueados . El proceso de colocar datos en bloques se llama bloqueo , mientras que el desbloqueo es el proceso de extraer datos de los bloques. Los datos bloqueados normalmente se almacenan en un búfer de datos y se leen o escriben en bloques completos a la vez. El bloqueo reduce la sobrecarga y acelera el manejo del flujo de datos . [ 3 ] Para algunos dispositivos, como las cintas magnéticas y los dispositivos de disco CKD , el bloqueo reduce la cantidad de almacenamiento externo necesario para los datos. El bloqueo se emplea casi universalmente al almacenar datos en cintas magnéticas de 9 pistas , memoria flash NAND y medios rotatorios como disquetes , discos duros y discos ópticos .
La mayoría de los sistemas de archivos se basan en un dispositivo de bloques , que es un nivel de abstracción para el hardware responsable de almacenar y recuperar bloques de datos específicos, aunque el tamaño del bloque en los sistemas de archivos puede ser un múltiplo del tamaño del bloque físico. Esto genera ineficiencia de espacio debido a la fragmentación interna , ya que la longitud de los archivos a menudo no es un múltiplo entero del tamaño del bloque, y por lo tanto, el último bloque de un archivo puede quedar parcialmente vacío. Esto creará espacio sobrante . Algunos sistemas de archivos más recientes, como Btrfs y FreeBSD UFS2 , intentan resolver esto mediante técnicas llamadas subasignación de bloques y fusión de cola . Otros sistemas de archivos, como ZFS, admiten tamaños de bloque variables. [ 4 ] [ 5 ]
El almacenamiento en bloques suele estar abstraído por un sistema de archivos o un sistema de gestión de bases de datos (DBMS) para su uso por aplicaciones y usuarios finales. Los volúmenes físicos o lógicos a los que se accede mediante E/S de bloques pueden ser dispositivos internos de un servidor, conectados directamente mediante SCSI o Fibre Channel , o dispositivos remotos a los que se accede mediante una red de área de almacenamiento (SAN) utilizando un protocolo como iSCSI o AoE . Los DBMS suelen utilizar su propia E/S de bloques para mejorar el rendimiento y la capacidad de recuperación en comparación con la implementación del DBMS sobre un sistema de archivos.
En Linux, el tamaño de bloque predeterminado para la mayoría de los sistemas de archivos es de 4096 bytes. El comando `stat`, que forma parte de las utilidades principales de GNU, se puede usar para comprobar el tamaño del bloque.
En los idiomas
C++
En C++ , un bloque se puede leer usando std::ifstream(flujo de archivo de entrada).
importar std ;using std :: array ; using std :: byte ; using std :: ifstream ; using std :: ios ;constexpr size_t BLOCK_SIZE = 4096 ;try { ifstream file ( "example.bin" , ios :: binary ); file . exceptions ( ios :: failbit | ios :: badbit ); array < byte , BLOCK_SIZE > buf ; file . read ( reinterpret_cast < char *> ( buf . data ()), BLOCK_SIZE ); } catch ( const ios :: failure & e ) { std :: println ( stderr , "Error de E/S: {}" , e . what ()); }DO#
En C# , un bloque se puede leer con la FileStreamclase. [ 6 ]
usando System.IO ;constante estática int TAMAÑO_BLOQUE = 4096 ;using ( FileStream stream = File . Open ( "example.bin" , FileMode . Open )) { byte [] block = new byte [ BLOCK_SIZE ]; await stream . ReadAsync ( block , 0 , BLOCK_SIZE ); }Java
En Java , un bloque se puede leer usando java.io.FileInputStream.
import java.io.FileInputStream ; import java.io.IOException ;static final int BLOCK_SIZE = 4096 ;try ( FileInputStream file = new FileInputStream ( "example.bin" )) { byte [] buf = new byte [ BLOCK_SIZE ] ; file . read ( buf ); } catch ( IOException e ) { e . printStackTrace (); }Pitón
En Python , un bloque se puede leer con el readmétodo de lo que sea que esté implementando io.IOBase.
TAMAÑO_DE_BLOQUE : int = 4096con open ( "example.bin" , "rb" ) como archivo : # el archivo es de tipo io.BufferedReader bloque : bytes = archivo . leer ( TAMAÑO_BLOQUE )Óxido
En Rust , un bloque se puede leer con el read_exactmétodo de std::fs::File. [ 7 ]
usar std :: fs :: File ;const BLOCK_SIZE : usize = 4096 ;if let Ok ( mut file ) = File :: open ( "example.bin" ) { let mut buf = [ 0 u8 ; BLOCK_SIZE ]; file . read_exact ( & mut buf ); }Referencias
- ↑ Blaauw, Gerrit Anne ; Brooks, Jr., Frederick Phillips ; Buchholz, Werner (1962), "4: Natural Data Units" (PDF) , en Buchholz, Werner (ed.), Planning a Computer System – Project Stretch , McGraw-Hill Book Company, Inc. / The Maple Press Company, York, PA., pp. 39–40 , LCCN 61-10466 , archivado (PDF) del original el 3 de abril de 2017 , recuperado el 3 de abril de 2017 ,
[…] Los términos utilizados aquí para describir la estructura impuesta por el diseño de la máquina, además de
bit
, se enumeran a continuación.
Byte
denota un grupo de bits utilizados para codificar un carácter, o el número de bits transmitidos en paralelo hacia y desde las unidades de entrada-salida. Aquí se utiliza
un término distinto a
«carácter»
porque un mismo carácter puede representarse en diferentes aplicaciones mediante más de un código, y distintos códigos pueden usar diferentes cantidades de bits (es decir, diferentes tamaños de byte). En la transmisión de entrada/salida, la agrupación de bits puede ser completamente arbitraria y no tener relación con los caracteres reales. (El término deriva de
«bite»
, pero se ha reescrito para evitar mutaciones accidentales a
«bit
»).
Una
palabra
consiste en el número de bits de datos transmitidos en paralelo desde o hacia la memoria en un ciclo de memoria. El
tamaño de la palabra
se define, por lo tanto, como una propiedad estructural de la memoria. (El término
«catena»
fue acuñado con este propósito por los diseñadores del
ordenador
Bull
GAMMA 60 ).
Un bloque
se refiere al número de palabras transmitidas hacia o desde una unidad de entrada/salida en respuesta a una única instrucción de entrada/salida. El tamaño del bloque es una propiedad estructural de una unidad de entrada/salida; puede haber sido fijo por el diseño o estar sujeto a la variación del programa. […]
- ↑ "Espacio disponible en el disco duro, tamaños de bloque y terminología de tamaño" . CNET . 5 de mayo de 2009. Consultado el 29 de abril de 2014 .
- ↑ Chang, SK "Estructuras físicas" . Capitán SK . Consultado el 29 de abril de 2014 .
- ↑ Balik, Rachel (29 de marzo de 2013). "Preguntas de Bruning: tamaño récord de ZFS" . Joyent . Recuperado el 29 de marzo de 2013 .
- ↑ Bourbonnais, Roch (7 de junio de 2006). "Ajuste del tamaño de registro de ZFS" . Oracle .
- ↑ "Método FileStream.ReadAsync (System.IO)" . learn.microsoft.com . Archivado del original el 26 de diciembre de 2025. Consultado el 2 de febrero de 2025 .
- ↑ "Leer en std::io - Rust" . doc.rust-lang.org . Archivado del original el 28 de enero de 2026. Consultado el 2 de febrero de 2025 .
- Almacenamiento de datos informáticos
- Transmisión de datos