segunda-feira, 17 de outubro de 2011

Visões dos Sistemas Operacionais
Desde a criação dos primeiros sistemas operacionais até os atuais, muita coisa mudou, porém as idéias centrais deles continuam as mesmas.

As idéias centrais dos S.Os são duas, a visão top-down e a visão bottom-up, ambas com a mesma importância.

Na visão top-down o sistema operacional age como uma espécie de “camada” que fica entre o hardware e o usuário, possibilitando a ele formas mais amigáveis de interagir com o computador, como por exemplo os sistemas de janelas vistos em todos os sistemas operacionais modernos.

Já na visão bottom-up, o sistema operacional faz todo o gerenciamento de hardware do computador, como o controle da alocação de memória utilizada pelos softwares do usuário, o controle dos dispositivos de entrada e saída de dados (mouse, teclado, impressoras…) e o gerenciamento do hd.

Linha evolutiva
Atualmente os sistemas operacionais permitem aos usuários abrirem vários programas ao mesmo tempo, muito provavelmente além do seu navegador onde você está lendo esse artigo agora, você deve também estar escutando música em algum player (winamp, xmms, windows media player…), conversando em um mensageiro como o MSN e o Gaim, ou gravando um CD…Enfim, geralmente todos nós fazemos várias coisas ao mesmo tempo no PC. Sabia que nos primeiros S.Os isso não era possível?

Os primeiros S.Os trabalhavam de forma que um segundo programa só poderia ser aberto (processado) após o término da execução do primeiro. Os programas eram processados em lotes (batch), eles eram gravados em fita e executados um após o término do outro até o final da fita.

Só foi possível o processamento de vários softwares “simultaneamente”, como estamos acostumados atualmente, após o surgimento das técnicas de multiprogramação e compartilhamento de tempo (timeshare).

Na verdade os programas só são processados simultaneamente em máquinas com processadores dualcore (dois núcleos) ou superiores, pois nas máquinas de processadores de um núcleo, os programas são processados alternadamente em curtos espaços de tempo(quantum), com cada um ocupando o processador por vez, porém isso acontece de forma tão rápida que passa a impressão de processamento simultâneo.

Esse processamento alternado e em curtos espaços de tempo são exatamente as técnicas de multiprogramação e compartilhamento de tempo que proporcionam. A dificuldade maior de implementar essas técnicas no passado era a falta de confiabilidade dos mecanismos de segurança de memória dos S.Os. Eles não faziam de forma eficiente a divisão da memória RAM, com isso a região de memória ocupada por um programa poderia ser facilmente invadida por outro programa, causando assim uma série de erros.

Conclusão
A tendência dos sistemas operacionais é evoluir para tornar possível a utilização dos computadores por usuários cada vez mais leigos em computação. Enquanto no passado para usar um computador o usuário precisava saber a fundo a arquitetura do hardware para poder interagir diretamente com ele ou ter noções de programação para trabalhar em consoles (shell), atualmente basta saber ler e acompanhar as instruções para que o resto fique a cargo do S.O e o computador funcione perfeitamente.

Vinicius da Silva FLeury
Fonte: http://blog.hospedagemsegura.com.br/tecnologia/o-universo-dos-sistemas-operacionais

Segue alguns Gráficos para analise:







Entrada e saída de dados.

O usuário se comunica com o núcleo do computador (composto por UCP e memória principal) através de dispositivos de entrada e saída (dispositivos de E/S ou I/O devices). Os tópicos a seguir vão analisar como funcionam os dispositivos de entrada e saída e como se faz a comunicação entre eles e o núcleo do computador.
Os dispositivos de entrada e saída tem como funções básicas:
· a comunicação do usuário com o computador
· a comunicação do computador com o meio ambiente (dispositivos externos a serem monitorados ou controlados)
· armazenamento (gravação) de dados. As características que regem a comunicação de cada um dos dispositivos de E/S (entrada e saída) com o núcleo do computador (composto de UCP e memória principal) são muito diferentes entre si. Cada dispositivo de E/S se comunica com o núcleo de forma diversa do outro. Entre outras diferenças, os dispositivos de entrada e saída são muito mais lentos que o computador, característica essa que impõe restrições à comunicação, de vez que o computador precisaria esperar muito tempo pela resposta do dispositivo.
Outra diferença fundamental diz respeito às características das ligações dos sinais dos dispositivos.
Os primeiros computadores, especialmente os de pequeno porte, eram muito lentos e os problemas de diferença de velocidade eram resolvidos sem dificuldade e não representavam problema importante. Dessa forma, a ligação dos dispositivos de E/S era feita através de circuitos simples (as interfaces) que apenas resolviam os aspectos de compatibilização de sinais elétricos entre os dispositivos de E/S e a UCP. Os aspectos relativos a diferenças de velocidade (especialmente tempo de acesso) eram resolvidas software.
Entre esses componentes, trafegam informações relativas a dados, endereços e controle.

Tipos de Dispositivos

Os dispositivos de ENTRADA são: teclado, mouses, scanners, leitoras óticas, leitoras de cartões magnéticos, câmeras de vídeo, microfones, sensores, transdutores, etc.
As funções desses dispositivos são coletar informações e introduzir as informações na máquina, converter informações do homem para a máquina e vice-versa, e recuperar informações dos dispositivos de armazenamento.
Os dispositivos de SAÍDA são: impressoras, monitores de vídeo, plotters, atuadores, chaves, etc ...
As funções desses dispositivos são exibir ou imprimir os resultados do processamento, ou ainda controlar dispositivos externos.
A UCP não se comunica diretamente com cada dispositivo de E/S e sim com "interfaces", de forma a compatibilizar as diferentes características. O processo de comunicação ("protocolo") é feito através de transferência de informações de controle, endereços e dados propriamente ditos. Inicialmente, a UCP interroga o dispositivo, enviando o endereço do dispositivo e um sinal dizendo se quer mandar ou receber dados através da interface. O periférico, reconhecendo seu endereço, responde quando está pronto para receber (ou enviar) os dados. A UCP então transfere (ou recebe) os dados através da interface, e o dispositivo responde confirmando que recebeu (ou transferiu) os dados (acknowledge ou ACK) ou que não recebeu os dados, neste caso solicitando retransmissão (not-acknowledge ou NAK).
As interfaces de entrada e saída são conhecidas por diversos nomes, dependendo do fabricante:
Interface de E/S = Adaptador de Periférico, Controladora de E/S, Processador de Periférico, Canal de E/S
Por exemplo, os computadores de grande porte da IBM chamam de "I/O channel".
A compatibilização de velocidades é feita geralmente por programa, usando memórias temporárias na interface chamadas "buffers" que armazenam as informações conforme vão chegando da UCP e as libera para o dispositivo à medida que este as pode receber.

Formas de Comunicação  

De uma forma geral, a comunicação entre o núcleo do computador e os dispositivos de E/S poderia ser classificada em dois grupos: comunicação paralela ou serial. Vamos a seguir analisar as características desses grupos.

Comunicação em Paralelo                                  

Na comunicação em paralelo, grupos de bits são transferidos simultaneamente (em geral, byte a byte) através de diversas linhas condutoras dos sinais. Desta forma, como vários bits são transmitidos simultaneamente a cada ciclo, a taxa de transferência de dados ("throughput") é alta.
No entanto, o processo de transferência em paralelo envolve um controle sofisticado e é razoavelmente complexo, o que o torna mais caro. Um dos problemas importantes diz respeito à propagação dos sinais no meio físico, isto é, no cabo de conexão entre o dispositivo e a interface. Essa propagação deve se fizer de modo que os sinais (os bits) correspondentes a cada byte cheguem simultaneamente à extremidade oposta do cabo, onde então serão re-agrupados em bytes. Como os condutores que compõem o cabo usualmente terão pequenas diferenças físicas, a velocidade de propagação dos sinais digitais nos condutores poderá ser ligeiramente diferente nos diversos fios. Dependendo do comprimento do cabo, pode ocorrer que um determinado fio conduza sinais mais rápidos (ou mais lento) que os demais fios e que desta forma um determinado bit x em cada byte se propague mais rápido e chegue à extremidade do cabo antes que os outros n-1 bits do byte. Este fenômeno é chamado skew, e as conseqüências são catastróficas: os bits x chegariam fora de ordem (os bytes chegariam embaralhados) e a informação ficaria irrecuperável. Em decorrência desse problema, há limites para o comprimento do cabo que interliga um dispositivo ao computador, quando se usa o modo paralelo.
As restrições citadas contribuem para que a utilização da comunicação em paralelo se limite a aplicações que demandem altas taxas de transferência, normalmente associadas a dispositivos mais velozes tais como unidades de disco, ou que demandem altas taxas de transferência, como CD-ROM, DVD, ou mesmo impressoras, e que se situem muito próximo do núcleo do computador. Em geral, o comprimento dos cabos paralelos é limitado a até um máximo de 1,5 metro.

Comunicação Serial  

Na comunicação serial, os bits são transferidos um a um, através de um único par condutor. Os bytes a serem transmitidos são serializados, isto é, são "desmontados" bit a bit, e são individualmente transmitidos, um a um. Na outra extremidade do condutor, os bits são contados e quando formam 8 bits, são remontados, reconstituindo os bytes originais. Nesse modo, o controle é comparativamente muito mais simples que no modo paralelo e é de implementação mais barata. Como todos os bits são transferidos pelo mesmo meio físico (mesmo par de fios), as eventuais irregularidades afetam todos os bits igualmente. Portanto, a transmissão serial não é afetada por irregularidades do meio de transmissão e não há skew. No entanto, a transmissão serial é intrinsecamente mais lenta (de vez que apenas um bit é transmitido de cada vez).
Como os bits são transmitidos seqüencialmente um a um, sua utilização é normalmente indicada apenas para periféricos mais lentos, como por exemplo, teclado, mouse, etc. ou quando o problema da distância for mandatório, como nas comunicações a distâncias médias (tal como em redes locais) ou longas (comunicações viam linha telefônica usando modems). Obs.: Comparativamente, a transmissão serial tem recebido aperfeiçoamentos importantes (seja de protocolo, de interface e de meio de transmissão) que vem permitindo o aumento da velocidade de transmissão por um único par de fios, cabo coaxial ou de fibra ótica. Como o aumento da velocidade de transmissão em interfaces paralelas ocasiona mais skew, a tendência tem sido no sentido do aperfeiçoamento das interfaces seriais que hoje permitem taxas de transferência muito altas com relativamente poucas restrições de distância. Em microcomputadores, a interface USB - Universal Serial Bus permite hoje ligar até 128 dispositivos a taxas muito altas (centenas de kbps).

Tabela Comparativa

Paralelo -Custo Maior - Distância Menor - Throughput alto
Serial - Custo Menor - Distância sem Limite - Throughput Baixo

Transmissão Síncrona e Assíncrona 

A transmissão de caracteres através de uma linha de comunicação pode ser feita por dois diferentes métodos: transmissão síncrona e assíncrona.
Na transmissão síncrona, o intervalo de tempo entre dois caracteres subseqüentes é fixo. Nesse método, os dois dispositivos - transmissor e receptor - são sincronizados, pois existe uma relação direta entre tempo e os caracteres transferidos. Quando não há caracteres a serem transferidos, o transmissor continua enviando caracteres especiais de forma que o intervalo de tempo entre caracteres se mantém constante e o receptor mantém-se sincronizado. No início de uma transmissão síncrona, os relógios dos dispositivos transmissor e receptor são sincronizados através de um string de sincronização e então mantém-se sincronizados por longos períodos de tempo (dependendo da estabilidade dos relógios), podendo transmitir dezenas de milhares de bits antes de terem necessidade de re-sincronizar.
Já na transmissão assíncrona, o intervalo de tempo entre os caracteres não é fixo. Podemos exemplificar com um digitador operando um terminal, não havendo um fluxo homogêneo de caracteres a serem transmitidos. Como o fluxo de caracteres não é homogêneo, não haveria como distinguir a ausência de bits sendo transmitidos de um eventual fluxo de bits zero e o receptor nunca saberia quando virá o próximo caractere, e portanto não teria como identificar o que seria o primeiro bit do caractere. Para resolver esses problemas de transmissão assíncrona, foi padronizado que na ausência de caracteres a serem transmitidos o transmissor mantém a linha sempre no estado 1 (isto é, transmite ininterruptamente bits 1, o que distingue também de linha interrompida). Quando for transmitir um caractere, para permitir que o receptor reconheça o início do caractere, o transmissor insere um bit de partida (start bit) antes de cada caractere. Convenciona-se que esse start bit será um bit zero, interrompendo assim a seqüência de bits 1 que caracteriza a linha livre (idle). Para maior segurança, ao final de cada caractere o transmissor insere um (ou dois, dependendo do padrão adotado) bits de parada (stop bits), convencionando-se serem bits 1 para distinguí-los dos bits de partida. Os bits de informação são transmitidos em intervalos de tempo uniformes entre o start bit e o(s) stop bit(s). Portanto, transmissor e receptor somente estarão sincronizados durante o intervalo de tempo entre os bits de start e stop. A transmissão assíncrona também é conhecida como "start-stop".
A taxa de eficiência de uma transmissão de dados é medida como a relação de número de bits úteis dividido pelo total de bits transmitidos. No método assíncrono, a eficiência é menor que a no método síncrono, uma vez que há necessidade de inserir os bits de partida e parada, de forma que a cada caractere são inseridos de 2 a 3 bits que não contém informação.

Transmissão Simplex, Half-Duplex e Full-Duplex  

Uma comunicação é dita simplex quando permite comunicação apenas em um único sentido, tendo em uma extremidade um dispositivo apenas transmissor (transmitter) e do outro um dispositivo apenas receptor (receiver). Não há possibilidade de o dispositivo receptor enviar dados ou mesmo sinalizar se os dados foram recebidos corretamente. Transmissões de rádio e televisão são exemplos de transmissão simplex.
Uma comunicação é dita half-duplex (também chamada semi-duplex) quando existem em ambas as extremidades dispositivos que podem transmitir e receber dados, porém não simultaneamente. Durante uma transmissão half-duplex, em determinado instante um dispositivo A será transmissor e o outro B será receptor, em outro instante os papéis podem se inverter. Por exemplo, o dispositivo A poderia transmitir dados que B receberia; em seguida, o sentido da transmissão seria invertido e B transmitiria para A a informação se os dados foram corretamente recebidos ou se foram detectados erros de transmissão. A operação de troca de sentido de transmissão entre os dispositivos é chamada de turn-around e o tempo necessário para os dispositivos chavearem entre as funções de transmissor e receptor é chamado de turn-around time.
Uma transmissão é dita full-duplex (também chamada apenas duplex) quando dados podem ser transmitidos e recebidos simultaneamente em ambos os sentidos. Poderíamos entender uma linha full-duplex como funcionalmente equivalente a duas linhas simplex, uma em cada direção. Como as transmissões podem ser simultâneas em ambos os sentidos e não existe perda de tempo com turn-around, uma linha full-duplex pode transmitir mais informações por unidade de tempo (maior throughput) que uma linha half-duplex, considerando-se a mesma taxa de transmissão de dados.

Gerenciamento de Memória
GERENCIAMENTO DE MEMÓRIA
Gerenciador de Memória é a parte do SO que é responsável por cuidar de quais partes da memória estão em uso, quais estão livres, alocar memória a processos quando eles precisam, desalocar quando eles não necessitarem mais e gerenciar a troca dos processos entre a memória principal e o disco (quando a memória principal não é suficiente para manter todos os processos)
Maneiras de Gerenciar a Memória:
1. Gerenciamento sem Troca ou Paginação: troca e paginação são métodos utilizados de movimentação da memória para o disco e vice-versa durante a execução dos processos. Sem troca ou paginação é o caso mais simples.
2. Monoprogramação sem Troca ou Paginação: temos um único processo sendo executado por vez, de forma que o mesmo possa utilizar toda a memória disponível, com exceção da parte reservada ao SO (que permanece constante em local pré-determinado). O SO carrega um programa do disco para a memória executa-o e em seguida aguarda comandos do usuário para carregar um novo programa, que irá se sobrepor ao anterior.
3. Multiprogramação: a monoprogramação não é mais utilizada em sistemas grandes, pois:
>> Muitas aplicações são mais facilmente programáveis, quando as dividimos em dois ou mais processo;
>> Os grandes computadores em geral oferecem serviços interativos simultaneamente para diversos usuários (seria impossível trabalhar com um único processo por vez, pois representaria sobrecarga devido à constante necessidade de chavear de um processo para outro – constantemente lendo e escrevendo no disco);
>> É necessário que diversos processos estejam “simultaneamente” em execução devido as operações de E/S, que implica em grandes esperas nas quais por questão de eficiência a UCP deve ser entregue a outro processo.
1. Multiprogramação com Partições Fixas: consiste em dividir a memória existente em n partições fixas, podendo ser de tamanhos diferentes. Essas partições poderiam ser criadas ao inicializar o sistema pelo operador.
Uma maneira de se fazer isso seria: criar uma fila para cada partição existente e cada vez que um processo é iniciado, ele é colocado na fila de menor partição capaz de o executar. Os processos em cada partição são escolhidos de acordo com alguma forma de política, por exemplo, o primeiro a chegar é atendido antes. O problema é que pode ocorrer que uma partição grande esteja sem utilização, enquanto que diversos processos estão aguardando para utilizar uma partição menor. Para resolver isso podemos fazer o seguinte: estabelecer apenas uma fila para todas as partições e quando uma partição fica livre, um novo processo que caiba na partição livre é escolhido e colocado na mesma. A melhor forma de fazer a escolha seria percorrer a fila procurando o maior processo aguardando que caiba na partição livre, pois se a partição livre for entregue para o primeiro processo da fila, pode ocorrer que uma partição grande seja entregue a um processo pequeno.
2. Realocação e Proteção: há a necessidade de realocações, pois processos diferentes executam em posições diferentes de memória e com endereços diferentes. Uma possível solução é modificar as instruções conforme o programa é carregado na memória (quando o SO carrega o programa, adiciona a todas as instruções que se referenciarem a endereços, o valor do ponto inicial de carga do programa). Esta solução exige que o linker coloque no início do código do programa, uma tabela que apresente as indicações das posições no programa que devem ser modificadas no carregamento. Mas isso não resolve a proteção, pois um programa malicioso ou errado pode ler ou alterar posições na memória de outros usuários, já que as referências são sempre as posições absolutas de memória.
Uma solução adotada para isso foi dividir a memória em unidades de 2 KB e associar um código de proteção de 4 bits a cada uma dessas regiões. Durante a execução de um processo, o PSW contém um código de 4 bits que é testado com todos os acessos à memória realizados pelo processo, e gera uma interrupção se tentar acessar uma região de código diferente.
Uma solução alternativa para o problema da realocação e da proteção é a utilização de registradores de base e limite. Sempre que um processo é carregado na memória, o SO ajusta o valor do registrador de base de acordo com a disponibilidade de memória. Toda vez que um acesso é realizado na memória pelo processo, o valor do registrado é automaticamente somado, assim não há necessidade de que o código do programa seja modificado durante o carregamento. O registrador de limite indica o espaço de memória que o processo pode executar, então todo acesso realizado pelo processo à memória é testado com o valor do registrador limite para a validação do seu acesso. O método dos registradores permite que um programa seja movido na memória, mesmo após já estar em execução, o que antes não era possível sem antes alterar os endereços novamente.
3. Troca (swapping): num sistema de batch, desde que se mantenha a UCP ocupada o máximo de tempo possível, não há necessidade de se complicar o método de gerenciamento de memória. Mas num sistema de time-sharing, onde muitas vezes existe menos memória do que o necessário para manter todos os processos de usuário, então é preciso que uma parte dos processos seja temporariamente mantida em disco. Para executar processos que estão no disco, eles devem ser enviados para a memória, o que significa retirar algum que lá estava. Este processo é denominado troca.
4. Multiprogramação com Partições Variáveis: partições que variam conforme as necessidades dos processos, em tamanho, em localização e em número de partições, melhorando a utilização da memória (mas complica a alocação e desalocação da memória). Compactação de memória que é a combinação de todos os buracos formados na memória em um único é raramente utilizada devido a grande utilização de UCP requerida.
Para determinarmos quanta memória deve ser alocada a um processo quando ele é iniciado, temos duas situações: se os processos necessitarem de uma quantidade pré-fixada e invariante de memória basta alocar a quantidade necessária a cada processo ativo. E o outro caso é quando os processos necessitam de mais memória durante o processamento (alocação dinâmica de memória). Neste caso pode existir um buraco de memória próximo ao processo bastando alocar a memória desse buraco ou o processo pode estar cercado por outros processos, ou o buraco que existe não é suficiente. Para os dois últimos casos temo que tomar algumas das seguintes ações: mover o processo par um buraco de memória maior e se não houver tal espaço, alguns processos devem ser retirados da memória para deixar espaço para esse processo e se não houver espaço no disco para outros processos, o processo que pediu mais espaço na memória deve ser morto. Quando se espera que diversos processos cresçam durante a execução, o melhor seria reservar espaço extra para esses processos quando eles são criados para eliminar a sobrecarga de lidar com movimentação ou troca de processos.
4. Gerenciamento de espaço: as duas principais formas de cuidar da utilização de memória são:
1. Gerenciamento com Mapa de Bits: A memória é subdividida em unidades de um certo tamanho. A cada unidade é associada um bit que se for 0 indica que essa parte da memória está livre e se for 1 indica que está ocupada. O tamanho deve ser cuidadosamente escolhido. A desvantagem é que quando um novo processo que ocupa k unidades de memória deve ser carregado na memória, o gerenciador deve percorrer o mapa de bits para encontrar k bits iguais a zero consecutivos, o que não é um processo simples.
2. Gerenciamento com Listas Encadeadas: mantemos uma lista encadeada de segmentos alocados e livres, sendo que cada segmento é um processo ou um buraco entre dois processos. A lista apresenta-se em ordem de endereços, e quando um processo termina ou é enviado para o disco, e a atualização da lista ocorre da seguinte maneira: cada processo, desde que não seja nem o primeiro nem o último da lista, apresenta-se cercado por dois segmentos, que podem ser buracos ou outros processos, o que nos dá as quatro possibilidades mostradas na figura abaixo:
Os buracos adjacentes devem ser combinados num único. Para escolher o ponto em que deve ser carregado um processo recém criado ou que veio do disco por uma troca, vamos utilizar alguns algoritmos assumindo que o gerenciador de memória sabe quanto espaço alocar no processo:
- First Fit (primeiro encaixe): percorrer a fila até encontrar o primeiro espaço em que caiba o processo. É um algoritmo rápido.
- Next Fit (próximo encaixe): o mesmo que o algoritmo anterior, só que ao invés de procurar sempre a partir do início da lista, procura a partir do último ponto em que encontrou. Desempenho próximo ao anterior.
- Best Fit (melhor encaixe): consiste em verificar toda a lista e procurar o buraco que tiver espaço mais próximo das necessidades do processo. É mais lento, e desempenho pior que o First Fit
- Worst Fit (pior ajuste): pega sempre o maior buraco disponível. Desempenho ruim.
Esses algoritmos podem ter sua velocidade aumentada pela manutenção de duas listas separadas, uma para processos e outra para buracos. Quando temos duas listas separadas, outro algoritmo é possível. É o Quick Fit (ajuste rápido), que consiste em manter listas separadas para alguns dos tamanhos mais comuns especificados (ex. uma fila para 2k, outra para 4k, outra para 8k etc). Neste caso, a busca de um buraco com o tamanho requerido, é extremamente rápido, entretanto, quando um processo termina, a liberação de seu espaço é complicada, devido à necessidade de reagrupar os buracos e modificá-los de fila.
5. Alocação de espaço de troca (swap): espaço de troca é o espaço ocupado no disco pelos processos que aí estão guardados, pois foram retirados da memória devido a uma troca. Os algoritmos para gerenciar o espaço alocado em disco para swap são os mesmos apresentados para o gerenciamento de memória. A diferença é que em alguns sistemas, cada processo tem no disco um espaço reservado para o mesmo e na memória ele é constantemente mudado de lugar. Além disso, como os discos são dispositivos de bloco, a quantidade de espaço reservado para os processos no disco deverá ser múltipla do tamanho do bloco.
6. Memória Virtual: A primeira solução adotada para programas grandes demais para a quantidade de memória foi a utilização de overlays. Nesta técnica o programa era subdividido em partes menores (overlays), que podiam ser rodadas separadamente e quando um overlay terminava a execução um outro poderia ser carregado na mesma posição de memória utilizada pelo anterior. O problema é a divisão do programa em overlays não é simples e deve ser realizada pelo programador.
A técnica de memória virtual para executar um programa que não cabe na memória existente consiste em manter partes do programa, dos dados e da pilha no disco, sendo que existe uma forma de decisão de quais processos devem permanecer no disco e quais na memória. Esta técnica é realizada de forma automática pelo computador. Podemos alocar diversos processos na memória virtual, de forma que cada um pensa ter uma quantidade de memória que somadas ultrapassam a quantidade real de memória. Técnicas utilizadas em sistemas com memória virtual:
1. Paginação: espaço virtual é o espaço de memória que pode ser referenciado por um programa qualquer em dado processador. Ex: um processador com endereçamento de 16 bits, possui um espaço virtual de 64 kbytes. Quando uma instrução como: LD A,(1000h) o 1000h corresponde a um endereço virtual, de um espaço de endereçamento virtual de 64k bytes. Em um computador sem memória virtual, o endereço virtual corresponde ao endereço efetivamente colocado no duto de endereçamento da memória. Quando o computador possui memória virtual, esse endereço virtual é enviado para uma unidade de gerenciamento de memória (MMU), que corresponde a um chip ou um conjunto de chips que translada esse endereço virtual em um endereço físico, de acordo com uma tabela.
O espaço de endereços virtuais é dividido em unidades chamadas páginas e o espaço de memória física é dividido em unidades chamadas quadros de página, de mesmo tamanho das páginas. A MMU tem uma tabela que indica para cada página, qual o quadro de página que corresponde à mesma. Se o processador tenta acessar o endereço 0, a MMU verifica que isto corresponde ao primeiro endereço da primeira página, verifica então que essa primeira página está alocada no terceiro quadro de página. Converte então esse endereço para 8192 (decimal) e envia o endereço convertido para a memória (nem a memória e nem o processador precisam ficar sabendo da existência de paginação).
Como nem todas as páginas do espaço virtual podem estar residentes na memória simultaneamente, ocorrer o caso de que um acesso seja realizado para um página que não está na memória. Para saber isso a MMU mantém na tabela de translação um bit para cada página que indica se a mesma está presente ou não na memória. Se um acesso for realizado a uma página ausente, é gerada uma falta de página, que chama uma rotina de tratamento de interrupção específica para o SO, que então se encarrega do carregamento da página faltante e o ajuste correspondente na tabela de translação.
A forma mais comum de implementação da MMU, é escolher alguns dos bits mais significativos do endereço virtual como indicadores do número de página e o restante dos bits como um deslocamento dentro dessa página. Ex: na figura acima, de 16 bits do endereço virtual, 12 serão utilizados para o deslocamento e 4 serão utilizados como um índice para qual das 16 páginas está sendo referenciada. A MMU pega os 4 bits do índice da página, acessa a posição correspondente da tabela de translação, verifica se a página está presente na memória, se não estiver, gera uma interrupção para carregamento e depois verifica o valor colocado nessa entrada da tabela de translação e os junto aos 12 bits de deslocamento dentro da página.
A paginação fornece uma forma de se conseguir grande espaços de endereçamento lineares em uma quantidade finita de memória física.
2. Segmentação: Na segmentação temos um espaço bidimensional no sentido de que é dividido em uma um certo número de segmentos, cada um com dado número de bytes. Dessa forma, um endereçamento é sempre expresso da forma (segmento, deslocamento). Os diferentes segmentos são associados a diversos programas ou mesmo arquivos, de forma que neste caso, os arquivos podem ser acessados como se fossem posições de memória. Na segmentação os programadores tentam colocar entidades diferentes em segmentos diferentes para facilitar o compartilhamento de objetos entre processos diferentes.



GERENCIAMENTO DE PROCESSO – DA EVOLUÇÃO PARA A REVOLUÇÃO.

Por: Lauro Jorge Prado
O conceito de gerenciamento de processo não é  novo, e há muito tempo vem sendo utilizado e transformando a forma de se administrar às empresas. Adam Smith com seu estudo na
famosa fábrica de alfinete é um bom exemplo de análise de processo transformado-se em
unanimidade de uma época, por estudiosos, por empresários e empreendedores.
Gary Hamel e C. K. Prahalad no livro Competindo pelo Futuro mostram que os
executivos devem sair das estafantes rotinas da reestruturação e da reengenharia, devem
desenvolver a capacidade de previsão para moldar a sua evolução de forma proativa, devem
definir uma intenção estratégica realmente ampla para mobilizar a organização nesta busca,
devem descobrir maneiras de alavancar recursos e finalmente devem estender as fronteiras da
imaginação corporativa e revitalizar o processo da criação de novos negócios.
O que os dois autores disseram acima não acontece da noite para o dia numa organização, não
basta querer mudar, tem que revisar e melhorar os processos, determinando quais são os que
realmente agregam valor para organização do ponto de vista estratégico numa visão de longo
prazo.
Então como podemos afirmar hoje que um conceito tão antigo ainda pode ser considerado
revolucionário?
É baseado na evolução dos conceitos e estudos (TQM, reengenharia, etc) é que vemos tudo isto.
Ao implantar esses conceitos houve saltos de qualidade, satisfação dos clientes, alavancagem dos negócios, vantagem frente aos concorrentes.
Se verificarmos o que se tem feito ultimamente nas empresas em função de melhorar seus
processos, vemos que há uma evolução sempre seguida de revolução na forma de administrar.
Vamos então destacar aqui, quatro evoluções do Gerenciamento de Processos:
1. Total Quality Management
2. Business Process Reengineering
3. Process-Oriented Organization Design
4. Process-Base Competition
A fase um e dois fazem parte de uma mesma linha de raciocínio que é a qualidade contínua, e tem como meta a  excelência operacional, que buscam a melhor qualidade ao menor custo. Para manter bons resultados e uma excelência operacional é preciso sustentar a estratégia incorporada, porém é importante realçar que excelência operacional não é estratégia e nem assegura o sucesso estratégico.(Vide http://lauroprado.tripod.com/ezine/ed23.html ).Para compor o intento estratégico devemos evoluir para a fase três e quatro. Para isso a empresa terá que organizar o processo interno, tendo sempre em mente que a excelência operacional é um recurso sustentável e com a fase três orientando e organizando a empresa por processo, e que vai habilitar e colocar a empresa no trilho estratégico.





Sistema de arquivos

Introdução
Todos nós sabemos que dados - sejam eles partes de programas ou dados propriamente dito, como um texto ou uma planilha - devem ser armazenados em um sistema de memória de massa, já que a memória (RAM) do micro é apagada quando desligamos o computador. Memória de massa é o nome genérico para qualquer dispositivo capaz de armazenar dados para uso posterior, onde incluímos disquetes, discos rígidos, CD-ROMs, ZIP drives e toda a parafernália congênere.
Dados são armazenados em forma de arquivos e a maneira com que os arquivos são armazenados e manipulados dentro de um disco (ou melhor dizendo, dentro de um sistema de memória de massa) varia de acordo com o sistema operacional. 
A capacidade de armazenamento
Na maioria das vezes, um disco é dividido em pequenas porções chamadas setores. Dentro de cada setor cabem 512 bytes de informação. Multiplicando-se o número total de setores de um disco por 512 bytes, teremos a sua capacidade de armazenamento.
No caso de um disco rígido, ele possui na verdade vários discos dentro dele. Cada face de cada disco é dividida em círculos concêntricos chamados cilindros ou trilhas. Em cada trilha temos um determinado número de setores. É claro que toda esta divisão é invisível, pois é feita magneticamente. Para sabermos qual o número total de setores de um disco rígido, basta multiplicarmos sua geometria, ou seja, o seu número de cilindros, lados (parâmetro também chamado de "cabeças") e setores por trilha. Um disco rígido que possua a geometria 2448 cilindros, 16 cabeças e 63 setores por trilha, terá 2448 x 16 x 63 = 2.467.584 setores. Multiplicando-se o número total de setores por 512 bytes, teremos sua capacidade total, no caso 1.263.403.008 bytes.
Importante notar que 1 KB não representa 1.000 bytes, mas sim 1.024, assim como 1 MB não representa 1.000.000 de bytes, mas sim 1.048.576. Muita gente arredonda e acaba errando nas contas. Lembre-se: 1 KB = 210, 1 MB = 220 e 1 GB = 230. No exemplo dado, o disco rígido seria de 1,18 GB (basta dividir a capacidade que encontramos em bytes por 230 para encontrarmos o resultado em gigabytes) e não 1,26 GB como seria de se supor. 
O sistema de arquivos FAT-16
O sistema de arquivos utilizado pelo MS-DOS chama-se FAT-16. Neste sistema existe uma Tabela de Alocação de Arquivos (File Allocation Table, FAT) que na verdade é um mapa de utilização do disco. A FAT mapeia a utilização do espaço do disco, ou seja, graças à ela o sistema operacional é capaz de saber onde exatamente no disco um determinado arquivo está armazenado.
Existem várias posições na FAT, sendo que cada posição aponta a uma área do disco. Como cada posição na FAT-16 utiliza uma variável de 16 bits, podemos ter, no máximo, 216 = 65.536 posições na FAT. Como em cada setor cabem apenas 512 bytes, concluímos que, teoricamente, poderíamos ter discos somente de até 65.536 x 512 bytes = 33.554.432 bytes ou 32 MB.
Por este motivo, o sistema FAT-16 não trabalha com setores, mas sim com unidades de alocação chamadas clusters, que são conjuntos de setores. Em vez de cada posição da FAT apontar a um setor, cada posição aponta para um cluster, que é um conjunto de setores que poderá representar 1, 2, 4 ou mais setores do disco.
Tamanho do Cluster
Capacidade Máxima de Armazenamento
2 KB
128 MB
4 KB
256 MB
8 KB
512 MB
16 KB
1 GB
32 KB
2 GB

Desperdício: Um grave problema
O tamanho do cluster é definido automaticamente pelo sistema operacional quando o disco é formatado, seguindo a tabela. Um disco rígido de 630 MB utilizará clusters de 16 KB, enquanto um de 1, 7 GB utilizará clusters de 32 KB.
Como a menor unidade a ser acessada pelo sistema operacional será o cluster, isto significa que os arquivos deverão ter, obrigatoriamente, tamanhos múltiplos do tamanho do cluster.
Isto significa que um arquivo de 100 KB em um disco rígido que utilize clusters de 8 KB obrigatoriamente ocupará 13 clusters, ou 104 KB, pois este é o valor mais próximo de 100 KB que conseguimos chegar utilizando clusters de 8 KB. Neste caso, 4 KB serão desperdiçados.
Quanto maior o tamanho do cluster, maior o desperdício. Se o mesmo arquivo de 100 KB for armazenado em um disco rígido que utilize clusters de 16 KB, ele obrigatoriamente utilizará 7 clusters, ou 112 KB. E, para o caso de um disco rígido com clusters de 32 KB, este mesmo arquivo ocupará 4 clusters, ou 128 KB.
O desperdício em disco é um dos maiores problemas do sistema FAT, característica que chamamos de slack space. Quando maior o tamanho do cluster, mais espaço em disco é desperdiçado.
Para saber qual o tamanho do cluster que está sendo utilizado em seu disco rígido, basta utilizar o comando CHKDSK, observando a linha "xxxxxx bytes em cada unidade de alocação", onde "xxxxx" é o tamanho do cluster em bytes.







Tipos de Sistemas 

1.3.3.1 Multiprocessadores, ou sistemas fortemente acoplados
• Memória única.
• Tudo gerênciado por um único SO.
• Subdividido em 

SMP
- Arquitetura simétrica.
NUMA
- Acesso Não-Uniforme a Memória.
• Custo de produção mais elevado.

1.3.3.2 Multicomputadores, ou sistemas fracamente acoplados.
• Memória “espalhada”
• Um único SO ou vários
• Cada membro do sistema esta conectado aos outros por um link de dados
• Custo de produção mais baixo.
• Tendência atual

Fonte: http://pt.scribd.com/doc/58827204/12/Multiprocessadores-ou-sistemas-fortemente-acoplados

Interfaces de uso

GUI

GUI (Graphical User Interface) - Interface gráfica com o usuário. É a camada gráfica do sistema operacional que possibilita ao usuário interagir com o computador. Janelas, caixas de diálogo, ícones, menus e o ponteiro do mouse fazem parte da interface gráfica.
Portanto, o usuário não precisa conhecer Informática para executar os comandos, e pode utilizar a maioria dos recursos do computador por meio de cliques do mouse, de modo simples e amigável.

Assim, para comandar o sistema, basta clicar em botões, opções, menus ou figuras ou digitar uma combinação específica de teclas, para que o programa envie uma mensagem para o processador, causando a execução de certa tarefa.




TUI   

TUI (Touch User Interface) - Uma interface de toque (TUI) é basicamente a mais recente tecnologia de interface visual, sendo muito usada em celulares e agora também começando a aparecer nos computadores e diversos componentes tácteis.
A interface táctil é considerada em muitos casos quase como uma interface gráfica (GUI) visto que a visualização continua sendo a mesma, mudando apenas a maneira como interagimos fisicamente com o computador especialmente a nível de entrada (input) sendo este feito com toque de dedos diretamente na tela ou com uma caneta especial que é usada para o toque na tela.
O TUI também trás imensas vantagens para aqueles que têm certos tipos de deficiências e para certas áreas profissionais tal como medicina engenharia, arquitetura, etc.

 Serviços 

Trata-se de sistemas identicos aos que conhecemos (Windows, Linux, Mac, Unix) disponíveis na web para podermos acessar de onde quisermos, desde que tenha acesso à internet.

Estes sistemas possuem várias utilidades: armazenar arquivos, criar um documento de texto, ouvir música, enfim, tudo aquilo que o desenvolver do sistema disponibilizar.

Segundo o Wikipédia os sistemas operacionais online são:

Um webtop, web desktop, desktop online ou OS online (OS é a sigla para Operacional System (Sistema operacional) é uma página de internet personalizada, geralmente baseada na tecnologia AJAX, em que é possível escolher o conteúdo, bem como definir a ordem e a aparência dos mesmos.

São em geral fornecidos por serviços online como Google, Yahoo! e Windows Live e normalmente rodam miniaplicações próprias, mas podem servir de plataforma também para miniaplicações desenvolvidas por terceiros.

Um OS Online funciona como o Windows, Macintosh, ou Linux, porem utilizando um navegador como o Internet Explorer e o Firefox. Alguns deles têm interfaces que lembram desktops de sistemas operacionais como o Windows e o Linux (KDE).


 Alguns WebTops

EYEOS - http://www.eyeos.info/
Starforce - http://www.startforce.com/os/
Online Operating System - http://www.oos.cc/login.html

Fonte: http://ampulhetadigital.com/2011/10/sistemas-operacionais-on-line-4-oodesk/
Fonte: http://carlosmaxdutra.posterous.com/webtopdesktop-online-ou-sistemas-operacionais

Pseudo-Sistema Operacional

·        Definição
Pseudo-Sistema Operacional ou Pseudo-OS são sistemas operacionais que não são íntegros, ou seja, embora apresentem uma interface de usuário, estes não se comunicam diretamente com o hardware do computador, sendo necessária a utilização de outro sistema operacional como hospedeiro para este Pseudo-OS para que este possa acessar por meio do kernel do sistema hospedeiro à memória e ao hardware do computador. Alguns exemplos de Pseudo-OS são os WebOS, que não se comunicam diretamente com o hardware e a memória do computador e para sua execução são necessários aplicativos como um browser (ou navegador) compativel e um sistema operacional com kernel rodando no computador (servindo de sistema operacional hospedeiro). Um outro exemplo situado como meio termo entre pseudo-sistema e um sistema completo são as versões do Windows do 1.0 ao 4.2, pois são executadas em cima de uma versão original ou modificada do MS-DOS, mas também possuem funções próprias de gerenciamento da máquina.
·        Tipos de Pseudo-OS

WebOS ou Internet Pseudo-OS
Um WebOS (Web Operating System, em português Sistema Operacional na Web) é uma imitação em forma de área de trabalho ou interface gráfica em forma de sistema operacional. Trata-se de um aplicativo web do tipo PIM que contém ícones, barras e janelas (redimensionáveis e móveis) e, em certos casos, até aplicativos internos (como Zoho office, uma suíte de aplicativos burocráticos online).
Não confundir com Palm webOS, sistema operacional para telefones móveis baseado em Linux.
WebOS, Web Operating System ou WebTop são sistemas web, que rodam em browsers e fornecem várias outras aplicações web, tais como: mp3 player, calendário, bloco de notas, leitores de RSS, e-mail, chats, repositórios de arquivos e diversas outras aplicações.
As interfaces são similares a do Windows, MacOS e Linux. Possuem um benefício óbvio, que é a possibilidade de criar documentos e configurações, que podem ser acessados de qualquer lugar do mundo como se você estivesse no seu Desktop local.

Maquinas Virtuais


Máquinas virtuais são programas que funcionam a partir da emulação de outros programas e trabalham exatamente igual a uma outra máquina física. São instaladas no computador e permitem ao seu usuário utilizar outros sistemas operacionais sem precisar instalá-los ou remover o atual de seu PC.


Para utilizar uma máquina virtual, você necessita de programas que fazem isso. Um deles é o já bastante conhecido Virtual PC, da Microsoft. Este programa possui um passo-a-passo que torna a criação de uma máquina virtual muito fácil. Outro programa do gênero, também bastante utilizado, é o VirtualBox, que possui uma função semelhante.


Estas máquinas virtuais funcionam de maneira muito semelhante à sua máquina física: necessitam de um disco rígido para armazenamento de arquivos, memória RAM e etc. Apesar da necessidade de espaço para armazenar arquivos, não é necessário um HD específico para isso. Você pode criar um disco rígido virtual para isso.

Nenhum comentário:

Postar um comentário