Exemplos de sistemas operacionais: The HURD MAC 5753 - Sistemas operacionais

Thilo Koch IME - USP

25/11/2013 1 Introdu¸c˜ao

2 Base Hurd

3 Subsistemas Gerenciamento de processos Gerenciamento de mem´oria Sistema de arquivos Chamadas de sistema

4 Conclus˜ao Introdu¸c˜ao

The Hurd ´e um conjunto de protocolos e daemons que (em combina¸c˜aocom um kernel Mach) constitui um sistema operacional contemplado como sistema operacional do GNU (desenvolvido pelo projeto GNU) arquitetura de implementa¸c˜aode POSIX (Portable Interface da IEEE)

”Hurd”stands for ”Hird of Unix-Replacing Daemons”. And, then, ”Hird”stands for ”Hurd of Interfaces Representing Depth”. (Hurd architect) Hist´oria The Hurd

em 1983 foi fundado o projeto GNU () com objetivo de criar sistema operacinal livre o projeto desenvolveu por ex. Emacs, GCC/GDB, GIMP, GNOME, , GNU C Library em 1990 come¸couo desenvolvimento do The Hurd por causa do Linux (1991) o interesse por um outro sistema operacional caiu → Hurd teve um desenvolvimento lento durante os anos, ´ariosconceitos e kernels foram testados e discutidos para adapda¸c˜aono Hurd (por ex. L4, Coyotos, Viengoos) em 2002 RMS anunciou que teria um sistema para produ¸c˜aoainda naquele ano apesar da disponibilidade de um sistema / distribui¸c˜ao(Debian GNU/Hurd) Hurd ainda n˜aoest´apronto para uso em produ¸c˜ao Mach

Hurd usa GNU Mach como microkernel. a partir dos anos 1970 e durante muitos anos Mach foi desenvolvido por v´arias universidades. GNU Mach ´eum fork de Mach 4.0 (de 1995) objetivos: base para sistemas operacionais apoio a mem´oria sparse de tamanho muito grande transparˆenciaquanto ao acesso `arede uso de paralelismo de m´aquinas/ CPU / aplica¸c˜oes maior portabilidade ´ecapaz de rotear diferentes ”sistemas operacionais”ao mesmo tempo GNU Mach usa drivers do Linux para acessar dispositivos externos Mach Mach interface

Mach fornece servi¸cos / abstra¸c˜oes / construtos b´asicos para Hurd como: gerenciamento de processos Task / Thread: task ´eum ambiente de execu¸c˜ao (com espa¸code mem´oria,capacidades) para um ou mais threads (que executados) comunica¸c˜aointerprocessos Ports / Messages: Threads se comunicam via mensagens atrav´ezde ports (prote¸c˜aocom direitos) mem´oriavirtual Memory Object: conjunto de mem´oriaextens´ıvelcom direitos (rwx), podem ser alocados por tasks, diretamente ou automaticamente acesso a drivers Hurd

um conjunto de protocolos para formalizar como os componentes podem interagir (por ex. protocolos de file, I/O, socket e process) um conjunto de servidores que implementam esses protocolos: , fifo, init, crash, ext2fs, ftpfs ... servidores podem ser associados a ports para ”traduzir”mensagens (translators) fornece servi¸cospara usu´ario:POSIX, GNU C Library (glibc) Gerenciamento de processos Escalonamento Mach

acontece em grande parte no kernel a unidade de escalonamento ´eo thread o sistema ´eorganizado em processor sets tem uma fila multin´ıvelpor processador e uma por processor set prioridades de 0 (m´axima)at´e31 (ou mais) prioridade dos threads ´ediminuida automaticamente com o tempo threads podem influˆenciar escalonamento: aumentar ou diminuir a prioridade (tem limites) yield desistir de rodar e apontar sucessor (handoff scheduling) amarrar um thread a um processador ou processor set Gerenciamento de processos Escalonamento Mach

Escalonamento por processador (exemplo): um thread roda por um quantum e ´ebloqueiado a CPU procura um thread na file local do processador com uma prioridade maior ou igual que o thread atual e roda thread se n˜aotiver nenhum: a CPU procura um thread na fila do processor set com prioridade maior ou igual se n˜aotiver nenhum: o atual thread pode rodar mais um quantum se n˜aofor poss´ıvel(por ex. bloqueado com I/O): a CPU procura um thread na file do processador (e depois na fila do processor set) com prioridade menor que o thread atual se n˜aotiver nenhum: a CPU executa idle thread Gerenciamento de processos Hurd

exemplo execve glibc trata argumento e ambiente, manda mensagem para o fileserver file server checka permiss˜oes configura¸c˜ao(por ex. setuid) acesso aos ports do task para quem? manda mensagem para o execute server para carregar o task execute server (por sua vez) carrega imagem do arquivo e traduz imagem para um executable registra com process server starta task

fun¸c˜aodo process server: reposit´oriode informa¸c˜oes hostname, hostid, vers˜aodo sistema servi¸cospara POSIX: sessions, process groups mapear Mach tasks para Hurd processes registro de ports fun¸c˜oes para serem chamadas (call backs por ex.: antes e depois de um fork - para adaptar-se ao gerenciamento de mem´oriado Mach) pode ter mais que um (por ex. para fornecer outra interface para usu´ario) Gerenciamento de mem´oria Mach

baseado em paging separado em 3 partes: a que depende do hardware (por ex. MMU), a independente do hw e o memory manager (que implementa a l´ogicado gerenciamento de p´aginas) v´ariostipos de memory objects existem para: uma p´agina,um conjunto de p´aginas,arquivo ou estrutura de dados pode ser mapeado para o espa¸coda mem´oriavirtual de um ou mais tasks os objetos de mem´orias˜aocontidos em regi˜oesde mem´oria region / regi˜ao um peda¸code mem´oriavirtual pode ter endere¸coarbitr´ariodentro da mem´oriavirtual do task realizada com uma camada que ”conhece”regi˜oesv´alidas(n´ıvel de indire¸c˜ao al´emdas p´aginas) assim sparse memory pode ser gerenciada Gerenciamento de mem´oria Mach

op¸c˜aode external memory managers (emm) para cada tipo de objeto de mem´oria roda no espa¸codo usu´ario reage a mensagens do kernel (principalmente falhas de p´agina) pode ter para cada tipo de objeto de mem´oriaum emm diferente facilita implementa¸c˜aode mem´oriacompartilhada distribu´ıda(DSM)

o Hurd ainda n˜aoimplementou um emm Sistema de arquivos Hurd

o sistema de arquivos tamb´emusa servidores no espa¸codo usu´ario: translators translators s˜aoassociados aos device files (driver), mount points, etc. dispositivos tem supporte dentro do kernel ou com translator mount point ´eum port para o usu´ariocomunicar com o translator o translator recebe chamadas do usu´ario,faz as opera¸c˜oesnecess´ariaslendo e escrevendo no port associado com o driver / dispositivo normalmente baseado em inodes existem atualmente translators para ext2fs, isofs, nfs, ufs, ftpfs, storeio

Exemplo: mount com translator sem dispositivo $ touch hello # cria arquivo $ settrans hello /hurd/hello # seta translator $ cat hello # mostra "conte´udo" "Hello World!" $ settrans -g hello # desliga translator $ cat hello # arquivo est´avazio de novo Chamadas de Sistema Hurd

Como s˜aorealizadas as chamadas de sistema no Hurd? o kernel para interagir usa mensagens (atraves de mem´oriacompartilhada) para criar a sem´anticade system call uma biblioteca implementa a emula¸c˜ao por ex. a chamada de fork() ´etraduzida na biblioteca glibc que envia v´ariasmensagens para o kernel para conseguir sem´anticade fork (entre outras: para adaptar-se ao gerenciamento de mem´oria) Como uma aplica¸c˜aono espa¸codo usu´arioacessa as fun¸c˜oesdo kernel? atrav´ezde um sistema de RPC os client stubs e server stubs para isso s˜ao gerados pelo Mach Interface Generator (MIG) o MIG ´eum compilador que consome descri¸c˜oesde interfaces em IDL (interface definition language) os stubs empacotam e desempacotam as mensagens de ambos os lados do port (e escondem assim os detalhes do transporte) Conclus˜ao Hurd

GNU Hurd ´eum projeto em andamento tem as vantagens do microkernel (pequeno, flex´ıvel,robusto) o conceito de servidores no espa¸codo usu´ario´emuito flex´ıvelmas a implementa¸c˜ao´emuito complexa faltam drivers (por ex. hardware support, fs support) e servidores (por ex. emm) desempenho pior que por ex. do Linux est´apreso num ciclo: sistema ´epouco us´avelpara produ¸c˜ao → poucos usu´arios → pouco interesse em desenvolvimento → desenvolvimento lento mas ´eum sistema interessante com muito potencial e ´esoftware livre

In short: just say NO TO DRUGS, and maybe you won’t end up like the Hurd people. (Linus Torvalds) Fontes e links

Tanenbaum, Andrew S. Distributed Operating Systems GNU Hurd home https://www.gnu.org/software/hurd Translator Bounty http://www.fossfactory.org/project/p280 Machs Server Writer Guide http://shakthimaan.com/downloads/hurd/server_writer.pdf the critique http: //walfield.org/papers/200707-walfield-critique-of-the-GNU-Hurd.pdf

Muito obrigado!