[Música] Olá vamos então pra aula três de sistemas operacionais e falar na aula de hoje sobre chamada de sistema e interrupção que são os mecanismos aí para chamar a atenção do sistema operacional que encontram-se ocupado fazendo uma outra tarefa a gente tá falando agora de sistemas multiprogramados são os operacionais multiprogramados e onde existem vários programas em execução e eles precisam então chamar atenção de uma eh de um evento que ocorreu no ambiente desse sistema de computação tá na aula passada a gente viu tipos de sistemas operacionais e as formas de a gente estruturar ou implementar
um sistemas operacionais dentre elas o sistema monolítico micr kerna o sistema de camadas estrutura de camadas e estrutura de máquinas virtuais e na aula de hoje então a gente vai falar de dois dois conceitos bastante utilizados bastante falados em sistemas operacionais que seria o conceito de chamado de sistemas e interrupções e que que seria então a chamada de sistema vamos começar por aqui chamada de sistema para vocês terem uma ideia vocês que trabalharam já em linguagem C linguagem Java então se você tá fazendo um printf ali você tá fazendo uma chamada de sistema printf por
si só é um é um exemplo de uma chamada de sistema tá se você tá fazendo um fork tá criando um processo aí você também tem uma chamada de sistema tá assim como eh no no Java se você D um Create process né um evento uma uma chamada lá de Create process você tá fazendo ali nada mais nada menos do que uma chamada ali de sistema então o que que seria essa chamada de sistema chamada de sistema essencialmente é o se uma aplicação ela precisa realizar alguma instrução privilegiada então o que que ela vai fazer
ela vai chamar o módulo sistema operacional então aqui eu tenho uma aplicação essa aplicação ela precisa fazer o quê precisa buscar um dado no disco tá então ela vai fazer o qua vai fazer essa requisição pro sistema operacional que tem a função de quê De fazer a interface assim como de gerenciar os recursos bom se ela vai ter que fazer uma leitura no disco ela vai precisar fazer esse acesso a quem ao disco quem que vai fazer isso o próprio sistema operacional então o sistema operacional vai fazer essa leitura no disco vai passar pro sistema
operacional que por sua vez passa pra aplicação bom mas quem é que faz quem que faz toda essa chamada aqui essa chamada que vocês estão vendo aqui é o que a gente chama justamente De quê De um System Call tá que é o assunto da aula de hoje então esse System Call seria o quê seria a aplicação que vocês estão vendo aqui tá fazer uma chamada aqui no sistema operacional para que essa chamada por sua vez vá para um sistema aí de computação se for aqui uma leitura no disco para que essa leitura no disco
Então ela venha a ser e desempenhada tá então essa chamada de sistema ela obviamente ela vai fazer o quê Ela vai alternar aqui a gente tem o quê aqui a gente tem como vocês estão vendo aqui um nível o nível do usuário né E aqui o nível do quê o nível do kerno tem dois níveis aqui então uma vez que ela passa a sua chamada de da aplicação ela passa desse nível aqui para pro nível de baixo a gente chama isso que ocorreu o quê que ocorreu aí uma transição aí de níveis tá como é
que essas chamadas de sistemas então elas são realizadas essa chamada de sistemas elas são realizadas através da instrução que a gente chama de instruções staps essas instruções straps são instruções que permitem chamar a atenção do sistema operacional ional pegar a requisição do usuário e processar essa requisição então o que que é um Trap voltando repetindo de novo a instrução Trap ela pega a requisição do usuário essa requisição do usuário ela é identificada E então processada pelo sistema operacional Então ela tem três tarefas aí né de eh fazer o handle né ou seja manusear esse essa
chamada identificar essa chamada e executar essa chamada e finalmente passar a resposta essa chamada para quem pra aplicação que o chamou então isso são o quê isso são o que a gente chama de traps né traps nada mais são do que interrupção no nível de software né Então a partir ela faz essa chamada como eu citei agora para vocês através de uma System Call pro sistema operacional e essa sistema operacional então ela vai fazer o quê Ela vai fazer isso eh passar essa requisição pro nível do Hardware tá tá isso isso é feito através dessa
instrução Trap então instrução Trap faz essa funcionalidade de receber e processar a a chamada aí de sistema e lembrando para vocês que após essa chamada eh ser processada após o retorno disso pro para chamar de sistema então ela vai o quê Ela vai continuar a partir do ponto onde ela parou tá então isso é o que ocorre com a funcionalidade da do do Trap então repetindo aqui para vocês né através de um diagrama aqui então Digamos que essa função Trap ocorreu né um printf ou Qualquer que seja ela ocorreu e passa então para essa eh
ocorreu nessa instrução aqui que vocês estão visualizando Então essa instrução uma vez que o sistema operacional uma vez que o aplicação né bem dizer aplicação ela tem que parar de ser de executar para buscar informação no disco com ocorreu com o exemplo que eu passei para vocês ela precisa o quê Ela precisa primeiro parar a sua execução e depois continuar essa execução a partir do ponto onde ela parou tá então todo esse diagrama é justamente para ilustrar esse cenário que vocês estão vendo aqui então ela salva o conteúdo dos registradores altera o modo de um
modo Kernel né pro modo de usuário uma vez que agora quem tá manuseando essa Chamada seria o sistema operacional e ess e ela vai fazer o quê Ela vai identificar que que chamada é essa primeiramente como eu falei para vocês então ela vai primeiro manusear segundo ela vai identificar que chamada é que ocorreu e na terceira no terceiro procedimento ela vai executar o procedimento tá a a receita que ela tem que executar para finalmente voltar a executar o sistema tema tá é como como se fosse assim falando uma linguagem bem simples eu tô assando um
bolo então tenho o quê tenho uma receita de bolo agora o meu filho recebeu uma picada de abelha e precisa de um tratamento ele tá chorando que que seria isso System Call né um System Call Então eu preciso fazer o quê eu preciso tratar aquele aquele evento que tá dentro da minha casa né tá dentro como se fosse o processador né Então tá dentro da minha casa então precis para no momento do ponto onde eu estava para agora eu ter que buscar os primeiros socorros como é que eu faço essa busca dos primeiros socorros tem
que pegar o quê ten que pegar a rotina dos primeiros socorros e a partir daí volto quando ele tiver já tratado e já curado da dor então eu volto pra receita de bolo onde eu tava fazendo tá então mesma coisa que é ilustrado aqui existe aqui uma uma rotina tá eh uma chamada de sistema ocorre nesse nível de aplicação esse nível de aplicação então é é chamado o a rotina de eh rotina de tratamento como vocês estão vendo aqui né essa chamada de sistema então é identificada e aqui ele vai pegar o quê aqui ele
vai pegar sabe o quê esse aqui é um ponteiro ó Isso aqui é um Pointer tá esse Pointer aqui vai possuir o quê vai possuir o endereço onde tá aquela rotina e de tratamento dos primeiros socorros tá então no computador ele tem isso armazenado na memória então se eu dou um print F esse existe uma rotina de tratamento rotina de tratamento para eu Executar a função printf então ele busca essa rotina executa essa rotina e finalmente ele passa isso para aplicação que o chamou tá bom a mesma coisa aqui então então aqui a chamada de
sistema seria o quê Open então dou um Open aqui a partir do momento em que eu dou um Open esse Open então é procurado tá nota que é uma chamada de sistema específica que seria o open então onde tá o open Onde tá a funcionalidade do Open Então isso que ele vai procurar num vetor aqui de qu de endereço aqui né Tem um vetor de endereço onde a função Open então ela vai ser o quê Ela vai ser eh vai ser procurada e uma vez que encontra o endereço do Open Tá o que que ela
vai fazer então ela vai executar cada instrução desse Open finalizado a execução do Open ela volta pra pra interface do sistema operacional que por sua vez recebe o resultado da execução do open tá bom interfaces bom a gente tá a gente falou como é que funciona então o o System calls né agora a gente vai falar de como é que ela é estruturada o System calls né como é que seria a estrutura de System Call porque existem o quê existem diversas diversas funcionalidades existem diversas chamadas de sistemas Então existe o quê existe a necessidade de
organizar isso no interfaces bem definidas de forma então que a gente possa saber como é que as chamadas de sistemas elas eh elas podem ser eh invocadas né então existe uma Interface para esconder essa complexidade aí do System calls tá que é fornecida aí pelo próprio sistema operacional e que muitas vezes a gente chama de quê De apis né então existem apis do Linux apis do Windows né Win 32 api um exemplo de interface da ciscs né E essas interfaces obviamente ela vai o quê Ela vai encapsular encapsular seria esconder aí a complexidade que está
no nível do sistema operacional que seria o quê que seria de novo pessoal o nível do usuário e o nível do quê o nível do kerno tem dois níveis aí né e ele vai encapsular justamente o quê justamente o que tá aqui embaixo que é um uma um detalhe de implementação bastante complexo tá não todo mundo sabe que o Unix ele possui o quê ele possui diversas versões versão aqui da Sam tem a versão aqui que você todo mundo conhece que seria o Unix para x 86 e existe uma versão aqui do AX que seria
a versão de qu a versão da IBM tem várias diversas versões aí que vocês estão vendo aqui né Solares são Linux Entretanto a linguagem em si é só uma eu tenho que rodar aqui né ser capaz de executar uma chamada de sistema o que que seria a chamada de sistema aqui aqui seria uma leitura então dou um read no quê no File description aqui aqui seria o quê que seria aí uma um arquivo né no disco então dou um um read aqui eh joga nesse buffer e com essa variável aqui que que eu tô fazendo
aqui Pessoal esse reach ele tem várias formas tem várias formatações tem várias sintaxes se você for ver no Solaris no Linux e no AX porém o usuário Eu não posso eu tenho que esconder essa essa particularidade de cada plataforma do usuário final para que então eu tenha possa deixar o quê possa deixar o usuário mais confortável para dar uma interface única de de maneira que se ele aprender uma vez eu possa então manusear em todos os sistemas operacionais mas como é que eu vou proceder isso como é que eu vou proceder isso eu procedo isso
através do quê através de uma coisa que a gente chama de wrapper de uma API esse seria o quê um api do cisc tem várias tem várias versões do Unix que tem que possuem particularidades e possuem chamadas diferentes mas existe uma interface genérica que vai me facilitar o quê Vai facilitar com que Aprenda uma único conjunto de instruções e esse conjunto de instruções então ela vai ser o quê Ela vai ser traduzida para cada plataforma diferente tá então isso seria a função dos siscol tá então como eu falei para vocês tem o in 32 posix
assim como tem também a o famoso a java pii que e era todo documentado no e no site da Sam né E que virou Oracle e assim por diante então existem o quê existem essas três principais né interfaces aí que são as interfaces para realizar a chamada de sistema o que que são chamada de sistema são chamadas que você passa para quem são chamadas que ocasionam interrupção no nível de software e essas interrupções Então vão para quê vão pro pro próprio sistema operacional tá eh motivos para utilizar api obviamente é a portabilidade tá uma vocês
viram ali a x Solares e ah o Linux Então existe essa portabilidade esconder a complexidade e acrescentar alguma funcionalidade eh que possa otimizar e cada uma dessas chamadas né bom eh a mesma coisa aqui um outro exemplo que eu tô mostrando aqui para vocês né né então exemplo eu tô dando aqui uma função printf essa função printf então possui o quê eh faz uma função faz a impressão E para isso eu chamo o quê chamo uma API tá que seria uma API do siscol uma interface do siscol e que por sua vez na realidade Vocês
estão vendo aqui que ele vai em vez de chamar o printf ele faz o quê faz um WR eu posso fazer esse printf aqui é para fazer o quê para fazer um WR na tela assim como eu posso fazer um F print f e causar o quê um write na no arquivo e assim por diante Então o que eu quero mostrar aqui é que uma chamada ela converte para uma outra chamada de sistema e que essa pi aqui ela serve para quê para esconder a complexidade que existe na camadas inferiores tá bom interrupções que que
seriam essas interrupções né então a gente viu que o o processo né o programa ele pode fazer a chamada de sistemas e que essa chamada de sistemas a gente chama isso de traps mas existe também uma outra coisa que seria a interrupção então tem dois tipos na realidade tem dois tipos de interrupção a interrupção no nível de software e uma outra interrupção que seria no nível de hardware são dois tipo de interrupção o que a gente viu até agora é a interrupção no nível de software porque cada softw vocês estão vendo aqui ó é um
softw que tá causando o quê tá causando uma interrupção tá causando uma chamada de quê uma chamada de sistema pro sistema operacional tá então isso seria uma interrupção de softw mas existe uma interrupção que é uma interrupção externa tá uma interrupção que ocorre fora do processador e essa interrupção é que a gente chama de interrupção no nível de hardware tá que pode vir de um sinal e elétrico do Hardware tá assim como a causa pode ser também os dispositivos de entrada e saída ou clock exemplo eu não posso deixar um eh eu não posso deixar
vamos eu posso deixar mas que se ocorrer a leitura de um dado no disco tá esse dado no disco ela vai o quê Ela vai reportar pro pra controladora que por sua vez vai reportar pro para qu pro sistema operacional então tem toda essa camada aqui agora eh o sistema operacional ele tá executando uma determinada tarefa o disco ela reporta para mim reporta pro sistema operacional que chegou o quê que chegou a leitura da do pedido anterior então essa leitura nota o seguinte não ocorreu dentro do sistema eh operacional ela ocorreu de fora para dentro
não foi de dentro para fora como ocorria em outros nesses cenários aqui que o processador tá processando uma eh esse programa aqui e ocorreu uma interrupção tá então para definir aqui né Eh o o tratamento da interrupção é exatamente o mesmo de um Trap entre eh ela vai procura também uma rotina de tratamento de interrupção tá e após o tratamento da interrupção Então ela volta onde volta pra próxima instrução onde ocorreu a interrupção nesse ponto aqui então a próxima quando ele voltar o controle vai voltar pra próxima instrução Após a execução do da interrupção Tá
então vamos fazer uma uma diferenciação né aqui eu fazer uma analogia interrupção e traps né a interrupção primeiramente ela um evento que ocorre externamente ao processador tá eh pode ser um disco pode ser um dispositivo de entrada e saída tá ao mesmo tempo eh ela é um evento que é gerada por como eu comentei para vocês por dispositivos de leitura e saída né ao passo que um Trap é um evento que vem dentro do processador tá então tô executando um programa e esse programa ela executa uma eh executa uma um determinado evento tá E esse
evento encontra-se dentro da execução do processador então o enquanto que a interrupção é evento externo o Trap é um evento interno enquanto que a interrupção é uma interrupção de hardware aqui o Trap seria o qu uma interrupção no nível do qu de software tá então para e mostrar um outro exemplo um exemplo aqui do do disco que eu comentei para vocês né então Digamos que o dispositivo finalizou A leit então o que que ele faz ele reporta essa essa finalização então é reportada então pro controlador o controlador por sua vez vai vai passar essa informação
né vai passar um pulso elétrico para pro processador o processador por sua vez Então vai confirmar e que recebeu essa interrupção tá e a partir dessa confirmação da interrupção ela vai verificar se alguém estava por essa interrupção ocorrer Então se Ela leu um dado de um disco ela tem que saber para quem é essa leitura pro disco então ela vai verificar para quem essa leitura pro disco e chamar o quê chamar o processo que está esperando e que está dormindo né que está em espera em virtude do quê em virtude dessa leitura eh ocorrer Tá
bom então concluindo a aula de hoje né a gente falou sobre a chamada de sistema e interrupção a chamada de sistema é o que a gente chama de quê que a gente chama aqui de traps né E aqui essa chamada de sistemas então é no nível de software e além disso que a gente aprendeu é o quê é que ela é um evento interno tá a interrupção por outro lado ela é o quê a interrupção por outro lado ela é no nível de hardware tá vem de para dentro da CPU e ela é uma um
evento que ocorre entre os dispositivos não necessariamente pelo pelo hardware né então existe essa diferença de traps e interrupção que a gente viu conceituamos os dois fizemos a diferenciação e mostramos um exemplo pra próxima aula então a gente vou esperar vocês para falar um pouco então de processos tá muito obrigado [Música] k [Música] h [Música]