Buscar

Revisão de C e Guia utilização do MINIX

Prévia do material em texto

Sistemas Operacionais 
Revisão de C e 
Guia para utilização do MINIX 3 
Prof. Sílvio Fernandes 
UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO 
DEPARTAMENTO DE CIÊNCIAS EXATAS E NATURAIS 
CURSO DE CIÊNCIA DA COMPUTAÇÃO 
Revisão de C 
 O desenvolvimento inicial de C ocorreu no 
AT&T Bell Labs entre 1969 e 1973 
 Não se sabe se o nome "C" foi dado à 
linguagem porque muitas de suas 
características derivaram da linguagem B 
 ou porque "C" é a segunda letra do nome da 
linguagem BCPL, da qual derivou-se a 
linguagem B. 
2 
Revisão de C 
3 
 Ken Thompson e Dennis Ritchie (da esquerda 
para direita), os criadores das linguagens B e C, 
respectivamente. 
Revisão de C 
4 
 Visão Geral de um Programa C 
Revisão de C 
5 
 Sintaxe 
 Relacionada a tipos, as declarações, as funções e as 
expressões. 
 Identificadores 
 São nomes usados para se fazer referência a 
variáveis, funções, rótulos e vários outros objetos 
definidos pelo usuário 
 int x; /*é diferente de int X;*/ 
Revisão de C 
6 
 Tipos 
 
Revisão de C 
7 
 Funções da biblioteca padrão C 
 Função printf() 
 Sintaxe: 
 printf("expressão de controle",argumentos); 
 Cada argumento deve ser separado por vírgula. 
Revisão de C 
8 
 Funções da biblioteca padrão C 
 Função printf() 
 Ex: 
 
 
 
 
 Saída: 
main(){ 
printf("Este é o numero dois: %d",2); 
printf("%s está a %d milhões de milhas\ndo sol","Vênus",67); 
} 
Este é o numero dois 2 Vênus está a 67 milhões de milhas 
do sol 
Revisão de C 
9 
 Funções da biblioteca padrão C 
 Função scanf() 
 Sintaxe: 
 scanf("expressão de controle", argumentos); 
 A lista de argumentos deve consistir nos endereços 
das variáveis 
 símbolo "&" retorna o endereço do operando 
main(){ 
int num; 
printf("Digite um número: "); 
scanf("%d",&num); 
printf("\no número é %d",num); 
printf("\no endereço e %u",&num); 
} 
Revisão de C 
10 
 Funções da biblioteca padrão C 
 Função getchar() 
 armazena a entrada até que ENTER seja pressionada 
main(){ 
char ch; 
ch=getchar(); 
printf("%c\n,ch); 
} 
Revisão de C 
11 
 Funções da biblioteca padrão C 
 Função putchar() 
 Escreve na tela o argumento de seu caractere na posição 
corrente 
 
 
 
 
 
 
 Há inumeras outras funções de manipulação de char: 
 isalpha(), isupper(), islower(), isdigit(), isespace(), toupper(), 
tolower(). 
main(){ 
char ch; 
printf("digite uma letra minúscula : "); 
ch=getchar(); 
putchar(toupper(ch)); 
putchar('\n'); 
} 
Revisão de C 
12 
 Operadores 
 Atribuição 
 “=“ 
 Aritméticos 
 *, /, + e – 
 % indica o resto de uma divisão inteira 
 Exemplo: 
 i+=2; -> i=i+2; 
 x*=y+1; -> x=x*(y+1); 
 d-=3; -> d=d-3; 
Revisão de C 
13 
 Operadores 
 Relacionais Lógicos 
 > maior que && and 
 >= maior ou igual || ou 
 < menor ! not 
 <= menor ou igual 
 == igual 
 != não igual 
 Incremento e decremento 
 ++x incrementa x antes de utilizar o seu valor. 
 x++ incrementa x depois de ser utilizado. 
Revisão de C 
14 
 Operadores 
 Cast 
 Podemos forçar uma expressão a ser de um 
determinado tipo usando o operador cast 
 (tipo)expressão 
 Ex: 
 
 
 
 Sizeof 
 O operador sizeof retorna o tamanho em bytes da 
variável 
main(){ 
int i=1; 
printf("%d/3 é: %f",i,(float) i/3); 
} 
Revisão de C 
15 
 Operadores Bit-a-bit 
 <<: desloca à esquerda /* x << 2 */ 
 >>: desloca à direita /* x >>2 */ 
 ^ : ou exclusivo /* x ^ 0xF0 */ 
 & : E bit-a-bit /* x & 0x07 */ 
 | : OU bit-a-bit /* x | 0x80 */ 
 ~ : Complementa bit-a-bit /* ~ x */ 
Revisão de C 
16 
 Operadores Bit-a-bit 
 Observe as propriedades lógicas abaixo: 
Revisão de C 
17 
 Operadores Bit-a-bit 
 Ex 1: deseja-se levar a zero os bits 5, 3 e 2 de um 
registrador, preservando o valor dos demais bits 
 Solução: realizar a operação AND bit-a-bit entre o 
registrador e uma máscara de bits, a qual contém 0 
nos lugares que se deseja zerar: 
void main(){ 
 registrador = registrador & 
0b11010011; 
} 
void main(){ 
 registrador &= 0b11010011; 
} 
Revisão de C 
18 
 Operadores Bit-a-bit 
 Ex 2: deseja-se levar a um os bits 7, 6, 3 e 0 de um 
registrador, preservando o valor dos demais bits 
 Solução: realizar a operação OR bit-a-bit entre o 
registrador e uma máscara de bits, a qual contém 
1nos lugares que se deseja levar a um: 
void main(){ 
 registrador = registrador | 
0b11001001; 
} 
void main(){ 
 registrador |= 0b11001001; 
} 
Revisão de C 
19 
 Operadores Bit-a-bit 
 Ex 3: deseja-se inverter os bits 4 e 3 de um registrador, 
preservando o valor dos demais bits 
 Solução: realizar a operação XOR bit-a-bit entre o 
registrador e uma máscara de bits, a qual contém 
1nos lugares que se deseja inverter: 
void main(){ 
 registrador = registrador ^ 
0b00011000; 
} 
void main(){ 
 registrador |= 0b00011000; 
} 
Revisão de C 
20 
 Controle de Fluxo 
if (condição)comando; 
else comando; 
 Se a condição avaliar em verdadeiro (qualquer coisa 
menos 0), o computador executará o comando 
 ou o bloco, de outro modo, se a cláusula else existir, o 
computador executará o comando ou o bloco que é 
seu objetivo. 
Revisão de C 
21 
 Controle de Fluxo 
if (condição)comando; 
else comando; 
main(){ 
int a,b; 
printf("digite dois números:"); 
scanf("%d%d",&a,&b); 
if (b) printf("%d\n",a/b); 
else printf("divisão por zero\n"); 
} 
Revisão de C 
22 
 Controle de Fluxo 
 Operador ternário 
 condição?expressão1:expressão2 
main(){ 
int x,y,max; 
printf("Entre com dois números: "); 
scanf(%d,%d,&x,&y); 
max=(x>y)?1:0; 
printf("max= %d\n",max); 
} 
Revisão de C 
23 
 Controle de Fluxo 
 switch 
 loop for 
 
 
 
 while 
 do while 
 break 
 continue 
main(){ 
 int x;for(x=1;x<100;x++)printf("%d\n",x); 
} 
Revisão de C 
24 
 Matrizes 
 tipo nome[tamanho][tamanho] ...; 
 Manipulando Strings 
 Em C não existe um tipo de dado string, no seu lugar 
é utilizado uma matriz de caracteres. Uma string é 
uma matriz tipo char que termina com '\0'. 
main(){ 
static re[]=“lagarto”; 
puts(re); 
puts(&re[0]); 
putchar('\n'); 
} 
 
main(){ 
char str[80]; 
gets(str); 
printf("%s",str); 
} 
Revisão de C 
25 
 Manipulando Strings 
 strcpy(destino,origem); 
 strcat(string1,string2); 
 strcmp(s1,s2); 
 strlen() 
 atoi() 
Revisão de C 
26 
 Ponteiros 
 tipo *nomevar; 
 É uma variável que contém o endereço de outra 
variável. 
 Os ponteiros são utilizados para alocação dinâmica, 
podendo substituir matrizes com mais eficiência. 
 Também fornecem a maneira pelas quais funções 
podem modificar os argumentos chamados, como 
veremos no capítulo de funções. 
int x,*px; 
px=&x; /*a variável px aponta para x */ 
Revisão de C 
27 
 Ponteiros 
 Se quisermos utilizar o conteúdo da variável para 
qual o ponteiro aponta: 
 
 
 O que é a mesma coisa que: 
y=*px; 
y=x; 
Revisão de C 
28 
 Ponteiros 
main(){ 
int x,*px,*py; 
x=9; 
px=&x; 
py=px; 
printf("x= %d\n",x); 
printf("&x= %d\n",&x); 
printf("px= %d\n",px); 
printf("*px= %d\n",*px); 
} 
Revisão de C 
29 
 Ex: Para imprimir a capacidade dos tipos 
 
main(){ 
char c; 
unsigned char uc; 
int i; 
unsigned int ui; 
float f; 
double d; 
printf("char %d",sizeof(c)); 
printf("unsigned char %d",sizeof(uc)); 
printf("int%d",sizeof(i)); 
printf("unsigned int %d",sizeof(ui)); 
printf("float %d",sizeof(f)); 
printf("double %d",sizeof(d)); 
} 
A história do MINIX 3 
 No início o código-fonte do UNIX (versão 6) 
estava amplamente disponível, sob licença da 
AT&T, e era muito estudado 
 Jon Lions, escreveu um livro descrevendo seu 
funcionamento, linha por linha, e foi usado 
(com a permissão da AT&T) como livro texto 
em muitos cursos universitários 
 Quando a AT&T lançou a versão 7, percebeu 
que que o UNIX era um produto comercial 
valioso 
 Distribuiu essa versão com uma licença proibindo o 
estudo do código-fonte 
30 
A história do MINIX 3 
 Os cursos universitários passaram a ensinar 
apenas a teoria 
 Então Tanenbaum et al. decidiram escrever um 
novo SO a partir do zero, que seria compatível 
com o UNIX, do ponto de vista do usuário, mas 
completamente diferente por dentro 
 Desse modo, os leitores podem dissecar um SO 
real, como estudantes de biologia fazem com 
rãs 
 Ele foi chamado de MINIX e foi lançado em 
1987, com seu código-fonte completo para 
estudar e modificar 
31 
A história do MINIX 3 
 O MINIX significa mini-UNIX, pois é pequeno o 
bastante até para quem não é especialista 
pode entender seu funcionamento 
 Além de eliminar os problemas jurídicos, o 
MINIX foi escrito um década depois e foi 
estruturado de maneira mais modular 
 EX: o sistema de arquivos e o gerenciador de 
memória são executados como programas de 
usuário 
 Na versão 3 a modularização foi ampliada 
para drivers de dispositivos de E/S, todos 
(exceto o driver de relógio) são executados em 
modo usuário 
32 
A história do MINIX 3 
 O MINIX foi projetado para ser compatível com 
o UNIX versão 7, devido sua simplicidade e 
elegância 
 O MINIX 3 é baseada no padrão POSIX 
 Assim como o UNIX, o MINIX foi escrito em C e 
destinado para ser portado para vários 
computadores 
 O núcleo do MINIX3 tem bem menos que 4000 
linhas de código executável 
 Um núcleo pequeno é importante, pois erros de 
núcleo são bem mais devastadores do que 
erros em programas de modo usuário 
33 
A história do MINIX 3 
 Logo depois que o MINIX foi lançado, foi 
formado um grupo de discussão USENET, 
comp.os.minix 
 Dentro de poucas semanas o grupo tinha 
40.000 assinantes, a maioria querendo 
acrescentar um grande número de novos 
recursos ao MINIX para torná-lo melhor e maior 
 O autor resistiu a essa investida por vários anos 
 Um estudante finlandês chamado Linus Torvalds 
começou a estudar o código do MINIX e o 
grupo de discussão USENET 
34 
A história do MINIX 3 
 O Linus acrescentou vários recursos que faltam 
no MINIX (principalmente vários drivers) 
 Em 1991 ele produziu um núcleo primitivo e o 
anunciou no comp.os.minix em seu próprio PC, 
em vez de usar o da universidade 
 Esse anúncio atraiu outras pessoas para ajudá-
lo e, em 13 de março de 1994, foi lançado o 
Linux 1.0 
 
35 
Documentação MINIX 3 
 Documentação 
 http://www.minix3.org 
 http://wiki.minix3.org/doku.php?id=www:documentation:st
art 
 Livro: TANENBAUM, Andrew S.; WOODHULL, Albert S. 
Sistemas Operacionais: Projeto e Implementação. 3ª Ed., 
Prentice Hall, 2008. 
 Instalação do MINIX em uma máquina virtual 
 http://wiki.minix3.org/doku.php?id=www:getting-
started:virtualmachines 
 http://www.hardware.com.br/dicas/minix3.html 
 Guia do Usuário do MINIX 
 http://wiki.minix3.org/doku.php?id=usersguide:start 
 Guia do desenvolvedor 
 http://wiki.minix3.org/doku.php?id=developersguide:start 
36 
MINIX 
 Arquiteturas compatíveis 
 X86 e ARM 
 Interface se dá por um terminal 
 Saída padrão: monitor 
 Entrada padrão: teclado 
 Interação com o usuário 
 Linha de comando 
 Por ser instalada uma interface gráfica (X Window) 
mas não é padrão 
37 
MINIX: Linha de comando 
 Teclas de função mapeadas 
38 
F1 Kernel processes table 
F2 Processes memory maps 
F3 System Image 
F4 Processes privileges 
F5 Boot monitor parameters 
F6 IRQ hooks and policies 
F7 Kernel messages 
F8 VM status and process maps 
F10 Kernel parameters 
F11 Timing details (if enabled) 
Shift + F1 Process manager process table 
Shift + F2 Signals 
Shift + F3 Filesystem process table 
Shift + F4 Device/Driver mapping 
Shift + F5 Print keys mappings 
Shift + F6 Reincarnation server process table 
Shift + F8 Data store contents 
Shift + F9 Processes with stack traces 
Obs: essas teclas são 
Válidas apenas no 1º. 
console (ttyc0) 
MINIX: Linha de comando 
 Comando do shell 
 man <COMANDO> : manual dos comando 
 passwd : muda seu próprio password 
 passwd user muda o password de um usuário 
(apenas root) 
 ls: lista o conteúdo do diretório corrente 
 ls -al: longa lista 
 ls -alt: longa lista, ordenado por tempo de 
modificação 
 Ls –alS: lista longa, ordenada por tamanho do arq. 
 cd <dir>: muda para o diretório 
 cd : muda para o diretório default 
 pwd : mostra o diretório corrente 
39 
MINIX: Linha de comando 
 Comando do shell 
 cp <arq1> <arq2>: copia arquivo1 para arquivo2 
 rm <arq>: remove (deleta) arquivo 
 mv <arq1> <arq2>: move arquivo1 para arquivo2 
(pode renomear arquivos no mesmo diretório) 
 mkdir <dir>: cria um diretório 
 rmdir <dir>: remove um diretório 
 cat <arq>: ler um arquivo 
 more <file>: ler um arquivo limitando o conteúdo a o 
tamanho da tela 
 ln –s --<file> <sfile>: faz um link simbólico de um 
arquivo file para sfile 
40 
MINIX: Linha de comando 
 Comando do shell 
 grep <palavra> <arquivo>: busca uma string dentro 
de um arquivo usando expressão regular 
 sort <arq>: mostra o conteúdo de um arquivo de 
maneira ordenada 
 chmod <permissões> <arq>: modifica as permissões 
de um arquivo 
 sh <script.sh>: executa um scritp de shell 
 ps –x: exibe o estado e o PID dos processo em 
execução 
 kill PID: mata um processo 
 
41 
MINIX: Linha de comando 
 Comando do shell (Compilador) 
 cc <arq.c>: compila um código em C e gera um 
executável a.out 
 cc <arq.c> –o <prog> : compila um código em C e 
gera um executável com o nome escolhido 
 ./<programa>: executa um programa em primeiro 
plano (ou foreground) 
 ./<programa> &: executa um programa em segundo 
plano (ou background) 
 Lista completa dos manuais disponíveis do 
Minix 3 
 http://www.minix3.org/manpages/index.html 
42 
MINIX: Configurando 
 O login a primeira vez (sem senha) 
 #root 
 Setar uma nova senha para root 
 #passwd 
 Setando Teclado 
 Carregando um layout 
 #loadkeys /usr/lib/keymaps/us-swap.map 
 Fazendo o keymap usar um layout padrão 
 #cp /usr/lib/keymaps/us-swap.map /etc/keymap 
 Desligando 
 shutdown -R 
 
43 
MINIX: Instalando Pacotes 
 pkgin é o gerenciador de pacotes 
 Primeiro faça uma atualização 
 # pkgin update 
 Se quiser instalar um pacote use 
 # pkgin install NOME_PACOTE 
 Ou mais de um pacote ao mesmo tempo 
 # pkgin in perl python27 
 Também é possível instalar tudo (precisa de 
espaço) 
 # pkgin_all 
 Mais detalhes em: 
http://wiki.minix3.org/doku.php?id=usersguide:install
ingsourcepackages 
44 
MINIX: Compilando um kernel 
 O código-fonte do Minix está localizado no 
diretório /usr/src. 
 Após alguma modificação no código, é 
necessário recompilar e criar um novo kernel 
 # cd /usr/src/tools 
 # make install 
 A imagem do kernel é armazenada no diretório 
/boot/image. 
45 
MINIX: Compilando um kernel 
 Cada vez que um kernel é compilado, uma 
cópia da imagem é armazenada neste 
diretório. Quando o computador for reiniciado, o Minix 
irá carregar a versão mais nova (último kernel 
compilado). 
 # ls -a /boot/image 
 . .. 3.1.2a 3.1.2ar0 3.1.2ar1 
46 
MINIX: Compilando um kernel 
 Se forem realizadas modificações no 
gerenciamento de processos, também é 
necessário recompilar o comando ps para exibir 
corretamente os processos no novo ambiente. 
 # cd /usr/src/commands/ps 
 # make 
 # cp ps /usr/bin 
 # chown root /usr/bin/ps 
 # chmod 4755 /usr/bin/ps 
 Para que as alterações tenham efeito reinicie o 
sistema: 
 #reboot 
47 
MINIX: Makefile 
 O MINIX 3 usa o *BSD make system 
 Um típico arquivo Makefile é assim 
48 
# $OpenBSD: Makefile,v 1.3 2007/05/29 18:24:56 ray Exp $ 
 
PROG= diff 
SRCS= diff.c diffdir.c diffreg.c xmalloc.c 
 
.include <bsd.prog.mk> 
Referências 
 TANENBAUM, Andrew S.; WOODHULL, Albert S. Sistemas 
Operacionais: Projeto e Implementação. 3ª Ed., Prentice 
Hall, 2008. 
 UNICAMP, Introdução à linguagem C. 
www.fsc.ufsc.br/~canzian/root/tutorial-c-unicamp.pdf 
 http://pt.wikipedia.org/wiki/C_(linguagem_de_program
a%C3%A7%C3%A3o) 
 www.minix3.org 
 http://www.inf.ufrgs.br/~johann/sisop1/minixpage/index.
html 
 http://www.primeirospassos.org/sessao3_4.html 
 http://lief.if.ufrgs.br/pub/vi/comandos_vi.html 
 http://minix1.woodhull.com/manpages/man9/elle.9.htm
l 
 Prudente, Fábio. Manipulação de Bits. 
49

Outros materiais

Perguntas Recentes