|
23/02/99: |
Apresentação. Plano do curso. Arquitetura dos microprocessadores
x86 (386/486/586) da Intel. |
|
25/02/99: |
Bytes, words e doublewords na memória do x86: o esquema "little
endian" (byte menos significativo primeiro). Memória linear
versus memória segmentada. Programa "hello, world" para o NASM. A
pilha do x86. Instruções push , pop ,
call e ret . |
|
02/03/99: |
Chamadas diretas ao Linux: outra versão do programa
"hello, world". Uso de equ e $ : mais uma versão do "hello,
world". Seções de um programa: código (.text ),
dados inicializados (.data ) e dados não
inicializados (.bss ). Diretivas db ,
dw , dd , resb ,
resw e resd . Acesso a variáveis na
memória: rótulos de variáveis, uso do operador [
] . Instruções de comparação (cmp ), desvio
condicional (jne , ...) e desvio incondicional
(jmp ). Programa
que soma uma seqüência de inteiros. |
|
09/03/99: |
Análise de uma listagem
gerada pelo NASM. Introdução à relocação de código: acerto de
endereços em tempo de link e em tempo de carga. Classificação
dos operandos de instruções: registrador, imediato, direto,
indireto via registrador, indexado (com ou sem fator de
escala). |
|
11/03/99: |
Passagem de parâmetros na pilha: como a rotina chamada acessa
os parâmetros empilhados. Exemplo: o módulo syscalls.asm. Variáveis
alocadas na pilha. Recursão em linguagem de montagem. Exemplo:
torres de Hanoi. |
|
16/03/99: |
Comentários finais sobre passagem de parâmetros e alocação de
variáveis na pilha. Observações sobre o primeiro EP. Números
inteiros com sinal: representação em complemento de
dois. Significado dos flags de "carry" (CF) e de "overflow"
(OF) do x86. |
|
18/03/99: |
Instruções de desvio condicional: o que elas realmente fazem
(que flags elas testam) e como usá-las após comparações de
números com sinal e sem sinal. Conversão (alargamento) de tipos
por extensão de sinal ("sign-extension"). Deslocamentos para a
direita: shr (números sem sinal) e
sar (números com sinal). |
|
23/03/99: |
Arquivos no Linux: seqüências de bytes. System calls para
manipulação de arquivos: open , read ,
write , lseek , close ,
fsync . Organização física de um disco: cilindros,
faces, trilhas e setores. O conceito de "arquivo" como uma abstração
que o S.O. constrói sobre o disco físico. Importância dos buffers de
entrada e saída. Conversa inicial sobre o projeto do curso. |
|
25/03/99: |
Gerenciamento de buffers. Discussão sobre a primeira etapa do
projeto do curso. |
|
06/04/99: |
Ainda sobre manipulação de arquivos no Linux: o file descriptor
como um índice para a tabela de arquivos abertos do
processo. Bufferização no ambiente Unix/Linux: a bufferização
feita pelo sistema operacional (para economizar acessos a disco)
e a feita pela libc (para economizar chamadas ao
sistema). Níveis de privilégio numa CPU protegida: modo sistema
(mais privilegiado) e modo usuário (menos privilégio). Custo
relativamente alto de chamadas a um S.O. protegido (como o Linux
ou o Windows NT).
|
|
08/04/99: |
Modularização de código em C: arquivos-fonte compilados
separadamente, uso de static para esconder
variáveis ou funções internas a um módulo, uso de header files
(arquivos .h ) com protótipos das funções exportadas
pelo módulo e (mais raramente) com declarações de variáveis
exportadas pelo módulo. Modularização de código em Java: a
"unidade de modularização" é a classe. (Em C é o arquivo.)
Significado de static em Java: campos de instância
versus variáveis de classe (static ), métodos de
instância versus métodos de classe. |
|
13/04/99: |
Resolução de dúvidas sobre a primeira etapa do projeto do
curso. |
|
15/04/99: |
Resolução de mais dúvidas sobre a primeira etapa do projeto do
curso. |
|
20/04/99: |
Revisão: módulos montados ou compilados separadamente; ligação
de módulos (link); modularização de programas em C; manipulação
de arquivos via chamadas ao sistema e manipulação de arquivos
via funções de biblioteca. |
|
22/04/99: |
Primeira prova. |
|
27/04/99: |
Iniciação de variáveis de classe em Java; blocos de
inicialização estáticos. O programa
make . |
|
29/04/99: |
Recomendações sobre a entrega do EP2. O programa
tar . Interfaces em Java. |
|
04/05/99: |
A segunda etapa do projeto do curso: o gerenciador de arquivos
do JBase, API do JBase. |
|
06/05/99: |
Conceitos sobre organização de discos: formatação física e
formatação lógica, alocação de blocos a arquivos, diretório de
arquivos. Heapfiles orientados para registros: formato de
página, diretório dos slots numa página, implementação de um
heapfile como lista ligada de páginas ou como diretório de
páginas. Analogias na segunda etapa do projeto do curso:
DBFile <-> disco sem formatação lógica,
Database <-> disco formatado logicamente,
RecordSet s num Database <-> arquivos
num disco. |
|
13/05/99: |
Herança de classes em Java. |
|
18/05/99: |
Resolução de dúvidas sobre a segunda etapa do projeto do
curso. |
|
20/05/99: |
Resolução de dúvidas sobre a segunda etapa do projeto do
curso. |
|
25/05/99: |
Exceções: motivação (comparação com códigos de erros) e
implementação (como desvios não locais que "abaixam" a pilha de
execução). Exceções em Java. Desvios não locais em C
(funções setjmp e longjmp ). O programa
grep . |