SlideShare uma empresa Scribd logo
1 de 23
Baixar para ler offline
Universidade do Vale do Rio dos Sinos

                 UNISINOS




Trabalho sobre o sistema operacional Mac OS X




          Leandro da Rocha Godoy
         Walter Luiz Andriola Pereira




     Conceitos de Sistemas Operacionais




            Prof. Túlio C. Bender




      São Leopoldo, Novembro de 2008.
SUMÁRIO



Por quê Mac OS X?                                        3

Características do Mac OS X                              6

Gerência de processos do MAC OS X                        8

Gerência de memória do MAC OS X                         12

Gerência de arquivos do MAC OS X                        16

Conceitos da disciplina não implementados no Mac OS X   20

Outras tecnologias e inovações do Mac OS X              21

Análise crítica do Mac OS X                             22

Referências bibliográficas                              23
POR QUÊ MAC OS X?

Mac
         Em meio a uma grande quantidade de fabricantes de computadores pessoais, a Apple permanece a única a
desenvolver um sistema operacional exclusivo para o uso em seu hardware. Por este motivo, é natural que o software se
molde ao hardware em que será executado, criando um conjunto mais uniforme e, espera-se, menos propenso a falhas e
incompatibilidade.

       Jef Raskin, empregado da Apple, foi o responsável por delinear, no início dos anos 80, as
primeiras características do que viria a ser o projeto Macintosh, anteriormente chamado projeto Annie,
e que advém de uma apropriada brincadeira com o nome de uma variedade de maçã, McIntosh.

         Em “O livro de Macintosh”, documento interno onde Raskin enumera os recursos desejáveis
para um sistema de uso individual, nota-se um desejo de tornar o computador algo simples do usar,
acessível financeiramente e, em suas palavras, projetado para a “Pessoa Comum” (PITS - Person in the
Street), desprovidas de conhecimento técnico acerca de programação e manutenção de computadores.

        Contrapondo outras plataformas da época, como a IBM PC, ele pregava que o resultado do
projeto teria que ser um produto leve e integrado, e não algo dividido em peças a ser montado, e que
deveria ser trivial adicionar outras partes a ele. Cabos, possuiria apenas o de força, e se possível, nem
ele. Não possuiria partes internar expostas, e deveria ser desnecessário abri-lo, a não ser para reparos.
Porém, aquilo que demonstrou mais claramente sua extraordinária visão de futuro, tratava da maneira
que os manuais deveriam ser, mínimos e escritos em linguagem leiga, o que atualmente resume
perfeitamente a proposta de produto que a empresa entrega ao usuário.


Mac OS
         Além do foco no usuário final, leigo, que tem pouca disposição para o aprendizado do complexo sistema de linha
de comandos, os produtos da marca Apple possuem um tal refinamento que, mesmo custando mais caro que a
concorrência, vem aumentando em vendas atualmente.

        O sistema operacional padrão para computadores Machintosh possui basicamente duas
encarnações. A primeira durou até a versão 9 e foi o sistema criado junto com a plataforma.
Inicialmente era chamado de System, nas últimas duas versões passou para Mac OS e, com o advento
da versão X, passou a ser referido como Mac OS Classic.

        Em seu lançamento junto a plataforma, em 1984, tornou-se o primeiro sistema comercialmente
viável dotado de interface gráfica dentre computadores pessoais, ocupando impressionantes 216KB em
disco. Em anos anteriores, outros sistemas com interface gráfica foram desenvolvidos, inclusive o Lisa
da Apple, mas eram de quatro a doze vezes mais caros do que o Machintosh no seu lançamento, não
obtendo vendas expressivas.

       Apenas um ano depois, Steve Jobs, um dos fundadores da empresa, deixaria a Apple e, pouco
tempo depois, fundaria a NeXT, algo que teria relevância não apenas neste momento, mas seria de
grande importância para o futuro do Mac OS. Na NeXT novamente hardware e software eram
desenvolvidos para uso conjunto. O sistema operacional NEXTSTEP usava um kernel Mach 2.0 da
universidade de Carnegie Mellon modificado sob um ambiente 4.3BSD e seus servidor de janelas era
baseado no Display PostScript, união da linguagem de descrição de página PostScript e tecnologias de
sistema de janelas.

         Para rodar em várias plataformas, 68K, x86, PA-RISC e SPARC, suas aplicações eram criadas
numa única versão contendo todas elas, chamadas de "fat" binaries, ou binários gordos numa tradução
literal.

        Anos mais tarde a companhia abandonaria a produção de hardware em prol do foco no
software. A NeXT ainda chegaria a lançar uma plataforma aberta em parceria com a Sun, composta de
várias APIs e frameworks, de onde qualquer um poderia criar sua própria implementação de sistema
operacional orientado a objeto sobre o núcleo de outro sistema operacional.

Mac OS X
         Uma das características que diferenciam os produtos da Apple é que são sempre dotados de inovações visíveis aos
olhos do cliente. Com a interface gráfica foi assim. Com os desktops coloridos também. Em 2001, o foco está novamente
no sistema operacional.

        O Mac OS X não seria esta a primeira vez que a Apple utiliza um sistema do tipo Unix. Em
1988 ela lançou o A/UX, baseado no 4.2BSD (substituído em seguida pelo 4.3BSD) e no Unix System
V Release 2 da AT&T, e era usado em combinação com recursos do System 6 e 7 em versões
posteriores. Foi descontinuado em 1995.

        Desta vez, porém, a empresa não estava desenvolvendo apenas mais um sistema operacional,
mas aquele que ajudaria a colocar novamente a empresa em uma posição de inovação e, principalmente,
lucratividade.

       Depois de fracassar por meia década em modernizar seus sistema operacional, a Apple
especulava várias direções a seguir. Haviam vários projetos internos, a possibilidade de compra outras
empresas, como a negociação para a compra da Be Inc. e da NeXT e mesmo a parceria com a IBM,
uma subsidiária chamada Taligent. A alternativa escolhida foi a NeXT e fez do seu sistema operacional
o ponto de partida para o que viria a ser o Mac OS X.

        Para tornar a transição entre sistemas mais suave foram implementadas um conjunto de APIs
chamada Carbon, uma interface para desenvolvimento em C procedural cujas aplicações podem ser
executadas nas versões 8,9 e X do Mac OS. Carbon também provê funcionalidade para outras APIs,
como a Cocoa, um conjunto de APIs para desenvolvimento orientado a objetos que incorpora às suas
aplicações o modelo visual da interface gráfica Aqua.

        O núcleo de código aberto do sistema foi chamado de Darwin, uma coleção de pacotes como
GCC e X11 do qual destaca-se o kernel xnu, baseado em Mach e FreeBSD, mas com pequenas partes
advindas de diversos outros projetos como o MkLinux da própria Apple, NetBSD e OpenBSD e
trabalho feito na universidade de Utah sobre o Mach. O kernel xnu possui multi-tarefa preemptiva,
proteção de memória verdadeira e suporte a multiprocessamento simétrico.
Versões do Mac OS X




Até o presente momento, o sistema operacional conta com seis versões, excetuando-se a versão Mac
OS X Public Beta, codinome Kodiak. São elas as versões, de acordo com seus codinomes, Cheetah
(10.0), Puma (10.1), Jaguar (10.2), Panther (10.3), Tiger (10.4) e Leopard (10.5). Está por vir a versão
10.6, conhecida como Snow Leopard, que terá como objetivos principal melhorar a performance do
sistema, reduzindo o consumo de memória e tirando melhor proveito de CPU de múltiplos núcleos.
Esta pode ser a primeira versão a não suportar a plataforma PowerPC.

O Mac OS X 10.0, internamente chamado de Cheetah, era um sistema lento e incompleto, com
freqüentes kernel panics e poucos aplicativos. Porém, dado o tempo que havia sendo desenvolvido, e
com o histórico da empresa de fracassos na definição da sua nova geração de sistema operacional, sua
liberação como produto comercial demonstrou que a empresa de fato seguiria o desenvolvendo. Mas
apenas após o lançamento da versão posterior, 10.1, que a Apple anunciaria que o Mac OS X seria o
sistema operacional padrão para todos os seus produtos. Esta versão foi vista como uma correção de
bugs, e o fato de ser liberada sem custo aos clientes que haviam adquirido a versão anterior reforça esta
impressão.

A terceira e quarta versões do sistema foram novamente um esforço para melhorar performance e
estabilidade, trazendo algumas novas aplicações. A quinta versão, Tiger, iniciou o suporte aos
processadores x86.

Na sexta versão, Leopard, não conta com o ambiente Classic, não suportando aplicações escritas para
Mac OS 9 e anteriores, já que estas não teriam como rodar sob a plataforma x86. Além disso, o sistema
ganhou algumas melhoras interessantes, em especial na segurança, como a alocação aleatória de
algumas das bibliotecas na memória, protegendo o sistema de certos ataques de injeção de código que
esperam encontrá-las em endereços específicos, e sandboxes através de RBAC (controle de acesso
baseado em regras, do inglês role-based access control) suportado em nível de kernel, prevenindo que
aplicações alterem parâmetros que não lhe dizem respeito. Esta versão foi considerada Open Brand
UNIX 03 na plataforma Intel, sendo o primeiro sistema operacional baseado em BSD a receber esta
certificação.
CARACTERÍSTICAS DO MAC OS X

        Mac OS X é um sistema operacional de uso pessoal, doméstico ou profissional, para propósito
geral, como o de criação de conteúdo gráfico, digital para áreas de produção de filmes, internet e área
impressa, acesso a rede local ou internet, produção de conteúdo através de suites de escritório, jogos,
multimidia, etc. A sua desenvolvendora, Apple Inc., conta ainda com um sistema para servidores,
chamado Mac OS X Server, com características similares e que não será levado em consideração, pois
foge ao foco deste estudo.

        Os requisitos básicos de hardware para sua utilização são um processador Intel x86, PowerPC
G5 ou PowerPC G4, todos com frequência de operação acima de 867MHz, 512MB de memória RAM
instalada e 9GB de espaço de armazenamento. Por exigência contratual, é permitido utilizar o sistema
operacional Mac OS X apenas em computadores produzidos pela própria Apple.

       Em 2007 foi concedido pelo Open Group ao Mac OS X, na sua versão 10.5 para arquitetura x86,
a certificação UNIX 03, em conformidade com as especifcações SUSv3 e POSIX 1003.1, cobrindo
bibliotecas, chamadas de sistema, interfaces de terminal, comandos, utilitários, internacionalização e a
API C.

        Como acima referido, atualmente o Mac OS X roda sobre duas plataformas, Intel x86 e
PowerPC. Até 2005, a única arquitetura usada pela Apple era a PowerPC, criada em 1991 num esforço
conjunto de Apple, IBM e Motorola, e que foi baseada no processador POWER (Performance
Optimized With Enhanced RISC) que combina tecnologia RISC com alguns conceitos tradicionais
advindos da tecnologia CISC, como o grande número de instruções, 184. A PowerPC suporta tanto 32
quanto 64 bits, tem um design superescalar simplificado e suporta sistemas de multiprocessamento
simétrico (SMP), sendo produzida até hoje pela IBM. Em 2005, no entanto, a Apple anunciou que
passaria a utilizar os mesmos processadores que equipam máquinas da plataforma PC, mudando para a
plataforma x86, com exclusividade de fornecimento da fabricante Intel.

       Uma vez que possui o mesmo processador presente em PC’s, a Apple precisou adicionar
componentes de hardware e software que não apenas trariam beneficio ao usuário, mas preveniriam o
uso de seus produtos livremente, principalmente quanto a instalação de seu sistema operacional em
computadores mais baratos fabricados por concorrentes. Para tal, ela adotou o uso de componentes
como o EFI (Extended Firmware Interface) em seu hardware, o faz com que o sistema operacional
tenha rotinas diferentes em seu boot loader para cada arquitetura, e o torna incompatível com um PC
comum dotado de BIOS.

         No tocante ao software, outro aspecto importante foi a utilização de binários universais
encriptados para algumas aplicações chave. Os binários universais são uma herança dos fat-binaries
(binário-gordo) do NEXTSTEP, um único arquivo da aplicação que contém binários para todas as
arquiteturas suportadas, implementados a partir do Mac OS X. Esta medida visava o suporte
simultâneo a aplicações de 32 e 64 bits na plataforma PowerPC, e posteriormente, com a mudança para
plataforma x86, foi usada para garantir uma transição suave entre arquiteturas. Executáveis de
aplicativos com o Finder e o Dock, porém, tem um ou mais segmentos encriptados por AES, o que
lhes garante certa proteção contra o uso indevido.
A manutenção da retro-compatibilidade do Mac OS X na plataforma PowerPC com aplicativos
do Mac OS 9 ficou a cargo do ambiente chamado Classic, cujo núcleo consiste numa máquina virtual
chamada truBlueEnvironment. O ambiente provê uma camada de abstração de hardware, virtualizando
chamadas de sistema e interrupções, executa em espaço de memória protegida com múltiplos processos
Mac OS 9 consistindo em um único processo Mac OS X, e compartilha alguns recursos, sendo possível
copiar/colar e arrastar entre aplicativos de ambos os sistemas, comunicação de scripts dentro do
ambiente Classic com aplicativos Mac OS X e o acesso a qualquer volume suportado pelo Mac OS X,
entre outras facilidades.

        Na plataforma x86 o ambiente Classic não é implementado, uma vez que são necessárias
instruções presentes apenas em processadores PowerPC. Muito em razão disso, a última versão do
sistema operacional, de codinome Leopard, já não possui mais o Classic entre seus recursos.

        Para a tarefa de rodar executáveis da plataforma PowerPC, tanto CFM (Code Fragment
Manager, parte das antigas versões do Mac OS) quanto Mach-O, a versão x86 do Mac OS X incluem
uma tecnologia chamada Rosetta. Mach-O (Mach Object File Format) é o ambiente de tempo de
execução (runtime) nativo do sistema operacional Mac OS X, seu responsável único para execução de
binários. Curiosamente, seu nome pode causar confusão, uma vez que, por princípio, o componente
Mach não compreende qualquer formato de objeto de arquivo.

        Para executar sob Rosetta, todo o software deve ser escrito para a plataforma PowerPC,
inclusive itens como plug-ins, add-ons, etc. Neste caso, o kernel inicia Rosetta junto a aplicação, e seu
código reside no mesmo processo do executável da da mesma. Rosetta age alternando entre a tradução
e execução de blocos de código de PowerPC para código de x86 de forma dinâmica, fazendo cache de
código traduzido para aumentar a performance.
GERÊNCIA DE PROCESSOS DO MAC OS X

Kernel
       O kernel do sistema operacional Mac OS X, criado a partir do sistema operacional 4.4BSD e do
microkernel Mach 3.0, é considerado um kernel híbrido em seu projeto, por possuir diferentes partes
(monolítico e microkernel) interagindo na utilização do sistema.

      Em termos de estrutura de interação entre os subsistemas, ele é considerado um kernel em
camadas. Para ilustrar esse comportamento, a Figura 1 e a Figura 2 podem ser usadas para comparação.




                  Figura 1 – Organização de um Sistema Operacional em kernel e microkernel


        Como é mostrado na Figura 1, na organização de um sistema operacional em kernel e
microkernel existe uma estrutura mínima que interage com o hardware, provendo mecanismos
necessários para interação com os outros subsistemas. Neste caso, o kernel localiza-se acima da
estrutura básica do sistema operacional, agindo como sendo um conjunto de serviços disponibilizados
ao microkernel para atender as requisições (chamadas de sistema) das aplicações de usuários.

        Sendo um sistema operacional em camadas, nota-se que o sistema operacional possui diversas
vantagens sobre um sistema operacional monolítico.
   • Interface padronizada;
   • Extensibilidade;
   • Flexibilidade no suporte de novos subsistemas;
   • Portabilidade;
   • Confiabilidade (isolamento dos subsistemas).

        Um projeto baseado em camadas impõe uma interface padronizada para requisições feitas por
um processo. Os processos não precisam distinguir entre serviços de espaço de usuário ou serviço do
kernel, visto que todos os serviços utilizam troca de mensagens para comunicação.
Figura 2 – Organização das camadas do Mac OS X

        Qualquer sistema operacional irá, inevitavelmente, adicionar novos serviços que não são
suportados pela sua atual estrutura. Uma organização em camadas facilita esta extensibilidade,
permitindo a adição de novos serviços como também a opção de ter múltiplos serviços numa mesma
área. Por exemplo, podem haver muitos tratadores de IDE, como simples serviços isolados em espaço
de usuário, ao invés de vários serviços no kernel. Sendo assim, usuários podem escolher entre uma
variedade de opções a que melhor se adapta a sua atual necessidade (podendo um processo suportar
UDMA, e outro suportar PATA). Além disso, como os subsistemas são explicitamente delimitados,
podem haver reestruturas dentro de um determinado subsistema sem haver a necessidade de afetar
todo o kernel, sendo inclusive possível descarregar, atualizar e recarregar um serviço do kernel sem ter
a necessidade de recompilar todo o kernel.
Relacionado a extensibilidade está a flexibilidade no suporte de novos subsistemas. O conceito
de módulos dos kernels Linux e FreeBSD utilizam o conceito de módulos para permitir uma
flexibilização na manutenção de novos subsistemas, o que no caso do Mac OS X ocorre naturalmente
dado o seu projeto baseado em camadas.

        No sistema operacional Mac OS X, todo o código específico de arquitetura está no microkernel.

        Portanto, a questão de portabilidade se torna muito simples, pois apenas se torna necessário a
tradução para outra arquitetura (ou a adição de uma otimização de um processador específico) no
microkernel que praticamente todo o sistema operacional (salvo as aplicações que possuem código
específico de uma arquitetura) é suportado em uma nova arquitetura.

        Embora o conceito de módulos ajude no aumento da confiabilidade no sistema, ganhos ainda
maiores podem ser obtidos com uma organização em camadas. Fazendo testes de estresse no
microkernel podem ser detectados problemas que causariam instabilidade em todo o sistema. Como
existe apenas trocas de mensagens assíncronas entre os subsistemas, caso um subsistema seja
danificado, o sistema operacional como um todo não necessariamente é afetado, visto que os
subsistemas estão em espaço de usuário.

Escalonamento de Processos
       O escalonador de processos do Mac OS X _e derivado do escalonador OSFMK, porém várias
modificações foram feitas para o tratamento de interatividade no projeto de escalonador base.

        Assim como o kernel do FreeBSD (5.0BSD), o escalonador de processos do Mac OS X
escalona os processos baseado numa variante do algoritmo de múltiplas filas com realimentação, porém
divide as filas de prioridades em 4 grupos de processos, agrupados de acordo com suas características,
conforme é descrito na Tabela 1.


    Grupo de Filas                                         Características

         Normal                             Prioridade das aplicações normais do usuário

                             Prioridade das aplicações do sistema, com prioridade superior as threads
         Sistema
                                                        normais de usuário

                              Classe reservada para threads em espaço de kernel que necessitam rodar
         Kernel                em uma prioridade superior as threads de sistema (como a thread de
                                              descalonamento de E/S, por exemplo)

                              Threads nas quais a prioridade está baseada na necessidade de reservar
       Tempo Real              uma fração pré-definida de ciclos de clock, independente de outras
                                            atividades sendo executadas no sistema
Tabela 1 – Grupos de Filas de Processos no Escalonador do Mac OS X

       No caso de tarefas de tempo real, é feito um controle forte pela aplicação no número de ciclos
do processador a serem utilizados. Assim, o programador utiliza chamadas de sistema para requisitar ao
sistema rodar por A ciclos nos próximos B ciclos. Por exemplo, um processo de tempo real pode
requisitar ao kernel que, para que ele possa executar corretamente dentro dos seus padrões mínimos
aceitáveis, ele necessite, a cada 7000 ciclos, 3000 ciclos reservados a ele.

         Caso a aplicação não respeite o número de ciclos requisitados, ou seja, não faça uma operação
de E/S ou use a chamada de sistema sched yield, um processo de tempo real será penalizado dentro de
sua fila de prioridades, sendo inclusive possível a migração para o grupo de processos Normal, visando
um maior desempenho e justiça no sistema.

       A escolha do processo a ser executado obedece o algoritmo de Múltiplas Filas com
realimentação, sendo executados os grupos de filas de maior prioridade (Tempo real) e por último o
grupo de filas de prioridade de usuário (Normal).

        A migração entre os diferentes grupos de threads e feita através do nível de prioridade
explicitada pelo usuário. A migração entre as filas de prioridade dentro do grupo de tarefas de usuário é
determinada pelo determinador de interatividade.

Mach Scheduling
  • Suporta Tempo-Compartilhado e Prioridade-Fixa;
  • Prioridades: Normal, Alta-Prioridade de Sistema, Somente modo-Kernel e Theads de Tempo-Real;
  • Theads de prioridade de Tempo-Real geralmente são de prioridade Fixa;
  • Threads de prioridade fixa executam por um pré-determinado período de tempo ou até que uma
    thread de prioridade maior queira executar. Então ela é colocada no fim da fila daquela prioridade
    (normal);
  • Threads de Tempo-Real: Uma thread pode dizer ao agendador que ela precisa rodar por 3000
    ciclos dos próximos 7000, além de dizer se precisam ser contínuos ou não. Obviamente, longo
    ciclos contínuos podem ser custosos, mas também necessários;
  • Se uma thread de tempo-real não respeita o tempo de processamento indicada ela é penalizada e
    pode até ser rebaixada a uma prioridade “normal”;
  • Threads que usam muito tempo do processador recebem uma prioridade baixa para evitar que
    threads de prioridade alta monopolizem o processador. As de prioridade alta devem executar
    rapidamente e liberar o recurso.

Comunicação Interprocessos
  • Tarefas clientes acessam serviços de tarefas servidoras por um canal de comunicação (ports);
  • Tarefas mantém, repassam e obtém direitos sobre os ports;
  • As “pontas” destes canais são chamadas ports. Os port-rights denotam as permissões para usar
    estes canais. Eles são o mecanismo fundamental de segurança no Mach. Ter um right, é ter a
    capacidade de acessar ou manipular um objeto.
  • Comunicação por: filas de mensagens, semáforos, notificações, lock sets e RPCs (Remote
    Procedure Calls).
  • Várias tarefas podem manter o direito de enviar (write) mensagens para filas, mas só uma pode ter
    o direito de lê-la. Mensagens podem ser dados puros, cópias de memory ranges, direitos de ports, e
    mais... (são assíncronas).
  • Semáforos suportam wait, post e post all.
  • Lock Sets: mutex sobre uma seção crítica.
GERÊNCIA DE MEMÓRIA DO MAC OS X

Características principais
  • Paginação sob demanda;
  • External Memory Management Interface (EMMI);
  • Named Memory Entries;
  • Lazy Evaluation de Memória Copiada (Shadows Objects);
  • Memory Maps;
  • Herança de Named Regions;
  • UPLs.

Conceitos
       Memory Objects: Dados potencialmentes persistentes. Contém named entrys e regions.
Paginação sob demanda: Mapeamento de Memória Virtual para real na primeira tentativa de acesso.
Todo tipo de data no espaço de memória é provido através dos Memory Objects. Mach “pede” ao
“owner” do M.O. (um pager) pelo conteúdo e retorna a ele possíveis modificações nos dados.

        Pagers: Existem os default-pagers (lida com memória não-persistentes, ou “memória-anônima”.
Só existem durante a vida de uma task) e os vnode-pagers (Mapeia arquivos em Memory Objects).
O interessante, é que o Mach exporta um interface para esse Memory Objects, permitindo contribuição
de varias tarefas modo-usuário em seu conteúdo.(EMMI)

        Named Entries: Handle para objetos compartilhados ou submapas. Permite ao owner mapear o
objeto de memória virtual, ou então, passar o direito de mapeá-lo. Mapear uma Named Entry em 2
tasks diferentes resulta em Memória Compartilhada.
Quando se cria uma nova task, elas são clonadas do pai, e sua porção mapeada da memória pode ser
herdada como uma cópia, como compartilhada, ou nenhum desses, baseadas nos atributos associados
ao mapeamento.

        Lazy Evaluation: A copia é protegida com read-only access para as duas task que compartilham
memória. Quando ambas tentam acessar a mesma porção, esta é copiada nessa hora. Isso permite
simplificações em diversas áreas, notavelmente nas messagings APIs.

      MemoryMaps: Lista ordenada Duplamente Ligada. Cada objeto contém lista de páginas e
shadow references a estes objetos.

       Named Regions podem ser herdadas, não só como um grupo de objetos de memória, mas
também toda a relação de mapeamento entre eles.
Named Region é como uma named entry, mas ao invés de conter virtual mem. objects, contém um
fragmento de mapa virtual.

      UPLs: Universal Page Lists. (Data structure) Informações de caching, permissões,
mapeamentos, e etc..

      Shadow Objects: Quando um objeto de memória virtual é duplicado, (e.g. Um processo
chamou fork), é criado um Shadow Object. Ele é inicialmente vazio, apenas com uma referência a outro
objeto. Quando uma página é modificada, ele é copiada do pai (referência) pra ele, e então modificado.
Ao ler dados, se ela não existe no Shadow Object lê do pai. Isto chama-se Shadow-chain.

Overview
       No Mac OS X, cada processo tem o seu próprio conjunto (32bits ou 64 bits) de espaço de
endereço virtual. Para processos de 32 bits, cada processo tem um espaço que pode endereçar
dinamicamente chegando ao limite de 4gb. Para processo de 64 bits, cada processo pode endereçar
dinamicamente até o limite de 18 exabytes.

        O espaço de endereço virtual de um processo constituído por regiões de memória
mapeada. Cada região de memória no processo representa um conjunto específico de páginas de
memória virtual. A região tem atributos específicos controlando coisas como herança (porções da
região podem ser mapeadas a partir de "pai" das regiões), escreve-protecção, e se é "wired" (isto é, não
pode ser paginada out). Porque regiões contêm um determinado número de páginas, eles estão page-
alinhados, significando o endereço inicial da região também está iniciando o endereço de uma página e
terminando o endereço também define o fim de uma página.

        Memória física é um recurso precioso no computador. Uma característica dos Sistemas
Operacionais Modernos é a Memória Virtual (Virtual Memory – VM), que implementa a ilusão de um
largo espaço de endereços para cada programa sem sobrecarregar o programador com detalhes, como
quais partes do programa são residentes na memória física, em determinado momento, ou onde na
memória física as porções residentes estão localizadas. Memória Virtual é normalmente implementada
através de paginação (paging). Quando residente cada página da memória virtual é carregada em alguma
parte da memória física. Esta porção, normalmente é chamada de “page frame”.

        Além do VM Subsystem baseado no Core-Mach, o gerenciamento de memória do Mac OSX
engloba diversos outros mecanismos, alguns dos quais não são partes estritamente do sistema VM, mas
estão intimamente relacionados.

         O Subsistema VM do kernel Mach consiste do módulo machine-dependent phisical map
(pmap) e outros módulos machine-independent para gerenciar a estrutura de dados, tais como os
virtual address space maps (VM maps). O Kernel exporta diversas rotinas para o Espaço do Usuário
(user space) como parte de Mach VM API.

       O kernel usa o UPL (Universal Page List), Estrutura de Dados para descrever como delimitar
um conjunto de páginas físicas. O UPL é criado baseado na associação das páginas (pages) com o
Objetos VM (objects VM). UPLs incluem vários atributos das páginas que descrevem. Subsistemas do
Kernel, particularmente o File System, usam UPLs para se comunicar com o subsistema VM.

        O UBC (Unified Buffer Cache) constitui um conjunto de páginas para armazenar (caching) o
conteúdo dos arquivos e as porções anônimas do espaço de endereços. Memória anônima não é
sustentada por arquivos regulares, dispositivos, ou mesmo alguma outra fonte de memória e o exemplo
mais comum é a memória alocada dinamicamente.

        O Kernel inclui 3 paginadores internos, a saber: o paginador padrão (anônimo), o paginador
para dispositivos e o paginador para vnode. Eles tratam operações de entrada e saída sobre regiões da
memória. Os paginadores comunicam-se com o Subsistema Mach-VM utilizando interfaces UPL e
derivadas do paginador do Mach.

        A figura 3 ilustra o VM e componentes relacionados no Mac OSX.




                                                   Figura 3

Nota: Ao contrário da maioria dos sistemas operacionais baseados em UNIX, o Mac OS X não usa um pré-
partição swap para a memória virtual. Em vez disso, ele usa todo o espaço disponível na máquina da partição de
boot.
Memória Compartilhada
        Memória compartilhada é a memória que pode ser escrita ou lida a partir de dois ou mais
processos. Memória partilhada pode ser herdada a partir de um processo-mãe, criado por um servidor
de memória compartilhada, ou explicitamente criado por um pedido de exportação para outras
aplicações. O uso da memória compartilhada/partilhada incluem:
   • compartilhando grandes recursos, como ícones ou sons
   • rápida a comunicação entre um ou mais processos

      A Memória compartilhada é frágil. Se um programa corrompe uma seção de memória
compartilhada, os programas que também usam esta mesma memória acabam acessando dados
corrompidos.

Wired Memory
Wired memory (também chamado de memória residente) armazena código kernel e estruturas de
dados, que nunca deve ser paginada para o disco. Aplicações, frameworks e outros softwares da camada
de usuário (user level) não podem ser alocados na wired memory. No entanto eles podem afetar a
quantidade de Wired memory existente num dado momento. Há um overhead de memória associada
com cada recurso despendido pelo kernel em nome de um programa.


Recursos               Wired memória utilizada pelo kernel
Process                16 kilobytes
Fio                    bloqueados em uma continuação-5 kilobytes; bloqueou-21 kilobytes
Mach porto             116 bytes
Mapeamento             32 bytes
Biblioteca             2 kilobytes acrescido de 200 bytes para cada tarefa que usa-lo
Memória região         160 bytes
                        Tabela 2 - Wired memória gerado pelo usuário a nível de software

Nota: Estas medidas mudam a cada nova versão do Mac OS X. Elas são fornecidas aqui para te dar uma
estimativa aproximada do custo relativo do sistema de uso do recurso.

       Como pode-se ver, cada thread criada, cada subprocesso bifurcado, e cada biblioteca ligada
contribui para a ocupação da memória residente do sistema.

        Além das solicitações de Wired-Memory geradas no nível do usuário, as seguintes entidades do
kernel utilizam wired-memory:
   • VM objetos
   • a memória virtual buffer cache
   • I / O buffer caches
   • condutores
GERÊNCIA DE ARQUIVOS DO MAC OS X

        Antes de tratar da forma como o sistema lida com seus vários dispositivos de armazenamento, é
necessário mencionar brevemente o EFI (Extensible Firmware Interface, ou Interface de Firmware
Extensível). O seu firmware inclui uma aplicação chamada boot manager, que pode rodar bootloaders,
drivers e outras aplicações EFI. Assim, diferente da plataforma PC, atualmente o master boot record
(MBR) localizado no início do disco ali está apenas para fins de compatibilidade. O EFI é acionado
durante o processo de boot, após o POST, e a partir dele é definida a partição que será carregada,
através de arquivos de configuração .EFI, como por exemplo boot.efi para o sistema operacional Mac
OS X ou elilo.efi para sistemas Linux.

       Entra em ação, então, o Apple partitioning scheme (Esquema de Particionamento da Apple), usado
para manejar discos e que têm layouts específicos para discos rígidos chamado UNIVERSAL HD e
para CD’s e DVD’s, chamado UNIVERSAL CD.

        A primeira partição do UNIVERSAL HD é o mapa de partições que contém meta-dados
relacionados às partições. Os meta-dados consistem de referências ao mapa de partição, cada um
descrevendo uma partição. O tamanho do mapa é de 63 blocos, cada um com 512 bytes. Os primeiros
dois bytes do primeiro bloco contém a assinatura do esquema de particionamento da Apple. Os dois
bytes seguintes representam o tamanho do bloco físico do disco. O número total de blocos no disco se
localiza nos quatro bytes posteriores.

        Assim, os 63 blocos seguintes são o mapa de partições, cada bloco representando uma entrada
do mapa que descreve uma partição. Após os dois bytes iniciais identificadores seguem as informações
de início da partição, tamanho e tipo.

        Por padrão do sistema operacional, 16 partições é o máximo suportado em um único disco, mas
esta não é uma limitação técnica, apenas um limite proposto, devido a limitações existentes em algumas
aplicações. Ferramentas do próprio sistema permitem a adição de um número maior de partições.

HFS+
        O sistema de arquivos padrão do Mac OS X é o HFS+ (Hierarchical File System Plus, ou
Sistema de Arquivos Hierárquico Mais). Sua instância fundamental é o volume, que pode estar em um
disco, uma parte deste ou vários discos em conjunto. Os blocos de alocação são a unidade elementar
onde são alocados os arquivos, e seu tamanho corresponde a um múltiplo do tamanho do setor do
dispositivo utilizado, sendo o mais comum 512 bytes, o que contrasta com o bloco de alocação padrão
do Mac OS X, que é de 4KB, sendo que este pode chegar a 1MB (tamanho definido artificialmente no
arquivo /sys/param.h). O espaço de armazenamento usa números de bloco de alocação de 32 bits com
alocação postergarda de blocos físicos.

        Quanto a fragmentação, a implementação do UFS herdada do sistema BSD presente no HFS+
emprega uma unidade adicional, complementando o bloco, chamado fragmento, que é uma fração deste
a ser compartilhada entre arquivos. Isto traz benefícios quanto ao aproveitamento de espaço de disco às
custas de uma lógica de sistema de arquivos muito mais complexa. Para mitigar os seus efeitos,
aumentando o desempenho no acesso a arquivos pequenos e frequentemente acessados, são
empregados um sistema de clustering adaptativo chamado Hot File Clustering, e a realocação dinâmica
destes pequenos arquivos para promover sua continuidade.

        O HFS+ é um sistema de arquivos que suporta nomes de arquivos e diretórios até 255
caracteres codificados em Unicode UTF-8 (em formato canônico, em forma totalmente decomposta),
arquivos de até 8 exabytes e múltiplos mecanismos de referenciação através de aliases, hard links e links
simbólicos. E embora seja por padrão um sistema case-insensitive com case-preserving (preserva a
caixa-alta quando presente), o que quer dizer que nomes de diretórios e arquivos que sejam iguais,
mesmo diferindo quanto a caixa-alta e caixa-baixa em um ou mais caracteres, não podem co-existir num
mesmo diretório, há suporte no sistema de arquivos para case-sensitivity.

Controle de Acesso e Permissões
       A partir da versão 10.4 do sistema operacional, são suportados pelo sistema de arquivos
simultaneamente ACLs (listas de controle de acesso), que são armazenadas como atributos estendidos,
permissões de arquivos no estilo Unix-Like e Flags de arquivo no estilo BSD (append-only, immutable,
undeletable, etc.).

        Todas as chamadas do gerenciador de arquivos do Mac OS X, no entanto, são subsidiadas pelo
subsistema BSD, que como qualquer Unix-Like no que diz respeito a proteção de escrita, não provê
nenhum lock para arquivos abertos por múltiplas aplicações. Os frameworks Carbon, Cocoa e Java tem
a capacidade de adicionar o recurso de acesso exclusivo a arquivos através dos chamados advisory locks,
mas este recurso depende da implementação do desenvolvedor. Existe aprovisionamento ainda para o
armazenamento de múltiplos timestamps para cada objeto do sistema de arquivos.

Bundles e Fork de Arquivo
       Além do tradicional arquivo, o sistema operacional suporta um tipo especial, chamado File Fork
(Ramificação de Arquivo, em tradução livre) que encapsula vários arquivos dentro de um único, tendo
dois sempre presentes, o data fork e o resource fork, armazenados em árvores-B separadas.

        Outro conceito particular do Mac OS X são os Bundles. Estes são uma coleção de recursos
relacionados empacotados como numa hierarquica de diretórios. Alguns exemplos de recursos que
utilizam esta abordagem são os executaveis, as bibliotecas compartilhadas, plug-ins, imagens, entre
outros, encontrando até mesmo bundles dentro de bundles. Seu uso visa facilitar a distribuição,
manutenção e uso de software.

        O gerenciador de arquivos do sistema operacional trata estes pacotes como sendo arquivos
únicos. Um bundle de aplicação (sufixo .app) contém, no entanto, muito mais que apenas o seu
executável, mas sim seus icones, imagens e sons da interface de usuário, além do arquivo de lista de
propriedades (sufixo .plist), uma representação em disco de dados organizados que, quando em
memória é estruturado usando tipos de dados nativos do framework Core Fundation (API de C do
Mac OS X, mistura de rotinas de baixo nível e funções de encapsulamento).

       Um exemplo simples de bundle pode ser visto na figura 4:
Figura 4 - Aplicação

Otimizações

Desfragmentação On-the-Fly

        Quando um arquivo de usuário é aberto em um volume HFS+, o kernel verifica se ele está
qualificado para ser desfragmentado on-the-fly. Uma série de condições, como já não estar aberto e não
ser um arquivo apenas-para-leitura, ser parte de um sistema de arquivos com journaling, ter o fork
fragmentado em oito ou mais partes, entre outros, devem ser cumpridas para que o arquivo se torne
elegível para esta ação.

Zona de meta-dados

Na versão 10.3 do Mac OS X o sistema HFS+ introduziu uma política de alocação que reserva espaço
para várias estruturas de meta-dados do volume chamado de Zona de meta-dados, localizando-as, se
possível, próximo ao início do volume. Isto acontecerá apenas caso o espaço em disco não seja escasso.
Do contrário, o espaço reservado para este recurso será ocupado ao seu máximo, buscando reduzir os
tempos de busca de dados não contiguos. Esta política é valida apenas em volumes com journaling e
maiores de 10 GB.

Camada VFS

         A camada vfs/vnode é uma interface virtual do sistema de arquivos derivada do FreeBSD com
pequenas alterações, implementada inicialmente pela Sun e largamente usada em sistemas operacionais
atuais, que permite que diversos sistemas de arquivos coexistam de forma transparente. Um vnode
(virtual node, ou nó virtual) é uma representação do interna do kernel de um arquivo, enquanto que o
vfs (virtual file system, ou sistema de arquivos virtual) representa o sistema de arquivos. A camada VFS
se situa entre o código de sistema de arquivos independente e do sistema de arquivos dependente do
kernel, abstraindo suas diferenças, de forma que o kernel usará suas funções para executar o I/O. É
nesta camada que está implementado o mecanismo de journaling do sistema de arquivos. Através dele o
HFS+ suporta journaling de meta-dados, incluindo estruturas de dados de volumes.

       A figura 5 demonsta como se conectam as API’s do Mac OS X à camada VFS:




                                                Figura 5
CONCEITOS DA DISCIPLINA NÃO IMPLEMENTADOS NO MAC OS X

       Podemos enumerar alguns poucos conceitos expostos na disciplina que não estão
implementados no Mac OS X, mas como um sistema operacional moderno para computadores
pessoais, estes não serão muitos.

      Quanto a ausência de prevenção de deadlocks, já era esperado, pois como foi explicado em aula,
nenhum sistema comercial moderno o implementa.

        O sistema de arquivos HFS+ não suporta sparse files (em tradução livre, arquivos dispersos), que
é a técnica de preencher com zeros espaços em branco que ficam entre arquivos de sistema, para que
sejam vistos como um único arquivo, sem com isso ocupar mais espaço em disco. Sistemas de arquivos
alternativos podem, porém, ser utilizados, resultando na adição deste e outros recursos e a possível
subtração de outros tantos. Um exemplo seria o uso do UFS, onde um dos efeitos colaterais seria a
divisão dos forks em tantos arquivos quanto o compusesse (data fork e resource fork, obrigatoriamente, e
quantos mais houvessem).
OUTRAS TECNOLOGIAS E INOVAÇÕES DO MAC OS X

        Como uma empresa conhecida por ser inovadora, a Apple pouco traz de novo em relação aos
componentes internos do sistema. As inovações em software mais conhecidas da empresa ultimamente
se referem mais a interfaces com usuário, já famosas, e com aplicativos que trazem facilidade para os
mesmos.

        Atualmente, devido ao desenvolvimento de novas formas de interação com aparelhos móveis,
mais notadamente o telefone celular iPhone, a Apple tem rumado em direção a interfaces de
apontamento direto, conhecidos no mercado como touch-screen, e que começaram a ser inseridas em
outros aparelhos da sua linha de computadores pessoais, como notebooks lançados no segundo
semestre de 2008.

        Em se tratando de componentes internos, pode-se dizer que o desempenho das máquinas
virtuais que executam o serviço de manter a compatibilidade do sistema com aplicações de sistemas e
plataformas antigas são bastante otimizadas, de forma a pouco notar-se em termos de perda de
desempenho e causando alguns, mas raros, casos de incompatibilidade.

        Mas a ferramenta de maior brilho é certamente o Spotlight, que tornou-se central ao sistema e
mudou a maneira como muitos usuários do sistema armazenam e recuperam arquivos e informações.
Enquanto o crescimento da capacidade de dispositivos de armazenamento é incessante, a oferta a
oferta de arquivos de conhecimento e mídia acompanharam de perto essa tendência, principalmente
através da internet. Assim, a forma tradicional de organizar arquivos em várias pastas e memorizá-las
tornou-se em certos casos impraticável, e a solução de maior viabilidade hoje em dia são os motores de
busca, vide o sucesso do Google. Acompanhando esse caminho o Mac OS X disponibilizou nas suas
versões mais recentes o Spotlight.

       O Spotlight é uma coleção de mecanismos de ambos os níveis de kernel e de usuário. Entre eles
encontramos o servidor spotlight, um índice de conteúdo por cada volume, um armazenador de meta-
dados também por volume, um mecanismo de notificação de alterações chamado fsevents, as interfaces
de usuário, além de muitos outros.
ANÁLISE CRÍTICA DO MAC OS X

       Enquanto sistema operacional para desktop, o Mac OS X têm atrativos bem ao gosto de seu
público-alvo. É esteticamente agradável, possui um número razoável de aplicativos e periféricos
compatíveis, é similar aos sistemas concorrentes quanto ao desempenho e estabilidade e herda do seu
desenvolvedor um fator-cool, que é como a mídia se refere à força que a marca empresta aos seus
produtos, não apenas por ser seletiva, mas pelo design e inovação.

         Mesmo assim, o sistema ainda apresenta problemas de desempenho e instabilidade, de tal forma
que o desenvolvimento da sua próxima versão tem como foco a melhora destes em detrimento de
novos recursos e aplicativos. E há de se considerar que, ser a única fabricante do hardware que roda o
Mac OS X deve implicar em muitos benefícios, em especial quanto ao controle e otimização, já que
sabe-se de antemão em que peças rodará o sistema, e quanto a precisão e simplificação, uma vez que o
limitado número de variações necessita de uma pequena quantidade de drivers e software, que poderá
ser testado por mais tempo. Essa vantagem sobre sistemas como Windows e Linux é enorme, se levada
em consideração a gigantesca fauna de fabricantes de peças para PC’s.

        Visto sob perspectiva de maior interesse do grupo, a segurança, o sistema operacional possui
tanto recursos específicos da plataforma Mac como herdados do mundo Unix-Like, como ID de
usuário e de grupo (UID e GID), alocação aleatória de bibliotecas de sistema na memória, trilhas de
auditoria, ACL’s e Mach port rights. É até mesmo possível utilizar encriptação da memória virtual com
AES, certamente um recurso diferenciado.

        No entanto, o seu sistema de arquivos já demonstra estar defasado em relação a outras soluções,
apesar de seu desempenho e confiabilidade estarem dentro dos padrões do restante da indústria.
Algumas tecnologias presentes em sistemas como NTFS ainda não estão presentes no HFS+,
notadamente:
• Suporte a sparse files
• Compressão nativa
• Encriptação nativa
• Suporte a volumes tolerantes a falhas

        Há ainda os problemas advindo da necessidade em se manter compatível com sistemas legados
da empresa e suas aplicações, como a necessidade de “reparar permissões”, uma estratégia criada para
que aplicativos escritos com API’s antigas possam rodar num sistema atual, mesmo não estando de
acordo com método de permissões do estilo Unix.

        A ausência de uma política de segurança com regras mais duras para o sistema também poderá
trazer problemas na medida que ele tome uma fatia maior de mercado, o que é uma tendência na
atualidade. Os usuários normalmente são mais leigos dos que os da plataforma PC quanto a segurança
e há um falso mito de que não existem códigos maliciosos para o Mac OS X.

        De modo geral, uma analise prática mostra um sistema mais responsivo que o seu concorrente
mais direto, o Windows, mas com um consumo de memória considerado alto.
REFERÊNCIAS BIBLIOGRÁFICAS


SINGH, Amit. Mac OS X Internals : A Systems Approach. EUA, Editora Addison-Wesley, 1641 págs.

HIMANEN, Pekka. A ética dos hackers e o espírito da era da informação. Brasil, 2001. Editora
Campus. 200 págs.


WEBSITES

Mac Developer Connection: http://developer.apple.com/mac/

Mac OS X Leopard Technical Specifications: http://www.apple.com/macosx/techspecs/

Mac OS X Internals : The Book. http://www.osxbook.com

Kernelthread.com: http://www.kernelthread.com

heise Security UK: http://www.heise-online.co.uk/security/Deceptive-file-names-under-Vista--/news/
96498/

Wikipedia: Unicode equivalence: http://en.wikipedia.org/wiki/Unicode_normalization

Developer Connection: Memory Management in Mac OS X: http://developer.apple.com/
DOCUMENTATION/Performance/Conceptual/ManagingMemory/Articles/AboutMemory.html

Mais conteúdo relacionado

Mais procurados (20)

MAC OS
MAC OSMAC OS
MAC OS
 
Historia Sistema Operacional Linux
Historia Sistema Operacional LinuxHistoria Sistema Operacional Linux
Historia Sistema Operacional Linux
 
Introducao ao linux
Introducao ao linuxIntroducao ao linux
Introducao ao linux
 
So-mod-4
So-mod-4So-mod-4
So-mod-4
 
Windows x Linux
Windows x LinuxWindows x Linux
Windows x Linux
 
Endereçamento de memória
Endereçamento de memóriaEndereçamento de memória
Endereçamento de memória
 
Sistemas Operativos (Operating Systems)
Sistemas Operativos (Operating Systems)Sistemas Operativos (Operating Systems)
Sistemas Operativos (Operating Systems)
 
Conhecendo Melhor O Linux
Conhecendo Melhor O LinuxConhecendo Melhor O Linux
Conhecendo Melhor O Linux
 
Inside the Mac OS X Kernel
Inside the Mac OS X KernelInside the Mac OS X Kernel
Inside the Mac OS X Kernel
 
Sistemas Operativos Servidores
Sistemas Operativos ServidoresSistemas Operativos Servidores
Sistemas Operativos Servidores
 
Sistema Operativo Servidor
Sistema Operativo ServidorSistema Operativo Servidor
Sistema Operativo Servidor
 
Introdução Linux
Introdução LinuxIntrodução Linux
Introdução Linux
 
Linux
LinuxLinux
Linux
 
Aula 12 - Processador
Aula 12 - ProcessadorAula 12 - Processador
Aula 12 - Processador
 
Sistemas operacionais
Sistemas operacionaisSistemas operacionais
Sistemas operacionais
 
Linux
LinuxLinux
Linux
 
Arquitetura de um computador
Arquitetura de um computadorArquitetura de um computador
Arquitetura de um computador
 
IOS sistema operacional
IOS sistema operacionalIOS sistema operacional
IOS sistema operacional
 
Sistemas operativos servidor
Sistemas operativos servidorSistemas operativos servidor
Sistemas operativos servidor
 
Processadores - CPU
Processadores - CPUProcessadores - CPU
Processadores - CPU
 

Destaque (20)

Sistema operativo
Sistema operativoSistema operativo
Sistema operativo
 
Estrutura Do Mac Os
Estrutura Do Mac OsEstrutura Do Mac Os
Estrutura Do Mac Os
 
A evolução do mac os x
A evolução do mac os xA evolução do mac os x
A evolução do mac os x
 
Sistemas de arquivos artigo
Sistemas de arquivos   artigoSistemas de arquivos   artigo
Sistemas de arquivos artigo
 
MINIX
MINIXMINIX
MINIX
 
4 teorias motivacionais Ramónjr
4 teorias motivacionais Ramónjr4 teorias motivacionais Ramónjr
4 teorias motivacionais Ramónjr
 
Mac
MacMac
Mac
 
Minix
MinixMinix
Minix
 
Java interface gráfica swing
Java   interface gráfica swingJava   interface gráfica swing
Java interface gráfica swing
 
Sistemas operacionais
Sistemas operacionaisSistemas operacionais
Sistemas operacionais
 
windowsxp
windowsxpwindowsxp
windowsxp
 
Sistema operacional solaris
Sistema operacional solarisSistema operacional solaris
Sistema operacional solaris
 
Sistemas de arquivos cap 04 (iii unidade)
Sistemas de arquivos cap 04 (iii unidade)Sistemas de arquivos cap 04 (iii unidade)
Sistemas de arquivos cap 04 (iii unidade)
 
Gerência de Armazenamento: Sistemas de Entrada e Saída
Gerência de Armazenamento: Sistemas de Entrada e SaídaGerência de Armazenamento: Sistemas de Entrada e Saída
Gerência de Armazenamento: Sistemas de Entrada e Saída
 
Sistemas de arquivos
Sistemas de arquivosSistemas de arquivos
Sistemas de arquivos
 
Sistema Operativo Solaris
Sistema Operativo SolarisSistema Operativo Solaris
Sistema Operativo Solaris
 
SO-08 Sistemas de Arquivos
SO-08 Sistemas de ArquivosSO-08 Sistemas de Arquivos
SO-08 Sistemas de Arquivos
 
Solaris
SolarisSolaris
Solaris
 
Mac Os
Mac OsMac Os
Mac Os
 
Teorias da Motivação
Teorias da MotivaçãoTeorias da Motivação
Teorias da Motivação
 

Semelhante a Mac OS X: Análise do Sistema Operacional

Mac - Leandro dos Santos Costa
Mac - Leandro dos Santos CostaMac - Leandro dos Santos Costa
Mac - Leandro dos Santos CostaAnderson Favaro
 
Historia dos sistemas operacionais
Historia dos sistemas operacionaisHistoria dos sistemas operacionais
Historia dos sistemas operacionaisDw Dicas
 
Sérgio,ricardo,joãoedgar
Sérgio,ricardo,joãoedgarSérgio,ricardo,joãoedgar
Sérgio,ricardo,joãoedgarDavid Pereira
 
A história dos sistemas operacionais
A história dos sistemas operacionaisA história dos sistemas operacionais
A história dos sistemas operacionaisCarlos Marques
 
Macintosh joão gomes
Macintosh joão gomesMacintosh joão gomes
Macintosh joão gomesDavid Pereira
 
Histórial dos sistemas operativos e Marcos históricos.pptx
Histórial dos sistemas operativos e Marcos históricos.pptxHistórial dos sistemas operativos e Marcos históricos.pptx
Histórial dos sistemas operativos e Marcos históricos.pptxXaneYT
 
TELECENTRO COMUNITÁRIO VOZ POPULAR - MÓDULO SISTEMAS OPERACIONAIS
TELECENTRO COMUNITÁRIO VOZ POPULAR - MÓDULO SISTEMAS OPERACIONAISTELECENTRO COMUNITÁRIO VOZ POPULAR - MÓDULO SISTEMAS OPERACIONAIS
TELECENTRO COMUNITÁRIO VOZ POPULAR - MÓDULO SISTEMAS OPERACIONAISINSTITUTO VOZ POPULAR
 
Trabalho So Fernanda
Trabalho So FernandaTrabalho So Fernanda
Trabalho So Fernandaf2008
 
Evolução dos processadores
Evolução dos processadoresEvolução dos processadores
Evolução dos processadoresCelso Mauricio
 
Noções de sistema operacional
Noções de sistema operacionalNoções de sistema operacional
Noções de sistema operacionalLuciano Lugori
 
Unidade 3.1 Introdução ao Sistema Operacional Linux
Unidade 3.1   Introdução ao Sistema Operacional LinuxUnidade 3.1   Introdução ao Sistema Operacional Linux
Unidade 3.1 Introdução ao Sistema Operacional LinuxJuan Carlos Lamarão
 

Semelhante a Mac OS X: Análise do Sistema Operacional (20)

Mac
MacMac
Mac
 
Sistemas operativos
Sistemas operativosSistemas operativos
Sistemas operativos
 
Pesquisas mac osx 1
Pesquisas mac osx 1Pesquisas mac osx 1
Pesquisas mac osx 1
 
Mac - Leandro dos Santos Costa
Mac - Leandro dos Santos CostaMac - Leandro dos Santos Costa
Mac - Leandro dos Santos Costa
 
Historia dos sistemas operacionais
Historia dos sistemas operacionaisHistoria dos sistemas operacionais
Historia dos sistemas operacionais
 
Sérgio,ricardo,joãoedgar
Sérgio,ricardo,joãoedgarSérgio,ricardo,joãoedgar
Sérgio,ricardo,joãoedgar
 
Arquiteturas PC X MAC
Arquiteturas PC X MACArquiteturas PC X MAC
Arquiteturas PC X MAC
 
A história dos sistemas operacionais
A história dos sistemas operacionaisA história dos sistemas operacionais
A história dos sistemas operacionais
 
Macintosh joão gomes
Macintosh joão gomesMacintosh joão gomes
Macintosh joão gomes
 
Palestra Mac x86
Palestra Mac x86Palestra Mac x86
Palestra Mac x86
 
Sistemas Operacionais
Sistemas OperacionaisSistemas Operacionais
Sistemas Operacionais
 
Mac
MacMac
Mac
 
Mac 2
Mac 2Mac 2
Mac 2
 
Histórial dos sistemas operativos e Marcos históricos.pptx
Histórial dos sistemas operativos e Marcos históricos.pptxHistórial dos sistemas operativos e Marcos históricos.pptx
Histórial dos sistemas operativos e Marcos históricos.pptx
 
TELECENTRO COMUNITÁRIO VOZ POPULAR - MÓDULO SISTEMAS OPERACIONAIS
TELECENTRO COMUNITÁRIO VOZ POPULAR - MÓDULO SISTEMAS OPERACIONAISTELECENTRO COMUNITÁRIO VOZ POPULAR - MÓDULO SISTEMAS OPERACIONAIS
TELECENTRO COMUNITÁRIO VOZ POPULAR - MÓDULO SISTEMAS OPERACIONAIS
 
Trabalho So Fernanda
Trabalho So FernandaTrabalho So Fernanda
Trabalho So Fernanda
 
Evolução dos processadores
Evolução dos processadoresEvolução dos processadores
Evolução dos processadores
 
Noções de sistema operacional
Noções de sistema operacionalNoções de sistema operacional
Noções de sistema operacional
 
Trabalho mac
Trabalho macTrabalho mac
Trabalho mac
 
Unidade 3.1 Introdução ao Sistema Operacional Linux
Unidade 3.1   Introdução ao Sistema Operacional LinuxUnidade 3.1   Introdução ao Sistema Operacional Linux
Unidade 3.1 Introdução ao Sistema Operacional Linux
 

Mac OS X: Análise do Sistema Operacional

  • 1. Universidade do Vale do Rio dos Sinos UNISINOS Trabalho sobre o sistema operacional Mac OS X Leandro da Rocha Godoy Walter Luiz Andriola Pereira Conceitos de Sistemas Operacionais Prof. Túlio C. Bender São Leopoldo, Novembro de 2008.
  • 2. SUMÁRIO Por quê Mac OS X? 3 Características do Mac OS X 6 Gerência de processos do MAC OS X 8 Gerência de memória do MAC OS X 12 Gerência de arquivos do MAC OS X 16 Conceitos da disciplina não implementados no Mac OS X 20 Outras tecnologias e inovações do Mac OS X 21 Análise crítica do Mac OS X 22 Referências bibliográficas 23
  • 3. POR QUÊ MAC OS X? Mac Em meio a uma grande quantidade de fabricantes de computadores pessoais, a Apple permanece a única a desenvolver um sistema operacional exclusivo para o uso em seu hardware. Por este motivo, é natural que o software se molde ao hardware em que será executado, criando um conjunto mais uniforme e, espera-se, menos propenso a falhas e incompatibilidade. Jef Raskin, empregado da Apple, foi o responsável por delinear, no início dos anos 80, as primeiras características do que viria a ser o projeto Macintosh, anteriormente chamado projeto Annie, e que advém de uma apropriada brincadeira com o nome de uma variedade de maçã, McIntosh. Em “O livro de Macintosh”, documento interno onde Raskin enumera os recursos desejáveis para um sistema de uso individual, nota-se um desejo de tornar o computador algo simples do usar, acessível financeiramente e, em suas palavras, projetado para a “Pessoa Comum” (PITS - Person in the Street), desprovidas de conhecimento técnico acerca de programação e manutenção de computadores. Contrapondo outras plataformas da época, como a IBM PC, ele pregava que o resultado do projeto teria que ser um produto leve e integrado, e não algo dividido em peças a ser montado, e que deveria ser trivial adicionar outras partes a ele. Cabos, possuiria apenas o de força, e se possível, nem ele. Não possuiria partes internar expostas, e deveria ser desnecessário abri-lo, a não ser para reparos. Porém, aquilo que demonstrou mais claramente sua extraordinária visão de futuro, tratava da maneira que os manuais deveriam ser, mínimos e escritos em linguagem leiga, o que atualmente resume perfeitamente a proposta de produto que a empresa entrega ao usuário. Mac OS Além do foco no usuário final, leigo, que tem pouca disposição para o aprendizado do complexo sistema de linha de comandos, os produtos da marca Apple possuem um tal refinamento que, mesmo custando mais caro que a concorrência, vem aumentando em vendas atualmente. O sistema operacional padrão para computadores Machintosh possui basicamente duas encarnações. A primeira durou até a versão 9 e foi o sistema criado junto com a plataforma. Inicialmente era chamado de System, nas últimas duas versões passou para Mac OS e, com o advento da versão X, passou a ser referido como Mac OS Classic. Em seu lançamento junto a plataforma, em 1984, tornou-se o primeiro sistema comercialmente viável dotado de interface gráfica dentre computadores pessoais, ocupando impressionantes 216KB em disco. Em anos anteriores, outros sistemas com interface gráfica foram desenvolvidos, inclusive o Lisa da Apple, mas eram de quatro a doze vezes mais caros do que o Machintosh no seu lançamento, não obtendo vendas expressivas. Apenas um ano depois, Steve Jobs, um dos fundadores da empresa, deixaria a Apple e, pouco tempo depois, fundaria a NeXT, algo que teria relevância não apenas neste momento, mas seria de grande importância para o futuro do Mac OS. Na NeXT novamente hardware e software eram desenvolvidos para uso conjunto. O sistema operacional NEXTSTEP usava um kernel Mach 2.0 da
  • 4. universidade de Carnegie Mellon modificado sob um ambiente 4.3BSD e seus servidor de janelas era baseado no Display PostScript, união da linguagem de descrição de página PostScript e tecnologias de sistema de janelas. Para rodar em várias plataformas, 68K, x86, PA-RISC e SPARC, suas aplicações eram criadas numa única versão contendo todas elas, chamadas de "fat" binaries, ou binários gordos numa tradução literal. Anos mais tarde a companhia abandonaria a produção de hardware em prol do foco no software. A NeXT ainda chegaria a lançar uma plataforma aberta em parceria com a Sun, composta de várias APIs e frameworks, de onde qualquer um poderia criar sua própria implementação de sistema operacional orientado a objeto sobre o núcleo de outro sistema operacional. Mac OS X Uma das características que diferenciam os produtos da Apple é que são sempre dotados de inovações visíveis aos olhos do cliente. Com a interface gráfica foi assim. Com os desktops coloridos também. Em 2001, o foco está novamente no sistema operacional. O Mac OS X não seria esta a primeira vez que a Apple utiliza um sistema do tipo Unix. Em 1988 ela lançou o A/UX, baseado no 4.2BSD (substituído em seguida pelo 4.3BSD) e no Unix System V Release 2 da AT&T, e era usado em combinação com recursos do System 6 e 7 em versões posteriores. Foi descontinuado em 1995. Desta vez, porém, a empresa não estava desenvolvendo apenas mais um sistema operacional, mas aquele que ajudaria a colocar novamente a empresa em uma posição de inovação e, principalmente, lucratividade. Depois de fracassar por meia década em modernizar seus sistema operacional, a Apple especulava várias direções a seguir. Haviam vários projetos internos, a possibilidade de compra outras empresas, como a negociação para a compra da Be Inc. e da NeXT e mesmo a parceria com a IBM, uma subsidiária chamada Taligent. A alternativa escolhida foi a NeXT e fez do seu sistema operacional o ponto de partida para o que viria a ser o Mac OS X. Para tornar a transição entre sistemas mais suave foram implementadas um conjunto de APIs chamada Carbon, uma interface para desenvolvimento em C procedural cujas aplicações podem ser executadas nas versões 8,9 e X do Mac OS. Carbon também provê funcionalidade para outras APIs, como a Cocoa, um conjunto de APIs para desenvolvimento orientado a objetos que incorpora às suas aplicações o modelo visual da interface gráfica Aqua. O núcleo de código aberto do sistema foi chamado de Darwin, uma coleção de pacotes como GCC e X11 do qual destaca-se o kernel xnu, baseado em Mach e FreeBSD, mas com pequenas partes advindas de diversos outros projetos como o MkLinux da própria Apple, NetBSD e OpenBSD e trabalho feito na universidade de Utah sobre o Mach. O kernel xnu possui multi-tarefa preemptiva, proteção de memória verdadeira e suporte a multiprocessamento simétrico.
  • 5. Versões do Mac OS X Até o presente momento, o sistema operacional conta com seis versões, excetuando-se a versão Mac OS X Public Beta, codinome Kodiak. São elas as versões, de acordo com seus codinomes, Cheetah (10.0), Puma (10.1), Jaguar (10.2), Panther (10.3), Tiger (10.4) e Leopard (10.5). Está por vir a versão 10.6, conhecida como Snow Leopard, que terá como objetivos principal melhorar a performance do sistema, reduzindo o consumo de memória e tirando melhor proveito de CPU de múltiplos núcleos. Esta pode ser a primeira versão a não suportar a plataforma PowerPC. O Mac OS X 10.0, internamente chamado de Cheetah, era um sistema lento e incompleto, com freqüentes kernel panics e poucos aplicativos. Porém, dado o tempo que havia sendo desenvolvido, e com o histórico da empresa de fracassos na definição da sua nova geração de sistema operacional, sua liberação como produto comercial demonstrou que a empresa de fato seguiria o desenvolvendo. Mas apenas após o lançamento da versão posterior, 10.1, que a Apple anunciaria que o Mac OS X seria o sistema operacional padrão para todos os seus produtos. Esta versão foi vista como uma correção de bugs, e o fato de ser liberada sem custo aos clientes que haviam adquirido a versão anterior reforça esta impressão. A terceira e quarta versões do sistema foram novamente um esforço para melhorar performance e estabilidade, trazendo algumas novas aplicações. A quinta versão, Tiger, iniciou o suporte aos processadores x86. Na sexta versão, Leopard, não conta com o ambiente Classic, não suportando aplicações escritas para Mac OS 9 e anteriores, já que estas não teriam como rodar sob a plataforma x86. Além disso, o sistema ganhou algumas melhoras interessantes, em especial na segurança, como a alocação aleatória de algumas das bibliotecas na memória, protegendo o sistema de certos ataques de injeção de código que esperam encontrá-las em endereços específicos, e sandboxes através de RBAC (controle de acesso baseado em regras, do inglês role-based access control) suportado em nível de kernel, prevenindo que aplicações alterem parâmetros que não lhe dizem respeito. Esta versão foi considerada Open Brand UNIX 03 na plataforma Intel, sendo o primeiro sistema operacional baseado em BSD a receber esta certificação.
  • 6. CARACTERÍSTICAS DO MAC OS X Mac OS X é um sistema operacional de uso pessoal, doméstico ou profissional, para propósito geral, como o de criação de conteúdo gráfico, digital para áreas de produção de filmes, internet e área impressa, acesso a rede local ou internet, produção de conteúdo através de suites de escritório, jogos, multimidia, etc. A sua desenvolvendora, Apple Inc., conta ainda com um sistema para servidores, chamado Mac OS X Server, com características similares e que não será levado em consideração, pois foge ao foco deste estudo. Os requisitos básicos de hardware para sua utilização são um processador Intel x86, PowerPC G5 ou PowerPC G4, todos com frequência de operação acima de 867MHz, 512MB de memória RAM instalada e 9GB de espaço de armazenamento. Por exigência contratual, é permitido utilizar o sistema operacional Mac OS X apenas em computadores produzidos pela própria Apple. Em 2007 foi concedido pelo Open Group ao Mac OS X, na sua versão 10.5 para arquitetura x86, a certificação UNIX 03, em conformidade com as especifcações SUSv3 e POSIX 1003.1, cobrindo bibliotecas, chamadas de sistema, interfaces de terminal, comandos, utilitários, internacionalização e a API C. Como acima referido, atualmente o Mac OS X roda sobre duas plataformas, Intel x86 e PowerPC. Até 2005, a única arquitetura usada pela Apple era a PowerPC, criada em 1991 num esforço conjunto de Apple, IBM e Motorola, e que foi baseada no processador POWER (Performance Optimized With Enhanced RISC) que combina tecnologia RISC com alguns conceitos tradicionais advindos da tecnologia CISC, como o grande número de instruções, 184. A PowerPC suporta tanto 32 quanto 64 bits, tem um design superescalar simplificado e suporta sistemas de multiprocessamento simétrico (SMP), sendo produzida até hoje pela IBM. Em 2005, no entanto, a Apple anunciou que passaria a utilizar os mesmos processadores que equipam máquinas da plataforma PC, mudando para a plataforma x86, com exclusividade de fornecimento da fabricante Intel. Uma vez que possui o mesmo processador presente em PC’s, a Apple precisou adicionar componentes de hardware e software que não apenas trariam beneficio ao usuário, mas preveniriam o uso de seus produtos livremente, principalmente quanto a instalação de seu sistema operacional em computadores mais baratos fabricados por concorrentes. Para tal, ela adotou o uso de componentes como o EFI (Extended Firmware Interface) em seu hardware, o faz com que o sistema operacional tenha rotinas diferentes em seu boot loader para cada arquitetura, e o torna incompatível com um PC comum dotado de BIOS. No tocante ao software, outro aspecto importante foi a utilização de binários universais encriptados para algumas aplicações chave. Os binários universais são uma herança dos fat-binaries (binário-gordo) do NEXTSTEP, um único arquivo da aplicação que contém binários para todas as arquiteturas suportadas, implementados a partir do Mac OS X. Esta medida visava o suporte simultâneo a aplicações de 32 e 64 bits na plataforma PowerPC, e posteriormente, com a mudança para plataforma x86, foi usada para garantir uma transição suave entre arquiteturas. Executáveis de aplicativos com o Finder e o Dock, porém, tem um ou mais segmentos encriptados por AES, o que lhes garante certa proteção contra o uso indevido.
  • 7. A manutenção da retro-compatibilidade do Mac OS X na plataforma PowerPC com aplicativos do Mac OS 9 ficou a cargo do ambiente chamado Classic, cujo núcleo consiste numa máquina virtual chamada truBlueEnvironment. O ambiente provê uma camada de abstração de hardware, virtualizando chamadas de sistema e interrupções, executa em espaço de memória protegida com múltiplos processos Mac OS 9 consistindo em um único processo Mac OS X, e compartilha alguns recursos, sendo possível copiar/colar e arrastar entre aplicativos de ambos os sistemas, comunicação de scripts dentro do ambiente Classic com aplicativos Mac OS X e o acesso a qualquer volume suportado pelo Mac OS X, entre outras facilidades. Na plataforma x86 o ambiente Classic não é implementado, uma vez que são necessárias instruções presentes apenas em processadores PowerPC. Muito em razão disso, a última versão do sistema operacional, de codinome Leopard, já não possui mais o Classic entre seus recursos. Para a tarefa de rodar executáveis da plataforma PowerPC, tanto CFM (Code Fragment Manager, parte das antigas versões do Mac OS) quanto Mach-O, a versão x86 do Mac OS X incluem uma tecnologia chamada Rosetta. Mach-O (Mach Object File Format) é o ambiente de tempo de execução (runtime) nativo do sistema operacional Mac OS X, seu responsável único para execução de binários. Curiosamente, seu nome pode causar confusão, uma vez que, por princípio, o componente Mach não compreende qualquer formato de objeto de arquivo. Para executar sob Rosetta, todo o software deve ser escrito para a plataforma PowerPC, inclusive itens como plug-ins, add-ons, etc. Neste caso, o kernel inicia Rosetta junto a aplicação, e seu código reside no mesmo processo do executável da da mesma. Rosetta age alternando entre a tradução e execução de blocos de código de PowerPC para código de x86 de forma dinâmica, fazendo cache de código traduzido para aumentar a performance.
  • 8. GERÊNCIA DE PROCESSOS DO MAC OS X Kernel O kernel do sistema operacional Mac OS X, criado a partir do sistema operacional 4.4BSD e do microkernel Mach 3.0, é considerado um kernel híbrido em seu projeto, por possuir diferentes partes (monolítico e microkernel) interagindo na utilização do sistema. Em termos de estrutura de interação entre os subsistemas, ele é considerado um kernel em camadas. Para ilustrar esse comportamento, a Figura 1 e a Figura 2 podem ser usadas para comparação. Figura 1 – Organização de um Sistema Operacional em kernel e microkernel Como é mostrado na Figura 1, na organização de um sistema operacional em kernel e microkernel existe uma estrutura mínima que interage com o hardware, provendo mecanismos necessários para interação com os outros subsistemas. Neste caso, o kernel localiza-se acima da estrutura básica do sistema operacional, agindo como sendo um conjunto de serviços disponibilizados ao microkernel para atender as requisições (chamadas de sistema) das aplicações de usuários. Sendo um sistema operacional em camadas, nota-se que o sistema operacional possui diversas vantagens sobre um sistema operacional monolítico. • Interface padronizada; • Extensibilidade; • Flexibilidade no suporte de novos subsistemas; • Portabilidade; • Confiabilidade (isolamento dos subsistemas). Um projeto baseado em camadas impõe uma interface padronizada para requisições feitas por um processo. Os processos não precisam distinguir entre serviços de espaço de usuário ou serviço do kernel, visto que todos os serviços utilizam troca de mensagens para comunicação.
  • 9. Figura 2 – Organização das camadas do Mac OS X Qualquer sistema operacional irá, inevitavelmente, adicionar novos serviços que não são suportados pela sua atual estrutura. Uma organização em camadas facilita esta extensibilidade, permitindo a adição de novos serviços como também a opção de ter múltiplos serviços numa mesma área. Por exemplo, podem haver muitos tratadores de IDE, como simples serviços isolados em espaço de usuário, ao invés de vários serviços no kernel. Sendo assim, usuários podem escolher entre uma variedade de opções a que melhor se adapta a sua atual necessidade (podendo um processo suportar UDMA, e outro suportar PATA). Além disso, como os subsistemas são explicitamente delimitados, podem haver reestruturas dentro de um determinado subsistema sem haver a necessidade de afetar todo o kernel, sendo inclusive possível descarregar, atualizar e recarregar um serviço do kernel sem ter a necessidade de recompilar todo o kernel.
  • 10. Relacionado a extensibilidade está a flexibilidade no suporte de novos subsistemas. O conceito de módulos dos kernels Linux e FreeBSD utilizam o conceito de módulos para permitir uma flexibilização na manutenção de novos subsistemas, o que no caso do Mac OS X ocorre naturalmente dado o seu projeto baseado em camadas. No sistema operacional Mac OS X, todo o código específico de arquitetura está no microkernel. Portanto, a questão de portabilidade se torna muito simples, pois apenas se torna necessário a tradução para outra arquitetura (ou a adição de uma otimização de um processador específico) no microkernel que praticamente todo o sistema operacional (salvo as aplicações que possuem código específico de uma arquitetura) é suportado em uma nova arquitetura. Embora o conceito de módulos ajude no aumento da confiabilidade no sistema, ganhos ainda maiores podem ser obtidos com uma organização em camadas. Fazendo testes de estresse no microkernel podem ser detectados problemas que causariam instabilidade em todo o sistema. Como existe apenas trocas de mensagens assíncronas entre os subsistemas, caso um subsistema seja danificado, o sistema operacional como um todo não necessariamente é afetado, visto que os subsistemas estão em espaço de usuário. Escalonamento de Processos O escalonador de processos do Mac OS X _e derivado do escalonador OSFMK, porém várias modificações foram feitas para o tratamento de interatividade no projeto de escalonador base. Assim como o kernel do FreeBSD (5.0BSD), o escalonador de processos do Mac OS X escalona os processos baseado numa variante do algoritmo de múltiplas filas com realimentação, porém divide as filas de prioridades em 4 grupos de processos, agrupados de acordo com suas características, conforme é descrito na Tabela 1. Grupo de Filas Características Normal Prioridade das aplicações normais do usuário Prioridade das aplicações do sistema, com prioridade superior as threads Sistema normais de usuário Classe reservada para threads em espaço de kernel que necessitam rodar Kernel em uma prioridade superior as threads de sistema (como a thread de descalonamento de E/S, por exemplo) Threads nas quais a prioridade está baseada na necessidade de reservar Tempo Real uma fração pré-definida de ciclos de clock, independente de outras atividades sendo executadas no sistema Tabela 1 – Grupos de Filas de Processos no Escalonador do Mac OS X No caso de tarefas de tempo real, é feito um controle forte pela aplicação no número de ciclos do processador a serem utilizados. Assim, o programador utiliza chamadas de sistema para requisitar ao sistema rodar por A ciclos nos próximos B ciclos. Por exemplo, um processo de tempo real pode
  • 11. requisitar ao kernel que, para que ele possa executar corretamente dentro dos seus padrões mínimos aceitáveis, ele necessite, a cada 7000 ciclos, 3000 ciclos reservados a ele. Caso a aplicação não respeite o número de ciclos requisitados, ou seja, não faça uma operação de E/S ou use a chamada de sistema sched yield, um processo de tempo real será penalizado dentro de sua fila de prioridades, sendo inclusive possível a migração para o grupo de processos Normal, visando um maior desempenho e justiça no sistema. A escolha do processo a ser executado obedece o algoritmo de Múltiplas Filas com realimentação, sendo executados os grupos de filas de maior prioridade (Tempo real) e por último o grupo de filas de prioridade de usuário (Normal). A migração entre os diferentes grupos de threads e feita através do nível de prioridade explicitada pelo usuário. A migração entre as filas de prioridade dentro do grupo de tarefas de usuário é determinada pelo determinador de interatividade. Mach Scheduling • Suporta Tempo-Compartilhado e Prioridade-Fixa; • Prioridades: Normal, Alta-Prioridade de Sistema, Somente modo-Kernel e Theads de Tempo-Real; • Theads de prioridade de Tempo-Real geralmente são de prioridade Fixa; • Threads de prioridade fixa executam por um pré-determinado período de tempo ou até que uma thread de prioridade maior queira executar. Então ela é colocada no fim da fila daquela prioridade (normal); • Threads de Tempo-Real: Uma thread pode dizer ao agendador que ela precisa rodar por 3000 ciclos dos próximos 7000, além de dizer se precisam ser contínuos ou não. Obviamente, longo ciclos contínuos podem ser custosos, mas também necessários; • Se uma thread de tempo-real não respeita o tempo de processamento indicada ela é penalizada e pode até ser rebaixada a uma prioridade “normal”; • Threads que usam muito tempo do processador recebem uma prioridade baixa para evitar que threads de prioridade alta monopolizem o processador. As de prioridade alta devem executar rapidamente e liberar o recurso. Comunicação Interprocessos • Tarefas clientes acessam serviços de tarefas servidoras por um canal de comunicação (ports); • Tarefas mantém, repassam e obtém direitos sobre os ports; • As “pontas” destes canais são chamadas ports. Os port-rights denotam as permissões para usar estes canais. Eles são o mecanismo fundamental de segurança no Mach. Ter um right, é ter a capacidade de acessar ou manipular um objeto. • Comunicação por: filas de mensagens, semáforos, notificações, lock sets e RPCs (Remote Procedure Calls). • Várias tarefas podem manter o direito de enviar (write) mensagens para filas, mas só uma pode ter o direito de lê-la. Mensagens podem ser dados puros, cópias de memory ranges, direitos de ports, e mais... (são assíncronas). • Semáforos suportam wait, post e post all. • Lock Sets: mutex sobre uma seção crítica.
  • 12. GERÊNCIA DE MEMÓRIA DO MAC OS X Características principais • Paginação sob demanda; • External Memory Management Interface (EMMI); • Named Memory Entries; • Lazy Evaluation de Memória Copiada (Shadows Objects); • Memory Maps; • Herança de Named Regions; • UPLs. Conceitos Memory Objects: Dados potencialmentes persistentes. Contém named entrys e regions. Paginação sob demanda: Mapeamento de Memória Virtual para real na primeira tentativa de acesso. Todo tipo de data no espaço de memória é provido através dos Memory Objects. Mach “pede” ao “owner” do M.O. (um pager) pelo conteúdo e retorna a ele possíveis modificações nos dados. Pagers: Existem os default-pagers (lida com memória não-persistentes, ou “memória-anônima”. Só existem durante a vida de uma task) e os vnode-pagers (Mapeia arquivos em Memory Objects). O interessante, é que o Mach exporta um interface para esse Memory Objects, permitindo contribuição de varias tarefas modo-usuário em seu conteúdo.(EMMI) Named Entries: Handle para objetos compartilhados ou submapas. Permite ao owner mapear o objeto de memória virtual, ou então, passar o direito de mapeá-lo. Mapear uma Named Entry em 2 tasks diferentes resulta em Memória Compartilhada. Quando se cria uma nova task, elas são clonadas do pai, e sua porção mapeada da memória pode ser herdada como uma cópia, como compartilhada, ou nenhum desses, baseadas nos atributos associados ao mapeamento. Lazy Evaluation: A copia é protegida com read-only access para as duas task que compartilham memória. Quando ambas tentam acessar a mesma porção, esta é copiada nessa hora. Isso permite simplificações em diversas áreas, notavelmente nas messagings APIs. MemoryMaps: Lista ordenada Duplamente Ligada. Cada objeto contém lista de páginas e shadow references a estes objetos. Named Regions podem ser herdadas, não só como um grupo de objetos de memória, mas também toda a relação de mapeamento entre eles. Named Region é como uma named entry, mas ao invés de conter virtual mem. objects, contém um fragmento de mapa virtual. UPLs: Universal Page Lists. (Data structure) Informações de caching, permissões, mapeamentos, e etc.. Shadow Objects: Quando um objeto de memória virtual é duplicado, (e.g. Um processo chamou fork), é criado um Shadow Object. Ele é inicialmente vazio, apenas com uma referência a outro
  • 13. objeto. Quando uma página é modificada, ele é copiada do pai (referência) pra ele, e então modificado. Ao ler dados, se ela não existe no Shadow Object lê do pai. Isto chama-se Shadow-chain. Overview No Mac OS X, cada processo tem o seu próprio conjunto (32bits ou 64 bits) de espaço de endereço virtual. Para processos de 32 bits, cada processo tem um espaço que pode endereçar dinamicamente chegando ao limite de 4gb. Para processo de 64 bits, cada processo pode endereçar dinamicamente até o limite de 18 exabytes. O espaço de endereço virtual de um processo constituído por regiões de memória mapeada. Cada região de memória no processo representa um conjunto específico de páginas de memória virtual. A região tem atributos específicos controlando coisas como herança (porções da região podem ser mapeadas a partir de "pai" das regiões), escreve-protecção, e se é "wired" (isto é, não pode ser paginada out). Porque regiões contêm um determinado número de páginas, eles estão page- alinhados, significando o endereço inicial da região também está iniciando o endereço de uma página e terminando o endereço também define o fim de uma página. Memória física é um recurso precioso no computador. Uma característica dos Sistemas Operacionais Modernos é a Memória Virtual (Virtual Memory – VM), que implementa a ilusão de um largo espaço de endereços para cada programa sem sobrecarregar o programador com detalhes, como quais partes do programa são residentes na memória física, em determinado momento, ou onde na memória física as porções residentes estão localizadas. Memória Virtual é normalmente implementada através de paginação (paging). Quando residente cada página da memória virtual é carregada em alguma parte da memória física. Esta porção, normalmente é chamada de “page frame”. Além do VM Subsystem baseado no Core-Mach, o gerenciamento de memória do Mac OSX engloba diversos outros mecanismos, alguns dos quais não são partes estritamente do sistema VM, mas estão intimamente relacionados. O Subsistema VM do kernel Mach consiste do módulo machine-dependent phisical map (pmap) e outros módulos machine-independent para gerenciar a estrutura de dados, tais como os virtual address space maps (VM maps). O Kernel exporta diversas rotinas para o Espaço do Usuário (user space) como parte de Mach VM API. O kernel usa o UPL (Universal Page List), Estrutura de Dados para descrever como delimitar um conjunto de páginas físicas. O UPL é criado baseado na associação das páginas (pages) com o Objetos VM (objects VM). UPLs incluem vários atributos das páginas que descrevem. Subsistemas do Kernel, particularmente o File System, usam UPLs para se comunicar com o subsistema VM. O UBC (Unified Buffer Cache) constitui um conjunto de páginas para armazenar (caching) o conteúdo dos arquivos e as porções anônimas do espaço de endereços. Memória anônima não é sustentada por arquivos regulares, dispositivos, ou mesmo alguma outra fonte de memória e o exemplo mais comum é a memória alocada dinamicamente. O Kernel inclui 3 paginadores internos, a saber: o paginador padrão (anônimo), o paginador para dispositivos e o paginador para vnode. Eles tratam operações de entrada e saída sobre regiões da
  • 14. memória. Os paginadores comunicam-se com o Subsistema Mach-VM utilizando interfaces UPL e derivadas do paginador do Mach. A figura 3 ilustra o VM e componentes relacionados no Mac OSX. Figura 3 Nota: Ao contrário da maioria dos sistemas operacionais baseados em UNIX, o Mac OS X não usa um pré- partição swap para a memória virtual. Em vez disso, ele usa todo o espaço disponível na máquina da partição de boot.
  • 15. Memória Compartilhada Memória compartilhada é a memória que pode ser escrita ou lida a partir de dois ou mais processos. Memória partilhada pode ser herdada a partir de um processo-mãe, criado por um servidor de memória compartilhada, ou explicitamente criado por um pedido de exportação para outras aplicações. O uso da memória compartilhada/partilhada incluem: • compartilhando grandes recursos, como ícones ou sons • rápida a comunicação entre um ou mais processos A Memória compartilhada é frágil. Se um programa corrompe uma seção de memória compartilhada, os programas que também usam esta mesma memória acabam acessando dados corrompidos. Wired Memory Wired memory (também chamado de memória residente) armazena código kernel e estruturas de dados, que nunca deve ser paginada para o disco. Aplicações, frameworks e outros softwares da camada de usuário (user level) não podem ser alocados na wired memory. No entanto eles podem afetar a quantidade de Wired memory existente num dado momento. Há um overhead de memória associada com cada recurso despendido pelo kernel em nome de um programa. Recursos Wired memória utilizada pelo kernel Process 16 kilobytes Fio bloqueados em uma continuação-5 kilobytes; bloqueou-21 kilobytes Mach porto 116 bytes Mapeamento 32 bytes Biblioteca 2 kilobytes acrescido de 200 bytes para cada tarefa que usa-lo Memória região 160 bytes Tabela 2 - Wired memória gerado pelo usuário a nível de software Nota: Estas medidas mudam a cada nova versão do Mac OS X. Elas são fornecidas aqui para te dar uma estimativa aproximada do custo relativo do sistema de uso do recurso. Como pode-se ver, cada thread criada, cada subprocesso bifurcado, e cada biblioteca ligada contribui para a ocupação da memória residente do sistema. Além das solicitações de Wired-Memory geradas no nível do usuário, as seguintes entidades do kernel utilizam wired-memory: • VM objetos • a memória virtual buffer cache • I / O buffer caches • condutores
  • 16. GERÊNCIA DE ARQUIVOS DO MAC OS X Antes de tratar da forma como o sistema lida com seus vários dispositivos de armazenamento, é necessário mencionar brevemente o EFI (Extensible Firmware Interface, ou Interface de Firmware Extensível). O seu firmware inclui uma aplicação chamada boot manager, que pode rodar bootloaders, drivers e outras aplicações EFI. Assim, diferente da plataforma PC, atualmente o master boot record (MBR) localizado no início do disco ali está apenas para fins de compatibilidade. O EFI é acionado durante o processo de boot, após o POST, e a partir dele é definida a partição que será carregada, através de arquivos de configuração .EFI, como por exemplo boot.efi para o sistema operacional Mac OS X ou elilo.efi para sistemas Linux. Entra em ação, então, o Apple partitioning scheme (Esquema de Particionamento da Apple), usado para manejar discos e que têm layouts específicos para discos rígidos chamado UNIVERSAL HD e para CD’s e DVD’s, chamado UNIVERSAL CD. A primeira partição do UNIVERSAL HD é o mapa de partições que contém meta-dados relacionados às partições. Os meta-dados consistem de referências ao mapa de partição, cada um descrevendo uma partição. O tamanho do mapa é de 63 blocos, cada um com 512 bytes. Os primeiros dois bytes do primeiro bloco contém a assinatura do esquema de particionamento da Apple. Os dois bytes seguintes representam o tamanho do bloco físico do disco. O número total de blocos no disco se localiza nos quatro bytes posteriores. Assim, os 63 blocos seguintes são o mapa de partições, cada bloco representando uma entrada do mapa que descreve uma partição. Após os dois bytes iniciais identificadores seguem as informações de início da partição, tamanho e tipo. Por padrão do sistema operacional, 16 partições é o máximo suportado em um único disco, mas esta não é uma limitação técnica, apenas um limite proposto, devido a limitações existentes em algumas aplicações. Ferramentas do próprio sistema permitem a adição de um número maior de partições. HFS+ O sistema de arquivos padrão do Mac OS X é o HFS+ (Hierarchical File System Plus, ou Sistema de Arquivos Hierárquico Mais). Sua instância fundamental é o volume, que pode estar em um disco, uma parte deste ou vários discos em conjunto. Os blocos de alocação são a unidade elementar onde são alocados os arquivos, e seu tamanho corresponde a um múltiplo do tamanho do setor do dispositivo utilizado, sendo o mais comum 512 bytes, o que contrasta com o bloco de alocação padrão do Mac OS X, que é de 4KB, sendo que este pode chegar a 1MB (tamanho definido artificialmente no arquivo /sys/param.h). O espaço de armazenamento usa números de bloco de alocação de 32 bits com alocação postergarda de blocos físicos. Quanto a fragmentação, a implementação do UFS herdada do sistema BSD presente no HFS+ emprega uma unidade adicional, complementando o bloco, chamado fragmento, que é uma fração deste a ser compartilhada entre arquivos. Isto traz benefícios quanto ao aproveitamento de espaço de disco às custas de uma lógica de sistema de arquivos muito mais complexa. Para mitigar os seus efeitos, aumentando o desempenho no acesso a arquivos pequenos e frequentemente acessados, são
  • 17. empregados um sistema de clustering adaptativo chamado Hot File Clustering, e a realocação dinâmica destes pequenos arquivos para promover sua continuidade. O HFS+ é um sistema de arquivos que suporta nomes de arquivos e diretórios até 255 caracteres codificados em Unicode UTF-8 (em formato canônico, em forma totalmente decomposta), arquivos de até 8 exabytes e múltiplos mecanismos de referenciação através de aliases, hard links e links simbólicos. E embora seja por padrão um sistema case-insensitive com case-preserving (preserva a caixa-alta quando presente), o que quer dizer que nomes de diretórios e arquivos que sejam iguais, mesmo diferindo quanto a caixa-alta e caixa-baixa em um ou mais caracteres, não podem co-existir num mesmo diretório, há suporte no sistema de arquivos para case-sensitivity. Controle de Acesso e Permissões A partir da versão 10.4 do sistema operacional, são suportados pelo sistema de arquivos simultaneamente ACLs (listas de controle de acesso), que são armazenadas como atributos estendidos, permissões de arquivos no estilo Unix-Like e Flags de arquivo no estilo BSD (append-only, immutable, undeletable, etc.). Todas as chamadas do gerenciador de arquivos do Mac OS X, no entanto, são subsidiadas pelo subsistema BSD, que como qualquer Unix-Like no que diz respeito a proteção de escrita, não provê nenhum lock para arquivos abertos por múltiplas aplicações. Os frameworks Carbon, Cocoa e Java tem a capacidade de adicionar o recurso de acesso exclusivo a arquivos através dos chamados advisory locks, mas este recurso depende da implementação do desenvolvedor. Existe aprovisionamento ainda para o armazenamento de múltiplos timestamps para cada objeto do sistema de arquivos. Bundles e Fork de Arquivo Além do tradicional arquivo, o sistema operacional suporta um tipo especial, chamado File Fork (Ramificação de Arquivo, em tradução livre) que encapsula vários arquivos dentro de um único, tendo dois sempre presentes, o data fork e o resource fork, armazenados em árvores-B separadas. Outro conceito particular do Mac OS X são os Bundles. Estes são uma coleção de recursos relacionados empacotados como numa hierarquica de diretórios. Alguns exemplos de recursos que utilizam esta abordagem são os executaveis, as bibliotecas compartilhadas, plug-ins, imagens, entre outros, encontrando até mesmo bundles dentro de bundles. Seu uso visa facilitar a distribuição, manutenção e uso de software. O gerenciador de arquivos do sistema operacional trata estes pacotes como sendo arquivos únicos. Um bundle de aplicação (sufixo .app) contém, no entanto, muito mais que apenas o seu executável, mas sim seus icones, imagens e sons da interface de usuário, além do arquivo de lista de propriedades (sufixo .plist), uma representação em disco de dados organizados que, quando em memória é estruturado usando tipos de dados nativos do framework Core Fundation (API de C do Mac OS X, mistura de rotinas de baixo nível e funções de encapsulamento). Um exemplo simples de bundle pode ser visto na figura 4:
  • 18. Figura 4 - Aplicação Otimizações Desfragmentação On-the-Fly Quando um arquivo de usuário é aberto em um volume HFS+, o kernel verifica se ele está qualificado para ser desfragmentado on-the-fly. Uma série de condições, como já não estar aberto e não ser um arquivo apenas-para-leitura, ser parte de um sistema de arquivos com journaling, ter o fork fragmentado em oito ou mais partes, entre outros, devem ser cumpridas para que o arquivo se torne elegível para esta ação. Zona de meta-dados Na versão 10.3 do Mac OS X o sistema HFS+ introduziu uma política de alocação que reserva espaço para várias estruturas de meta-dados do volume chamado de Zona de meta-dados, localizando-as, se possível, próximo ao início do volume. Isto acontecerá apenas caso o espaço em disco não seja escasso. Do contrário, o espaço reservado para este recurso será ocupado ao seu máximo, buscando reduzir os
  • 19. tempos de busca de dados não contiguos. Esta política é valida apenas em volumes com journaling e maiores de 10 GB. Camada VFS A camada vfs/vnode é uma interface virtual do sistema de arquivos derivada do FreeBSD com pequenas alterações, implementada inicialmente pela Sun e largamente usada em sistemas operacionais atuais, que permite que diversos sistemas de arquivos coexistam de forma transparente. Um vnode (virtual node, ou nó virtual) é uma representação do interna do kernel de um arquivo, enquanto que o vfs (virtual file system, ou sistema de arquivos virtual) representa o sistema de arquivos. A camada VFS se situa entre o código de sistema de arquivos independente e do sistema de arquivos dependente do kernel, abstraindo suas diferenças, de forma que o kernel usará suas funções para executar o I/O. É nesta camada que está implementado o mecanismo de journaling do sistema de arquivos. Através dele o HFS+ suporta journaling de meta-dados, incluindo estruturas de dados de volumes. A figura 5 demonsta como se conectam as API’s do Mac OS X à camada VFS: Figura 5
  • 20. CONCEITOS DA DISCIPLINA NÃO IMPLEMENTADOS NO MAC OS X Podemos enumerar alguns poucos conceitos expostos na disciplina que não estão implementados no Mac OS X, mas como um sistema operacional moderno para computadores pessoais, estes não serão muitos. Quanto a ausência de prevenção de deadlocks, já era esperado, pois como foi explicado em aula, nenhum sistema comercial moderno o implementa. O sistema de arquivos HFS+ não suporta sparse files (em tradução livre, arquivos dispersos), que é a técnica de preencher com zeros espaços em branco que ficam entre arquivos de sistema, para que sejam vistos como um único arquivo, sem com isso ocupar mais espaço em disco. Sistemas de arquivos alternativos podem, porém, ser utilizados, resultando na adição deste e outros recursos e a possível subtração de outros tantos. Um exemplo seria o uso do UFS, onde um dos efeitos colaterais seria a divisão dos forks em tantos arquivos quanto o compusesse (data fork e resource fork, obrigatoriamente, e quantos mais houvessem).
  • 21. OUTRAS TECNOLOGIAS E INOVAÇÕES DO MAC OS X Como uma empresa conhecida por ser inovadora, a Apple pouco traz de novo em relação aos componentes internos do sistema. As inovações em software mais conhecidas da empresa ultimamente se referem mais a interfaces com usuário, já famosas, e com aplicativos que trazem facilidade para os mesmos. Atualmente, devido ao desenvolvimento de novas formas de interação com aparelhos móveis, mais notadamente o telefone celular iPhone, a Apple tem rumado em direção a interfaces de apontamento direto, conhecidos no mercado como touch-screen, e que começaram a ser inseridas em outros aparelhos da sua linha de computadores pessoais, como notebooks lançados no segundo semestre de 2008. Em se tratando de componentes internos, pode-se dizer que o desempenho das máquinas virtuais que executam o serviço de manter a compatibilidade do sistema com aplicações de sistemas e plataformas antigas são bastante otimizadas, de forma a pouco notar-se em termos de perda de desempenho e causando alguns, mas raros, casos de incompatibilidade. Mas a ferramenta de maior brilho é certamente o Spotlight, que tornou-se central ao sistema e mudou a maneira como muitos usuários do sistema armazenam e recuperam arquivos e informações. Enquanto o crescimento da capacidade de dispositivos de armazenamento é incessante, a oferta a oferta de arquivos de conhecimento e mídia acompanharam de perto essa tendência, principalmente através da internet. Assim, a forma tradicional de organizar arquivos em várias pastas e memorizá-las tornou-se em certos casos impraticável, e a solução de maior viabilidade hoje em dia são os motores de busca, vide o sucesso do Google. Acompanhando esse caminho o Mac OS X disponibilizou nas suas versões mais recentes o Spotlight. O Spotlight é uma coleção de mecanismos de ambos os níveis de kernel e de usuário. Entre eles encontramos o servidor spotlight, um índice de conteúdo por cada volume, um armazenador de meta- dados também por volume, um mecanismo de notificação de alterações chamado fsevents, as interfaces de usuário, além de muitos outros.
  • 22. ANÁLISE CRÍTICA DO MAC OS X Enquanto sistema operacional para desktop, o Mac OS X têm atrativos bem ao gosto de seu público-alvo. É esteticamente agradável, possui um número razoável de aplicativos e periféricos compatíveis, é similar aos sistemas concorrentes quanto ao desempenho e estabilidade e herda do seu desenvolvedor um fator-cool, que é como a mídia se refere à força que a marca empresta aos seus produtos, não apenas por ser seletiva, mas pelo design e inovação. Mesmo assim, o sistema ainda apresenta problemas de desempenho e instabilidade, de tal forma que o desenvolvimento da sua próxima versão tem como foco a melhora destes em detrimento de novos recursos e aplicativos. E há de se considerar que, ser a única fabricante do hardware que roda o Mac OS X deve implicar em muitos benefícios, em especial quanto ao controle e otimização, já que sabe-se de antemão em que peças rodará o sistema, e quanto a precisão e simplificação, uma vez que o limitado número de variações necessita de uma pequena quantidade de drivers e software, que poderá ser testado por mais tempo. Essa vantagem sobre sistemas como Windows e Linux é enorme, se levada em consideração a gigantesca fauna de fabricantes de peças para PC’s. Visto sob perspectiva de maior interesse do grupo, a segurança, o sistema operacional possui tanto recursos específicos da plataforma Mac como herdados do mundo Unix-Like, como ID de usuário e de grupo (UID e GID), alocação aleatória de bibliotecas de sistema na memória, trilhas de auditoria, ACL’s e Mach port rights. É até mesmo possível utilizar encriptação da memória virtual com AES, certamente um recurso diferenciado. No entanto, o seu sistema de arquivos já demonstra estar defasado em relação a outras soluções, apesar de seu desempenho e confiabilidade estarem dentro dos padrões do restante da indústria. Algumas tecnologias presentes em sistemas como NTFS ainda não estão presentes no HFS+, notadamente: • Suporte a sparse files • Compressão nativa • Encriptação nativa • Suporte a volumes tolerantes a falhas Há ainda os problemas advindo da necessidade em se manter compatível com sistemas legados da empresa e suas aplicações, como a necessidade de “reparar permissões”, uma estratégia criada para que aplicativos escritos com API’s antigas possam rodar num sistema atual, mesmo não estando de acordo com método de permissões do estilo Unix. A ausência de uma política de segurança com regras mais duras para o sistema também poderá trazer problemas na medida que ele tome uma fatia maior de mercado, o que é uma tendência na atualidade. Os usuários normalmente são mais leigos dos que os da plataforma PC quanto a segurança e há um falso mito de que não existem códigos maliciosos para o Mac OS X. De modo geral, uma analise prática mostra um sistema mais responsivo que o seu concorrente mais direto, o Windows, mas com um consumo de memória considerado alto.
  • 23. REFERÊNCIAS BIBLIOGRÁFICAS SINGH, Amit. Mac OS X Internals : A Systems Approach. EUA, Editora Addison-Wesley, 1641 págs. HIMANEN, Pekka. A ética dos hackers e o espírito da era da informação. Brasil, 2001. Editora Campus. 200 págs. WEBSITES Mac Developer Connection: http://developer.apple.com/mac/ Mac OS X Leopard Technical Specifications: http://www.apple.com/macosx/techspecs/ Mac OS X Internals : The Book. http://www.osxbook.com Kernelthread.com: http://www.kernelthread.com heise Security UK: http://www.heise-online.co.uk/security/Deceptive-file-names-under-Vista--/news/ 96498/ Wikipedia: Unicode equivalence: http://en.wikipedia.org/wiki/Unicode_normalization Developer Connection: Memory Management in Mac OS X: http://developer.apple.com/ DOCUMENTATION/Performance/Conceptual/ManagingMemory/Articles/AboutMemory.html