AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 406496
Accepted
Zephyr
Zephyr
Asked: 2017-11-23 23:25:00 +0800 CST2017-11-23 23:25:00 +0800 CST 2017-11-23 23:25:00 +0800 CST

Necessidade de algumas chamadas de sistema

  • 772

Eu entendo muito bem como funciona a chamada do sistema e a necessidade de chamadas do sistema em geral. No entanto, não entendo por que algumas chamadas do sistema, como arquivo create (), arquivo read () e close (), devem ser executadas apenas no modo kernel.

Por exemplo, no arquivo create () e read (), por que isso não pode acontecer no userspace ou no usermode? Como o usuário poderia danificar o sistema criando e lendo um arquivo? Eu tenho a mesma dúvida no caso de chamada de sistema close() também.

linux system-calls
  • 2 2 respostas
  • 133 Views

2 respostas

  • Voted
  1. Best Answer
    dr_
    2017-11-25T02:56:21+08:002017-11-25T02:56:21+08:00

    Não entendo por que algumas chamadas de sistema, como arquivo create (), arquivo read () e close (), devem ser executadas apenas no modo kernel.

    Bem, as chamadas do sistema, por definição, são executadas no modo kernel. No espaço do usuário, eles geralmente estão disponíveis por meio de funções wrapper de biblioteca com o mesmo nome. De man 2 intro:

    Uma chamada de sistema é um ponto de entrada no kernel do Linux. Normalmente, as chamadas do sistema não são invocadas diretamente: em vez disso, a maioria das chamadas do sistema tem funções wrapper de biblioteca C correspondentes que executam as etapas necessárias (por exemplo, interceptar o modo kernel) para invocar a chamada do sistema. Assim, fazer uma chamada de sistema parece o mesmo que invocar uma função de biblioteca normal.

    (veja também man 2 syscall)

    Como dito por @dirkt e @StephenKitt nos comentários, as chamadas do sistema que você mencionou precisam ser executadas no espaço do kernel porque precisam escrever na tabela do descritor de arquivo, acessar os drivers para E/S de arquivo, verificar os direitos de acesso etc.

    • 1
  2. roaima
    2017-11-25T04:12:09+08:002017-11-25T04:12:09+08:00

    Por exemplo, em create()um read()arquivo, por que isso não pode acontecer no espaço do usuário?

    Em algumas plataformas (incluindo as baseadas em Linux), é bem possível executar IO do sistema de arquivos a partir do espaço do usuário. É conhecido como FUSE e você pode ler Filesystem in Userspace para uma introdução ao tópico.

    Existem muitos sistemas de arquivos baseados em FUSE disponíveis, incluindo SSHFS (sistema de arquivos sobre ssh) e S3QL (sistema de arquivos em armazenamento em nuvem).

    O kernel medeia a camada entre o cliente do espaço do usuário (um programa aplicativo) e a implementação do FUSE para que a semântica do sistema de arquivos seja validada e consistente, mas o código IO real para creat(), open(), read(), write(), fcntl(), close()etc. - serviço de espaço.

    • 0

relate perguntas

  • astyle não altera a formatação do arquivo de origem

  • Passe o sistema de arquivos raiz por rótulo para o kernel do Linux

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Matriz JSON para bash variáveis ​​usando jq

    • 4 respostas
  • Marko Smith

    A data pode formatar a hora atual para o fuso horário GMT? [duplicado]

    • 2 respostas
  • Marko Smith

    bash + lê variáveis ​​e valores do arquivo pelo script bash

    • 4 respostas
  • Marko Smith

    Como posso copiar um diretório e renomeá-lo no mesmo comando?

    • 4 respostas
  • Marko Smith

    conexão ssh. Conexão X11 rejeitada devido a autenticação incorreta

    • 3 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Marko Smith

    comando systemctl não funciona no RHEL 6

    • 3 respostas
  • Marko Smith

    rsync porta 22 e 873 uso

    • 2 respostas
  • Marko Smith

    snap /dev/loop em 100% de utilização -- sem espaço livre

    • 1 respostas
  • Marko Smith

    chave de impressão jq e valor para todos no subobjeto

    • 2 respostas
  • Martin Hope
    EHerman Matriz JSON para bash variáveis ​​usando jq 2017-12-31 14:50:58 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Drux A data pode formatar a hora atual para o fuso horário GMT? [duplicado] 2017-12-26 11:35:07 +0800 CST
  • Martin Hope
    AllisonC Como posso copiar um diretório e renomeá-lo no mesmo comando? 2017-12-22 05:28:06 +0800 CST
  • Martin Hope
    Steve Como as permissões de arquivo funcionam para o usuário "root"? 2017-12-22 02:46:01 +0800 CST
  • Martin Hope
    Bagas Sanjaya Por que o Linux usa LF como caractere de nova linha? 2017-12-20 05:48:21 +0800 CST
  • Martin Hope
    Cbhihe Altere o editor padrão para vim para _ sudo systemctl edit [unit-file] _ 2017-12-03 10:11:38 +0800 CST
  • Martin Hope
    showkey Como baixar o pacote não instalá-lo com o comando apt-get? 2017-12-03 02:15:02 +0800 CST
  • Martin Hope
    youxiao Por que os diretórios /home, /usr, /var, etc. têm o mesmo número de inode (2)? 2017-12-02 05:33:41 +0800 CST
  • Martin Hope
    user223600 gpg — o comando list-keys gera uid [ desconhecido ] depois de importar a chave privada para uma instalação limpa 2017-11-26 18:26:02 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve