Download - MC504 - Sistemas Operacionais - Unicamp
![Page 1: MC504 - Sistemas Operacionais - Unicamp](https://reader033.vdocuments.com.br/reader033/viewer/2022052020/6286989a0a8f5472d71843c9/html5/thumbnails/1.jpg)
Device drivers Pipes Drivers no Linux
MC504 - Sistemas OperacionaisEntrada e Saıda
Pipes
Islene Calciolari Garcia
Instituto de Computacao - Unicamp
Primeiro Semestre de 2014
![Page 2: MC504 - Sistemas Operacionais - Unicamp](https://reader033.vdocuments.com.br/reader033/viewer/2022052020/6286989a0a8f5472d71843c9/html5/thumbnails/2.jpg)
Device drivers Pipes Drivers no Linux
Sumario
1 Device drivers
2 Pipes
3 Drivers no Linux
![Page 3: MC504 - Sistemas Operacionais - Unicamp](https://reader033.vdocuments.com.br/reader033/viewer/2022052020/6286989a0a8f5472d71843c9/html5/thumbnails/3.jpg)
Device drivers Pipes Drivers no Linux
Dispositivos de I/O e controladores
Tanenbaum: Figura 1.5
O sistema operacional deve interagir com os controladores
![Page 4: MC504 - Sistemas Operacionais - Unicamp](https://reader033.vdocuments.com.br/reader033/viewer/2022052020/6286989a0a8f5472d71843c9/html5/thumbnails/4.jpg)
Device drivers Pipes Drivers no Linux
Character device
Tanenbaum: Figura 5.34
Acesso sequencial, caractere a caractereExecute ls -l /dev
![Page 5: MC504 - Sistemas Operacionais - Unicamp](https://reader033.vdocuments.com.br/reader033/viewer/2022052020/6286989a0a8f5472d71843c9/html5/thumbnails/5.jpg)
Device drivers Pipes Drivers no Linux
Block device
Tanenbaum: Figura 1.8
Acesso nao sequencial a blocos de informacaoExecute ls -l /dev
![Page 6: MC504 - Sistemas Operacionais - Unicamp](https://reader033.vdocuments.com.br/reader033/viewer/2022052020/6286989a0a8f5472d71843c9/html5/thumbnails/6.jpg)
Device drivers Pipes Drivers no Linux
Device drivers
Tanenbaum: Figura 5.11
![Page 7: MC504 - Sistemas Operacionais - Unicamp](https://reader033.vdocuments.com.br/reader033/viewer/2022052020/6286989a0a8f5472d71843c9/html5/thumbnails/7.jpg)
Device drivers Pipes Drivers no Linux
Device drivers
Software que “conversa” com o controlador
Os fabricantes devem fornecer dados detalhados para a escritados device drivers
Como acoplar um device driver ao kernel:
relink e rebootentrada em um arquivo e rebooton-the-flyveja o comando lsmod
![Page 8: MC504 - Sistemas Operacionais - Unicamp](https://reader033.vdocuments.com.br/reader033/viewer/2022052020/6286989a0a8f5472d71843c9/html5/thumbnails/8.jpg)
Device drivers Pipes Drivers no Linux
Device driversSem ou com uma interface padrao
Tanenbaum: Figura 5.13
![Page 9: MC504 - Sistemas Operacionais - Unicamp](https://reader033.vdocuments.com.br/reader033/viewer/2022052020/6286989a0a8f5472d71843c9/html5/thumbnails/9.jpg)
Device drivers Pipes Drivers no Linux
Camadas de software
Tanenbaum: Figura 5.10
![Page 10: MC504 - Sistemas Operacionais - Unicamp](https://reader033.vdocuments.com.br/reader033/viewer/2022052020/6286989a0a8f5472d71843c9/html5/thumbnails/10.jpg)
Device drivers Pipes Drivers no Linux
Tratamento de interrupcoes
Tanenbaum: Figura 1.10
![Page 11: MC504 - Sistemas Operacionais - Unicamp](https://reader033.vdocuments.com.br/reader033/viewer/2022052020/6286989a0a8f5472d71843c9/html5/thumbnails/11.jpg)
Device drivers Pipes Drivers no Linux
Tratamento de interrupcoes
Tanenbaum: Figura 5.5
![Page 12: MC504 - Sistemas Operacionais - Unicamp](https://reader033.vdocuments.com.br/reader033/viewer/2022052020/6286989a0a8f5472d71843c9/html5/thumbnails/12.jpg)
Device drivers Pipes Drivers no Linux
Como programar os dispositivos?
Instrucoes especiais
IN REG, PORT
OUT PORT, REG
Memory-mapped I/O
MOV REG, ADDR
Conforme o valor de ADDR, a instrucao MOV fara acesso auma palavra de memoria ou dispositivo
![Page 13: MC504 - Sistemas Operacionais - Unicamp](https://reader033.vdocuments.com.br/reader033/viewer/2022052020/6286989a0a8f5472d71843c9/html5/thumbnails/13.jpg)
Device drivers Pipes Drivers no Linux
Como programar os dispositivos?
Tanenbaum: Figura 5.2
![Page 14: MC504 - Sistemas Operacionais - Unicamp](https://reader033.vdocuments.com.br/reader033/viewer/2022052020/6286989a0a8f5472d71843c9/html5/thumbnails/14.jpg)
Device drivers Pipes Drivers no Linux
Barramento simples e dual
Tanenbaum: Figura 5.3
![Page 15: MC504 - Sistemas Operacionais - Unicamp](https://reader033.vdocuments.com.br/reader033/viewer/2022052020/6286989a0a8f5472d71843c9/html5/thumbnails/15.jpg)
Device drivers Pipes Drivers no Linux
Direct Memory Access (DMA)
Tanenbaum: Figura 5.4
![Page 16: MC504 - Sistemas Operacionais - Unicamp](https://reader033.vdocuments.com.br/reader033/viewer/2022052020/6286989a0a8f5472d71843c9/html5/thumbnails/16.jpg)
Device drivers Pipes Drivers no Linux
Imprimindo uma string
Tanenbaum: Figura 5.6
![Page 17: MC504 - Sistemas Operacionais - Unicamp](https://reader033.vdocuments.com.br/reader033/viewer/2022052020/6286989a0a8f5472d71843c9/html5/thumbnails/17.jpg)
Device drivers Pipes Drivers no Linux
Imprimindo uma stringProgrammed I/O
Tanenbaum: Figura 5.7
Trecho de codigo do kernel
![Page 18: MC504 - Sistemas Operacionais - Unicamp](https://reader033.vdocuments.com.br/reader033/viewer/2022052020/6286989a0a8f5472d71843c9/html5/thumbnails/18.jpg)
Device drivers Pipes Drivers no Linux
Imprimindo uma stringInterrupt-driven I/O
Tanenbaum: Figura 5.8
(a) Trecho de codigo do kernel(b) Tratador da interrupcao
![Page 19: MC504 - Sistemas Operacionais - Unicamp](https://reader033.vdocuments.com.br/reader033/viewer/2022052020/6286989a0a8f5472d71843c9/html5/thumbnails/19.jpg)
Device drivers Pipes Drivers no Linux
Imprimindo uma stringDMA
(a) Trecho de codigo do kernel(b) Tratador de interrupcao
![Page 20: MC504 - Sistemas Operacionais - Unicamp](https://reader033.vdocuments.com.br/reader033/viewer/2022052020/6286989a0a8f5472d71843c9/html5/thumbnails/20.jpg)
Device drivers Pipes Drivers no Linux
Pipes
$ grep xxx log.txt > log-xxx.txt
$ wc -l log-xxx.txt
$ rm log-xxx.txt
$ grep xxx log.txt | wc -l
![Page 21: MC504 - Sistemas Operacionais - Unicamp](https://reader033.vdocuments.com.br/reader033/viewer/2022052020/6286989a0a8f5472d71843c9/html5/thumbnails/21.jpg)
Device drivers Pipes Drivers no Linux
pipe()
int pipe (int FILEDES[2])
The ‘pipe’ function creates a pipe and puts the filedescriptors for the reading and writing ends of the pipe(respectively) into ‘FILEDES[0]’ and ‘FILEDES[1]’.
Veja o codigo: mypipe.c
![Page 22: MC504 - Sistemas Operacionais - Unicamp](https://reader033.vdocuments.com.br/reader033/viewer/2022052020/6286989a0a8f5472d71843c9/html5/thumbnails/22.jpg)
Device drivers Pipes Drivers no Linux
Pipe com entrada e saıda padrao?
int dup2(int oldfd, int newfd);
dup2 makes newfd be the copy of oldfd, closing newfdfirst if necessary. After successful return of dup or dup2,the old and new descriptors may be used interchangeably.
Veja o codigo: mypipe2.c
![Page 23: MC504 - Sistemas Operacionais - Unicamp](https://reader033.vdocuments.com.br/reader033/viewer/2022052020/6286989a0a8f5472d71843c9/html5/thumbnails/23.jpg)
Device drivers Pipes Drivers no Linux
Processos conectados de maneira transparente
$ cm1 <args1> | cmd2 <args2>
A modificacao da entrada e saıda padrao deve ser feita antesda chamada a execve().
Veja o codigo: minishell.c
![Page 24: MC504 - Sistemas Operacionais - Unicamp](https://reader033.vdocuments.com.br/reader033/viewer/2022052020/6286989a0a8f5472d71843c9/html5/thumbnails/24.jpg)
Device drivers Pipes Drivers no Linux
popen()
FILE *popen(const char *command,
const char *type);
int pclose(FILE *stream);
The popen() function opens a process by creating a pipe,forking, and invoking the shell. Since a pipe is bydefinition unidirectional, the type argument may specifyonly reading or writing, not both; the resulting stream iscorrespondingly read-only or write-only.
Veja o codigo: mypopen.c e mypopen2.c
![Page 25: MC504 - Sistemas Operacionais - Unicamp](https://reader033.vdocuments.com.br/reader033/viewer/2022052020/6286989a0a8f5472d71843c9/html5/thumbnails/25.jpg)
Device drivers Pipes Drivers no Linux
Programando um device driver
Veja a serie: Device drivers de Anil Kumar Pugalia
Exemplo numero 1: ofd.c
Desafio: como implementar um device driver comcomportamento de pipe?