Baixe o app para aproveitar ainda mais
Prévia do material em texto
SISTEMAS OPERACIONAIS Cleverson Lopes Ledur Gerência de processos: identificando seus aspectos em sistemas operacionais Objetivos de aprendizagem Ao final deste texto, você deve apresentar os seguintes aprendizados: � Definir a função de um processo na dinâmica de funcionamento do sistema operacional. � Reconhecer os tipos de algoritmos utilizados para escalonamento de processos. � Identificar a função das threads. Introdução Um processo é basicamente um programa em execução. A execução de um processo geralmente ocorre de forma sequencial e é definida como uma entidade que representa a unidade básica de trabalho a ser implementada no sistema. Em termos simples, escrevemos nossos pro- gramas de computador em um arquivo de texto e, quando executamos esse programa, ele se torna um processo que executa todas as tarefas mencionadas no texto. O sistema operacional abstrai toda essa execução, realizando diversas operações e escalonamentos. Neste capítulo, você vai aprender mais sobre como o sistema opera- cional trata os processos. Vai definir a função de um processo na dinâmica de funcionamento do sistema operacional; vai reconhecer os tipos de algoritmos utilizados para escalonamento de processos e, também, vai identificar a função das threads. Processos no sistema operacional Há muitos anos, a maioria dos sistemas de computadores usava um único processador, contendo uma CPU com um único núcleo de processamento. O núcleo é o componente que executa e registra instruções para armazenar dados localmente. Uma única CPU principal, com seu núcleo, é capaz de executar um conjunto de instruções de propósito geral, incluindo instruções de processos. Esses sistemas também possuem outros processadores para fins especiais, que podem vir na forma de processadores específicos do dispositivo, como controladores de disco, teclado e gráficos. Todos esses processadores de propósito especial executam um conjunto limitado de instruções e não executam processos. Às vezes, são gerenciados pelo sistema operacional, que lhes envia informações sobre a próxima tarefa e monitora seus status. Assim, um microprocessador controlador de disco recebe uma sequência de solicitações do núcleo principal da CPU e implementa sua própria fila de disco e seu próprio algoritmo de agendamento. Esse arranjo alivia a CPU principal da sobrecarga do agendamento de disco. Também os teclados contam com um microprocessador, para converter as combinações de teclas em códigos a serem enviados para a CPU (SILBERSCHATZ; GAGNE; GALVIN, 2012; TANENBAUM; BOS, 2014). Em outros sistemas ou circunstâncias, os processadores para fins espe- ciais são componentes de baixo nível incorporados ao hardware. O sistema operacional não pode se comunicar com esses processadores; eles fazem seus trabalhos de forma autônoma. O uso de microprocessadores para fins especiais é comum e não transforma um sistema de processador único em um multiprocessador. Se houver apenas uma CPU de uso geral, com um único núcleo de processamento, o sistema será um sistema de processador único. De acordo com essa definição, no entanto, poucos sistemas computacionais contemporâneos são sistemas de processador único. Nos computadores modernos, de dispositivos móveis a servidores, dominam os sistemas multiprocessados. Esses sistemas costumam ter dois (ou mais) processadores, cada um com uma CPU de núcleo único. Os processadores compartilham o barramento do computador e, às vezes, o relógio, a memória e os dispositivos periféricos. A principal vantagem dos sistemas multiprocessadores é o aumento da taxa de transferência. Ou seja, aumentando o número de processadores, esperamos realizar mais trabalhos em menos tempo. A taxa N de aumento de velocidade com processadores, no entanto, não é N; é menor que N. Quando vários processadores cooperam em uma tarefa, certa quantidade de sobrecarga é incorrida para manter todas Gerência de processos: identificando seus aspectos em sistemas operacionais2 as partes funcionando corretamente. Essa sobrecarga, além da contenção de recursos compartilhados, diminui o ganho esperado de processadores adicionais. Os sistemas multiprocessadores mais comuns usam o multiprocessamento simétrico (SMP), em que cada processador da CPU ponto a ponto realiza todas as tarefas, incluindo funções do sistema operacional e processos do usuário. Observe que cada processador da CPU possui seu próprio conjunto de registros, bem como um cache privado — ou local. No entanto, todos os processadores compartilham memória física pelo barramento do sistema. O benefício desse modelo é que muitos processos podem ser executados simultaneamente (N processos podem ser executados se houver N CPUs) sem causar deterioração significativa no desempenho (SILBERSCHATZ; GAGNE; GALVIN, 2012). No entanto, como as CPUs são separadas, uma pode estar inativa en- quanto outra fica sobrecarregada, resultando em ineficiências. Essas ine- ficiências podem ser evitadas se os processadores compartilham certas estruturas de dados. Um sistema multiprocessador deste formulário permitirá que processos e recursos — como a memória — sejam compartilhados dinamicamente entre os vários processadores e possam equilibrar a carga de trabalho entre eles. A definição de multiprocessador evoluiu ao longo do tempo e agora inclui sistemas multicore, nos quais vários núcleos de computação residem em um único chip. Sistemas multicore podem ser mais eficientes do que múltiplos chips com núcleos únicos porque a comunicação no chip é mais rápida do que a comunicação entre chips. Além disso, um chip com vários núcleos usa significativamente menos energia do que vários chips single-core, o que é um diferencial importante para quem usa dispositivos móveis e laptops. Também temos um design dual-core, com dois núcleos no mesmo chip do processador. Nesse design, cada núcleo possui seu próprio conjunto de registros, bem como seu próprio cache local, geralmente conhecido como cache de nível 1 ou L1. Observe, também, que um cache de nível 2 (L2) é local para o chip, mas é compartilhado pelos dois núcleos de processamento (TANENBAUM; BOS, 2014). A maioria das arquiteturas adota essa abordagem, combinando caches locais e compartilhados, em que os caches locais de nível inferior geralmente são menores e mais rápidos do que os caches compartilhados de nível superior. Além das considerações de arquitetura, como cache, memória e contenção de barramento, um processador multicore com N núcleos aparece no sistema operacional como N CPU padrão. Essa característica pressiona os projetistas 3Gerência de processos: identificando seus aspectos em sistemas operacionais de sistemas operacionais — e os programadores de aplicativos — a fazer uso eficiente desses núcleos de processamento. Praticamente todos os sistemas operacionais modernos — incluindo Windows, Mac OS e Linux, bem como sistemas móveis Android e iOS - suportam sistemas SMP multicore. Adicionar CPUs adicionais a um sistema multiprocessador aumentará o poder de computação, mas, como sugerido anteriormente, o conceito não se adapta muito bem. Uma vez que adicionamos muitas CPUs, a contenção pelo barramento do sistema se torna um gargalo e o desempenho começa a degradar. Uma abordagem alternativa é fornecer cada CPU (ou grupo de CPUs) com sua própria memória local que é acessada através de um pequeno barramento local rápido. As CPUs estão conectadas por uma interconexão compartilhada de sistema, de modo que todas as CPUs compartilhem um espaço de endereço físico. Essa abordagem é conhecida como acesso não uniforme à memória ou NUMA. A vantagem é que, quando uma CPU acessa sua memória local, não apenas é rápida, mas também não há contenção sobre a interconexão do sistema (ARPACI-DUSSEAU; ARPACI-DUSSEAU, 2015; TANENBAUM; BOS, 2014). Assim, os sistemas NUMA podem escalar com mais eficiência à medida que mais processadores são adicionados. Uma possível desvantagem com um sistemaNUMA é o aumento da la- tência quando uma CPU precisa acessar a memória remota pela interconexão do sistema, criando uma possível penalidade de desempenho. Em outras palavras, por exemplo, a CPU 0 não pode acessar a memória local da CPU 3 tão rapidamente quanto pode acessar sua própria memória local, diminuindo o desempenho. Os sistemas operacionais podem minimizar essa penalidade NUMA por meio do planejamento cuidadoso da CPU e do gerenciamento de memória. Como os sistemas NUMA podem ser dimensionados para acomodar um grande número de processadores, estão se tornando cada vez mais populares em servidores, bem como em sistemas de computação de alto desempenho. Por fim, os servidores blade são sistemas nos quais várias placas de processador, placas de entrada/saída (E/S) e placas de rede são colocadas no mesmo chassi. A diferença entre esses e os sistemas multi- processadores tradicionais é que cada placa blade processor é inicializada independentemente e executa seu próprio sistema operacional. Algumas placas blade-server também são multiprocessadoras, o que desfoca as linhas entre os tipos de computadores. Em essência, esses servidores consistem em vários sistemas multiprocessadores independentes (SILBERSCHATZ; GAGNE; GALVIN, 2012). Gerência de processos: identificando seus aspectos em sistemas operacionais4 Um dos aspectos mais importantes dos sistemas operacionais é a capacidade de executar vários programas, já que um único programa não pode, em geral, manter a CPU ou os dispositivos de E/S ocupados o tempo todo. Além disso, os usuários normalmente também querem executar mais de um programa por vez. A multiprogramação aumenta a utilização da CPU, bem como mantém os usuários satisfeitos, organizando programas para que a CPU sempre tenha um para executar. Em um sistema multiprogramado, um programa em execução é denominado processo. A ideia é a seguinte: o sistema operacional mantém vários processos na memória simultaneamente (veja na Figura 1). O sistema operacional escolhe e começa a executar um desses processos. Eventualmente, o processo pode ter que esperar que alguma tarefa, como uma operação de E/S, seja concluída. Em um sistema não multiprogramado, a CPU ficava inativa. Em um sistema multiprogramado, o sistema operacional simplesmente alterna e executa outro processo. Quando esse processo precisa esperar, a CPU alterna para outro processo e assim por diante. Eventualmente, o primeiro processo termina de esperar e recupera a CPU. Desde que pelo menos um processo precise ser executado, a CPU nunca ficará inativa. Essa ideia é comum em outras situações da vida. Um advogado não trabalha para apenas um cliente de cada vez, por exemplo. Enquanto um caso está esperando para ir a julgamento ou ter documentos digitados, o advogado pode trabalhar em outro caso. Se tiver clientes suficientes, o advogado nunca ficará ocioso por falta de trabalho (TANENBAUM; BOS, 2014). A multitarefa é uma extensão lógica da multiprogramação. Em sistemas multitarefa, a CPU executa vários processos alternando entre eles, mas os comutadores ocorrem com frequência, proporcionando ao usuário um tempo de resposta rápido. Considere que, quando um processo é executado, ele geralmente é executado apenas por um curto período de tempo, antes de finalizar ou precisar executar E/S. E/S pode ser interativo; isto é, a saída vai para o usuário por meio de um monitor, por exemplo, e a entrada vem de um teclado, mouse ou tela de toque do usuário (ARPACI-DUSSEAU; ARPACI- -DUSSEAU, 2015). 5Gerência de processos: identificando seus aspectos em sistemas operacionais Figura 1. Layout de memória para um sistema de multiprogramação. Como a E/S interativa normalmente é executada em “velocidades de pes- soas”, pode levar muito tempo para ser concluída. A entrada, por exemplo, pode ser limitada pela velocidade de digitação do usuário. Sete caracteres por segundo é rápido para as pessoas, mas incrivelmente lento para compu- tadores. Em vez de deixar a CPU parada enquanto essa entrada interativa ocorre, o sistema operacional mudará rapidamente a CPU para outro processo. Ter vários processos na memória ao mesmo tempo requer alguma forma de gerenciamento de memória. Além disso, se vários processos estiverem pron- tos para serem executados ao mesmo tempo, o sistema deve escolher qual processo será executado em seguida. Tomar essa decisão é o agendamento da CPU. Por fim, a execução simultânea de vários processos exige que sua capacidade de afetar um ao outro seja limitada em todas as fases do sistema operacional, incluindo agendamento de processos, armazenamento em disco e gerenciamento de memória. Vamos discutir essas considerações ao longo do texto. Em um sistema multitarefa, o sistema operacional deve garantir um tempo de resposta razoável. Um método comum para fazer isso é a memória virtual, uma técnica que permite a execução de um processo que não está completamente na memória (TANENBAUM; BOS, 2014). Gerência de processos: identificando seus aspectos em sistemas operacionais6 A principal vantagem deste esquema é que ele permite que os usuários executem programas maiores que a memória física real. Além disso, abstrai a memória principal em um grande e uniforme array de armazenamento, separando a memória lógica, como vista pelo usuário, da memória física. Esse arranjo libera os programadores da preocupação com as limitações de armazenamento de memória. Sistemas de multiprogramação e multitarefa também devem fornecer um sistema de arquivos. O sistema de arquivos reside em um armazenamento secundário. Portanto, o gerenciamento de armazena- mento deve ser fornecido. Além disso, um sistema deve proteger os recursos do uso inadequado. Para garantir a execução ordenada, o sistema também deve fornecer mecanismos para a sincronização e comunicação do processo, e pode garantir que os processos não fiquem presos em um impasse, sem- pre esperando um pelo outro (SILBERSCHATZ; GAGNE; GALVIN, 2012; ARPACI-DUSSEAU; ARPACI-DUSSEAU, 2015). Escalonamento de processos O objetivo da multiprogramação é ter algum processo em execução, o tempo todo, para maximizar a utilização da CPU. O objetivo do compartilhamento de tempo é alternar o núcleo da CPU entre os processos com tanta frequên- cia que os usuários podem interagir com cada programa enquanto está em execução. Para atender a esses objetivos, o agendador de processos seleciona um processo disponível (possivelmente de um conjunto de vários processos disponíveis) para a execução do programa em um núcleo. Cada núcleo da CPU pode executar um processo de cada vez. Para um sistema com um único núcleo de CPU, nunca haverá mais de um processo sendo executado por vez, enquanto um sistema multicore pode executar vários processos ao mesmo tempo. Se houver mais processos do que núcleos, os processos em excesso terão que esperar até que um núcleo seja liberado e possa ser remarcado. O número de processos atualmente na memória é conhecido como o grau de multiprogramação (TANENBAUM; BOS, 2014). Equilibrar os objetivos de multiprogramação e compartilhamento de tempo também requer considerar o comportamento geral de um processo. A maioria dos processos pode ser descrita, de modo geral, como ligada por E/S ou por CPU. Um processo de E/S, porém, gasta mais tempo fazendo E/S do que fazendo cálculos. Um processo ligado à CPU, por outro lado, gera solicitações de E/S com pouca frequência, usando mais do seu tempo fazendo cálculos. 7Gerência de processos: identificando seus aspectos em sistemas operacionais Agendando filas À medida que os processos entram no sistema, são colocados em uma fila, onde estão prontos e aguardando para serem executados no núcleo de uma CPU. Essa fila geralmente é armazenada como uma lista encadeada: um cabeçalho de fila pronta contém ponteiros para o primeiro PCB na lista e cada PCB inclui um campo de ponteiro que aponta para o próximo PCB. O sistema também inclui outras filas (SILBERSCHATZ;GAGNE; GALVIN, 2012). Quando um processo é alocado em um núcleo da CPU, ele é executado por um tempo e, eventualmente, termina, é interrompido ou aguarda a ocorrência de um determinado evento, como a conclusão de uma solicitação de E/S. Su- ponha que o processo faça uma solicitação de E/S para um dispositivo, como um disco. Como os dispositivos são muito mais lentos que os processadores, o processo terá que aguardar a disponibilidade da E/S. Os processos que estão aguardando a ocorrência de um determinado evento — como a conclusão da E/S — são colocados em uma fila de espera [ARPACI-DUSSEAU; ARPACI- -DUSSEAU, 2015]. Um novo processo é inicialmente colocado na fila pronta. Ele aguarda lá até que seja selecionado para execução ou despachado. Depois que o processo é alocado em um núcleo da CPU e está em execução, um de vários eventos pode ocorrer: � O processo pode emitir uma solicitação de E/S e, em seguida, ser co- locado em uma fila de espera de E/S. � O processo pode criar um novo processo filho e depois ser colocado em uma fila de espera enquanto aguarda a rescisão do filho. � O processo pode ser removido à força do núcleo, como resultado de uma interrupção ou ter seu período de tempo expirado, e ser colocado de volta na fila pronta. Nos dois primeiros casos, o processo eventualmente passa do estado de espera para o estado pronto e é colocado de volta na fila pronta. Um processo continua esse ciclo até que termine, momento em que é removido de todas as filas e tem seu PCB e recursos desalocados. Planejamento de CPU Um processo migra entre a fila pronta e várias filas de espera durante toda a sua existência. A função do agendador de CPU é selecionar entre os processos Gerência de processos: identificando seus aspectos em sistemas operacionais8 que estão na fila pronta e alocar um núcleo da CPU a um deles. O planejador de CPU deve selecionar um novo processo para a CPU com frequência. Um processo de conexão de E/S pode ser executado por apenas alguns milisse- gundos antes de aguardar uma solicitação de E/S. Embora um processo de conexão com a CPU exija um núcleo da CPU por períodos mais longos, é improvável que o agendador conceda o núcleo a um processo por um período prolongado. Em vez disso, é provável que ele seja projetado para remover forçadamente a CPU de um processo e agendar outro processo para ser executado. Portanto, o agendador de CPU é executado pelo menos uma vez a cada 100 milissegundos, embora normalmente com muito mais frequência (TANENBAUM; BOS, 2014). Alguns sistemas operacionais têm uma forma intermediária de escalona- mento, conhecida como swapping, cuja ideia-chave é que às vezes pode ser vantajoso remover um processo da memória (e da contenção ativa para a CPU) e assim reduzir o grau de multiprogramação. Mais tarde, o processo pode ser reintroduzido na memória e sua execução pode ser continuada de onde parou. Esse esquema é conhecido como troca porque um processo pode ser “trocado” da memória para o disco, onde seu status atual é salvo e depois “trocado”, do disco de volta para a memória, onde seu status é restaurado. Normalmente, a troca é necessária apenas quando a memória foi super comprometida e deve ser liberada. O planejamento da CPU lida com o problema de decidir qual dos processos na fila pronta deve ser alocado ao núcleo da CPU. Existem muitos algoritmos de escalonamento de CPU diferentes. Embora a maioria das arquiteturas de CPU modernas tenham múltiplos núcleos de processamento, descrevemos esses algoritmos de agendamento no contexto de apenas um núcleo de proces- samento disponível, ou seja: uma única CPU que possui um único núcleo de processamento. Portanto, o sistema é capaz de executar apenas um processo de cada vez (TANENBAUM; BOS, 2014). Dentre esses diferentes algoritmos, que fazem o escalonamento de processos, temos: � Primeiro a chegar, primeiro a servir (FCFS) — algoritmo de pro- gramação mais simples, que programa de acordo com os tempos de chegada dos processos. � Menor tarefa primeiro (SJF) — o processo que possui o menor tempo de burst é agendado primeiro. � Tempo restante mais curto primeiro (SRTF) — é o modo preemptivo do algoritmo SJF, no qual as tarefas são programadas de acordo com o menor tempo restante. 9Gerência de processos: identificando seus aspectos em sistemas operacionais � Round Robin — a cada processo, é atribuído um tempo fixo, de forma cíclica. � Agendamento baseado em prioridade (não preemptivo) — neste agen- damento, os processos são agendados de acordo com suas prioridades, ou seja, o processo de prioridade mais alta é o primeiro agendamento. Se as prioridades de dois processos coincidirem, são agendadas de acordo com a hora de chegada. � Maior taxa de resposta próxima (HRRN) — são agendados processos com maior taxa de resposta. Relação de Resposta = (Tempo de Espera + Tempo de Ruptura) / Tempo de Ruptura � Agendamento de fila multinível — de acordo com a prioridade, os processos são colocados nas diferentes filas. Geralmente, o processo de alta prioridade é colocado na fila de nível superior. Somente após a conclusão dos processos da fila de nível superior, os processos enfi- leirados de nível inferior são agendados. � Agendamento de fila de realimentação multinível — permite que o processo se mova entre as filas. A ideia é separar processos de acordo com as características de suas explosões de CPU. Se um processo usa muito tempo de CPU, ele é movido para uma fila de prioridade mais baixa. Threads Uma thread de execução é a menor sequência de instruções programadas que pode ser gerenciada independentemente por um planejador, que normalmente faz parte do sistema operacional. A implementação de threads e processos difere entre sistemas operacionais mas, na maioria dos casos, um thread é um componente de um processo. Vários threads podem existir em um processo, executando simultaneamente e compartilhando recursos, como a memória, por exemplo, enquanto diferentes processos não compartilham esses recursos. Em particular, os threads de um processo compartilham seu código executável e os valores de suas variáveis a qualquer momento (SILBERSCHATZ; GAGNE; GALVIN, 2012). Gerência de processos: identificando seus aspectos em sistemas operacionais10 Os threads diferem dos processos do sistema operacional multitarefa tra- dicional nas seguintes características: � Processos são tipicamente independentes, enquanto os threads existem como subconjuntos de um processo. � Os processos carregam consideravelmente mais informações de estado do que os threads, enquanto vários threads dentro de um processo com- partilham o estado do processo, bem como a memória e outros recursos. � Os processos têm espaços de endereço separados, enquanto os segmentos compartilham seu espaço de endereço. � Os processos interagem somente por meio de mecanismos de comuni- cação entre processos fornecidos pelo sistema. � A alternância de contexto entre threads no mesmo processo é tipicamente mais rápida que a alternância de contexto entre processos. Multithreading Encontrado principalmente em sistemas operacionais multitarefa, o multithre- ading é um modelo de programação e execução amplamente difundido, que permite a coexistência de vários threads no contexto de um processo. Esses threads compartilham os recursos do processo, mas são capazes de executar de forma independente. O modelo de programação encadeado fornece aos desenvolvedores uma abstração útil da execução simultânea. O multithreading também pode ser aplicado a um processo para permitir a execução paralela em um sistema de multiprocessamento (TANENBAUM; BOS, 2014). Os aplicativos multithreaded oferecem as seguintes vantagens: � Capacidade de resposta — o multithreading pode permitir que um aplicativo permaneça responsivo à entrada. Em um programa de um thread, se o thread de execução principal bloquear uma tarefa de exe- cução demorada, todo o aplicativo poderácongelar. Ao mover essas tarefas de longa execução para um thread de trabalho que é executado simultaneamente com o thread de execução principal, é possível que o aplicativo permaneça responsivo à entrada do usuário durante a exe- cução de tarefas em segundo plano. Por outro lado, na maioria dos casos, o multithreading não é a única maneira de manter um programa responsivo, com sinais não bloqueantes de E/S e/ou Unix disponíveis para obter resultados similares. 11Gerência de processos: identificando seus aspectos em sistemas operacionais � Execução mais rápida — essa vantagem de um programa multithread permite que ele opere mais rapidamente em sistemas de computador que possuem várias unidades de processamento central (CPUs) ou um ou mais processadores multicore, ou em um cluster de máquinas, porque os threads do programa emprestam naturalmente a execução paralela, assumindo independência suficiente (que não precisam esperar um pelo outro). � Menor consumo de recursos — usando threads, um aplicativo pode servir vários clientes simultaneamente usando menos recursos do que precisaria ao usar várias cópias de processo de si mesmo. Por exemplo, o servidor HTTP Apache usa conjuntos de threads (um conjunto de threads de atendentes para atender solicitações de entrada e um conjunto de threads de servidores para processar essas solicitações). � Melhor utilização do sistema — um sistema de arquivos usando vários threads pode atingir maior throughput e menor latência, já que dados em um meio mais rápido (como cache memory) podem ser recuperados por um thread enquanto outro recupera dados de um meio mais lento, como armazenamento externo) com nenhum thread aguardando o outro terminar. � Compartilhamento e comunicação simplificados — ao contrário dos processos, que exigem um mecanismo de passagem de mensagens ou de memória compartilhada para realizar comunicação entre processos (IPC), os threads podem se comunicar por meio de dados, códigos e arquivos que já compartilham. � Paralelização — os aplicativos que desejam usar sistemas multicore ou multi-CPU podem usar multithreading para dividir dados e tarefas em subtarefas paralelas e permitir que a arquitetura subjacente gerencie como os threads são executados (simultaneamente, em um núcleo, ou em paralelo, em vários núcleos). Ambientes de computação de GPU com CUDA e OpenCL usam o modelo de multithreading, onde dezenas a centenas de threads são executados em paralelo, através de dados em um grande número de núcleos. No entanto, multithreading também tem algumas desvantagens: � Sincronização — como os threads compartilham o mesmo espaço de endereço, o programador deve ter cuidado para evitar condições de Gerência de processos: identificando seus aspectos em sistemas operacionais12 corrida e outros comportamentos não intuitivos. Para que os dados sejam manipulados corretamente, os encadeamentos geralmente precisarão se encontrar no prazo para processar os dados na ordem correta. Os threads também podem exigir operações mutuamente exclusivas (geralmente implementadas usando mutual exclusion, ou mutex, como também é conhecido o termo) para evitar que dados comuns sejam modificados ou lidos simultaneamente durante o processo de modificação. O uso descuidado de tais primitivos pode levar a deadlocks, livelocks ou corridas por recursos. � Travamento de um processo — uma operação ilegal realizada por um thread trava todo o processo, ou seja: uma thread mal comportada pode interromper o processamento de todos os outros threads no aplicativo. Visualizando as threads em execução No sistema operacional Linux, podemos ver quais são as threads sendo executadas para determinados processos. O processo de visualização dessas threads é bastante simples. Basta seguir os seguintes passos, como mostra o resumo a seguir. 1. Execute o comando top: # top 13Gerência de processos: identificando seus aspectos em sistemas operacionais 2. Pressione Shift + h. A outra forma de verificar os threads do Linux é através do comando "ps". Execute o comando: # ps -eLf Gerência de processos: identificando seus aspectos em sistemas operacionais14 ARPACI-DUSSEAU, R. H.; ARPACI-DUSSEAU, A. C. Operating systems: Three Easy Pieces. Madison: Arpaci-Dusseau Books, 2015. SILBERSCHATZ, A.; GAGNE, G.; GALVIN, P. B. Operating system concepts. 9. ed. Danvers: Wiley, 2012. TANENBAUM, A. S.; BOS, H. Modern operating system. 4. ed. Upper Saddle River: Prentice Hall, 2014. Leituras recomendadas GERALDI, L. M. A.; GALASSI, C. R.; FORMICE, C. R. Elucidando os sistemas operacionais: um estudo sobre seus conceitos. Joinville: Clube dos autores, 2013. SILBERSCHATZ, A.; GAGNE, G.; GALVIN, P. B. Sistemas operacionais com Java. 8. ed. Rio de Janeiro: Campus, 2016. TANENBAUM, A. S.; BOS, H. Sistemas operacionais modernos. 4. ed. São Paulo: Pearson, 2015. 15Gerência de processos: identificando seus aspectos em sistemas operacionais Conteúdo:
Compartilhar