Vous êtes sur la page 1sur 106
Siotema operacional pare Siotama dispositivos moves rmultichread me 2 eS “Seg Regio B! critica Spyware dm Mecariemo Se” T deprovesto, EPP sequen | a Saida Sy Sie P i FRA compactacao y de video AN. Sistema Linux "IY Dual Gore T “AD DREW S. ENBAUM Bl Unix Companion Website ‘Unu sisteana computactonal moderne cOusisee ene ust ‘ou mais processadores, meméria principal, discos, imptes- soras, teclado, mouse, monitor, interfaces de rede € ou- 1105 dispositivos de entrada ¢ safda. Enfim, é um sistema ‘complexo. Se cada programador de aplicacdes tivesse de ‘entender como tndo isso funciona em detalhes, nenhum ‘éidigo chegaria a ser escrito. Além disso, gerenciar todos ‘esses componentes ¢ usé-los de maneita otimizada & um trabalho extremamente dificil, Por isso, os computadores ‘én unm dispanitive de suftwvare deuuminado sistema ope- racional, cujo trabalho é forecer aos programas do usud- rio um modelo de computador melhor, mais simples € mais limpo e lidar como gerenciamento de todos os recursos rmencionados, Esses sistemas so 0 tema deste live. ‘A maioria dos leitores deve ser alguma experiéneia ‘com um sistema operacional como Windows, Linux, Fre BSD oul Mac OS X, mas as aparéncias podem enganar. programa com 0 qual os ustérios interagem, normalmente ‘chamado de shell (ou interpretador de comands) quando @ baseado em texto e de GUI (graphical user interface —i teclace grafica com 0 usuario) quanido usa icones, na rea lidade nao 6 parte do sistema operacional embora © uilize para realizar seu trabalho. Um panorama simples dos principals componentes ‘em discussio aqui é oferecido na Figura 1.1. Na parte in- Ferior vemos 0 hardware. Fle consiste em chips, placas, discos. tecado, monitor e abjetos fiscos semelhantes. Na parte superior do hardware esté o software. A maioria dos. ‘computadores tem dois niveis de operagio: modo miicleo e iodo usuario. O sistema operactonal &a pesa mais basica de sofimare e opera em mado micleo (tombéin chamodo Leiter de Repredutor Navogador LAH G® Ge misica Web Modo Hause: Programa de interlace Software ‘com 0 usuario Modo i acional oe Sistorna oporacional posers I Figura 1.1 Onde o sistema operacional se encaixa, Capitulo T Introducdo anudy supervisor). Nese mila cle teat avesse Cumplety a {odo o harchyare e pode exeeutar qualquer insirugio gue a :mquina seja capaz de executar, O resto do software opera en modo usustio, no qual apenas um subyconjunte de ins- es da maquina esté dispontvel. Em particular, aquelas Instrugies que afetam o controle da miiquina ow realizar. EIS (Entrada/Saida) sao proibidas para programas de modo uisudrio, Relornaremas @ diferenga entre modo ntideo & modo usuario repetidamente-a0 longo deste livto. © programa de interface com 0 usuario, shell ow GUL, € 6 nivel mais inferior do software de modo usuario ¢ per- mite que este inicie outros programas, como o navegador Web, leitar de e-mail ou reprodutor de nifisica, Esses pro- _gramas também usam muito 0 sistema operacional. A rea de atuagio do sistema operacional é mostrada na Figura 1.1. Ele opera diretamente no hardware e forne- ce a base para todos os outros softwares. Uma distingio importante entre o sistema operacional © 0 software normal (modo usuétio) € que, se 0 usuario no gostar de um determinado leitor de e-mail, ele serd livre para obter outro ou escrever seu préprio leitor de e -inail, se 0 quiser; mas nao the € permitido escrever seu prdprio manipulador de interrupgio de relégio, que € parte do sistema operacional ¢ normalmente esté protegida pelo Jardware contra tentattvas de alteragbes pelo usudno. Essa distingdo, contudo, &3s vezes confusa em sistemas embarcados (que podem nio ter um modo niicleo) ou sis- {temas interpreiados (como sistemas operacionais baseados em Java, que usar interpretagao, e nao hardware, para separar os eomponentes). Em muitos sistemas, hé programas executados em ‘modo usudtfo, mas que auxiliam o sistema operacional ou realizam fungbes privilegiadas. Por exemplo, muitas vezes existe um programa que permite aos usuarios mucarem suas senhas, Esse programa nao faz parte do sistema opera ional endo € executado em modo niicleo, mas tealiza uma fangio claramente delicada e precisa ser protegio de ma- neira especial. Fm alguns sistemas, essa ideia € levada a0 extremo, ¢ parte do que é tradicionalmente tido como sis- tema operacional (como o ilystem —sisteraa de arquivos) E executada em espago do usuario, Nesses sistemas, & cli dfinir um limite claro, Tudo 0 que ¢ executado em modo niicleo sem diivida constitui parte do sistema operacional, sas alguns programas executados fora dele também sio Sistemas operacionais modemos inquestionavelmente parte dele, ou pelo menos esto in ‘mamente associados a ele Os sisicmas opetacionais diferem de progeamas de usudtio (isto & de aplicacoes) em outros aspectos além do lugar onde estao localizados. Em particular eles sio gra des, complexos ¢ tém vida longa, O eédigo-fonte de um si tema operacional como o Linux ow o Windows tem cerca de cinco milhies de linhas de céstigo. Para se terideia do que. {sso significa, imagine imprimir cineo milhSes de linhas em. forma de livre, com 50 linhas por pagina e mil paginas por volume (maior que este liv}. Seriam necessérios cem volu- ‘mes para enumerar um sistema operacional desse porte — basicamente uma caixa de livros inteira. Vocé consegue se imaginar comecando em um emprego de manutencio de uum sistema operacional e, no primeiro dia, ver seu che- fe trazendo uma caixa de livros com o cddigo ¢ dizendo: *Aprenda-o"? E isso vale apenas para a parte que opera no nficleo, Programas de ustdrio como 6 GUI, bibliotecas ¢ softwares de aplicagio bésica (como © Windows Explorer) podem atingir faclmente 10 ou 20 veres esse valor. Agora deve estar clato por que os sistemas operacio- nais tém vida longa — eles si0 muito dificeis de esorever €, uma vez tendo escrito um, 0 proptietario nao se dispoe 4 descarté-lo e comegar de novo. Em vez disso, eles evo- luem por Longos periodos de tempo, 0 Windows 95/98/Me era basicamente um sistema operacional eo Windows NT/2000/XP/Vista é um sistema diferente. Para os usutios, les parecem semelhantes porque a Microsoft se assegurou dde que a interface com 0 usuario do Windows 2000/XP fosse bastante parecida com o sistema que estava suibsti- ‘uindo, principalmente o Windows 98. Entretanto, houve ‘bons motivos para que a Microsoft eliminasse o Windows 98, Trataremos disso quando estudarmos © Windows em detalhes no Capitulo 11 (O outro exemplo principal que usaremos a0 longo des- ivro {além do Windnwe) & 4 TINIX 6 quais, as méquinas dos clientes se conectam, no melhor espitito do projeto MULIICS. Apesar da falta de sucesso comercial, 0 MULTICS exer- ‘ceu uma enorme influéncia sobre os sistemas operacionais subsequentes, O MULTICS esté descrito em Gosbato et al. (1972), Corbats e Vyssotsky (1965), Daley e Dennis (1968), ‘Organick (1972) e Saltzer (1974). Extste um site da Webs, , com muita informacéo disponivel sobre o sistema, seus projetistas e seus usudtios, Outro grande desenvolvimento ocorrida durante a ter- ceira geracao for 0 fenomenal cresaimento dos minicompu tadores, iniciado com o DEC PDP-1 em 1961, © PDP-1 nha somente 4 K de palavras de 18 bits, mas cada méquina caustava 120 mil délares (menos de 5 por cento do prego de tum 7094) ¢, mesmo assim, venia como agua Para certos tipos de apliragiee nia nuimériras, era tia répide quanta, 16 7094 ¢ deu origem a toda uma nova indiistria, Rapida- mente fol seguido por uma série de outros PDPs (diferen- temente da fania IBM, todos ineonypativeis), culminando no PDP-LI. Ken Thompson, um dos cientistas da computagéo do Bell Labs que trabalharam no projeto MULTICS, achou tum pequeno minicomputador PDP-7 que ninguém estava usando € aproveitou-o para escrever uma versio despojada ‘e monousudrio do MULTICS. Esse trabalho desenvolveu-se cedeu origem ao sistema operacional UNIX®, que se tornow ‘muito popular no mundo académico, em agéncias gover- namentais © em muitas empresas. A histéria do UNIX jé foi contada em outros lugares (por exemplo, Salus, 1994), Parte dessa histéria sera re- contada no Capitulo 10. No momento, basta dizer que, em virtude de 0 c6digo-fonte ter sido amplamente divulgado. izagdes desenvolveram suas proprias e incom: ‘yeraies, o que levou a9 ea0s. Dutos das princi verses desenvolvidas, 0 System V, da AT&T, ¢ © BSD (Berkeley software distribution — distribuigio de sofware de Berkeley), da Universidade da California em Berkeley, também possutam vaniagdes menores, Para tornar possivel escrever programas que pulessem ser executados em qual quer sistema UNIX, o IEEE desenvolveu um padrio para (© UNIX denominado POSIX (portable operating systems in- terface — interlace portal para sistemas operacionais, a0 qual a maioria das verses UNIX agora dé suporte, © PO- SIX define uma interface minima de chamada de sistema a que os sistemas em conformidade com 0 UNIX devem dar suporte. Na verdade, alguns outros sistemas operacionais, agora também dao suporte a interface POSIX. Como comentério adicional, vale mencionar que, em 1987, oautor deste livto langou um pequeno clone do UNIX, denominado MINTX, com objetivo educactonal. Funcio- rnalmente, 0 MINIX é muito similar 20 UNIX, ineluindo 0 suporte ao POSIX, Desde entdo, a versio original evolu para MINIX 3, que & altamente modular ¢ confide. Bla tem a capacidade de detectar e substituir rapidamente médulos defeituozos ou mesmo danificades (como drivers de disposi tivo de /S) sem reiniclalizar e sem perturbar os programas, ‘em execugao. Ha tm livro que desereve sua operacao inter- na e que traz.a listagem do cédigo-fonte em seu apéndice (anenbaum © Woodhull, 1997). 0 sistema MINIX 3 esté disponivel gratuitamente (com o cidigo-fonte} pela Internet fem ara Do mesmo modo, a entrada-padrdo pode ser redirecio- nada, como em sort sanqtoarce ‘que invoea © programa sor com a entrada vindo de argt ¢ a saida enviada para arq2. Capitulo 1 _ Introd a7 A saida de um programa pode ser usada como a en- trada para outro programa conectando-os por meio de um. pipe. Assim, cal arqt are? arg | sort >/devip invoca o programa cat para coneatenar urés arquivos e ett- via asafda para que o srt organize todas as lias em or- dem alfabética, A saida de sort é reditecionada ao arquivo / devflp, que normalmente &a impressora. Se unm waideia olocar 0 cazactere & ods tim comon do, o shell nao vai esperar que ele termine e, assim, envia imediatamente 0 caractere de prompt. Consequentemente, cal arat arc? ara | sort >/devin & inicia o sort como uma tarefa em background, permitin- do que 0 usuario continue trabalhando normalmente en- quanto a ordenagio prossegue. O shell tem vérios outros aspectos interessantes, que no Lemos espaco para discutir aqui. A maioria dos livros sobre UNIX aborda detidamente © shell (por exemplo, Kernighan ¢ Pike, 1984; Kochan € Wood, 1990; Medinets, 1999; Newham e Rosenblatt, 1998; Robbins, 1999). Atualmente, muitos computadores pessoais usam uma Interface gréfica GUI. De fato, a interface GUL € apenas um progtama sendo executado na camada superior do sistema ‘opetacional, como u se toma ébvio porque o usuério tem uma escolha de (pelo ‘mienos) duas interfaces GUIs: Gnome € KDE ow nenhuma (usando tma janela do terminal no X11). No Windows, também € posstvel substinuir a drea de trabalho com in- terface GUL padio (Windows Explorer) com um progra- ina diferente alterando alguns valores no registro, embora ‘poutcas pessoas o fagam, n shell. Nos sistemas Linux, esse fate 1.5.1) Ontogenia recapitula a filogenia Depots que o livro A origem das especies, de Charles Dar Win, [oi publicado, o zodlogo alemio Ernst Haeckel afi rou que a “omiogenta recapitula a filogenia”. Com isso ele queria dizer que 0 desenvolvimento de um embriao {on- togenia) repete (isto é, relembra) a evolucéo das espécies (lilogenia). Fm outras palavras, depois da Fertlzagio, wm embrio humano passa porestdgios ie um peie, de um lel- {G0 ¢ assim pordiante, a se tornar um bebé humano. Bié- Jogos modernos consideram essa alirmagio una simplifica- Go grossetra, mas ne fundo hi ainda alguma verdade nela, ‘Algo ligeiramente andlogo tem acontecida na indsistria da computagio. Cada nova espécie (computador de grande porte, minicomputador, computador pessoal, computador embarcado, cartbes inteligentes ete.) parece passar pelo suresino desenvolvimento de seus auestias, auto 10 yu se refere ao hardware como ao software. Esquecemo-nos frequeniemente de que muito do que acontece na indiis- {ria da computagio e em muitos outros campos ¢ orientado pela tecnologia. A razao pela qual os romanos nao tinham Sistemas operacionais mademos jorque eles gostavam muito de caminhar. & porque cles no sabiam como construf-los. Computadores pexsoais 0 existem porque milhdes de pessoas tém um desejo contido por muitos séculos de ter um computador, tas porque agora & possivel fabrica-tos de modo mais ba- rato, Muitas vezes nos esquecemos de como a tecnologia afeta nossa visio dos sistemas e de que convém refletir so- bre assunto de ver em quando. Em particular, frequentemente uma alteragio teano- égia toma alguma idela obsoleta c ela eesaparcee rapl- damente, Entretanto, outra mudanca tecnolégica poderia reavivé-la, sso € especialmente verdadeito quando a al- teragio tem a ver com o desemnpenho relative de partes, diferentes do sistema, Por exemplo, quando as CPUs se tormam muito mais velozes que as memérias, as caches se tornam importantes para acelerar a meméria ‘lente’. Se 4 nova tecnologia de meméria algum dia tornar as me- mérias muito mais velozes que a CPU, as caches desapa- recerdo. E, sc uma nove tecnologia de CPD torn: velozes que as memiérias novamente, a caclies reaparece- Ho, Em biclogia, a extinglo € definitiva, mas em ciéncia dda computagio ela as veres ocorre por apenas alguns anos. Como consequéncia dessa impermanéncia, neste livro examinaremos. conceitos ‘obsoletos’ de ver em quando, isto é, ideias que nao sio as mais adequadas 4 tecnologia atual, Entretante, mudangas tecroldgicas podem trazer de volta alguns dos chamados ‘conceitos obsoletos’. Por isso, € importante compreender por que um conceito € obsoleto quiais mudangas no ambiente podem trazé-Io de volta, Para esclarecer esse ponto, consideremos um exem- plo simples. Os primeiros computadores tinham conjuntos, de instrucdes implementadas no hardware. As instrucBes, eram executadas divetamente pelo hardware € nao po- diam ser alteradas. Mais tatde veio a microprogramacéo (introduzida pela primeira vez em grande escala com o IBM 360), na qual um interpretador subjacente executava 4s “instrugbes do hardware’ no software. A execugio fisica se tornou obsoleta. Nao eta suificientemente flexivel. Em seguida, os eomputadores RISC foram inventados ea mi- croprogramagia (isto 4, evecncia interpretada) ce tornon obsoleta porque a exectgio direta era mais veloz. Agora es- vainus vendo o ressurginento da reinterpretayiv na fort ‘de applets Java que sio enviados pela Internet e invexpret. dos apis. chegadla. A velocidade de exeeugaio nem sempre € crucial, porque retardas na rede sao tao grandes que eles iendem a predominar. Dessa forma, o pendulo ja oscitou entre diferentes cclos de execugio direta ¢ inverpretagio e pode oscilar novamente no futuro, Meméri grandes xaulaeuios agora alguas deseuvolviuenios Lisial~ «0s de hardware e 0: modo como afetaram os sofowares re petidamente. Os primeiros computadores de grande porte tinham memria imitada, Um 18M 7090 ou 7094 com- pletamente carregados, que tinham supremacia do final de les 1959 até 1964, tinham apenas 128 KB de memér cram, em sua maior parte, programados em linguagem as- sembly ¢ seus zistemes operacionais eram eseritos ena lin guiagem assembly para economizar meméiia preciosa. Como passar do tempo, compiladores para linguagens ‘como Fortranie Cobol sedesentvolveramosuficientepara que a linguagem assembly fosse considerada morta. Mas quan- ddo.o primeiro minicomputador comercial (0 PDP-1) foi lan- ‘ado, tinha apenas 4.096 palavras de memeéria de 18 bits ea Iinguagem assembly reve wima recuperagto suxpreendent. No fim, os microcomputadores adguiriram mais memétia as linguagens de alto nivel se tornaram predominant. Quando os sicrocomputadores se tormarart um su- ceesso, no inicio da década de 1980, 05 primeiros tinham memsrias de 4 KB © a programagio assembly ressurgiu dos mortos. Computadores embareadas muitas vezes usa vam. as mesmos chips de CPU que os microcomputadores (8080s, 280s e, mais tarde, 8086s) e também eram inicial- mente programados em linguagem assembly. Agora seus descendentes, 05 computadores pessoais, t@m muita me: iméria ¢ so programados em ¢, C++, Java ¢ outras lingua gens de alto nivel. Os cartes inteligentes estio passando por desenvolyimentos semelhantes, embora sempre te nnham, além de certas extensdcs, um interpretador Java € execitem programas Java de modo interpretativo, em ver, de compilarem 0 Java para a linguagem de maquina do canto inteligente, Hardware de protegao Os primeiros computadores de grande porte, como 0 IBM 7090/7094, nav pussufain hardovace de protegau, por isso executavam apenas um programa por vez, Um pro- sgrama defeituoso poderia apagar o sistema operacional ¢ quebrar a maquina com facilidade, Com a introdugéo do IBM. 366, uma forma primitiva de hardware de protegao {oi disponibilizada v essas méquinas puderam armazenar vyérios programas na meméria simmultaneamente e permitir que estas se alternassem na execucdo (multiprogramagao).. A monoprogrannagio foi declarada obsoleta, Pelo menos até 0 surgimento do primeira minicompu tadlor — sem hardware de protecio —a multiprogramagao no era possivel. O PDP-1 ¢ 0 PDP-8 nao tinham nenhum, hardware de protecio, mas 0 PDP-I1 possua, ¢ essa ca- racteristica levou 8 multiprogramagio ¢, no fim, ao UNIX. Quando os primeiros microcomputadores foram cons- truflos, usavam o chip de CPU Intel 8080, que nio tinha nenhuma protego de hardware; assim, voliamos & mo- noprogramagao. Foi somente com surgimenio do Intel 80286 que essa protecio de hardware foi acrescentada © 1 multrogromacdo se tomo pozaivel. AtE hoje, muitos sistemas embarcados nio tém hardware de protegao e exe. cautam apenas um programa. Agora observemos os sistemas operacionas. Os prime 10s compatadores de grande porte nao possufam hardware de protegio nem davam suporie a multiprogramagii. Desse mol, neles eram executados sistemas operacionais simples, ‘que watavam apenas um programa por vez, carregado ma- nualmente, Mais tarde eles adquitiram o suporte de hardware de protegio € do sistema opetacional para tar com varios programas de uma vez e, posteriormente, coma completa ca- pacidae de suporte ao uso com comparithamento de tempo. Quando os minicomputadores surgiram, também nao tinham protesio de hardware, e os programas eram execu tados um.a um, carregados manualmente, embora.a mul tiprogramacio jéestivesse bem estabelecida no mundo dos computadores de grande porte. Aos poucos, adquitiram a protecio de hardware e a capacidade de executar dois ow tnnis programas stinultaneamente. Os prhtnelros nerocont- pputadores exam capazes, ainda, de executar somente um programa por ver, mas depois passaram a contar com a ca- pacidade de multiprogramacdo. Os computadores portéteis € 05 cartées inteligentes seguitam pelo mesmo caminho. Em todos os esos, o desenvolvimento do software foi itado pela tecnologia, Os primeiros microcomputadores, por exeinply, tinham algo como somente 4 KB de 1 ria e nenbuum hardware de protegio. Linguagens de alto nivel € multiprogramagéo eram simplesmente grandes demais ppora serem traiadas em sistemas tao pequenos. A medida ‘que 0$ microcomputadores evoluiram, tornando-se mo- demos computadores pessoais, adquiriram o hardware ¢ 0 software necessétios para tratar aspectos mais avangados. Provavelmente esse desenvolvimento continuard. Outros ‘campos também porecem ter esse cido de reencarnagio cevolutiva, mas, na indiistria dos computadores, ele parece sirar mais répido. Discos Os primeiros computadores de grande porte eram em serande medida baseados em fita magnética, Eles costuma- vam ler um programa a pantir da fta, compils-lo, executd-lo fe escrever os resultados de volta em outta fita, N3o havia discos e nenhum conceito de um sistema de arquivos. 1880 comegou 2 mudar quando a IBM introduziu 0 primeiro disco rigido — 0 RAMAC (RAndoA! ACees, acesso aleats rio) cm 1986, Hle ocupava cerea de 4 metros quadrados de ‘espago € podia armazenar cinco mihdes de caracteres de 7 bits, 0 suficente para una foto digital de tesolugéo média Mas com o valor do aluguel anual de $35,000, montar a ‘quantidade suficiente deles para armazenar o equivalente a tum rolo de filme muito rapidamente tornou-se caro, Mas, no fim, os pregos cairam e sistemas de arquivos primitives foram desenvolvidos. © CDE 6600 foi um desses desenvolvimentos tipicos, {introduzido em 1964 e, durante muitos anos, o computa dor mais répido do mundo. Os usudrios podiam eriar os ‘chamados ‘arquivos permanentes’ dando-Ihes nomes ¢ es= perando que nenhum outro usuério também tivesse deci- ido que, por exemplo, ‘dads’ fosse um nome adequado para um arquivo. Tratava-se de um diret6rio de um nivel, No fim, os computadores de grande porte desenvolveram sistemas de arquivos hierérquicos complexos, que por aca- so culminaram no sistema de arguivos MULTICS. ‘Quando os minicomputasdores comegaram a Scr usar dos, cles também tinham discos rigidos. 0 disco-padrao no PDP-11, quando foi introduzido em 1970, era o disco KOS, com uma capacidade de 2,5 MB, cerca de metade do RAMAG IBM, mas tinha apenas cerca de 40 cm de didme- trae S cm de alata, Mas ele tambéin tinka vim detain de um nivel inicialmente. Quando os microcomputadores: fora Langados, © CPM fol, « principiy, v sive opesa- onal predominante ¢ tamiyém dava suporte a apenas ur diretério no disco (flexivel), ‘Memorta virtual A meméria virtual (discutida no Capitulo 3) confere a capacidade de executar programas maiores que a memoria fisica da: méquina movendo pegas enire a meméria RAM e co disco, Ela passou por um desenvolvimento semelhante, aparecendo primetro em computadores de grande porte, depois em mini ¢ microcomputadores. A meméria virwal também ativou a capacidade de conectar de modo dinami- co um programa a uma biblioteca no momento de execu- Gao em ver de compil-lo. O MULTICS foi o primeira siste- sma a permit iso, No fim, a Kleia se propagou ao longo da linha e agora é amplamente usada na maioria dos sistemas UNIX e Windows, Em todos esses desenvelvimentos, vemos ideias que sao inventadas em um contexto, sio descartadas mais tar- de quando contexto muda (programagio de linguagem assembly, monoprogeamagio, diretGrios de um nivel ete.) & reaparecem em um contexto diferente, muitas vezes uma década depois. Por essa rario, neste livro algumas veres examinaremos ideias e algoritinos que podem parecer ob- soletos nos PCs de gigabytes de hoje, mas que podem retor nar em computadates embareados ¢ cartoes inteligentes. GRA chamadas de sistema (system calls) Vinmos que os sistemas operacionais tm duas fungbes principais:fomnecer abstragies 208 programas de tswdtios © aiministrar os recursos do. computador. parte, a interagio entre programas de usuario e 0 sistema operacional lida com a primeira; por exemplo, crag, escre- ver ler ¢ excluir arquivos. A parte de gerenciamemo de recursos é em grande medida, tansparente para os usud- rios ¢ fita automaticamente, Desse modo, a interface en- tre o sistema operacional e os programas de usiustos trata primeiramente sobre como lidar com as abstragies. Para cintender 0 que 0s sfstemas opeiacionals fazem realmente, dleveros observar essa interface mais de perto, As chama- das de sistema cisponiveis na interlace variam de um sis- tema operacional para outta (embora os canecies bisicos tendam a ser parecidos) 30 Sistemas operacionais mademas Somos, assim, forgados a escolher entre (1) general dades vagas (“0s sisteanas operacionals possuem chamadas de sistema para leitura de arquives’) ¢ (2) algum sistema especifico (“UNIX possuit uma chamada de sistema read com, ‘és pardmetros: um para espectficar 0 arquivo, um para in formar onde os dadlos deverao ser colocados e um para indi- car quantos bytes deverdo ser lidos"). ‘senlhemos a tifima ahordagem. # mais trahalhosa, ‘mas permite entender melhor o que ossistemasoperacionais, realmente fazem, mbora essa discussio refirarse especifi= camente a0 POSIX (Padtio Internacional 9945-1) — con- sequentemente também ao UNIX, System V, BSD, Linux, MINIX 3 etc. —, a maioria dos outros sistemas operacionais, moderns tem chamadas de sistema que desempentam as mesmas fungoes.diferindo apenas nos detalhes. Como os mecanisinos reais pare emissdo de uima chamada de siste- mma sio altamente dependentes da maquina e muikas vezes deve ser expressos em cidigo assembly, € disponibilizada uma biblioteca de sotines para tomar possivel realizar cha- madas de sistema a partir de programas em e também, ‘muitas vezes, a partir de programas em outtas linguagens. CConvém ter em mente 0 seguinte: qualquer computa- dot com uma tinica CPU pode executar somente uma ins- ‘rugéo por ver. Se um processo estiver executando um pro- ‘grama de usuiério em modo usudtio ¢ precsar de um servigo do sistema, como ler datos de um arquivo, ted de executar uma instrugio TRAP para transferir © controle ao sistema ‘operacional, Este verifica os pardunettos para, entdo, deseo- briro que quero processo que esté chamando. Em seguida, le executa uma chamada de sistema ¢ retorna o controle para a instmcfo seguinte & chamada. Fin certo sentido, fazer uma chamada de sistema é como realizar um tipo especial de chamada de rotina, s6 que as chamadas de sistema fazem entrar em modo nicleo e as chamadas de rotina, nao. ‘Yara esclatecer melhor o mecanismo de chamada de sistema, vamos dar uma répida olhada na chamada de sistema read. Conforme jé mencionado, ela tem trés pard- metros: 0 primeito espedtica o arquivo, o segundo € um ponteiro para o butler € © terceiro dé 0 niimero de bytes que deverio ser lidos. de sistema, ela & chamada a partir de programas em C cha- mando uma rotina de biblioteca com o mesmo nome da chamada de sistema: read. Uma chamada a partir de um programa em C pode ter 0 seguinte formato: contador = read(ara, puter, bytes) ‘A chamada de sistema (assim como a rotina de biblio- teca) retoma o ntimero de bytes realmente lidos em cout tador. Esse valor é normaimente 0 mesmo de bytes, mas pode scr menor se, por exemplo,o caractere fim-de-arqui- vo for encontrado drante « lita Se a chamada de sistema nao puder ser realizada, tan to por causa de um parametro invalido como por um erro de disco, 0 eoniader passard a valet ~1 € a mimero do erro serd colocado em tuma varidvel global, ero, Os programas smo em quase todas as chamadas ddevem verificar sempre os resuliados de uma chamada de sistema pata saber se ocorreu um ert. AAs chamaday de sitcina say reelizaay ein uni SE de passes. Para melhor esclarecer esse conceito, examinemos, ‘a chamada read discutida anteriormente, Antes da chamada da rotina read de biblioteca, que € na verdade quem faz, a chamada de sistema read, o programa que chama read, antes de tudo, armazena oa parimetros na pilha, conforme rostram os passos 1a 3 na Figura 1,17. Compiladores € ¢ G++ armarenam os parémetros na pilha em ordem inversa por razbes histérica (isso tem de ver com fazer o primeiro pardmetro de pring, a cadeia de earacteres do formato, aparecer no topo da pilla). © pri- ‘meiro ¢ 0 terceiro pardmetcos so chamados por valor, mas 16 segundo parimetro € por referencia — isso quer dizer que € passa o enderego do buffer (indicado por &), ¢ nao seu contetido, Dai vem 4 chamada real 3 rotina de bibliote- «a (passo 4). Essa instrugio éa chamada normal de rotina, tusada para clamar todas as rotinas A rotina de biblioteca, possivelmente eserita em lingua- getn assembly, em geral coloca o néimero da chamada desis- ‘tema em unm local espetado pelo sistema operacional — por ‘exemplo, em um registrador (passo 5). Entio, ele executa tuna instrugao TRAP para passar do modo usuario para 0 ‘modo niicleo ¢ iniciara execugdoemumdeterminado ende- rego dentro do miicleo (passo 6). A instrugio TRAP &, na ver dade, bastante semelhante & chamada de rotina no sentido de que a instrugdo seguinte & recebida de um local distante ce oendereco de retorno é salvo na pilha para uso posterior. Entretanto, a instrugio TRAP também difere do instru Go call (chamada de rotina) de dois modos fundamentais. Primeito, como efeito colatetal, ela desvia para o modo mi deo. A instrugio de chamada de rotina no altera 0 mado. Segundo, em vez de fomecer um enderege absolute ou relativa nde a procedimenta esteja lacalizada, a instrite gio TRAP nao pode transferir para um enderego arbitra Dependendo da arquitetura, ela transfere para unt local fixo — ha um campo de 8 bits na instruc, fornecendo 0 ‘ndice em uma tabela na meméria que contém endetesos de transferénicia — ou para o equivalente a isso 0 cdigo do miicleo que se inicia apis a instragio TRAP verifica o mimero da chamada de sistema ¢, entao, 0 des pacha pata a rotina correta de tratamento dessa chamada, geralmente por meio de uma tabela de ponteiros que inci cam as rotinas de tratamento de chamadas de sistema in- dexadas pelo miimero da chamada (passo 7). Nesse ponto, @ executada a rotina de tratamento da chamada de sistema (passo 8). Uma vez.que a rotina de tratamento tenha termi nado seu trabalho, 0 controle pode retornar para a rotina de biblioteca no espago do usudtio, na instrugdo seguinte & instrugio TRAP (passo 9). Notmalmente essa rotina retorna ao programa do usuério da mesma maneita que fazer as, chamadas de rotina (passo 10). tule 1 Introdueo 31 Enderago OxFFFFFEF Retornaa quem chamou “rap para oniieo aa ‘Coloca cbdigo para road bibiotoce Pp Espago do wus inerementa SPT Chama read sf Armazena id Programa do 2] Aumazena abutter usuario {parser Seneca 6 9 Espago do nicloo : 4 8 ‘ tratamonio (Sistema cperecional ‘) | | Despacho ‘de.chamada se sistema 6 1 Figura 1.47 Os 11 passos na realizago da chamada de sistema read (', buts, byte) Pata finalizar a tarefo, o programa do usuério deve lim- par apilha, como se faz depois de qualquer chamada de ro- 12 (passo 11), Presmindo que a pilha cresce para baixo, ‘como muitas vezes ocorre, o eédigo compilado inctementa ‘© ponteiro da pilha exatamente 0 necessétio para remover ‘0s pardmetros armazenados antes da chamada read. Q pro- ‘grama agora esta lberado para fazer o que quiser [No passo 9, foi por uma boa razio que dissemos * rotornar para a ratina da biblioteca na espagn da nsisrio” a chamada de sistema pode bloqueat quem a chamou, inpeuindo-o de continua. Por excnmple, se quem Cano estiver tentando ler do teclado e nada fo! digitado ainda, ele serd bloqueado. Nesse caso, o sistema operacional veriticaré sv algum outto processo pode ser executado. Depois, quan- do a enttada desejada estiver dispontvel, esse processo teré a atengia do sistema e as passos 9.2 11 serio executados [Nas proximas segBes estudaremos algumes das chama- das de sistema cm POSIX mais usadas ou, mais especif camente, as rotinas de biblioteca que realizam esas cha- madas de sistema. © POSIX tem cerca de cem chamadas de rotina, Algumas das mais importantes estio listadas na Tabela 1.1, agrupadas, por conventéncia, em quatro cate gorias, No texto examinaremos restimidamente cada cha- mada para entender o que cada uma delas faz Os se1vigos oferceidos por esses chamadas determinam ‘a major parte do que o sistema operacional deve realizar, {Ja que o gerenciamento de recursos ern computadores pes- soais € minimo (pelo menos, se comparado a grandes mi- 4quinas com varios usudtios). Os servicos englobam coisas como aria e finalizar processos, criar, exctuir ler e escrever arquivos, gerenciar diretSrios ¢ realizar entrada ¢ safda. Convém observar que em POSIX @ mapeamento de chamadas de rotina em chamadas de sistema nao € de uma para uma. O POSIX especifica vérias rotinas que um sis- tema em conformidade com esse pada deve disponibili- "at, nas no especifica se se trata de chamadas de sistema, chamadas de biblioteca ow qualquer outra coisa, Se uma rotina pode ser executada sem invocar uma chamada de sistema (isto 6, sem desviar para o nticleo), ele & executado geralmemte em modo usuario, por raz0es ile desempento. Contudo, © que a maioria das rotinas POSIX invoca sio chamadas de sistema, em geral com uma rotina mapeando diretamente ama chamada de sistema, Em poueos casos — ein especial naqueles em que diversas rotinas sio somente pequenas variagbes umas das outras —, uma chamada de sistema ¢ invocada por mais de uma chamada de biblioteca. 1.6.1) Chamadas de sistema para gerenciamento de processos © primeiro grupo de chamadas na Tabela 1.1 lida com sgerenciamento de processos. A chamada fo um bom Ponto de partida para a discussdo, send 0 tinico modo de rior um novo process em UNIX. Ela gera uma cpio exa ta do processo original, incluindo todos os deseritores de arquivo, registradores — tudo. Depois de a chamada tore aconteces, © processo original e sua eépia (0 processo pai © © processo filho) seguem caminhos separados. Todas as 32__ Sistemas operacionais modemos Gerenciamento de processos Chamada Descrigao id — foil) ‘iia um process fhe cintioo pai pid = walipiipi, statloc, options) pra que um processo fio sja concudo sxacvelname, argv. envirenn) Suibstini a imagem do nines dum process ‘eisttus) Canc a enscucio do precessa @ devahe sats Gerenciamento de arquivos Chamada Descrigao Fd = open, now, .-} ‘Abe um arquivo para letra, esta ou ambos 8 closet Fecha um arquivo aberte reid, buffer, bytes) LB dados a part de um arquiva een ue buster write, bute, nbytes) Escreve dacos a partir de um bulfer em um arquivo position = Issektf, offset, whence) Move 0 pontaie da arquivo statiname, &ouf) Obtém infoeragdes sobee um arquivo Gerenciamento do sistema de diretdrio e arquivo ‘Chamada Desericgao mkcirfaeme, mode) Gra um nove drtério imdriname) Remove um dretéro vazio inkname' , name) ‘Gna uma nova entrada, named, apontanco para name? vnlinkraime) Remove uma entrada de dretério mountispecial, name, tag) Monta um sistema oe arquivos umouni(specia) Desinanta um sistema de arquivos ‘Chamada Deserigao hde(cenarme) Altera 0 diotério de trabatho ‘s= chmodiname, mode} Altera os bits de protego de um arquivo Kilipid, slo) Envia um sina para um provesso seconds ~ time(seconsis) Obiéin 6 tempo deccrido desde 1 ce jars de 1970 Tabela 1.1 Algumas das principals chamadas de sistema do POSIX. O eédigo de retorna s 6-1 se um erro tiver coorido. Os ‘cécig0s de retorno sto os sequintes: pid € um proceso 1, fd & um descritor de arquivo, n é um contador de bytes, posiian 6 uma ccomperssagao no interior Go arquivo @ secands & 0 tempo decorrido. Os parématios seo expicades no texto. vatiaveis tm valores idénticos no momento da chamada fork, mas, como os dados do processo pai sio copiados para criaro processo filho, mudangas subsequentes em um deles, nio afetam o outio. (0 texto do programa, que ¢ inalters- vel, € compartilhado entre processo pat e processo hilo.) A chamada fors retorna. um valor, que & zero no processo filho e igual ao identificador de processo (PID) do proces- 0 filho no processo pai. Usando o PID retornado, os dois processos podem verificar que um é o processo pat e que o ‘outro é 0 procesao filho. [Na maioria dos casos, depots de uma chamada fork, 0 processo filho precisaré executar tum cédigo diferente da- ‘quele do processo pai. Considere o caso do shell, Ele 1é um ccomando do terminal, cia. um process filho, espera que ‘0 processo filho execute o comand e, entao. I o priximo comando quando o processo fiho termina, Para esperar a finalizagGo do processo filho, o processo pai executa uma cchamada de sistema waiipd, que somente aguarda até que © processo filho termine (qualquer process filho, 3¢ exis- tir mais de uma). & chamada vapid pode esperar por um processo filho especifico ow por um processo filo qual- ‘quer atribuindo-se -1 ao primeiro parimetto, Quando a chamiaia wai¢ termina, o endereco apontado pelo segun- do parimetro, sail, seré atribuido como estado de saida do processo filho (térming normal ou anormal ¢ valor de saida). Varias opcdes também sdo ofereeidas € especificadas pelo tercetro parimetro, ‘Agora, considere como a chamada tok é usada pelo shell. Quando tum comando € digitado, o shell cria um nowo rocesso. Esse processo filho deve executar 0 comando do usudtio. Ele faz isso usando a chamada de sistema fexecve, que faz com que toda a sua imagem do mticleo seja substituida pelo arquivo cujo nome esté em seu primero parmetra, (De fato, a chamada de sistema em si & exe, tmas varias rovinas de biblioteca diferentes a chamam com diferentes pardmetros e nomes um pouco diferentes. Aqui, as trataremos como chamadas de sistema.) Um shell muito simplificado que ilustra @ uso-das chamadas for, waitpid & cxacve € mastiade na Figura 118. doling TRUE 1 whi (TRUE) ¢ type_prompt(); read _commandicommand, Hi lorkt) I= 0) { 1. Cétigo do processo pal. 6 wap 1, dstatus, 0); Yeloe ( 1 COuyy do processy thy. ‘exeove(command, parameters, 0); y y parameters); /. Capitulo 1 _Intiodugo 33 Nocasomaisgeral, achamadaexeovepossutréspardme- tros: o nome do arquivo a ser executado, um ponteiro para © arranjo de org ponteiro para o arranjo do ambiente. Esses pardmettos sero descritos resumidamen- te. Varias rotinas de biblioteca — inclusive a exe a exec, a ‘execle©a exeove — so fornecidas para que seja possivel omi- tirpardmetros ou especificd-los de vérias maneiras. Ao lon- {go de todo este livro. usaremos o nome exec para represen tara chamada de sistema invocada por todas essas rotinas. Considerenos v usu Ue un conianidy wine ep arqt ace usado para copiat arg pata arg2. Depois que o shell eriou © processo fliho, este localiza e executa o arquivo ap e passa para ele os riomes dos arquivos de origem e de destino, © programa principal de q (e 0 programa principal da ia dos outros programas em €) contém a declaragio ‘mainjarge, argv, envp) onde arye € umn contador do mvimero de itens na linha de comando, incluindo 0 nome do programa, Para esse exem- plo, argc 3. © segundo pardmetto, argv, € un ponteito para um arranjo. O elemento i desse arranja é um ponteira para a i- &ima cadeia de caracteres na linha de comando. Em nosso exemplo, argv{0] apontaria para a cadeia de caracteres “ep, ‘arge{1] apontaria a cadeia de caracteres ‘arg’ ¢ argy/2) apontaria para a cadela de caracteres ‘anq2’ © teteeiro parimetso do main, ep, € um ponteiro para o ambiente, um arranjo de cadias de caracteres que coutéin attibuigdes da forma nome = valer, usadas para passar para um programa informages como o tipo de ter- minal € 0 nome do diretério home. Hd procedimentos de biblioteca que podem ser chamados por programas para se cobter variaveis de ambiente, que nomalmente sio usados ‘para customizar como um ustério quer executar certas ta refas (por exemplo, a impressora-padrio a ser usada). Na Figura 1.18, nenhum ambiente é passado para o proces- 50 fillio: assim, 0 terceiro patdmetro de exeeve & um zero. nts © 1. repita para sempre «/ 1 mostra prompt natela 16 entrada do terminal. 1 ona processo tho.) 1 aguarda o processo tho acabar + J exeeuta 6 comand 1 Figura 1.18. Un interpetador ce comandos simplficado. Neste iro, presume-se TRUE coma 1. 34 __ Sistemas operacionais modemos Se a chamada exec parecer-the complicada, nao se de~ sespere: ela & (semanticamente) a mais complexa de t das.a3 chamadas de sistema em POSIX. Todos a9 outras 380 muito mais simples. Como um exemplo das simples, consi- dere a chamada ext, que os processos devem usar para ter miner sua execucéo. Ela posstii um parametro, o estado da saida (0.a 255), que 6 retornado ao processo pai via stailoe na chiamada de sistema waits Os processos em UNIX tém suas memérias divides cen até ey segemos: 0 segment de texto (isto €, 0 édigo do programa), 0 segmento de dados (as variéveis) 0 segmento de pilha. 0 segmento de dados cresce para «ima e a pilha eresce para baixo, conforme mostra a Figura 1.19, Entre eles hd uma lacuna de espago de enderecamet 10 nfo usado. A pilha eresce automaticamente para dentro, dalacina, conforme se fizer necessatio, masa expansio do segmenta de dados ¢ feita mediante o uso explicte de uma chamada de sistema ors, que especifica o novo enderego no ‘qual usegurenty de datos venus, Contud, essa hana nao é definida pelo padrao POSIX, j4 que os programadores sao incentivados a usar a rotina de biblioteca malloc para alocar meméria dinamicamente, ¢ a impleinentacio subj cente do maliocnav fot planejada para que fosse uma candli- data adequata & padronizagéo, pois poucos programadores uusam-na diretamente ¢ € questiondvel se algum deles jé percebeu que tak nfo estd no POST. 1.6.2! Chamadas de sistema para gerenciamento de arquivos -Muitas chamadas de sistema estio relacionadas com © sistema de arquivos, Nesta segio estudaremos as chamadas que operam sobre arquivos individuals; na préxima, serao abordadas as que envolvem diret6rios ou o sistema de arqui- Para ler ou escrever um arquivo, deve-se primetro abrilo usando open. 85a chamada especitica 0 nome do arquivo a ser aberto, como um caminho (path tate) absoluto ou re= lativo ao diretétio de trabalho € um eédigo de ©_RDONLY, O_WRONLY ou O_RDWR, significando abri-lo para leitura, «scrita ov ambas, Para criar um novo arquivo, é usado opari- metro 0_CREAT. O descrtor de arquivos retomnado poi, 10, ser usado para ler ou eserever. Logo em seguida, oarqu ‘vopodeserfechadoporciose, quetoma odeseritor de arquivos, dlisponivel para reutilizagio em win open subsequiente Enderego (hex) FFFF Piha’ Tacana. LL Dados Tex ‘0000 1 Figura .19 Os processes tim és segments texto, dacs oie. ‘As chamadas mais intensivamente uilizadas so, sem sombra de dtivida, read ¢ wae, Vinos reed anterlorment, Write possui os mesmos parsimetross Embora amaioria dos programas lea e esereva arquivos sequencialmente, alguns programas aplicativos precisam ter disponibilidade de acesso aleat6rio a qualquer parte de tum arquivo. Associado a cada arquivo existe um ponteico ‘que indica a posigao atual no arquivo. Ao ler (eserever) se- quencialiente, aponta-se geralmente para o prdximo byte a scr ido (escrito). A chamada eet altera 0 valor do pon. teiro de posigao, para que chamadas subsequentes de ead ‘ou vite possam comegar em qualquer ponto do arquivo. A chamada fseek tem trés parimetros: o primeiro & o descritor de arquivo; 0 segundo & uma posigio no arquivo © 0 terceiro informa se a posicio no arquivo € relativa 20 inicio, & posicéo atual ou ao final do arquivo. O valor re- tornado pela chamada leek € a posigio absoluta no arquivo (em bytes) depois de alterat 0 ponteito. Pata Lala atquive, v UNIX regista 0 tipo Jo anquivo (arquivo regular, arquivo especial, diret6rio etc), 0 tama- inho € 0 momento da ditima modifcagao, entre outras in formagdes. Os programas padem pedir para ver essa infor nagio por meio da chamada de sistema stat. O primeico parametro dessa chamada especifica 0 arquivo a ser inspe~ ionado; o segundo é um ponteiro para uma estrutura na qual a informagio deverd ser colexada. As chamadas fst fazem a mesma coisa por um arquivo abert. 1.6.3] Chamadas de sistema para gerenciamento de diretérios ‘Nesta seqao vereris alguinas chamadas de sistema mais relacionadas com dliretérios ou com o sistema de arquivos como um todo, do que com um arquivo especiico, como ra segio anterior. AS dias primeinas chamadas, mir ¢ rt, respectivamente, criam e apagam direi6rios vazios. A préni mma chamada a trk, Seu intuite € permitir gue um mesmo arquivo aparega com dois ou mais nomes, inclusive em di retGrios diferentes. Um usa tiico da. chamada ink & permitir 4que varios membros da mesma equipe de progeama¢ao com partther um arquivo comum, cada um dees tendo 0 arqui ‘vo aparecendo em seu préprio ditetério, possivelmente com. diferentes nomes, Compartilhar um arquivo no & 0 mesmo gue dar a cada membro da equipe uma eépia privada, mas significa que as mudancas feitas por qualquer memlro dessa ‘equipe ficam instantaneamente visives aos outros membros —hé somente um arquivo, Quando si feitas cOpias de um arquivo comparihado, as mudangas subsequentes para uma Spl espectfica ndo afetam as ouias. Para vermos como a chamada Ink funciona, considere «20 da Figura 1.20(a). Al estao dois usuarios. ast e Jin; cada um possui seus proprios diret6rios com alguns ar- ‘quives. Entdo, se at executar um programa que contenha a chamada de sistema link'/usrjjm/memo’, “/usr/ast/note") lustfast Jase 16] corrsio] [31 ]bin jet |iosos | |70| memo 4a} testo | |59) tc. 38 | progt @ fustiast usu Ve] eorrio] [a Jon 81 jogos. | |70) memo 40] teste | |58| te. 70} rota | |38| progt ©) Figura 1.20. (a) Dois dretorios antes Go trv de /usrdioy _memo ao diretério ast. (b) Os mesmos diet6rios depois, dessa fink ‘© arquivo memo no ditetdrio de jim estard agora aparecen- do no diretrio de ast com o nome note, A partir de entao, Jusrhjimimens e fusrfastnae referem-se a0 mesmo arquivo. Yale notar que manter os diretsrios de usaétio em /us, ‘user, (ome Ou em algum outro lugar é simplesmente uma decisdo tomada pelo administrador local do sistema. Entender como a chamada nk funciona provavelmen- te esclarecerd o que ela faz. Todo arquivo em UNIX tem ‘um niimero tinico, sen i-mimero, que o identifica. Esse F-ndimero é um indice em uma tabela de -nodes, um por arquivo, informando quem possui o arquivo, onde seus blocos de disco estdo, e assim por diante. Um diretirio & simplesmente um arquivo contendo um conjunto de pa- res (-niimero, nome em ASCI). Nas primeiras versdes do UNIS, wide ential de diretériv ea de 16 bytes — 2 bytes para o i-ndimero € 14 bytes para o nome, Agora, & ‘necesséria ina estrutura mais complexa para dar suporte a nomies longos de arquivos, mas, concettuatmente, umd retGrio ainda é um conjunto de pares (i-ndinero, nome ASC}. No Figura 1.20, corzeio tem ai niimero 16, ¢ assim por diante, © que a chamada lnk faz é simplesmente ctiar ‘uma nova entrada de diretério com um nome (possivel- mente novo), usando o i-ntimero de um arquivo existente. Na Figura 1.20(b), duas entradas t€m_o mesmo i-niimero (70) &, portanto, fazem referencia ao mesmo arquivo. Se ‘uma das duas € removida posteriormente, usando-se uma cchamada de sistema urink, 6 outro arquivo permanece. Se ambos forem removitlos, 0 UNIX pereeberé que nao hé en- tradas para o arquivo (um campo no inode registra o mi- mero de entradas de diretério apontando para 0 arquivo) ‘enti 0 arquivo € removide do disco. Conforme mencionado anteriormente, a chamada de sistema maunt permite que dois sistemas de arquivo sejam unificados. Uma situagio comum é ter em disco rigido 0 Capitulo 1 _Intiodugo 35 sistema de arquivos-raiz coniendo as versies binarias (e cutéveis) dos comandos comuns ¢ outros arquivos inten- sivamente usados. © usudrio pode, enti, inserir um dis quete com arquivos a serem lidos na unidade de CD-ROM. Executando a chamada de sistema mount, 0 sistema de arquivos do disco flexfvel pode ser anexado ao sistema de arquivos-raiz, conforme mostra a Figura 1.21. Um coman- do tipica em © para realizar essa montagem & mount cera", “fant”, Of; no qual 0 primeiro pardmetro é 0 nome de um arquivo especial de blocos para a unidade de disco 0, 0 segundo parametro ¢ 0 local na drvore onde ele seré montado e 0 {erceiro parametro mforma se o sistema de arquivos deve ser montado como leitura ¢ escita ot apenas para letura. Depois da chamada mount, pode-se ter acess0 a ut ar quivo na unidade de disco 0 apenas usando seu caminho a partir do ditetério-raiz ou do diret6rio de trabalho, sem ¢ preocupar com qual unidade de diseo isso sera feito. Na verdade, a segunda, a terceira ¢ a quarta unidades de disco também podem ser montadas em qualquer lugar na drvo- re, A chamada meu toma possivel integrar meios remo- vivets a uma tinica hierarquia integrada de arquivos, sem ‘a necessidade de saber em qual unidade se encontra um arquivo, Embora esse exemplo trate especificameme de unidades de CD-ROM, podemos montar também porsies de discos rigidos (muitas veres chamadas de partighes ou dispositives secundérios) desse modo, assim como com discos tigidos extemas e dispositivos stick USB, Quan- do no for mais necessério, um sistema de arquivos poile- ra ser desmontado com a chamada de sistema umount, 1.6.4] Outras chamadas de Existe uma variedade de outras chamadas de sistema, Estudaremos apenas quatro delas aqui. A chamada cht al- tera o diret6rio atual de trabalio. Depois de charnada chdit/ustasttest’); istema bin dev usr © Figura 1.21 (a) O sistema de erquivos antes da montagem, (©) O sistema de erquivos depois da montage. 36 Sistemas operacionais modemos uma abertura do arquive xyz abrira /usrfastfesthyz. O concelto de diretérlo de trabalho elimina a necessidade de digitar (longos) nomes de caminhos absolutes a todo momento. sm UNIX, todo arquivo tem um modo para prote «fo, Esse modo inclu os bis leitura-cscrita-exccugio para © propritdrio, para o grupo e para os outros, A chamada de sistema chvrod possiilita a alteracia do made de um arquivo. Por exemplo, para definir um arquivo como so: mcnte lcitura para todos, cxccto acu proprictésio, poderia serexecutado ‘chmodt‘ara’, 0644); A diana de site Kl € seus processos tém para enviar sinais, Se um processo «std preparado para capturar um sinal em particular, entao uma rotina de tratamento desse sinal é executada quando le chega. Se o processo ndo esté preparado para tratar um. sinal. entao sna chegada ‘mara’ @ procesca (e, par camse= guinte, o nome da chamada). (© POSIX define vrias rotinas para lidar com o tempo. Por exemplo, a chamada time retorna o tempo atual em segundos, com 0 correspondendo & meia-noite do dia I2de Janeiro de 1970 {como se nesse instante o dia estivesse co- meganclo, e nao terminando). Em computadores com pa~ lavras de 32 bits, 6 valor maximo que a chamada tma pode retornar €2)°~ 1 segundos (supondo que esteja usando in- tciros sem sinal). Esse valor corresponde a pouco mais de 136 anos. Assim, no ano 2106, os sistemas UNIX de 32 bits iio entrar em pane, como o famoso bug do milénio em 2000, que foi evitado gracas aos grandes estorgos da indis- tria de Tl para cortigir esse problema. Se vocé attialmente possi um sistema UNIX de 32 bits, aconselho-0 a trocé-lo por um de 64 bits em algum momento antes de 2106, a angus Yue vs usudtios 1.6.5] A API Win32 do Windows Até aqui temos nos concentrado principalmente no UNIX. Agora é a ver de estudarmos resumidamente 0 Windows, © Windows e 0 UNIX diferem de uma manei- ro fundamental em scua respectives modelos de progta magio. Um programa UNIX consiste em um cédigo que {az uma coisa ou outra, executando chamadas de sistema pata tea-lizar certos servigos, Por outto lado, um programa Windows € normalmente ditigido por eventas — 0 pro- grama principal espera acontecer algum evento ¢ endo chama uma rotina para traté-lo. Eventos tipicos sao tedlas sendo pressionadas, a movimentagdo do mouse, um botdo de mouse sendo pressionado ou tum disco flexivel sendo inserido. Os manipuladores (handlers) so, entao, chama- dos para processar 0 evento, atualizar a tela ¢ 0 estado interno do programa, De modo geral, isso leva a um estilo de programacio diferente daquele do UNIX, mas, como 0 foco deste livto é a fungio e a estrutura do sistema opera~ ional, esses diferentes modelos de programagao nao nos, interessarde muito. £ laro que 9 Windows também tem chamadas de sis- tema, Em UNIX, hé quase um reladionamento de I-para-L ‘entre as chamadas de sistema (por exemplo, oad) ¢ a5 r0 tinas de biblioteca (par exemplo, read) usadas para invocar as chamadas de sistema. Hm outras palavras, para cada cha: mada de sistema hd, grass modo, uma rotina de biblioteca que é chamada para invocé-la, conforme indica a Figura L.L7. além disso, POSIX possui somente cerca de cem cha- madas de rotina, Com 0 Winslows, a situagio € cadivalmente diferen+ te, Para comecar, as chamadas de biblioteca © as chama- das reais ao sistema sao bastante desacopladas. A Microsoft dfiniu um conjunto de rotinas, denominado API Win32 (application program incerace — interlace do programa de aplicativo), para que es programadores tivessem acesso aos, servigos do. sistema operacional. Essa interface tem sido (parcialmente) suportada em todas as versbes do Windows desile o Windows 95. Desacoplando-se a interface das cha- madas reais ao sistema, a Microsoft detém a eapacidade de ‘mudar as chamadas reais a0 sistema quando bem entender (até de versao para versao) sem invalidaros programas exis- tentes. O.que realmente constitu o subsisterma Win32.& um, ‘poco ambiguo, jé que 0 Windows 2000, o Windows XPe 0 Windows Vista tém muitas chamadas novas que nao esta- yam anteriormente dispaniveis. Nesta segfo, Win32 sig fica a interface suportada por todas as versties do Windows. 0 niimero de chramadas da API Win32 € extremamen- te grande, chegando a milhares. Akém disso, enquanto ‘muitas delas invocam chamadas de sistema, uma quantida- de substancial é executada totalmente no espago de ust rio. Como consequéncia disso, no Windows € impossivel ver o que é uma chamada de sistema (isto &, realizada pelo niicleo) e 0 que constitui simplesmente uma chamada de biblioteca do espago de ustdrio. Na verdade, 0 que é uma chamade de sistema em uma versio do Windows pode scr executado no espaco de usuario em uma versao diferente & vice-versa. Quando discutirmos as chamadas de sistema do Windows neste livra, usaremos as rotinas Win32 (onde for apropriado}, j4 que a Microsoft garante que essas rotinas ppermanecerdo estiveis com 0 passar do tempo, Mas € bom. lembrar que nem todas elas sao verdadeiras chamadas de sistema (isto é, desviam © controle para o niicleo). ‘A. API Win32 tem um ntimero imenso de chamadas para gerenciar janclas, figuras geométricas, textos, fontes, de caracteres, barras de rolagem, caixas de didlogos, menus, © outros aspectos da interface gréfica GUL, Com o intuito de estender 6 subsistema grafico para executar em modo niicleo (0 que é vatido para algumas versoes do Windows, mas nao para todas), a imerface grétiea GUI & composta de chamnadas de sistema; do contravio, elas conteriam apenas hainuadas de biblioteca, Deverfannvs discutic essay caita- dlas neste livro au no? Como elas nao sio realmente rela- ionadas com a fungao de sistema operacional, decidimos, que nao, mesmo sabendo que elas podem ser executadas pelo mticleo, Leitores interessados na API Win32 podem. consultar um dos muites livros sobre o assumie, como, por exemplo, Hart (1997), Rector e Newcomer (1997) & Simon (1997). Jé que introduzir todas as chamadas da interlace APL Wind2 estd fora de questao,ficaremas limitados is chama- das que correspondem, grosso modo, & funcionalidade das chamadas UNIX relacionadas na Tabela 1.1. Elas estdo enu- imeradas na Tahela 1.2 ‘Vainus agora percorrer rapidamente a lista da Tabela 1.2 (CreateProcess cra um novo processo; funciona como wma combinagio de fk ede sxacve em UNIX. Poss muitos pard- ‘UNIX Wing Descrigao fork | CreateProcess | Cria um novo proceso waitpid | WaitForSingleObject | Pode esperar que um proceso sala exeeve | (nenfuma) (CeeateProcess = fork + exit | BxtProcess Conciui a exscugao open | CreeteF le Gri. um arquivo ou abre um arguiva existente loca | CloseHendle Fecha um arquivo read | Readhie LL dados 2 parti de um arquivo write | WiteFle Escreve dados ern um arquivo Iseek _ | SethiePointer Move 0 ponteio do arquivo stat | GetFieAttibutes® | Obism varios atibutos do arco Capitulo 1_Introducéo__ 37 ‘metros que especificam as propriedades do pracesso recente- smente crado, 0 Windows ndo tem una hierarquia de proces- ‘505 como 0 UNIX: portanto, nio hé o conceite de processo pal « processo filha, Depois que um pracesso fol criado, o cador a criatura sao iguats. WatkarSngleObect & usada para espe- rar por um evento. £ possivel esperar muitos eventos com essa chamada. Se o parametto especificar um processo, entior ‘quem chamou esperard o proceso especificado salt, o que & feito usando BxiProvess. ‘As prisimas sels chamadas operam sobre arquivos sio funcionalmente similares a suas cotrespondentes do UNIX, embora sejam diferentes quanto aos pardmettos © alguns detalhes. Além disso, 0s arquivos podem ser abertos, fechados, lidos ¢ escritos de um modo muito similar a0 do UNIX. As chamadas SatFlePointre GetFileAtibutasEx alteram posigdo no arquivo e obtém alguns atributos de arquivo. © Windows possui diretirios que sie eriados e removi- ddos com CreateDireciory ¢ RemoveDiectory,respectivamente. Hé também a nude de direvério atual, dewermulnada por ‘SetCurentDirectory O tempo atual € obtido por GetLocelTime. A interface Win32 nao tem links para arquivos, nem sisiemas de arquivos moniados, nem seguranga ou sinais. Portanto, essas chamadas, correspondemes 2s chamadas em UNIX, nao existem. & claro que o subsistema Win32 ppossui uma grande quantidade de chamadas que 0 UNIX no tem, especialmente para gerenciar @ interface gréfica GUI, €0 Windows Vista tem um elaborado sistema de seg- ranca € também dé suport a inks (gages de arquivos). Por fim, talver seja melhor fazer uma observagao sobre © subsistema Win32: ele nao & uma interface totalmente uniforme e consistente. A principal acusagio contra ele € a necessidade de compatibilidade retroativa com as interfa- ces de 16 bits antigamente usadas no Windows 3.x. HA estrutura de sistemas operacionais mkdir | CreateDirectoy | ria um now oratorio rmdir | Removedirectory | Remove um dretéro vazio link | (penta) Wind nd 6 suport a links nik | Deeterie Destrci um ercuivo existente mount _| (renhuma) Win nda ci superte a mount ‘umount | (aenfuma) \Wind2 nao da suporte a aunt hdr | SetCurrentDirectory | Altera 0 dretéro de trabalho atual chmod | (renfuma) Wind? rio dé superta a ‘seguranga {embora o NT ‘superte) ‘il___| (rentumay \Wind2 néo dé suporte asinais time | Getlovarrime Obtém o tempo atu Tabola 1.2 As chamadas da API Wind2 quo correspondom aproxinadamente as chamadas do UNDK da Teele 1 ‘Agora que tivemos uma visio exiema de un siste- sma operacional — isto é, da interface dele com 0 progra- mador —, € 0 momento de olharmos para sta estrutura interna. Nas proximas segdes, vamos examinar cinco di- ferentes estruturas de sistemas operacionats, para termos uma lela do especito de possibilidades. Isso nao significa que esgotaremos 0 assunto, mas que daremos uma ideia sobre alguns projetos que tém sido usados ma pratica. Os seis grupos abordados sera 0s seguintes: sistemas mono- Titicns, sistemas de camadas, micronticleo, sistemas clien- te-servidor, mdquinas virtuais € exoniicleo, 1.2.1] Sistemas A organizagio monolitica & de longe a mai nesta abordagem, o sistema opetacional inteira é executa- do como um sinico programa no modo niicleo, O sistema jonoll icos Sistemas operacionais moderns operacional & escrito como uma colegao de rotinas,liga- das a um tinico grande programa bindrio executavel. Nes- 2a abordagem, cada rotina do sistema tem uma interface ‘bem definida quanto a pardmetros e resultados e cada uma delas € livre para chamar qualquer outta, se esta olerecer alguma computagéo itil de que a primeira necessite. A cexisténcia de milhares de rotinas que podem chamar umas 3s ontrag sem restrigio mnitas ve7es leva a dificuldades de compreensie do sistema, Para consitwit 0 programa-objeto real do sistema ‘operacional usando essa abordagem, primeiro compilam- -s¢ todas as rotinas individualmente (ou os arquivos que contém as rotinas), Entdo, juntam-se todas em um nico arquivo-objeto usando 0 ligador (tinker) do sistema. Nao existe essencialmente oculiagio de informagio; todas as, rotinas sia visiveis ums as outras (0 oposto de uma es- trutura de médulos ou pacotes, na qual muito da infor- magao € ocultado dentro de mésdilos e somente os pontos de entrada designados podem ser chamados do lado de fora do méduto). Contudo, mesmo em sistemas monoliticns, € possivel ter um minimo de estrutura. Os servigos (chamadas de sis- tema) providos pelo sistema operacional s30 requisitados colocando-se os pardmetros em um local bem definido (na pilha, por exemplo)e, entdo, executando uma instrugio de desvio de controle (trap). ssa instrugio chaveia a maquina do modo usuario para 6 modo niicleo € translere 0 contro- le para o sistema operacional, mostrado como passo 6 nia Figura 1.17. 0 sistema operacional busca entéo os parame- ‘ros ¢ determina qual chamada de sistema seré executada, Depois disso, ele indexa tuma tabela que contém na linha k uum ponteiro para a rotina que executa a chamada de siste- ma k (passo 7 na Figura 1.17). Essa organizagio sugere uma estrutura bisica para © sistema operacional: 1. Um programa principal que invoca a rotina do ser vigo requisitado, 2, Um conjuunto de rotinas de servigo que executam as chamadas de sistema. 3. Unt conjunto de sotinas utiltdrias que auxitian ay rotinas de servigo, Segundo esse modelo, para cada chamada de sistema 1h uma rotina de servigo que se encarrega dela. As roti- nas utiltérias realizann tarelas necessérias para as varias rotinas de servigo, como buscar dados dos programas dos usuarios. Essa divisdo de rotinas em trés camadas € mos- trada na Figura 1.22 ‘Além do sistema operacional prineipol que & carne gado quando um computador é iniciado, muitos sistemas ‘operacionais dao suporte a extensies carregaveis, como drivers de E/S e sistemas de arquivos. Esses componen= tes sio carregados conforme a demanda, Rotina principal Rotinas e servigo atinas de uilidade Figura 1.22 Um modeky de estutu aga simples pa un sisterna monaltco, 1.7.21 Sistemas de camadas Uma generalizagio da abordagem da Figura 1.22 & a forganizagao do sistema operacional como uma hierarquia de camadas, cada uma delas construfda sobre a camada imediatamente inferior, Q primeita sistema construido desea maneita foi 0 THR, enja sigh Hogeschool Kindhoven, na Holanda, onde fot implementa- do por E.W. Dijkstra (1968) ¢ seus ulunus. 0 sistema THE, cera um sistemna em lote (date) simples para um computa dor holandés, 0 Electrologica X8, que tinha 32 K de pala vyras de 27 bits (os bits eram caros naquela época). O sistema possufa seis camadas, conforme mostra a Ta- bola 1.3. A camada 0 tratava da alocagio do processador, realizando chaveamento de processos quando ocorriam as interrupgoes ot! quando os temporizadores expitavamn. ‘Acima da camada 0, 0 sistema era formado por processos sequentciais; cada tum deles podia ser programado sem a preocupagio com o fato de miliplos processos estarem executando em um tinico processador. Em outras palavras, a camada 0 fornecia a mmultiprogramagio bisica da CPU, ‘A camada 1 encarregava-se do gerenciamento de me- mtia. Ela alocava espago pata provessos na memdria prin= cipal ¢ em um tambor magnético de 512 K palavras, que ammazenava as partes de processos (paginas) para os quai nao havia espago na meméria principal. Acima da cama- da 1, 0s processos nao precisavam prestar atengio a se es- tavain na meméria principal ow no tambor magnético: 3 camada 1 cuidava disso, assegurando que as paginas eram. trazidas para a meméria principal quando necesséric, deriva da Technische ‘Camada Fungo 5_| Ocperador 4__| Programas de usuario 3__| Gerenciamento de entrada/saica 2__| Gomunicagdo operadrprovesso 1___| Memoria gerenciamanto de tambor 0 _| Aocagao do processador @ multiorogramagao 1 Tabela 1.2. Esvutwa do sistema operacional THE. ‘A camada 2 encarregava-se da comunicacio entre cada processo v o console de operacio (isto 6, ¢ usuwétlo). Acima dessa camada, cada processo tinha efetivamente seu prs prio console de operagia, A camada 3 encarregava-se do {gerenciamento dos dispositivas de /S e armazenava tem- porariamente os fluxos de informagdo que iam para esses dispositivos ou que vinham dees. Acima da camada 3, cada pprocess0 pedia lidar com dispositivos abstratos le EIS mais amigaveis, em ver de dispositivos reais cheios de pecu- Tioridades. Na camada 4 encontravam 2e 09 programas de uusudtio. Eles ndo tinham de se preocupar com o gerencia- mento de processo, de meméria, console ou L/S. 0 pro- ‘cesso operador do sistema estava localizado na camada 5. Outra generalizagio do conceito de camadas estava presente no sistema MULTICS. Em ver de camadas. o MUL- ‘TICS era descrito coma uma sétie de anéis coneéntricos, sendo que cada ane! interno era mais privilegiado que os cexternos, Quando uma rotina em um anel externo que- tla channat ain toting no ane] nein, ela deveris fazer 0 ‘equivalente a uma chamada de sistema, isto & uma instru ‘gio de desvio, TRAP. € a validade dos parametros era cuida- dosamente verificada antes de permitir que a chamada con- tinuasse. Embora no MULTICS todo © sistema operacional fosse parte do espago de enderegamento de cada processe de usuétio, 0 hardware possibilitava ao sistema designar rotinas individuais (na verdad, segmentos de memeéria) como protegidas contra leitura, escrita ou execugio. © esquema de camadas do sistema THE era somen= te um suporte ao projeto, pois todas as partes do sistema ‘eram, 20 final, agrupadas ext unt tinico programa-objeto. 16 no MULTICS, 6 mecanismo de anéis estava muito mais presente em tempo de execugio € reforgado pelo hard- ‘ware, Esse mecanismo de anéis era vantajoso porque po- dia faciimente ser estendido para estruturar subsistemas, de usuirio, Por exemplo, um professor podia eserever um programa para testar e atribuir notas a programas de alu nos executando-o no anel 1, enquanto s programas dos alunos seriam executados no anel n + 1, a fim de que ne- hum deles pudesse alterar suas notas. 1.73 Microniicleo Com a abordagem do sistema de camadas, os projetis- tas podem escoller onde tragar a tronteira ndicleo-usustio. ‘radicionalmente, todas as camadas entram no niieleo, mas {sso nao & necessétio. Na realidade, apresentam-se fortes argumentos para colocagdo do mfnimo possivel em modo iiicleo porque erros no nticleo podem derrubar o sistema instantancamente. Por outro lado, processos de usudrio podem ser canfigurados com menos poténcia de modo que tim err0 nd aja fatal Varios pescuisadores tém estudado 0 niimero de erros por mil inhas de cédigo (por exemplo, Basile Perticone, 1984; Ostrand e Weyuker, 2002). A densiade de errasde- pende do tamanho do médulo, da idade do médulo ete, Capitulo 1 Intiodugio 39 sas uma cifra aproximada para sistemas industrais sérios 6 de dez erros por mil linhas de cédigo. Isso significa que & provivel que um sistema operacional monolitico de cinco inilhdes de linhas de eéaigo contentia algo come 50 mil err0s no mucleo. £ claro que nem todos sao taal, visto que alguns erros podem ser coisas como emitic uma mensagem de erro incorreta em uma situaggo que raramente ocor re, Contudo, os sistemas operacionais sfo suficientemente sujeitos @ erro €, por isso, os fabricantes de computadores Inserem botdes de reinicializagio neles (frequentemente no painel frontal), algo que fabricantes de apatellos de TY, ros e carros nao fazem, apesar da grande quantidade de softwares nesses dispositivos. A ideia basica por trés do projeto da micronticteo é al- cangar alta confiabilidade por meio da divisdo do sistema ‘operacional em médulos pequenos, bem definidos, v ape- nas um desses médulos — o micronticleo — & executado rio modo niicleo e 0 restante € executado como processos dle ususrio comuns relativamente sem poténcia, Em parti cular, quando hiéa execugio de cada driver de dispositivo € de cada sistema de arquivos como uum processo de usuatio separado, um erro em um deles pode quebrar aquele com- ponente, mas nio pode quebrar o sistema inteiro, Desse modo, um erro na unidade de audio far com que 0 som seja adulterado ou interrompido, mas nfo travaré o com- putador. Por outro lado, e ico, com todas as unidades no ntieleo, uma unidade de duidio defei- tuosa pode facimente dar como referéncia um endereco de meméria invaldo e parar o sistema instantaneamente. ‘Muitos micronticleo foram implementados € utiliza~ dos (Accetta et al, 1986; Haertig et al, 1997; Heiser etal, 2006; Herder et al., 2006; Hildebrand, 1992; Kirsch et al., 2005; Liedtke, 1993, 1995, 1996; Pike et al, 1992; Zu- bert et al, 1999). Eles sio especialmente comuns em apli- cagSea de tempo real, industria, de aviGnica € militares, que sio cruciais e-tém requisitos de confiabilidade muito altos. Alguns dos micronticleas mals conhecidos sao In- tegrity, K42, L4, PikeOS, QNX, Symbian e MINIX 3. Fare- ‘mos agora um breve resuimo do MINIX 3, que levou a idea de modularidade ao limite, decompondo a maior parte do sistema operacional em varios processos independentes no modo usudrio. © MINIX 3 & um sistema de cédigo aberto clisponivel gratuitamente em e compati- vel com o POSIX (Herder etal, 2006a; Herder eta, 2006b}. © mictonticleo do MINIX 3 tem apenas cerca de 3.200 Tinhas de € e $00 linhas de assembler para fungbes de nivel muito baixo, como contengéo de interrupgbes e processos de chaveamento. 0 cédigo € gerencia e escalona proces- 0s, controla a comunicagdo entre processos (trocando smensagens entre eles) ¢ oferece um conjunto de cerca de 39 dhatadas av uiidley pata petite que v ceste Uv sis- tema operacional faga sew trabalho. Fssas chamadas exe- cutam fungGes como assotiar os manipuladores (handles) 4s imterrupgies,transferir dados entre espagos de endere- amento ¢ instalar novos mapas de meméria para proces-

Vous aimerez peut-être aussi