Raphael Lorenzeto

Visual Basic | .Net Framework | Windows Presentation Foundation | and stuff

Como compartilhar a sua conexão Claro 3G / Vivo Zap

fazer um comentário »

Post sedido ao: Jornal Pelicano.

“Eu instalei 4GB de RAM no meu computador mas o Windows só reconhece 3GB”

fazer um comentário »

Há algumas semanas atrás um amigo comprou um novo tabletpc da HP com um processador Turion 64 e o Windows Vista 32-bit e instalou 4GB de memória RAM. Quando ele viu que a BIOS reconhecia 4GB mas o Windows só enxergava 3.1GB ele me pediu ajuda.

Parece haver grande confusão no que é conhecido como “limite de 4GB de memória do Windows”, a maior parte das pessoas normalmente dizem que um aplicativo de 32-bit do Windows pode acessar apenas 4GB de memória, mas não é bem assim, na verdade, é mais ou menos…

O problema

Por definição, um processador de 32-bit usa 32 bits para referenciar cada byte da memória. O espaço de endereçamento de 32 bits pode referenciar no máximo 4.2 bilhões de pontos únicos (2^32=4.2 bilhões, 4GB). Se o Windows usa um espaço de 32 bits e se o processador da máquina é de 32 bits, por que então ele não reconhece 4GB?

Vários dispositivos em um computador requerem acesso à memória para poderem ser comunicar com o Windows. Isso é conhecido como “Memory-Mapped I/O” ou MMIO. Devido a uma decisão tomada há um bom tempo, durante a elaboração da arquitetura do sistema, para que o espaço de endereçamento do MMIO esteja disponível aos aplicativos, ele precisa estar contido dentro dos 4GB de espaço endereçável, o que é conhecido como “Memory Mapped I/O Reservations”.

Por exemplo, se você tem uma placa de vídeo com 256MB de memória onboard, essa memória precisa estar mapeada dentro dos 4GB disponíveis para endereçamento. Se o computador possui 4GB de memória instalada, parte desse espaço não poderá ser acessado por já ter sido reservado para o mapeamento da memória da placa de vídeo. O Windows não usará a memória RAM para armazenar as texturas e os objetos tridimensionais, ele usará a memória onboard da placa, o MMIO é só a forma que o Windows tem de se comunicar com o hardware. O mapeamento da memória da placa de vídeo e de outros componentes do hardware (placa de captura de TV, portas USB, placas de som…) precedem o mapeamento da memória RAM instalada, sendo assim, tais condições reduzem a quantidade total de memória que fica disponível para o sistema operacional.

A redução da quantidade de memória disponível depende dos dispositivos instalados, entretanto, para evitar possíveis problemas de incompatibilidade de hardware, as versões de 32-bit do Windows Vista limitam o total de memória disponível em 3.12GB.

Contudo, se o computador em questão possuir muitos dispositivos instalados a quantidade de memória disponível pode ser reduzida para 3GB ou menos.

Para explicar melhor o problema é necessário saber o que é e como funciona a virtualização de memória.

Virtualização de Memória

No Windows de 32bits, cada programa tem 4GB de memória “virtual”. Isso significa que do ponto de vista do processo, ele possui 4GB de memória plana e limpa para usar e o Memory Management Unit (Unidade de Gerenciamento de Memória) ou MMU reserva a memória instalada conforme os aplicativos forem necessitando, gerencia que aplicativo está usando qual parte da memória e o arquivo de paginação. Quando um processo referencia um ponto na memória virtual, tal ponto precisa ser “traduzido” para a memória real para que então o processador realize a operação desejada. Tal processo é conhecido como “Page translations”.

Dentro do espaço de 4GB de cada processo, 2GB são dedicados para uso do Kernel e os 2GB restantes são para uso do aplicativo. Cada processo recebe 2GB só para si, mas todos compartilham os mesmos 2GB reservados para o Kernel.

Não se confunda: Adicionar mais de 4GB não muda o fato de ser um sistema de 32 bits acessando um espaço de memória de 32 bits. Mesmo que mais de 4GB de memória estejam presentes, cada processo continuará a receber seus 2GB privados e seus 2GB compartilhados com o Kernel, como em todo sistema que não suporte a extensão do espaço de endereçamento físico.

Então o que pode ser feito?

Para que o Windows Vista utilize 4GB de memória em um computador com 4GB de memória instalada, a primeira coisa que é necessário fazer é trocar a versão do sistema de 32-bit para 64-bit, por que como foi dito antes, não importa o que você faça, as versões de 32-bit do Windows Vista não reconhecerão mais que 3.12GB.

Se o Windows Vista 64-bit já estiver sendo usado, então o problema não está no sistema operacional e sim no hardware.

O seu processador precisa suportar o conjunto de instruções x64, incluído nos processadores Intel EM64T e AMD64. Esse novo conjunto conta com um espaço de endereçamento de 40 bits, que é muita coisa comparado com os conjuntos anteriores, que limitavam seus espaços de endereçamento à 36 ou até 32 bits.

Outro ponto decisivo é a capacidade que o seu chipset possui de mapear memória acima de 4GB. A grande maioria dos chipsets feitos para desktops e portatéis a venda hoje no país aparentemente não oferecem esse suporte (o que com certeza mudará com o tempo). Alguns chipsets que oferecem suporte são: Intel 975X, P965, 955X (com soquete 755) ou os que suportam processadores da AMD que usam os soquetes 940, 939 ou AM2.

Quer saber mais a respeito?

http://support.microsoft.com/kb/929605/en-us
http://www.brianmadden.com/content/article/The-4GB-Windows-Memory-Limit-What-does-it-really-mean-
http://blogs.msdn.com/hiltonl/archive/2007/04/13/the-3gb-not-4gb-ram-problem.aspx

Até a próxima!

Lorenzeto

Escrito por raphaabreu

Janeiro 7, 2008 em 11:48 pm

Publicado em Hardware, Windows

Etiquetado com , ,

NotSupportedException, NotImplementedException e a Task List

fazer um comentário »

Para os que já viram as duas classes, a diferença entre elas é algo um tanto confuso:

A NotSupportedException deve ser usada quando uma classe não suporta determinado método definido na classe-base ou em uma interface e é obrigado a implementar. Esse “não-suporte” tem que ser de certa forma planejado, quero dizer, a classe não deve suportar tal procedimento por definição. Em algum ponto do planejamento isso teve que ser pensado e tiveram que chegar à conclusão de que “não, não podemos suportar essa funcionalidade ou não tem como executar tal tarefa“.

Pegue por exemplo a classe ArrayList (em System.Collections): Ela é uma lista normal, pode adicionar ou remover elementos e faz o que listas fazem, mas pode ser que você queira impedir alterações a partir de um determinado momento. Para tal, pode-se usar a função ArrayList.ReadOnly(list As ArrayList) As ArrayList, que pega uma lista normal e a torna somente leitura. A partir de agora, a lista vai invocar a NotSupportedException nos métodos que tentarem a modificar, como Add e Remove.

Um outro exemplo, melhor inclusive, é o do System.IO.Stream. Pelo menos umas 20 classes derivam de Stream, mas poucas são as que suportam o posicionamento arbitrário do cursor de leitura, quero dizer: Ao usar o FileStream, você pode ler os 100 primeiros bytes, em seguida pular para os 400 últimos e depois ir para o meio do arquivo, já ao usar o NetworkStream você é obrigado a ler (ou escrever) em seqüência. Você não pode “pular” ou “seek” para outro ponto do stream e se você tentar, a classe vai invocar a NotSupportedException.

Já a NotImplementedException tem outro propósito. Essa exception deve ser invocada quando determinada parte do código ainda não tiver sido escrita mas com certeza será porquê o objeto tem que suportar tal função por definição.

Quando você cria uma nova classe e coloca as interfaces de primeira, o “Implements IList” por exemplo, o VS cria todos os procedimentos em branco. Você pode codificar os que você vai precisar usar de imediato e colocar nos outros:

Throw New NotImplementedException()

Assim durante o desenvolvimento da aplicação, quando tal método for por acaso acessado será notado que ele ainda não foi implementado, mas espera-se que seja antes da versão final. Você pode pensar “Ah, deixar em branco é mais fácil”. Sim, de fato é, mas se nenhum artifício for usado, o método poderá acabar ficando para sempre em branco, o que pode gerar algum tipo de anomalia no teu aplicativo, já que se a classe implementa uma interface, espera-se que ela implemente tudo que a interface define.

Uma boa idéia para versões futuras do VS é dar à NotImplementedException o mesmo tratamento dos comentários iniciados por “TODO”. O Visual Studio 2002 introduziu a “Task List” embutida e dinâmica. Quando você inicia uma linha de comentário com “TODO”, uma nova tarefa é adicionada à Task List contendo o arquivo e o número da linha. Exemplo:

Public Overrides Function ToString() as String
	'TODO: ToString
	Return String.Empty
End Function

Existem outros prefixos que também podem ser usados por padrão no VS, são eles:

'HACK: Na verdade nunca usei esse.
 'UNDONE: Vai fazer a pausa para o almoço? 'Marque a linha na qual está trabalhando. 'UnresolvedMergeConflict: Esse é usado quando o VS converte um 'projeto de uma versão anterior e encontra um problema que 'não pode ser resolvido automaticamente.

Outra coisa legal é que você pode criar os seus próprios “marcadores”. Na janela de opções do Visual Studio, em Environment > Task List você pode criar novos “Tokens”, atribuindo inclusive a prioridade que cada um possui.

Agora, 10 pontos para quem souber me dizer se o correto seria “A NotSupportedException” ou “O NotSupportedException”. Classes têm gênero masculino/feminino?? :-)

RLA.

Escrito por raphaabreu

Janeiro 7, 2008 em 12:00 pm

Apresentação

fazer um comentário »

Olá pessoal,

[risos](“Que pessoal”, eu penso… Bom, no momento eu acretido que seja o único no mundo que sabe da existência desse blog.).

O post inaugural será apenas uma apresentação: Eu sou Raphael Lorenzeto de Abreu, programador e amante de tecnologia e vou publicar aqui as experiências que eu tiver no desenvolver aplicativos nas mais diversas linguagens, incluindo códigos fonte e referências, além de curiosidades e notícias relacionadas a tecnologia, programação e desenvolvimento.

Vocês podem esperar de tudo: de posts relacionados ao Windows Presentation Foundation à programação para calculadoras da HP.

Sejam bem-vindos e não se esqueçam de deixar um comentário antes de sair, eu realmente agradeço.

Lorenzeto.

Escrito por raphaabreu

Janeiro 7, 2008 em 10:24 am