Como o kernel do Linux lida com vários pedidos syscall () paralelos?

1

Eu estou querendo saber o que acontecerá se houver um sistema central múltiplo, digamos, 8 núcleos por ex. e cada tarefa em execução no núcleo faz com que syscall() solicite ao kernel ao mesmo tempo. Minha pergunta é como o kernel lida com vários pedidos paralelos de syscall() , paralelamente ou sequencialmente ou qualquer outro ondulado.

    
por Monc 15.05.2018 / 18:43

1 resposta

2

No passado, as chamadas para o kernel eram serializadas, usando o Big Kernel Lock . Isso foi removido há muito tempo, e mesmo antes que alguns caminhos do kernel não usassem mais o BKL, as chamadas do sistema em particular eram executadas em paralelo por um longo tempo. Com a introdução da preempção no próprio kernel, as chamadas do sistema podem até mesmo interromper umas às outras (veja Qual foi o motivo do não? -preemptividade de kernels Linux mais antigos? para detalhes).

Assim, a resposta curta à sua pergunta é que o kernel lida com várias chamadas paralelas do sistema em paralelo.

Haverá alguns casos em que a execução das chamadas do sistema envolve a aquisição de bloqueios, que serializarão as chamadas conflitantes do sistema, mas isso está ficando mais raro conforme o tempo passa e os bloqueios existentes são removidos ou substituídos por bloqueios mais refinados (quando causam problemas de desempenho).

    
por 15.05.2018 / 18:53