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 / 519009
Accepted
ThreadGuy
ThreadGuy
Asked: 2019-05-15 23:03:10 +0800 CST2019-05-15 23:03:10 +0800 CST 2019-05-15 23:03:10 +0800 CST

spin_lock vs spin_lock_irq vs spin_lock_irqsave

  • 772

Existem três funções spin_lock no kernel com as quais estou ocupado atualmente.

  • spin_lock
  • spin_lock_irq
  • spin_lock_irqsave

Eu só encontro contribuições cobrindo apenas dois deles (incluindo a documentação do Linux).
Em seguida, as respostas ou explicações são formuladas de forma ambígua ou contrárias umas às outras ou mesmo contêm comentários dizendo que a explicação está errada. Isso torna difícil obter uma visão geral.
Alguns conceitos básicos são claros para mim, como por exemplo, no contexto de interrupção, um simples spin_lock() pode resultar em um deadlock. Mas eu realmente apreciaria uma imagem completa sobre este assunto.

Eu preciso entender:

  • Quando devemos ou devemos usar qual versão, quando não devemos?
  • Quando não é necessário usar uma versão mais segura, mas não prejudica (exceto para desempenho)?
  • Qual é o motivo para usar uma versão em uma situação específica?
linux kernel
  • 1 1 respostas
  • 7854 Views

1 respostas

  • Voted
  1. Best Answer
    Torin
    2019-05-16T01:20:40+08:002019-05-16T01:20:40+08:00

    Uma breve descrição é fornecida no Capítulo 5. Condições de concorrência e corrida de drivers de dispositivo Linux, terceira edição

    void spin_lock(spinlock_t *lock);
    void spin_lock_irqsave(spinlock_t *lock, unsigned long flags);
    void spin_lock_irq(spinlock_t *lock);
    

    spin_lock_irqsavedesabilita interrupções (somente no processador local) antes de fazer o spinlock; o estado de interrupção anterior é armazenado em flags. Se você tem certeza absoluta de que nada mais pode ter desabilitado as interrupções no seu processador (ou, em outras palavras, você tem certeza de que deve habilitar as interrupções ao liberar seu spinlock), você pode usar spin_lock_irqem vez disso e não precisa acompanhar os sinalizadores .

    As spin_lock_irq*funções são importantes se você espera que o spinlock possa ser mantido no contexto de interrupção. A razão é que, se o spinlock for mantido pela CPU local e, em seguida, a CPU local atender a uma interrupção, que também tentará bloquear o spinlock, você terá um deadlock.

    • 6

relate perguntas

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

  • Como os desenvolvedores do kernel Linux lidam com seu trabalho com milhões de linhas de código? É um método? [fechado]

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

  • Acesse o sistema de arquivos como usuário root

Sidebar

Stats

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

    Possível firmware ausente /lib/firmware/i915/* para o módulo i915

    • 3 respostas
  • Marko Smith

    Falha ao buscar o repositório de backports jessie

    • 4 respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

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

    • 7 respostas
  • Martin Hope
    user12345 Falha ao buscar o repositório de backports jessie 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl Por que a maioria dos exemplos do systemd contém WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +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

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