Moved POSIX course to its own directory, independent of VFS.
authorThadeu Lima de Souza Cascardo <cascardo@holoscopio.com>
Mon, 7 Dec 2009 02:21:36 +0000 (00:21 -0200)
committerThadeu Lima de Souza Cascardo <cascardo@holoscopio.com>
Mon, 7 Dec 2009 02:21:36 +0000 (00:21 -0200)
02.a.posix/02.vfs.xml [new file with mode: 0644]
02.a.posix/Makefile [new file with mode: 0644]
02.vfs/02.vfs.xml [deleted file]
02.vfs/Makefile [deleted file]

diff --git a/02.a.posix/02.vfs.xml b/02.a.posix/02.vfs.xml
new file mode 100644 (file)
index 0000000..a1085c6
--- /dev/null
@@ -0,0 +1,231 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE slides SYSTEM "/usr/share/xml/docbook/custom/slides/3.3.1/schema/dtd/slides-full.dtd">
+
+<slides>
+
+<slidesinfo>
+<title>Linux Device Drivers</title>
+<author><firstname>Thadeu</firstname><surname>Cascardo</surname></author>
+</slidesinfo>
+
+<foil>
+<title>Introdução</title>
+<para>
+Dispositivos em sistemas POSIX são arquivos no diretório /dev. Como quaisquer
+outros arquivos no POSIX, eles podem ser abertos, fechados, lidos, escritos,
+posicionados, controlados, entre outros.
+</para>
+
+<para>
+Exemplos de arquivos de dispositivos:
+</para>
+
+<itemizedlist>
+<listitem>
+<para>
+/dev/sda - Um dispositivo de bloco SCSI
+</para>
+</listitem>
+<listitem>
+<para>
+/dev/ttyS0 - Um dispositivo terminal serial
+</para>
+</listitem>
+</itemizedlist>
+
+</foil>
+
+<foil>
+<title>Chamandas de Entrada e Saída em POSIX</title>
+<para>
+Sistemas POSIX possuem algumas chamadas padrões para E/S. Já que dispositivos
+são arquivos, essas mesmas chamadas são utilizadas para trabalhar com
+dispositivos. Vamos trabalhar com as seguintes chamadas:
+</para>
+<itemizedlist>
+<listitem><para>
+open
+</para></listitem>
+<listitem><para>
+read
+</para></listitem>
+<listitem><para>
+write
+</para></listitem>
+<listitem><para>
+close
+</para></listitem>
+<listitem><para>
+lseek
+</para></listitem>
+<listitem><para>
+ioctl
+</para></listitem>
+</itemizedlist>
+</foil>
+
+<foil>
+<title>open</title>
+<para>
+A chamada de systema open abre um arquivo. Quando estivermos trabalhando com
+dispositivo, é quando alguma inicialização deve ser feita. Alguns dispositivos
+só podem ser abertos por um processo de cada vez.
+</para>
+<para>
+int open (char * filename, int flags);
+</para>
+<para>
+flags podem ser O\_RDONLY, O\_WRONLY, O\_RDWR e muitas outras, algumas menos
+importantes para dispositivos.
+</para>
+<para>
+Exemplo:
+</para>
+<para>
+fd = open ("/dev/ttyS0", O\_RDWR);
+</para>
+</foil>
+
+<foil>
+<title>close</title>
+<para>
+A chamada de sistema close fecha um arquivo aberto.
+</para>
+<para>
+int close (int fd);
+</para>
+<para>
+Exemplo:
+</para>
+<para>
+close (fd);
+</para>
+</foil>
+
+<foil>
+<title>read</title>
+<para>
+A chamada de sistema read lê de um arquivo aberto para um buffer. Para
+dispositivos, ela lê de um dispositivo.
+</para>
+<para>
+int read (int fd, char *buffer, int bsz);
+</para>
+<para>
+read retorna o número de bytes escritos no buffer, que pode ser menor que o
+número de bytes requisitados por diferentes razões.
+</para>
+<para>
+Exemplo:
+</para>
+<para>
+c = read (fd, buffer, sizeof (buffer));
+</para>
+</foil>
+
+<foil>
+<title>write</title>
+<para>
+A chamada de sistema write escreve dados de um buffer em um arquivo aberto. Para
+dispositivos, ela escreve no dispositivo.
+</para>
+<para>
+int write (int fd, char *buffer, int bsz);
+</para>
+<para>
+write retorna o número de bytes escritos no arquivo, que pode ser menor que o
+número de bytes requisitados por diferentes razões.
+</para>
+<para>
+Exemplo:
+</para>
+<para>
+c = write (fd, buffer, strlen (buffer));
+</para>
+</foil>
+
+<foil>
+<title>lseek</title>
+<para>
+A chamada de sistema lseek muda a posição corrente do arquivo, permitindo a
+leitura ou escrita naquela posição. Posicionar em um dispositivo pode ter
+diferentes significados.
+</para>
+<para>
+off\_t lseek (int fd, off\_t pos, int whence);
+</para>
+<para>
+O significado da posição depende do valor de whence, que pode ser
+SEEK\_SET (a posição absoluta), SEEK\_CUR (relativa a posição corrente),
+SEEK\_END (relativa ao fim do arquivo).
+</para>
+<para>
+Exemplo:
+</para>
+<para>
+lseek (fd, 0, SEEK\_END);
+</para>
+</foil>
+
+<foil>
+<title>ioctl</title>
+<para>
+A chamada de sistema ioctl é uma operação "pega-tudo". Para aquelas operações
+que não se encaixam no modelo leitura/escrita, ioctl permite ao usuário enviar
+um comando com um argumento opcional ao dispositivo. Esse comando pode aceitar
+entrada ou gerar saída.
+</para>
+<para>
+int ioctl (int fd, int request, char *arg);
+</para>
+<para>
+O último argumento é opcional e depende do tipo de requisição. Todo dispositivo
+ou classe de dispositivo pode ter seu diferente conjunto de ioctl's.
+</para>
+<para>
+Exemplo:
+</para>
+<para>
+struct ifreq req; ioctl (fd, SIOCGIFFLAGS, \&#38;req);
+</para>
+</foil>
+
+<foil>
+<title>Módulos do Linux</title>
+<para>
+Linux é modularizado. Drivers, sistemas de arquivos, protocolos de rede e outros
+podem ser carregados em tempo de execução. Todo módulos tem uma função init e
+uma função exit.
+</para>
+<para>
+Módulos podem ter parâmetros. Em tempo de carga, parâmetros, que podem ser
+booleanos, inteiros ou strings, são dados pelo usuário.
+</para>
+</foil>
+
+<foil>
+<title>Tipos e números de dispositivos</title>
+<para>
+Dispositivos no Linux podem ter diferentes tipos, incluindo dispositivos de
+caractere, dispositivos de bloco e dispositivos de rede. Tanto dispositivos de
+caractere quanto de bloco têm números identificadores, um número maior e um
+número menor.
+</para>
+</foil>
+
+<foil>
+<title>Alocação de dispositivos de caractere</title>
+<para>
+No Linux, números maior e menor devem ser requisitados ou alocados. As chamadas
+para fazê-lo para os dispositivos de caractere são:
+</para>
+<para>
+int register\_chrdev\_region (dev\_t first, unsigned int count, char
+*name);
+int alloc\_chrdev\_region (dev\_t *dev, unsigned int firstminor,
+unsigned int count, char *name);
+void unregister\_chrdev\_region (dev\_t dev, unsigned int count);
+</para>
+</foil>
+
+</slides>
diff --git a/02.a.posix/Makefile b/02.a.posix/Makefile
new file mode 100644 (file)
index 0000000..a7a7fc7
--- /dev/null
@@ -0,0 +1,13 @@
+NAME = 02.vfs
+
+all: $(NAME).pdf
+
+%.pdf: %.tex
+       TEXINPUTS=.:..: pdflatex $<
+
+%.tex: %.xml ../beamer.xsl
+       xsltproc ../beamer.xsl $< > $@
+
+clean:
+       rm -f $(NAME).pdf $(NAME).tex $(NAME).aux $(NAME).log $(NAME).nav \
+               $(NAME).out $(NAME).snm $(NAME).toc $(NAME).vrb
diff --git a/02.vfs/02.vfs.xml b/02.vfs/02.vfs.xml
deleted file mode 100644 (file)
index a1085c6..0000000
+++ /dev/null
@@ -1,231 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE slides SYSTEM "/usr/share/xml/docbook/custom/slides/3.3.1/schema/dtd/slides-full.dtd">
-
-<slides>
-
-<slidesinfo>
-<title>Linux Device Drivers</title>
-<author><firstname>Thadeu</firstname><surname>Cascardo</surname></author>
-</slidesinfo>
-
-<foil>
-<title>Introdução</title>
-<para>
-Dispositivos em sistemas POSIX são arquivos no diretório /dev. Como quaisquer
-outros arquivos no POSIX, eles podem ser abertos, fechados, lidos, escritos,
-posicionados, controlados, entre outros.
-</para>
-
-<para>
-Exemplos de arquivos de dispositivos:
-</para>
-
-<itemizedlist>
-<listitem>
-<para>
-/dev/sda - Um dispositivo de bloco SCSI
-</para>
-</listitem>
-<listitem>
-<para>
-/dev/ttyS0 - Um dispositivo terminal serial
-</para>
-</listitem>
-</itemizedlist>
-
-</foil>
-
-<foil>
-<title>Chamandas de Entrada e Saída em POSIX</title>
-<para>
-Sistemas POSIX possuem algumas chamadas padrões para E/S. Já que dispositivos
-são arquivos, essas mesmas chamadas são utilizadas para trabalhar com
-dispositivos. Vamos trabalhar com as seguintes chamadas:
-</para>
-<itemizedlist>
-<listitem><para>
-open
-</para></listitem>
-<listitem><para>
-read
-</para></listitem>
-<listitem><para>
-write
-</para></listitem>
-<listitem><para>
-close
-</para></listitem>
-<listitem><para>
-lseek
-</para></listitem>
-<listitem><para>
-ioctl
-</para></listitem>
-</itemizedlist>
-</foil>
-
-<foil>
-<title>open</title>
-<para>
-A chamada de systema open abre um arquivo. Quando estivermos trabalhando com
-dispositivo, é quando alguma inicialização deve ser feita. Alguns dispositivos
-só podem ser abertos por um processo de cada vez.
-</para>
-<para>
-int open (char * filename, int flags);
-</para>
-<para>
-flags podem ser O\_RDONLY, O\_WRONLY, O\_RDWR e muitas outras, algumas menos
-importantes para dispositivos.
-</para>
-<para>
-Exemplo:
-</para>
-<para>
-fd = open ("/dev/ttyS0", O\_RDWR);
-</para>
-</foil>
-
-<foil>
-<title>close</title>
-<para>
-A chamada de sistema close fecha um arquivo aberto.
-</para>
-<para>
-int close (int fd);
-</para>
-<para>
-Exemplo:
-</para>
-<para>
-close (fd);
-</para>
-</foil>
-
-<foil>
-<title>read</title>
-<para>
-A chamada de sistema read lê de um arquivo aberto para um buffer. Para
-dispositivos, ela lê de um dispositivo.
-</para>
-<para>
-int read (int fd, char *buffer, int bsz);
-</para>
-<para>
-read retorna o número de bytes escritos no buffer, que pode ser menor que o
-número de bytes requisitados por diferentes razões.
-</para>
-<para>
-Exemplo:
-</para>
-<para>
-c = read (fd, buffer, sizeof (buffer));
-</para>
-</foil>
-
-<foil>
-<title>write</title>
-<para>
-A chamada de sistema write escreve dados de um buffer em um arquivo aberto. Para
-dispositivos, ela escreve no dispositivo.
-</para>
-<para>
-int write (int fd, char *buffer, int bsz);
-</para>
-<para>
-write retorna o número de bytes escritos no arquivo, que pode ser menor que o
-número de bytes requisitados por diferentes razões.
-</para>
-<para>
-Exemplo:
-</para>
-<para>
-c = write (fd, buffer, strlen (buffer));
-</para>
-</foil>
-
-<foil>
-<title>lseek</title>
-<para>
-A chamada de sistema lseek muda a posição corrente do arquivo, permitindo a
-leitura ou escrita naquela posição. Posicionar em um dispositivo pode ter
-diferentes significados.
-</para>
-<para>
-off\_t lseek (int fd, off\_t pos, int whence);
-</para>
-<para>
-O significado da posição depende do valor de whence, que pode ser
-SEEK\_SET (a posição absoluta), SEEK\_CUR (relativa a posição corrente),
-SEEK\_END (relativa ao fim do arquivo).
-</para>
-<para>
-Exemplo:
-</para>
-<para>
-lseek (fd, 0, SEEK\_END);
-</para>
-</foil>
-
-<foil>
-<title>ioctl</title>
-<para>
-A chamada de sistema ioctl é uma operação "pega-tudo". Para aquelas operações
-que não se encaixam no modelo leitura/escrita, ioctl permite ao usuário enviar
-um comando com um argumento opcional ao dispositivo. Esse comando pode aceitar
-entrada ou gerar saída.
-</para>
-<para>
-int ioctl (int fd, int request, char *arg);
-</para>
-<para>
-O último argumento é opcional e depende do tipo de requisição. Todo dispositivo
-ou classe de dispositivo pode ter seu diferente conjunto de ioctl's.
-</para>
-<para>
-Exemplo:
-</para>
-<para>
-struct ifreq req; ioctl (fd, SIOCGIFFLAGS, \&#38;req);
-</para>
-</foil>
-
-<foil>
-<title>Módulos do Linux</title>
-<para>
-Linux é modularizado. Drivers, sistemas de arquivos, protocolos de rede e outros
-podem ser carregados em tempo de execução. Todo módulos tem uma função init e
-uma função exit.
-</para>
-<para>
-Módulos podem ter parâmetros. Em tempo de carga, parâmetros, que podem ser
-booleanos, inteiros ou strings, são dados pelo usuário.
-</para>
-</foil>
-
-<foil>
-<title>Tipos e números de dispositivos</title>
-<para>
-Dispositivos no Linux podem ter diferentes tipos, incluindo dispositivos de
-caractere, dispositivos de bloco e dispositivos de rede. Tanto dispositivos de
-caractere quanto de bloco têm números identificadores, um número maior e um
-número menor.
-</para>
-</foil>
-
-<foil>
-<title>Alocação de dispositivos de caractere</title>
-<para>
-No Linux, números maior e menor devem ser requisitados ou alocados. As chamadas
-para fazê-lo para os dispositivos de caractere são:
-</para>
-<para>
-int register\_chrdev\_region (dev\_t first, unsigned int count, char
-*name);
-int alloc\_chrdev\_region (dev\_t *dev, unsigned int firstminor,
-unsigned int count, char *name);
-void unregister\_chrdev\_region (dev\_t dev, unsigned int count);
-</para>
-</foil>
-
-</slides>
diff --git a/02.vfs/Makefile b/02.vfs/Makefile
deleted file mode 100644 (file)
index a7a7fc7..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-NAME = 02.vfs
-
-all: $(NAME).pdf
-
-%.pdf: %.tex
-       TEXINPUTS=.:..: pdflatex $<
-
-%.tex: %.xml ../beamer.xsl
-       xsltproc ../beamer.xsl $< > $@
-
-clean:
-       rm -f $(NAME).pdf $(NAME).tex $(NAME).aux $(NAME).log $(NAME).nav \
-               $(NAME).out $(NAME).snm $(NAME).toc $(NAME).vrb