Gustavo Vedotti

Questões que deveríamos saber

Posted in .net, development by agvedotti on 11/19/2008

 

Mesmo sendo meu primeiro post, deixarei de lado as apresentações e iniciações e mãos na massa! Este post faz parte de uma sequência de aproximandamente sete, que pretendo escrever semanalmente, todos fazendo referência a um artigo um tanto quanto antigo do Scott Hanselman, de 2005. O artigo fala sobre algumas perguntas “básicas” que um bom profissional na área de desenvolvimento de software deveria saber.

1 – Everyone who writes code

Describe the difference between a Thread and a Process?

Um processo nada mais é do que um ambiente (armazenando recursos) para a execução de um programa.

Mais especificamente, um processo contém as seguintes informações:

  • Um private virtual address space, que é uma série de endereços virtuais de memória que o processo pode usar;
  • Um executável, representando o código inicial mapeado para o endereço virtual do processo;
  • Uma lista de recursos do sistema, acessíveis a todas a threads do processo;
  • Um contexto de segurança chamado access token que identifica o usuário, grupos de segurança e privilégios;
  • Um identificador único chamado PID (process ID);
  • Pelo menos uma thread de execução.

Já as threads (ou segmenos, como alguns livros traduzem, argh!) são as entidades que o Windows agenda para execução. Como citado acima, os processos precisam ter pelo menos uma thread de execução. Do contrário, os processos não irão executar nada!

Uma thread inclui os componentes listados abaixo:

  • Uma série de registros representando o estado no processador;
  • Dois stacks, um para excução enquanto estiver em kernel mode e outro enquanto estiver em user mode;
  • Uma área de armazenagem local chamada de TLS (thread-local storage);
  • Um identificador único chamado Thread ID;
  • Algumas vezes contém o próprio contexto de segurança, principalmente em aplicações multithreaded. (André Nobre, 2008)

What is a Windows Service and how does its lifecycle differ from a “standard” EXE?

É uma aplicação de longa execução que roda em sua própria sessão do Windows, não possuem interface e nem gera uma saída visual, ideal para ser utilida em servidores. Pode ser executada com um contexto de segurança diferente do usuário que está “logado” na máquina.

Seu ciclo de vida é controlado pelo “Service Control Manager“, onde se pode suspender, pausar ou iniciar sua execução.


What is the maximum amount of memory any single process on Windows can address? Is this different than the maximum virtual memory for the system? How would this affect a system design?

Virtual Memory funciona mais ou menos como uma visão simplificada da memória física. Um processo enxerga apenas o seu private virtual address space, de uma maneira linear e organizada. O gerenciador de memória então é o responsável por mapear estes endereços de memória para os endereços físicos de maneira correta.

memoria

Mapeamento de memória virtual (esq.) para física (dir.)

A capacidade da memória virtual varia de acordo com a plataforma de hardware. Se fizermos a conta, plataformas 32-bit podem alocar no máximo 4Gb (2^32). Por padrão, o Windows aloca metade deste espaço para utilização do sistema operacional. Portanto, a outra metade apenas é utilizada para outros processos.

E claro, como quase tudo, temos uma saída para mudar estes valores. Em alguns casos, 2 Gb para o sistema operacional pode parecer muito. É possível então especificar o valor de 1Gb para o sistema operacional e 3 Gb para processos, através configuração do boot (Boot.ini). Existe ainda uma outra opção, Address Windowing Extesions, que permite que aplicações 32-bit utilizem 64Gb de memória física em 2Gb de espaço de endereço virtual. (André Nobre, 2008).


What is the difference between an EXE and a DLL?

Fundamentalmente são a mesma coisa, um conjunto de instruções/funções criadas para efetuar operações, a diferença está em como o Windows interage sobre eles.

  • DLL (Dynamic Link Library) – Quando o Windows carrega uma DLL, ela fica a espera de ser referenciada e usada por uma aplicação (por exemplo um EXE).
  • EXE (Extensible Execute File) – Possui um ponto de entrada (por exemplo o main()) que inicia sua execução, criando um processo onde funções contidas em DLLs podem ser utilizadas.


What is strong-typing versus weak-typing? Which is preferred? Why?

Nas lingaugens do tipo strong-typing (C#, Java) as conversões, ou castings, devem ser feitas explicitamente, caso contrário ocorrerá um erro na compilação. Por exemplo:

string valor = 10.ToString();
string valor = 10; //Ocorrerá um erro de compilação

Já em linguagens do tipo weak-typing (Pearl), as conversões são feitas implícitamente. O segundo exemplo acima não iria causar erro.

Em questão de preferência vai muito do gosto da pessoa, eu prefiro as strong-typing pelos seguintes motivos:

  • Trabalho com C# :)
  • Em questão de desempenho, podemos ter um certo ganho se pensarmos que o trabalho de analisar se a conversão será possível ou não ficará com o programa no momento da execução.
  • E evitar possíveis erros de conversão que podem acontecer no momento da execução

Corillian’s product is a “Component Container.” Name at least 3 component containers that ship now with the Windows Server Family.

Primeiramente o que é Component Container:

  • Containers provide services to components that execute within the container “execution space”.
  • Containers may provide network addressability to a component. i.e. transform a component into a service.
  • Containers may help the component enable one or more service endpoints that define the protocol, transport and format.
  • Containers may provide an platform abstraction.
  • Containers may also provide invocation management to components that live within or without the container execution space. (Really important as we will see in the weeks ahead)
  • Containers may be able to interact with other containers in a wide variety of “quality attribute” use cases like availiability (Only Indigo, s.d.)

Tanto ASP.NET Web Forms quanto rich clien Windows Forms são component containers visuais.


What is a PID? How is it useful when troubleshooting a system?

Each process running in Microsoft Windows is assigned a unique decimal number called the process ID, or PID. This number is used to specify the process when attaching a debugger to it. (MSDN, s.d.)

Outra utilização é com a ferramenta WinDBG, em certos momentos podemos utilizar o PID para identificar um certo processo.

 
Gerenciador de tarefas/Processos


How many processes can listen on a single TCP/IP port?

Apenas um processo, é um pra um. A porta TC/IP suporta apenas um listen, e um listen é usado por um processo.


What is the GAC? What problem does it solve?

Qualquer computador que possua o commom language runtime (CLR) instalado possui uma área de armazenamento de código chamada global assembly cache, que é utilizada especificamente para compartilhar assemblies entre aplicações.

Motivos para armazenar assemblies no global assembly cache:

  • Localização compartilhada – Assemblies que podem ser usados entre diversas aplicações. Exemplo, os assemblies do System.*
  • Segurança – Normalmente administradores protegem o diretório WINNT, local onde o global assembly cache fica (C:\Windows\assembly), usando o Access Control List (ACL) para controle de acesso de escrita e execução.
  • Versionamento paralelo – Pode-se manter no global assembly cache várias cópias de um assembly com o mesmo nome mas diferente versão.
  • Localização adicional – O commom language runtime verifica primeiramente o global assembly cache por um assembly que foi requisitado antes de usar um arquivo físico referenciado.

image 
Localização do GAC

Até a próxima e um abraço pro gaiteiro.


Gustavo Vedotti

Advertisements
Tagged with: ,

One Response

Subscribe to comments with RSS.

  1. Andre Nobre said, on 11/20/2008 at 12:03 PM

    Ótimo Gustavo, agora é só não parar! Começou muito bem, parabéns!

    Abraços.


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: