[LINUX] Basic IO (sistema de arquivos, link de hardware e software, bibliotecas dinâmicas e estáticas)

Sistema de arquivo

Quando o visualizarmos no LINUX, veremos que o arquivo não só possui o nome do arquivo, mas também algumas outras informações de atributo.
Insira a descrição da imagem aqui
incluir:

Modo,
número de links físicos,
dono do arquivo,
grupo,
tamanho,
hora da última modificação,
nome do arquivo,
Insira a descrição da imagem aqui
então pensamos em como essa informação é consultada e onde está armazenada. Aqui iremos introduzir inode e block.

inode | block

O armazenamento no hardware estava inicialmente no disco.
Insira a descrição da imagem aqui
Determine a superfície do disco, trilha e setor pelo cabeçote. Podemos transformá-lo linearmente e pensar nele como um array.
Insira a descrição da imagem aqui
Grupo de blocos conforme mostrado na figura abaixo : O sistema de arquivos ext2 é dividido em vários grupos de blocos de acordo com o tamanho da partição. Cada grupo de blocos possui a mesma estrutura. Exemplos de gestão governamental de vários distritos

Super Block: Armazena as informações estruturais do próprio sistema de arquivos. As informações registradas incluem principalmente: a quantidade total de bolck e inode, o número de blocos e inodes não utilizados, o tamanho de um bloco e inode, a hora da montagem mais recente, a hora da gravação de dados mais recente e a hora da inspeção de disco mais recente Outras informações relacionadas ao sistema de arquivos. As informações do Super Block são destruídas, pode-se dizer que toda a estrutura do sistema de arquivos é destruída.

GDT, Tabela de descritor de grupo: descritor de grupo de bloco, que descreve as informações de atributo do grupo de bloco

Block Bitmap: O Block Bitmap registra qual bloco de dados no Bloco de Dados foi ocupado e qual bloco de dados não está ocupado

Bitmap de inode: cada bit indica se um inode está livre e disponível. tabela i-node: armazena atributos de arquivo, como tamanho do arquivo, proprietário, hora da última modificação, etc. Área de dados: armazena o conteúdo do arquivo

Insira a descrição da imagem aqui
Existem quatro operações principais para criar um novo arquivo:

  1. Atributos de armazenamento O
    kernel primeiro encontra um i-node ocioso (neste caso, 263466). O kernel registra as informações do arquivo nele.
  2. Armazenar dados.
    O arquivo precisa ser armazenado em três blocos de disco. O kernel encontrou três blocos livres: 300, 500 e 800. Copie o primeiro bloco de dados no buffer do kernel para 300, o próximo bloco para 500 e assim por diante.
  3. Situação de distribuição de registro O
    conteúdo do arquivo é armazenado na ordem de 300, 500, 800. A área de distribuição do disco do kernel no inode registra a lista de bloqueios acima.
  4. Adicione o nome do arquivo ao diretório.O
    novo nome do arquivo abc. Como o linux grava este arquivo no diretório atual? O kernel adiciona a entrada (263466, abc) ao arquivo de catálogo. A correspondência entre o nome do arquivo e o inode conecta o nome do arquivo com o conteúdo e os atributos do arquivo.
    O mesmo é verdadeiro para o diretório.O inode e a relação de mapeamento do arquivo são armazenados dentro.

Link suave e rígido

Soft link: O
soft link tem seu próprio inode, e o caminho de outro arquivo é armazenado no arquivo. É um documento independente.
Hard link: O
hard link e o arquivo apontado têm o mesmo inode, não um arquivo separado. No Linux, vários arquivos podem usar o mesmo inode.

Biblioteca dinâmica e estática

Biblioteca estática (.a): O código da biblioteca é vinculado ao arquivo executável quando o programa é compilado e vinculado. A biblioteca estática não será mais necessária quando o programa estiver em execução

Biblioteca dinâmica (.so): O código da biblioteca dinâmica é vinculado quando o programa está em execução e o código da biblioteca é compartilhado por vários programas.

Um arquivo executável vinculado a uma biblioteca dinâmica contém apenas uma tabela dos endereços de entrada de função que usa, não o código de máquina inteiro do arquivo-objeto onde a função externa está localizada

Antes que o arquivo executável comece a ser executado, o código de máquina da função externa é copiado da biblioteca dinâmica no disco para a memória pelo sistema operacional.Este processo é chamado de vinculação dinâmica.

Bibliotecas dinâmicas podem ser compartilhadas entre vários programas, portanto, a vinculação dinâmica torna os arquivos executáveis ​​menores e economiza espaço em disco. O sistema operacional usa um mecanismo de memória virtual para permitir que uma biblioteca dinâmica na memória física seja compartilhada por todos os processos que usam a biblioteca, economizando memória e espaço em disco

Biblioteca estática

Geralmente, ao empacotar para outros, você fornecerá a biblioteca estática e os arquivos de cabeçalho uns aos outros, para que outros possam reutilizar seu código, que é altamente portátil, mas custa mais recursos e muitas bibliotecas estáticas podem ser duplicadas.

生成静态库
[root@localhost linux]# ar -rc libmymath.a add.o sub.o
ar是gnu归档工具,rc表示(replace and create)
查看静态库中的目录列表
[root@localhost linux]# ar -tv libmymath.a
rw-r--r-- 0/0 1240 Sep 15 16:53 2017 add.o
rw-r--r-- 0/0 1240 Sep 15 16:53 2017 sub.o
t:列出静态库中的文件
v:verbose 详细信息
[root@localhost linux]# gcc main.c -L. -lmymath
-L 指定库路径
-l 指定库名
测试目标文件生成后,静态库删掉,程序照样可以运行。

Caminho de busca da biblioteca

Pesquise o diretório especificado por -L da esquerda para a direita.
O diretório especificado pela variável de ambiente (LIBRARY_PATH)
é o diretório especificado pelo sistema
/ usr / lib
/ usr / local / lib

Biblioteca dinâmica

Gerar biblioteca dinâmica:

shared: 表示生成共享库格式
fPIC:产生位置无关码(position independent code)
库名规则:libxxx.so

A diferença entre a compilação e a biblioteca estática é que não há estática e o nome da biblioteca dinâmica é seguido por l, ou seja, lib e .so são removidos

Exemplo: gcc main.o -o main –L. -Lhello

Executar biblioteca dinâmica

1 Copie o arquivo .so para o caminho da biblioteca compartilhada do sistema, geralmente referindo-se a / usr / lib
2. A alteração LD_LIBRARY_PATH// não requer a adição de suas próprias variáveis ​​de ambiente após L
3. ldconfig configuration /etc/ld.so.conf.d/ , atualização ldconfig

Biblioteca externa

Na verdade, existem muitas bibliotecas no sistema e geralmente consistem em um conjunto de funções inter-relacionadas usadas para completar uma tarefa comum. Por exemplo, a função usada para lidar com a exibição da tela (biblioteca ncurses)
(agora a maioria das bibliotecas de lib em nuvem também tem bibliotecas externas que são mais convenientes, se não houver máquina virtual, você precisa usar a operação anterior para operar)
-lm significa vincular o arquivo de biblioteca libm.so ou libm.a

Acho que você gosta

Origin blog.csdn.net/weixin_43762735/article/details/115311460
Recomendado
Clasificación