Princípios do sistema operacional Capítulo III do agendamento e deadlock do processador (2)

3.6 Prevenção de deadlock

O método para evitar conflitos é destruir uma ou várias das quatro condições necessárias para evitar conflitos. Como a condição mutuamente exclusiva é necessária para um dispositivo não compartilhado, ele não só pode ser alterado, mas também deve ser garantido; portanto, é principalmente para destruir as três últimas condições que causam um conflito.

3.6.1 Quebrando a condição "solicitar e manter"

Para destruir a condição "solicitar e reter", o sistema deve garantir que, quando um processo solicite recursos, ele não possa reter recursos não preemptivos. Essa garantia pode ser alcançada através dos seguintes dois protocolos diferentes:

1. O contrato estipula que todos os processos devem aplicar todos os recursos necessários em todo o processo de operação de uma só vez antes de começarem a executar.
2. Este protocolo é uma melhoria no primeiro protocolo, que permite que um processo comece a ser executado somente após a obtenção dos recursos necessários no estágio inicial da operação.

3.6.2 Prejudique a condição "imprevisível"

Para destruir a condição "não preemptável", o contrato estipula que, quando um processo que mantém certos recursos não preemptivos faz uma nova solicitação de recurso e não pode ser atendido, ele deve liberar todos os recursos que foram retidos e, posteriormente, precisar Então reaplique. Isso significa que os recursos já ocupados pelo processo serão liberados ou antecipados temporariamente, destruindo assim a condição "não preemptiva".

3.6.3 Quebrar a condição de "loop de espera"

Uma maneira de garantir que a condição "espera circular" não seja mantida é classificar linearmente todos os tipos de recursos no sistema e atribuir diferentes números de série.

3.7 Evitando deadlock

Evitar deadlock também é uma estratégia para evitar antecipadamente, mas não é necessário tomar medidas restritivas antecipadamente para destruir as condições necessárias para gerar deadlock, mas para impedir que o sistema entre em um estado inseguro durante a alocação dinâmica de recursos para evitar deadlock. . A limitação imposta por esse método é fraca e pode obter um melhor desempenho do sistema. Atualmente, esse método é comumente usado para evitar conflitos.

3.7.1 Status de segurança do sistema

No método de prevenção de impasse, o estado do sistema é dividido em um estado seguro e um estado inseguro. Quando o sistema está em um estado seguro, os bloqueios podem ser evitados. Por outro lado, quando o sistema estiver em um estado inseguro, ele poderá entrar em um estado de conflito.

  1. Estado de segurança
    Nesse método, o processo pode solicitar recursos dinamicamente, mas antes que o sistema aloque recursos, ele deve primeiro calcular a segurança dessa alocação de recursos.
  2. Exemplo de estado seguro
    Suponha que haja três processos P1, P2 e P3 no sistema, com um total de 12 unidades de fita. O processo P1 requer um total de 10 unidades de fita e P2 e P3 requerem 4 e 9 unidades, respectivamente. Suponha que no momento T0, os processos P1, P2 e P3 tenham obtido 5, 2 e 2 unidades de fita, respectivamente, e ainda existam 3 ociosos não alocados, conforme mostrado na tabela a seguir:
    Insira a descrição da imagem aqui
  3. Transição de um estado seguro para um estado inseguro
    Se os recursos não forem alocados de acordo com uma sequência segura, o sistema poderá inserir um estado inseguro a partir de um estado seguro.

3.7.2 Usando o algoritmo do banqueiro para evitar conflitos

O algoritmo mais representativo para evitar conflitos é o algoritmo banqueiro de Dijkstra. Esse nome é dado porque o algoritmo foi originalmente projetado para o sistema bancário para garantir que, quando o banco emite empréstimos em dinheiro, não acontecerá que não possa atender às necessidades de todos os clientes. Também pode ser usado no sistema operacional para evitar conflitos.

1. A estrutura de dados
no algoritmo do banqueiro Para realizar o algoritmo do banqueiro, quatro estruturas de dados devem ser definidas no sistema para descrever os recursos disponíveis no sistema, os requisitos máximos de recursos de todos os processos e a alocação de recursos no sistema. E quantos recursos são necessários para todos os processos.
(1) Vetor de recursos disponíveis Disponível.
(2) Matriz de demanda máxima
(3) Matriz de alocação.
(4) Precisa de matriz Precisa.

2. Algoritmo de banqueiro
Seja Requesti o vetor de solicitação do processo Pi. Se Request i [j] = K, significa que o processo Pi precisa de recursos do tipo K Rj. Quando Pi envia uma solicitação de recurso, o sistema verifica de acordo com as seguintes etapas:
(1) Se Solicitação i [j] ≤Precisa [i, j], vá para a etapa (2); caso contrário, é considerado um erro devido ao número de recursos de que precisa Excedeu o máximo declarado.
(2) Se a Solicitação i [j] ≤ Disponível [j], vá para a etapa (3); caso contrário, isso significa que não há recursos suficientes e o Pi deve esperar.
(3) O sistema tenta alocar recursos para o processo Pi e modificar os valores na seguinte estrutura de dados: Disponível [j] = Disponível [j] - Pedido i [j]; Alocação [i, j] = Alocação [i, j ] + Request i [j]; Need [i, j] = Need [i, j] -Request i [j];
(4) O sistema executa um algoritmo de segurança para verificar se o sistema está em um estado seguro após essa alocação de recursos. Se for seguro, os recursos serão formalmente alocados ao processo Pi para concluir a alocação; caso contrário, a alocação de avaliação será invalidada e o status original da alocação de recursos será restaurado para deixar o processo aguardar.

3. Algoritmo de
segurança O algoritmo de segurança executado pelo sistema pode ser descrito da seguinte maneira:
(1) Defina dois vetores: vector Vetor de trabalho, que representa o número de vários tipos de recursos que o sistema pode fornecer ao processo para continuar em execução, que contém m Elemento, no início da execução do algoritmo de segurança, Trabalho: = Disponível; ② Concluir: Indica se o sistema possui recursos suficientes alocados ao processo para completá-lo. No início, conclua [i]: = false; quando houver recursos suficientes alocados para o processo, deixe concluir [i]: = true.
(2) Encontre um processo que atenda às seguintes condições do conjunto de processos: ① Concluir [i] = falso; ② Necessário [i, j] ≤Trabalho [j]; se encontrado, vá para a etapa (3); caso contrário, vá para Etapa (4).
(3) Após o processo Pi obter recursos, ele pode ser executado com êxito até a conclusão e os recursos alocados a ele são liberados, portanto, deve ser executado: Trabalho [j] = Trabalho [j] + Alocação [i, j];
    Finalização [i ] = true;  
    vá para a etapa 2;
(4) Se Concluir [i] = true de todos os processos for satisfeito, significa que o sistema está em um estado seguro; caso contrário, o sistema está em um estado inseguro.

3.8 Detecção e liberação de deadlock

Se nem medidas de prevenção de conflito nem algoritmos de prevenção de conflito forem fornecidos no sistema, é provável que o sistema esteja em conflito. Nesse caso, o sistema deve fornecer dois algoritmos: algorith Algoritmo de detecção de deadlock. Este método é usado para detectar o estado do sistema e determinar se ocorreu um conflito no sistema. Algorith Algoritmo de liberação de deadlock. Quando é determinado que ocorreu um conflito no sistema, o algoritmo pode ser usado para liberar o sistema do estado de conflito.

3.8.1 Detecção de deadlock

Para detectar se ocorreu um impasse no sistema, o sistema deve: request salvar informações de solicitação e alocação sobre recursos; ② fornecer um algoritmo que use essas informações para detectar se o sistema entrou em um estado de impasse.
1. O
impasse do sistema Gráfico de alocação de recursos (Gráfico de alocação de recursos) pode ser descrito usando o gráfico de alocação de recursos.

O gráfico é um G = duplo (N, E) composto por um conjunto de nós N e um conjunto de arestas E. Ele tem as seguintes definições e restrições:
(1) Divida N em dois sub mutuamente exclusivos Defina, ou seja, um conjunto de nós do processo P = {P1, P2,…, Pn} e um conjunto de nós do recurso R = {R1, R2,…, Rn}, N = P∪R. No exemplo mostrado na Figura 3-19, P = {P1, P2}, R = {R1, R2}, N = {R1, R2} ∪ {P1, P2}.
(2) Qualquer extremidade e ∈ E em E está conectada a um nó em P e um nó em R, e = {Pi, Rj} é a borda de solicitação de recurso, e o processo Pi aponta para o recurso Rj, Isso significa que o processo Pi solicita uma unidade de recursos Rj. E = {Rj, Pi} é o lado da alocação de recursos.O recurso Rj aponta para o processo Pi, o que significa que uma unidade do recurso Rj é alocada para o processo Pi. A Figura 3-19 mostra duas arestas de solicitação e duas de distribuição, a saber E = {(P1, R2), (R2, P2), (P2, R1), (R1, P1)}.

Insira a descrição da imagem aqui
2. Impasse

Podemos usar o método de simplificação do gráfico de alocação de recursos (Figura 3-19) para detectar se o sistema está no estado de deadlock quando está no estado S. O método simplificado é o seguinte:
(1) No diagrama de alocação de recursos, encontre um nó de processo Pi que não seja bloqueador nem independente. Em uma situação tranquila, o Pi pode obter os recursos necessários e continuar em execução até a operação ser concluída e liberar todos os recursos que possui, o que equivale a eliminar o lado da solicitação e o lado da alocação do Pi, tornando-o um nó isolado. Na Figura 3-20 (a), as duas arestas de distribuição e uma aresta de solicitação de P1 são eliminadas para formar a situação mostrada na Figura (b).

Insira a descrição da imagem aqui

(2) Depois que P1 libera recursos, P2 pode obter recursos e continuar em execução, até que P2 conclua e libere todos os recursos que possui, formando a situação mostrada na Figura ©, ou seja, duas arestas de solicitação e uma alocação de P2 Desaparecer.
(3) Após uma série de simplificações, se todas as arestas do gráfico puderem ser eliminadas para que todos os nós do processo se tornem nós isolados, pode-se dizer que o gráfico está completamente simplificado; se o gráfico não puder ser feito através de qualquer processo Completamente simplificado, diz-se que o gráfico não pode ser completamente simplificado.

3. Estrutura de dados na detecção de deadlock

A estrutura de dados na detecção de deadlock é semelhante à estrutura de dados no algoritmo do banqueiro:
(1) Vetor de recursos disponíveis, disponível, que representa o número disponível de cada tipo de recurso em m tipos de recursos.
(2) Escreva o processo que não ocupa recursos (alocação de vetor = 0) na tabela L, ou seja, Li∪L.
(3) Encontre um processo com Requesti≤Work no conjunto de processos e faça o seguinte: ① Simplifique seu diagrama de alocação de recursos, libere recursos e aumente o vetor de trabalho Work = Work + Allocation i. Escreva na lista L.
(4) Se todos os processos não puderem ser registrados na tabela L, isso indica que o diagrama de alocação de recursos do estado S do sistema não pode ser completamente simplificado. Portanto, o estado do sistema será bloqueado.

3.8.2 Liberação de deadlock

1. O método de finalização do processo

  1. Terminar todos os processos de deadlock
    Esse é o método mais simples, ou seja, para finalizar todos os processos de deadlock, o deadlock será naturalmente levantado, mas o preço pago pode ser muito grande. Como alguns desses processos podem estar em execução há muito tempo e estão chegando ao fim, uma vez encerrados, pode-se dizer que eles estão "perdidos" e precisam começar tudo de novo. Pode haver outros custos, e eu não os listarei aqui.
  2. Finalizando processos um por um Um
    método um pouco mais suave é finalizar os processos um a um em uma determinada ordem até que haja recursos suficientes para interromper o loop e aguardar para liberar o sistema do estado de deadlock. Mas o custo desse método também pode ser significativo. Como toda vez que você encerra um processo, é necessário usar o algoritmo de detecção de deadlock para determinar se o deadlock do sistema foi liberado; caso contrário, você deve encerrar outro processo. Além disso, ao adotar a estratégia de finalizar o processo um por um, também envolve qual estratégia deve ser adotada para selecionar um processo a ser finalizado. A base mais importante para a escolha de uma estratégia é que o "custo seja o menor" para a remoção do impasse. Mas qual é o "menor custo", é difícil ter uma medida precisa.

2. Algoritmo de contato de deadlock com custo mínimo
Insira a descrição da imagem aqui

Publicado 123 artigos originais · Curtidas 91 · Visitantes + de 10.000

Acho que você gosta

Origin blog.csdn.net/weixin_43092232/article/details/105541023
Recomendado
Clasificación