Gerenciamento de memoria MacOS
Autor: André Longatti | Publicado: 2009-05-11T06:11:00-07:00

Gerenciamento de memória • Possui um S. O.de gerência de memória poderoso • MAC separa as partes do S. O.de Memória que são dependentes da máquina daqueles que não são • Aspectos que diferenciam o gerenciados de memória do MAC dos outros: o gerenciamento de memória (usuário pode escrever seu próprio gerenciador de memória )o pmap (Permite visualizar o uso da memoria e tratalo)o código independente de máquina (funcional e qual quer maquina um código de outra)• Kernel e o gerenciador de memória se comunicam através de um protocolo bem definido • Tende a manter o Kernel pequeno e simples Comentário sobre o gerenciamento: Ao lançar um programa, o Mac OS destina automaticamente um espaço específicode memória para o aplicativo, isolando-o (isso quer dizer que o AppleWorksnão interfere na memória alocada para o iTunes, por exemplo). Quando umprograma deixa de funcionar, os outros processos continuam em andamento. Ouseja, acabou-se o tempo em que o defeito em um aplicativo travava ocomputador.Um programa deu problema e o Mac OS X continua de pé, sem necessidade derestart. Muito legal!O Mac OS X permite ainda que você force o desligamento de um programaproblemático, mantendo o restante do S. O.funcionando normalmente. Nocapítulo 05 você aprenderá como dar um Force Quit em um aplicativo,retornando logo depois às outras tarefas ativas.Multitarefa preemptivaAo utilizar vários programas ao mesmo tempo, o Mac OS decide as prioridadesde acesso à CPU, impedindo, por exemplo, que um software fique paralisadopor causa de outro. Você pode fazer várias coisas simultaneamente, ganhandoprodutividade. Além disso, a multitarefa otimiza o desempenho de aplicativosque possuem suporte para rodar em máquinas com mais de um processador.S. O.multiusuárioUm S. O.multiusuário permite que várias pessoas utilizem o mesmoequipamento, sem que uma interfira nas configurações da outra. Cada umapossui uma especificação de "domínio" com gradações de acesso aos diversoscomponentes do sistema. Um usuário pode utilizar itens da pasta Applicationse ao mesmo tempo estar impedido de alterar itens da pasta Library (vocêaprenderá sobre estas pastas no capítulo 02). Além disso, o S. O.garantecerta privacidade, pois aquilo que você guarda na sua pasta Documents nãopode ser acessado por outros usuários, a não ser que você queira. NoA comunidade Open SourceNão se pode ignorar a força da comunidade global de código aberto,responsável pelo sucesso do Linux, do Unix FreeBSD e de soluções como PHP ouMySQL. O núcleo do Mac OS X, batizado de Darwin, é open source, ou seja, temseu código-fonte disponibilizado para todos aqueles que desejarem estudá-lo,modificá-lo e aperfeiçoá-lo.Nota: O Linux é o único S. O.cem por cento open source. No Mac OS X, oDarwin (composto do kernel MAC e o BSD) é open source, mas o Aqua não.Mac para pokapráticas e geeksDevido a estas mudanças profundas assumidas pela Apple, o Mac OS X atende atodas as necessidades de usuários domésticos, profissionais de criação edesenvolvedores. Graças ao novo sistema, iniciantes no uso de máquinas eusuários experientes de Unix encontram no Mac uma máquina amigável epoderosa.Interface AquaA interface Aqua e o novo Finder tornam o Mac utilizável para os sereshumanos comuns. Na verdade, Aqua consegue harmonizar duas coisasaparentemente excludentes: familiaridade e inovação.Para os usuários de versões anteriores do Mac OS, as característicasclássicas do Mac estão preservadas. O Mac OS X é aconchegante sentimo-nosem casa dentro dele. Ao mesmo tempo, o Aqua representa um desafio deaprendizado, principalmente no modo de organização de arquivos, naeliminação de ferramentas que aprendemos a amar ao longo dos anos (o AppleMenu customizável e o menu Applications, no canto superior direito doFinder) e na inserção de novas ferramentas (o Dock, o System Preferences, oTerminal etc.).Memória Virtual O S. O.MAC permite ao usuário ver uma grande memória linear virtual, gerenciando ela a partir de um S. O.de areas.Porem os programas podem usar essa memória da forma que melhor interpretarem, aumentando assim a quantidade de guardadas no kernel. Para evitar isso. O S. O.MAC utiliza o conceito de areas que determinam um endereço base e um tamanho limite de espaço de memória a ser usado. O objeto de memória nele, pode ser uma area ou um conjunto de areas, ou ainda um arquivo mapeado. Um objeto de memória deve ser mapeado para um setor da memória virtual não utilizada. Arquivos mapeados podem ser encontrados usando as instruções de leitura e escrita da memória. Quando um processo termina, seus arquivos mapeados aparecem no disco. Compartilhamento de Memória O compartilhamento é um aspecto muito importante do MAC. As linhas de controle de um determinado processo não precisam de nenhum mecanismo especial para compartilhar objetos: todas elas vêem automaticamente o mesmo espaço de endereçamento. Se uma delas tiver acesso a um conjunto de dados, todas as demais também terão. Mais interessante é a possibilidade de dois ou mais processos compartilharem os mesmos objetos de memória, ou simplesmente compartilharem as mesmas areas de dados com este objetivo. Sob certos aspectos, o compartilhamento é muito importante em sistemas com um único processador. Por exemplo, o problema clássico do produtor / consumidor pressupõe dois tipos diferentes de processo compartilhando um resevatorio comum, de forma que o produtor possa colocar dados nele e o consumidor possa retirar dados deste mesmo resevatorio.Nos sistemas multiprocessadores, o compartilhamento de objetos entre dois ou mais processos é uma questão de importância fundamental. Na maioria dos casos o ambiente de tais sistemas é composto por um conjunto de processos cooperantes, rodando em paralelo em diferentes processadores ( ao contrário do compartilamento do tempo de um único processador). Tais processos podem precisar acessar resevatorios, tabelas, ou quaisquer outras estruturas de dados, continuamente, de forma a poderem realizar seu trabalho. Portanto, é fundamental que o S. O. permita que tais recursos sejam compartilhados entre os processos. Pegamos como exemplo, as primeiras versões do UNIX não tinham tal capacidade, que só foi incorporado ao S. O.depois de algum tempo.Um uso importante do conceito de compartilhamento acontece na criação do processo. A exemplo do UNIX, o MAC cria processos basicamente através da cópia de um outro processo existente. No UNIX, a cópia é sempre um clone do processo que executou a chamada Fork, enquanto que no MAC o processo escravo pode ser um clone de um outro processo diferente do pai (o protótipo). De uma forma ou de outra, o escravo é uma cópia de algum outro processo.Assim, o MAC fornece três tipos de compartilhamento de memória entre processos pais e escravos: • a região não pode ser usada pelo processo escravo: indica que o processo pai não quer compartilhar aquela região e qualquer acesso a ela será tratado como um acesso a uma área não alocada • a região é compartilhada: o compartilhamento acontece normalmente, e qualquer modificação em uma cópia acarreta na atualização da outra. • a região no escravo é uma cópia da do pai: a região é copiada e qualquer modificação será feita somente na cópia local. Essa opção é implementada utilizando-se um artifício de copiar-na-escrita, ou seja, a cópia física somente é realizada se houver alguma modificação na cópia. Isso economiza preciosos ciclos de CPU no caso de regiões que nunca são acessadas. Gerenciadores de Memória Externos No MAC, é possível criar gerenciadores de memória customizados e que funcionam no lugar do gerenciador de memória padrão do sistema. Esse S. O.dá maior flexibilidade ao MAC. Cada objeto de memória possui um gerenciador próprio. Assim, é possível implementar políticas diferentes para cada tipo de objeto diferenciando, por exemplo, o lugar onde as areas de memória serão armazenadas e as regras de o que será feito com o objeto após ter sido usado. Para isso, o gerenciador de memória necessita de 3 portas: • object port: é criada pelo gerenciador de memória e é usada pelo kernel para informar ao gerenciador eventos como page fault e outros. • control port: é criada pelo kernel para que o processo possa responder ao kernel em função desses eventos. • name port: é usada como um tipo de nome que identifica o objeto. Quando o gerenciador de memória mapeia um objeto, ele envia uma mensagem ao kernel contendo algumas as informações do objeto. Em seguida, o kernel responde com a criação das outras duas portas (control e name ports) e notifica essa ação ao processo. Esse último responde com uma mensagem de resposta contendo os demais atributos do objeto. Inicialmente, todas as areas de um objeto mapeado estão marcadas como unreadable/unwritable para forçar um evento no primeiro acesso. Memória Compartilhada Distribuída O conceito de gerente de memória externo do MAC é apropriado à implementação do compartilhamento da memória areada distribuída. Lembramos que a idéia básica é a de Ter um espaço de endereçamento virtual único e linear, que possa ser compartilhado entre processos rodando em máquinas que não possuam qualquer tipo de esquema de compartilhamento de memória física. Quando uma linha de controle referenciar uma area que ela não possua, haverá a geração de uma interrupção de falta de area. O S. O.fica responsável pela localização da area e pelo envio dela à máquina onde está rodando a linha de controle que gerou a falta de area, de modo que esta possa continuar sua execução.O S. O.de gerenciamento de memória do MAC permite perfeitamente que se implemente um esquema de memória compartilhada distribuída sem que o kernel precise ser alterado. A idéia é ter um espaço de endereçamento global e linear que é compartilhado por várias máquinas diferentes. Quando uma thread (retorna a lista das linhas de controle de um determinado processo) faz um acesso a uma area que não está carregada, é gerado um page fault. Quem trata esse page fault é o gerenciador de memória, que deve prover a area ao kernel. Entretanto, não há restrições quanto à maneira como essa tarefa é realizada. Como o MAC possui diferentes gerenciadores de memória para diferentes tipos de objetos, é natural que se crie um novo tipo para atender a essa classe de aplicações. Pode-se ainda criar gerenciadores de memória com características diferentes. Por exemplo, um garante sempre a consistência dos dados, e outro garante somente que os dados são os mais recentes dentro de um intervalo de alguns segundos. Claramente o primeiro é bastante mais complicado de se implementar, mas alguns algoritmos podem não necessitar de tanta qualidade de serviço. Dessa forma, pode-se economizar processamento utilizando-se uma política mais flexível. Pode-se ainda ter um processo gerenciador único de memória em todo cluster, pois o S. O.de mensagens do MAC, transparente em relação à rede. Isso facilita bastante o trabalho no caso de se ter um gerenciador de memória central.