Baixe o app para aproveitar ainda mais
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
Compartilhar