Dispositivos de caractere para discos no Linux

4

Por que outros sistemas UNIX precisam de dispositivos de caractere para dispositivos de armazenamento quando o Linux não?

Outros sistemas operacionais UNIX (AIX, HPUX, Solaris e macOS) usam algo como '/ dev / rdisk #' e '/ dev / disk #' para dispositivos de armazenamento.

    
por DarkHeart 21.04.2017 / 14:26

2 respostas

3

Acho que este artigo da Wikipédia link explica isso muito bem:

In computing, specifically in Unix and Unix-like operating systems, a raw device is a special kind of logical device associated with a character device file that allows a storage device such as a hard disk drive to be accessed directly, bypassing the operating system's caches and buffers (although the hardware caches might still be used). Applications like a database management system can use raw devices directly, enabling them to manage how data is cached, rather than deferring this task to the operating system.

In FreeBSD, all device files are in fact raw devices. Support for non-raw devices was removed in FreeBSD 4.0 in order to simplify buffer management and increase scalability and performance.1

In Linux kernel, raw devices were deprecated and scheduled for removal at one point, because the O_DIRECT flag can be used instead.

    
por 21.04.2017 / 15:05
0

The reason why one might want to use the raw interface when the block device interface is that the raw interface is usually faster. The operating system performs buffer caching only for block-special files.

When a very large file is read from or written to a medium such as magnetic tape, buffer caching by the operating system provides no benefit because no block will be read more than once. Using the raw device interface avoids this excess system activity.

Another reason to use the raw device interface when processing very large stream files on magnetic media is that the raw interface may support very large block sizes, allowing very high data transfer rates to be achieved. When a device is accessed with the block device interface, all reads and writes must be passed through the system buffers, and are therefore limited to the file system block size (typically 1K or 2K bytes). When using the raw device, block sizes of 32K or larger may be used. --John J. Valley, UNIX Programmer's Reference; 1991 ed.

Além dos ganhos de desempenho, havia (é?) um requisito que os sistemas de arquivos acessados através da interface de bloco fossem desmontados por razões de consistência do cache. Os blocos armazenados em cache pelo sistema podem afetar as alterações feitas no dispositivo de bloco quando são gravadas no disco. Desmontar antes do fschk é um pequeno aborrecimento; se o aplicativo que precisa de acesso direto for o principal uso do sistema, é muito pior.

Em resposta à sua pergunta original, muitos dos problemas são em grande parte históricos. É incomum nos sistemas contemporâneos para buffers de dispositivos serem maiores que os buffers do sistema. (Quando foi a última vez que você usou uma estação de trabalho conectada a uma impressora de alta velocidade com um buffer maior do que a memória das estações de trabalho?)

    
por 21.04.2017 / 18:14