Вы находитесь на странице: 1из 16

Pontifícia Universidade Católica de Minas Gerais – Unidade

Betim
Curso de Sistemas da Informação
Disciplina: Sistemas Operacionais 2º Semestre/2010
Professor: Caio Júlio Martins Veloso
Alunos: Eduardo Matias -
Gabriella Fonseca Ribeiro - 402409

1ª Lista de Exercícios

1. Quais as duas principais funções de um Sistema Operacional?


O sistema operacional tem como função controlar o hardware e
permitir executar os softwares. É também sua função a interface com o
usuário, oferecendo a esse uma interface que possa ser utilizada. O
Windows, por exemplo, tem uma interface que é controlada pelo
EXPLORER. O MacOS X tem uma interface que é controlada pelo Aqua e
pelo FINDER. O Linux tem uma interface gráfica que é controlada pelo X
Window System, mas este ainda depende de gerenciadores de janelas que
o usuário poderá escolher, como o KDE, Gnome, Xfce, Fluxbox, OpenBox,
Enlghtenment, dentre outros.
Assim, o sistema operacional funciona como uma ponte entre o hardware e
o software, possibilitando a comunicação entre ambos e lidando com os
requisitos necessários para que tal comunicação seja efetiva sem que o
usuário necessite saber como ela é feita. Além disso, o sistema operacional
gerencia os recursos do sistema e guarda quem está usando cada recurso,
mediando pedidos conflitantes.

2. O que é multiprogramação? Cite duas razões para se ter


multiprogramação?
Em um sistema de multiprogramação a CPU fica se alternando entre
a execução de vários processos, cada um por dezenas ou centenas de
milisegundos. Através da execução “simultânea” de vários programas, a
multiprogramação torna mais eficiente o aproveitamento dos recursos do
computador, tais como: tempo do processador, espaço de memória,etc. Na

1
realidade a execução é feita de forma concorrente (máquinas
monoprocessadas). Em um sistema multiprogramado vários programas são
mantidos na memória ao mesmo tempo.

3. O que é Spooling?
Spooling é a técnica de escrever dados em um local temporário (no
disco, por exemplo) para que eles possam ser acessados no futuro. É
geralmente utilizado quando dois devices possuem velocidades de
leitura/escrita muito diferentes; assim é possível ajustar a mesma a cada
um deles. O Spooling é útil porque os dispositivos acessam dados em
diferentes velocidades, o buffer provê uma estação de espera onde o dado
pode ficar armazenado enquanto o dispositivo mais lento fica carregando.
O mais comum exemplo de spooling é o da impressora: Como a impressora
é um periférico muito mais lento que o microcomputador, este teria de ficar
esperando a impressão terminar para, então, executar uma nova tarefa.
Para resolver esse problema, a maioria das impressoras tem um buffer, ou
seja, uma memória interna utilizada para armazenar temporariamente os
dados que estão vindo do microcomputador. Com isso, os dados são
transferidos do microcomputador para o buffer, liberando o micro mais
rapidamente. Quanto maior o buffer da impressora, mais cedo esta liberará
o micro.
No entanto, mesmo existindo esse recurso, o tamanho do buffer da
impressora não é o suficiente para armazenar documentos grandes de uma
só vez. Em outras palavras, na impressão de documentos pequenos, o
aplicativo transfere os dados para o buffer da impressora, ficando livre para
executar outra tarefa. No caso de documentos grandes, mesmo com o
buffer, a impressora "prende" a atenção do aplicativo.
A solução adaptada por todos os sistemas operacionais (com exceção
do DOS) chama-se spooler. O aplicativo gera a impressão e transfere os
dados a serem impressos para o spooler, um programa que ficará sendo
executado em segundo plano. Esse programa ficará gerenciando a
impressão, enquanto o aplicativo ficará livre para executar outra tarefa ou
trabalhar com outro documento. É possível, inclusive, fechar o aplicativo
que gerou a impressão.

2
4. Defina as propriedades essenciais dos seguintes tipos de
Sistemas Operacionais:

a. Batch: Os sistemas batch (lote) foram os primeiros sistemas


multiprogramáveis a serem implementados e caracterizam-se por terem
seus programas, quando submetidos, armazenados em disco ou fita, onde
esperam para ser executados seqüencialmente. Normalmente, os
programas, também chamados de jobs, não exigem interação com os
usuários, lendo e gravando dados em discos e fitas. Alguns exemplos de
aplicações originalmente processadas em batch são compilações, link,
edições, sorts, backups e todas aquelas onde não é necessária a interação
com o usuário.

b. Time-Sharing: Os sistemas de tempo compartilhado (time-sharing)


permitem a interação dos usuários com o sistema, basicamente através de
terminais que incluem vídeo, teclado e mouse. Dessa forma, o usuário pode
interagir diretamente com o sistema em cada fase do desenvolvimento de
suas aplicações e, se preciso, modificá-las imediatamente. Devido a esse
tipo de interação, os sistemas de tempo compartilhado também ficaram
conhecidos como sistemas on-line.
Para cada usuário, o sistema operacional aloca uma fatia de tempo
(time-slice) do processador. Caso o programa do usuário não esteja
concluído nesse intervalo de tempo, ele é substituído por um de outro
usuário, e fica esperando por uma nova fatia de tempo. Não só o
processador é compartilhado nesse sistema, mas também a memória e os
periféricos, como discos e impressoras. O sistema cria para o usuário um
ambiente de trabalho próprio, dando a impressão de que todo o sistema
está dedicado, exclusivamente, a ele.
Sistemas de tempo compartilhado são de implementação complexa,
porém, se levado em consideração o tempo de desenvolvimento e
depuração de uma aplicação, aumentam consideravelmente a produtividade
dos seus usuários, reduzindo os custos de utilização do sistema.

c. Tempo-real: Os sistemas de tempo real (real time) são bem


semelhantes em implementação aos sistemas de tempo compartilhado. A

3
maior diferença é o tempo de resposta exigido no processamento das
aplicações. Enquanto em sistemas de tempo compartilhado o tempo de
resposta pode variar sem comprometer as aplicações em execução, nos
sistemas de tempo real os tempos de resposta devem estar dentro de
limites rígidos, que devem ser obedecidos, caso contrário poderão ocorrer
problemas irreparáveis. Não existe ideia de fatia de tempo, um programa
detém o processador o tempo que for necessário, ou até que apareça outro
prioritário em função de sua importância no sistema. Esta importância ou
prioridade de execução é controlada pela própria aplicação e não pelo
sistema operacional, como nos sistemas de tempo compartilhado. Esses
sistemas, normalmente, estão presentes em controle de processos, como
no monitoramento de refinarias de petróleo, controle de tráfego aéreo, de
usinas termelétricas e nucleares, ou em qualquer aplicação onde o tempo
de resposta é fator fundamental.

d. Distribuído: Uma rede de computadores pode ser vista como uma


coleção de processadores que não compartilham memória ou clock. Nela os
processadores comunicam-se entre si por várias linhas de comunicação que
podem ser barramentos ou linhas telefônicas. Estes sistemas são
conhecidos como sistemas fracamente acoplados, loosely coupled systems
ou ainda sistemas distribuídos. Como as linhas de comunicação entre os
processadores não são compostas exclusivamente de barramentos, a
eficiência desta comunicação é menor do que a dos sistemas fortemente
acoplados. Um sistema fracamente acoplado com todos os hosts
executando um mesmo grupo de aplicações é um cluster, onde dois ou mais
servidores são interligados, normalmente, por algum tipo de conexão de
alto desempenho. O usuário não conhece os nomes dos membros do cluster
e nem sabe quantos são. Estes sistemas também são chamados de
Beowulf. Sistemas em cluster são utilizados para serviços de bancos de
dados, garantindo alta disponibilidade, escalabilidade e balanceamento de
carga. Um formato específico de cluster é a computação em grade (grid
computing) onde são utilizados recursos heterogêneos (diferentes
plataformas, arquiteturas de software e hardware e sistemas operacionais),
localizados em diferentes lugares, conectados por redes com padrões
abertos. Graças aos recursos de rede surgiu o conceito de sistema

4
operacional de rede, que fornece métodos de compartilhamento de arquivos
e dispositivos. Eles implementam a troca de mensagens entre diferentes
computadores.

5. Descreva as diferenças entre multiprocessamento simétrico e


assimétrico. Quais as vantagens e desvantagens dos sistemas
multiprocessador?
Na organização assimétrica ou mestre/escravo (master/slave),
somente um processador (mestre) pode executar serviços do sistema
operacional, como, por exemplo, realizar operações de entrada/saída.
Sempre que um processador do tipo escravo precisar realizar uma operação
de entrada/saída terá de requisitar o serviço ao processador mestre.
Dependendo do volume de operações de entrada/saída destinadas aos
processadores escravos, o sistema pode se tornar ineficiente, devido ao
elevado número de interrupções que deverão ser tratadas pelo mestre. Se
o processador falhar, todo o sistema ficará incapaz de continuar o
processamento. Neste caso, o sistema deve ser reconfigurado, fazendo um
dos processadores escravos assumir o papel do mestre. Mesmo sendo uma
organização simples de ser implementada e quase um extensão dos
sistemas multiprogramáveis, esse tipo de sistema não utiliza eficientemente
o hardware, devido à assimetria dos processadores, que não realizam as
mesmas funções.
O multiprocessamento simétrico (Simmetric Multiprocessing- SMP),
ao contrário da organização mestre/escravo, implementa a simetria dos
processadores, ou seja, todos os processadores realizam as mesmas
funções. Apenas algumas poucas funções ficam a cargo de um único
processador, como, por exemplo, a inicialização (boot) do sistema. Como
vários processadores estão utilizando, independentemente, a mesma
memória e o mesmo sistema operacional, é natural a ocorrência de acessos
simultâneos às mesmas áreas de memória. A solução desses conflitos fica a
cargo do hardware e do sistema operacional. No processamento simétrico,
um programa pode ser executado por qualquer processador, inclusive por
vários processadores ao mesmo tempo (paralelismo). Além disso, quando
um processador falha, o sistema continua em funcionamento sem nenhuma
interferência manual, porém com menor capacidade de computação. Os

5
sistemas simétricos são mais poderosos que os assimétricos, permitindo um
melhor balanceamento do processamento e das operações de
entrada/saída, apesar de sua implementação ser bastante complexa.
Nos sistemas monotarefas, apenas uma tarefa é executa por vez, e o
sistema dedica-se para a tarefa sim. Se por um lado é bom ter todos os
recursos à disposição de uma única tarefa, por outro lado perdemos pois
esses recurso passa a ficar muito tempo ociosos e não há recursos de
segurança.
Já nos sistemas de multitarefas, uma série de trabalhos são
executados simultaneamente, compartilhando os recursos existentes na
máquina. Há aumento da produtividade e redução de custos, mas é
necessário definição de rotinas de entrada e saída, gerenciamento de
memória, agendamento de CPU para as tarefas prontas para execução e
alocação de dispositivos, consumindo maior energia e gerando mais calor,
necessitando também de um bom dissipamento do mesmo.

6. O que é uma chamada de sistema (ou interrupção)? Qual é o


uso dessa função?
O usuário (ou aplicação), quando deseja solicitar algum serviço do
sistema, realiza uma chamada a uma de suas rotinas ( ou serviços) através
de system calls (chamadas ao sistema), que são a porta de entrada para se
ter acesso ao núcleo do sistema operacional. Para cada serviço existe uma
system call associada e cada sistema operacional tem o seu próprio
conjunto (biblioteca) de chamadas, com nomes, parâmetros e formas de
ativação específicos.
Através dos parâmetros fornecidos na system call, a solicitação é
processada e uma resposta é retornada à aplicação, em um dos parâmetros
fornecidos na chamada. O mecanismo de ativação e comunicação entre a
aplicação e o sistema é semelhante ao mecanismo implementado quando
um programa modularizado ativa um dos seus procedimentos ou funções.
As system call podem ser divididas em grupos de função:
 Gerência de processos
Criação e eliminação de processos
Alteração das características do processo
Sincronização e comunicação entre processos

6
 Gerência de memória
Alocação e desalocação de memória
 Gerência de entrada/saída
Operações de entrada/saída
Manipulação de arquivos e diretórios

7. Para que tipos de operações o DMA é útil? Quais as


implicações de uma organização sem DMA na multiprogramação?
O DMA (Direct Memory Acess, ou Acesso Direto à Memória) é útil
para operações de Entrada e Saída de Dados. Utilizar um sistema de
multiprogramação sem o DMA causa a impossibilidade de controle das
rotinas de Input/Output fornecidas pelo sistema. Além disso, com o DMA
blocos de dados são transferidos entre o buffer e a memória principal, sem
intervenção da CPU, gerando apenas uma interrupção por bloco, e não uma
interrupção por byte, como nos casos sem a utilização do DMA.

8. Que características de hardware (máquina) são necessárias


para suportar proteção para o kernel do SO ? Explique brevemente
cada característica e como elas permitem o kernel controlar os
programas de usuário.
O Kernel de um sistema operacional é entendido como o seu núcleo.
Ele representa a camada mais baixa de interface com o Hardware, sendo
responsável por gerenciar os recursos do Sistema Operacional como um
todo. É no kernel que estão definidas funções para operação com periféricos
(mouse, disco, impressora, interface serial/interface paralela),
gerenciamento de memória, entre outros. Resumidamente, o kernel é um
conjunto de programas que fornece para os programas de usuário
(aplicativos) uma interface para utilizar os recursos do sistema.
Sistemas Operacionais de 64bits suportam a tecnologia de proteção
ao patch Kernel. Esse mecanismo impede que programas não autorizados
interfiram no kernel do Sistemas. A proteção de patch de Kernel melhora a
confiabilidade do SO, pois ajuda a desabilitar os golpes não documentados e
não suportados de kernel. Esses golpes podem causar problemas de
confiabilidade e desempenho, gerando problemas potenciais de segurança
ao sistema também.

7
O Windows Vista 64 bits, por exemplo, exige que todos os drivers de
modo kernel sejam assinados digitalmente. A assinatura digital fornece
identidade e integridade do código. Um módulo de kernel que esteja
corrompido ou tenha sido submetido à falsificação não será carregado.
Qualquer driver que não esteja devidamente assinado não consegue inserir
o espaço de kernel e irá falhar para ser carregado.

9. O que são processos e quais as vantagens da adoção desse


método?
A unidade básica do software com a qual o sistema operacional
trabalha para organizar as tarefas realizadas pelo processador é
representada pelo processo ou thread, dependendo do sistema operacional.
Podemos até pensar em um processo como um aplicativo, mas isso
dá uma ideia incompleta de como os processos se relacionam com o
sistema operacional e com o hardware. O aplicativo que vemos é de fato
um processo. Porém, os aplicativos podem ativar outros processos para se
comunicarem com outros dispositivos ou computadores. Também existe
uma série de processos que são executados sem que você perceba. O
Windows e o UNIX podem executar, em background, dezenas de processos
para lidar com a rede, gerenciar a memória e o disco rígido, verificar vírus
etc.
Em resumo, um processo é um software que executa ações e pode
ser controlado pelo usuário, por outros aplicativos ou pelo sistema
operacional.
São os processos, e não os aplicativos, que o sistema operacional
controla e faz sua escala para que a CPU os execute. Em um sistema
monotarefa, este trabalho é bastante simples. O sistema operacional
permite que o aplicativo seja iniciado, suspendendo sua execução somente
para tratar as interrupções e inserções do usuário.

10. Como o sistema operacional trata um processo?


Um processo é a unidade básica de execução em um SO. Diferentes
processos podem executar várias instâncias do mesmo programa. A
execução de um processo requer, no mínimo, os seguintes recursos do
Sistema Operacional:

8
 Memória para conter o código e dados do programa;
 Um conjunto de registradores para suportar a execução.
O SO é responsável pelas seguintes atividades com relação a
gerência de processos:
• Criação e deleção de Processos.
• Suspensão e retomada de processos.
• Fornecimento de mecanismos para:
• sincronização de processo
• comunicação de processo
São utilizados algoritmos para determinar qual processo será
executado em determinado momento e por quanto tempo.
Além disso, os processos podem comunicar-se, isto é conhecido como
IPC (Inter-Process Communication). Os mecanismos geralmente utilizados
são:
 sinais;
 pipes;
 named pipes;
 memória compartilhada;
 soquetes (sockets);
 trocas de mensagens.
O sistema operacional, normalmente, deve possibilitar o
multiprocessamento (SMP ou NUMA). Neste caso, processos diferentes e
threads podem ser executados em diferentes processadores. Para essa
tarefa, ele deve ser reentrante e interrompível, o que significa que pode ser
interrompido no meio da execução de uma tarefa.

Figura 01: Tratamento de Processos

9
11. Quais os atributos são usualmente atribuídos a um processo
para que o mesmo possa ser controlado pelo sistema operacional?
Todas as informações necessárias para controlar a mudança dos
processos são armazenadas num pacote de dados chamado de bloco de
controle de processo, que contém:
 um número ID que identifica o processo;
 ponteiros para as localizações do programa e seus dados quando o
último processamento ocorreu;
 conteúdo dos registradores;
 estado de vários flags e switches;
 ponteiros para os limites superior e inferior da memória requisitada
para o processo;
 uma lista de arquivos abertos pelo processo;
 a prioridade do processo;
 o status de todos os dispositivos de entrada/saída requisitados pelo
processo.

12. Quais os estados de um processo e suas possíveis transições


de estados?
Cada processo tem um status associado a ele. Muitos processos não
consomem tempo da CPU até que recebam algum tipo de comando. O
processo pode estar, por exemplo, esperando que o usuário aperte alguma
tecla, enquanto ele espera, a CPU não é utilizada. Neste momento, o
processo está "suspenso". Quando o usuário aperta a tecla, o sistema
operacional muda o status do processo. Quando o status do processo muda
de "pendente" para "ativo" ou de "suspenso" para "em execução", as
informações no bloco de controle de processo devem ser usadas, assim
como os dados de programa, para direcionar a execução da alternância de
tarefas do sistema operacional. Essa troca de processo acontece sem a
interferência direta do usuário e cada processo consegue ciclos de CPU
suficientes para realizar suas tarefas em um período razoável de tempo.

Os estados comuns de um processo são:

 Novo: O processo está sendo criado


 Executando: As instruções estão sendo executadas
 Esperando: O processo está esperando que ocorra algum evento
 Pronto: O processo está esperando para ser atribuído a um
processador
 Terminado: O processo terminou sua execução

10
Figura 02: Estados de Um Processo

13. Considere o diagrama de transição entre estados do processo


no caso de cinco estados (Novo, Pronto, Rodando, Bloqueado,
Terminado). Por que não há uma transição do estado Bloqueado
para o estado Rodando?
Assim que um processo sai do status Bloqueado ou Esperando, por
exemplo, ele deve entrar na fila dos processos com o status Pronto. O
Sistema Operacional gerencia essa fila conforme prioridade e outras
heurísticas para assim decidir quem será o próximo processo a ser definido
com Rodando. Um processo só terá seu status definido como Rodando se
imediatamente antes teve seu status definido como Pronto.

14. O que significa o termo “árvore de processos”?


Os processos pai criam processos filhos, que, por sua vez, criam
outros processos, formando uma então uma árvore de processos. Esta
criação é feita por chamadas de sistema.
Um processo filho pode receber recursos diretamente do sistema
operacional, obter um subconjunto dos recursos do processo pai ou mesmo
compartilhar todos os recursos do processo pai. Dados de inicialização
podem ser passados do processo pai para o processo filho. Ao criar um
processo filho o processo pai pode continuar a executar concorrentemente
com o processo filho ou esperar até que alguns ou todos os processos filhos
tenham terminado. O espaço de endereçamento do processo filho pode ser
uma duplicata do processo pai ou ter um programa carregado para ele.

11
Figura 03: Exemplo de uma Árvore de Processos

15. Que eventos podem motivar a criação ou finalização de um


processo?
Processos são criados e eliminados por motivos diversos; A criação de
um processo ocorre quando o sistema operacional adiciona um novo PCB
(Process Control Block - ou Bloco de Controle de Processos) à sua estrutura
e aloca um espaço de endereçamento na memória para seu uso. Como foi
dito, um processo pode ser criado por diversos motivos, dentre os quais os
mais comuns são:
 Logon interativo: estabelecimento de uma sessão interativa do
usuário através de um terminal;
 Criação por um outro processo: um processo que já existe pode
criar outros processos, sendo estes novos processos
independentes ou subprocessos;
 Criação pelo sistema operacional: O SO pode criar novos
processos a fim de oferecer algum tipo de serviço.
No caso da eliminação de um processo, todos os recursos associados
ao processo são desalocados e o PCB eliminado pelo sistema operacional.
Da mesma forma, algumas das principais razões para a finalização de um
processo são:
 Término normal de execução;
 Eliminação por outro processo;

12
 Eliminação forçada por ausência de recursos do sistema.

16. Como ocorre a execução de múltiplos processos em um


sistema de computação?
Um processo ocupa certa quantidade de memória RAM. Ele também
utiliza os registradores, pilhas e filas da CPU e memória do sistema
operacional. Quando dois processos acontecem “ao mesmo tempo”, o
sistema operacional aloca certa quantidade de ciclos da CPU para um
programa. Depois que os ciclos são executados, o sistema operacional faz
uma cópia de todos os registradores, pilhas e filas utilizados pelos processos
e registra o ponto em que a execução foi interrompida. Ele então carrega
todos os registradores, pilhas e filas utilizados pelo segundo processo e
aloca outra quantidade de ciclos de CPU para ele. Quando os ciclos
terminam, o sistema operacional copia todos os registradores, pilhas e filas
utilizadas pelo segundo programa e carrega o primeiro programa.

17. Um computador tem: memória cache, memória principal e um


disco usado para memória virtual. Se uma palavra procurada estiver
na cache serão necessários 20 ns para acessá-la. Se essa palavra
estiver na memória principal, mas não na cache, serão precisos 60
ns para carregá-la na cache, seguidos de 20 ns para ler a palavra na
cache. Se a palavra não estiver na memória principal, são precisos
12 ms para buscar a palavra no disco, seguidos por 60 ns para
copiá-la na cache, e depois 20 ns para ler a palavra. A razão de
ocorrência na cache é de 0.9 e a razão de ocorrência na memória
principal é de 0.6. Qual o tempo médio (em ns) para acesso a uma
palavra procurada neste sistema?
Considerando que 12ms = 12 *10^6 ns; que em 90% dos casos, a
palavra é encontrada na cache e que nos 10% de casos restantes, em 60%
desses a palavra é encontrada na memória principal e somente em 40% é
necessária a busca em disco, temos a equação abaixo que nos dá uma
média de 480.021,6 ns como tempo de acesso.

(0,9 * 20) + (0,1 * ((0,6 * 60) + (0,4 * 12 * (10^6)))) = 480 021,6

13
18. Considere o código em C abaixo sobre o uso da instrução
fork(). Descreva o funcionamento do código. Rodando esse código,
quantos processos são gerados?

int main()
{
int pid;
int pid2;
int i;
pid = getpid();
printf("PID = %4d \n", pid);
for (i=0; i<3; ++i)
{
pid = getpid();
printf("i = %4d, PID = %4d \n", i, pid);
pid2=fork();
if (pid2 != 0) printf("I am the parent %4d, i = %4d \n", pid2, i);
if (pid2 == 0) printf("I am a child %4d, i = %4d \n", pid2, i);
sleep(5);

A instrução “fork()” cria um novo processo filho a partir do comando


do processo pai. A instrução “getpid()” pega o id do processo.
O programa acima cria uma estrutura de repetição que roda três
vezes; em cada uma dessa três repetições é criado um novo processo filho
através da instrução “fork()”, exibindo uma mensagem ao usuário que é
condicionada ao estado do processo (Se ele é pai ou filho). O comando
“sleep(5)” faz com que o processo seja adormecido a cada cinco segundos.

14
Bibliografia

COUSTAN, Dave e FRANKLIN, Curt . Como funcionam os sistemas


operacionais. http://informatica.hsw.uol.com.br/ - Acessado em 2 de
Setembro de 2010

BARRETO, Fabio. Introdução aos Sistemas Operacionais.


http://www.fabiobarreto.com.br/ - Acessado em 3 de Setembro de 2010

BARRETO, Fabio. Processos – Como Funcionam.


http://www.fabiobarreto.com.br/ - Acessado em 3 de Setembro de 2010

MACHADO, Francis Berenger e MAIA, Luiz Paulo. Arquitetura de


Sistemas Operacionais, 2a. edição. Ed. LTC, 1997.

OLIVEIRA, R. S.; CARISSIMI, A. S. e TOSCANI, S. S. Sistemas


Operacionais. Sagra Luzzatto, Porto Alegre, 2001.

TETERA, Eduardo. Diferenças entre Windows 32 e 64 bits – O Kernel.


http://teteraconsultoria.com.br . Acessado em 12 de Setembro de 2010.

ZANINI, Alessandro. Sistemas Operacionais. http://www.unisul.rct-


sc.br/so1 . Acessado em 2 de Setembro de 2010.

__ . O que é Batch . http://perfecthacker.forumeiros.com . Acessado


em 8 de Setembro de 2010.

__. Sistemas Operacionais.


http://cemshost.com.br/bcc/w/P%C3%A1gina_principal . Acessado em 4 de
Setembro de 2010.

15
16

Вам также может понравиться