Linux Devices DriversDesarrollo de un char device

Tamaño: px
Comenzar la demostración a partir de la página:

Download "Linux Devices DriversDesarrollo de un char device"

Transcripción

1 Linux Devices Drivers Desarrollo de un char device Noviembre 2010

2 Agenda Prerequisitos 1 Prerequisitos Registro y funcionalidades

3 Linux Headers Prerequisitos Que tenemos que instalar antes de empezar? Instalando los headers del kernel Que más? Dijimos que un driver es código de kernel. En consecuencia, un diver va a invocar funciones internas del kernel, y utilizará sus esctructuras de datos. Necesitamos contar con las definiciones de los prototipos de estas funciones, y estructuras. Donde encontramos estas definiciones?

4 Linux headers Prerequisitos Que tenemos que instalar antes de empezar? Instalando los headers del kernel Que más? En los headers del sistema operativo Los fuentes del Sistema Operativo proporcionan en sus archivos headers, las definiciones de prototipos de funciones y de estructuras de datos, que emplea el kernel. Y son las que empleará nuestro device driver. Por lo tanto hay que instalar los headers.

5 Versión exacta Prerequisitos Que tenemos que instalar antes de empezar? Instalando los headers del kernel Que más? Para saber exactamente que versión de kernel tenemos instalada en el sistema, el comando uname es la respuesta: $ uname r $ Usando la propiedad de encerrar un comando entre $ sudo apt get i n s t a l l l i n u x headers uname r

6 Ya tenemos los headers y ahora? Que tenemos que instalar antes de empezar? Instalando los headers del kernel Que más? $ sudo apt get i n s t a l l l i n u x manual E instalamos las man pages del kernel, en donde econtraremos las funciones internas del kernel mas comunes. Mucas otras habrá que rebuscar en otros medios. $ sudo apt get i n s t a l l kernel i n t e r n a l guide Alguna doc, adicional del kernel. $ sudo apt get i n s t a l l Linux Device Drivers 3er. Edición Alessandro Rubini Ed. O r r e i l y :) Faltaría que lo incluyan en el repo. El libro para aprender a programar drivers.

7 includes y macros Prerequisitos Tiny example Manos a la obra #include <l i n u x / module. h> #include <l i n u x / i n i t. h> #include <l i n u x / k e r n e l. h> / p r i n t k ( ) / / Macro que declara e l autor del módulo / MODULE AUTHOR( Fulano de t a l ) ; / Macro que declara e l t i p o de l i c e n c i a del módulo. / MODULE LICENSE( Dual BSD/GPL ) ;

8 init y exit (muy básicos) Tiny example Manos a la obra i n t h e l l o i n i t ( void ) { p r i n t k (KERN INFO Hola mundo\n ) ; return 0; void h e l l o e x i t ( void ) { p r i n t k (KERN INFO Chau mundo!!! \ n ) ; m o d u l e i n i t ( h e l l o i n i t ) ; module exit ( h e l l o e x i t ) ;

9 Makefile Prerequisitos Tiny example Manos a la obra obj m := h e l l o. o KERNELDIR?= / l i b / modules / $ ( s h e l l uname r ) / b u i l d PWD := $ ( s h e l l pwd ) d e f a u l t : $ (MAKE) C $ (KERNELDIR) M=$ (PWD) modules clean : rm h e l l o.mod. c h e l l o. o modules. order rm h e l l o. ko h e l l o. mod. o Module. symvers

10 compilando... Prerequisitos Tiny example Manos a la obra 1 Necesitamos solamente los archivos hello.c anterior y Makefile. / DeviceDriverK2. 6 / h e l l o $ l s l s t o t a l 8 4 rw r r 1 alejandro alejandro 589 oct hello. c 4 rw r r 1 alejandro alejandro 246 nov 2 15:33 Makefile / DeviceDriverK2. 6 / h e l l o $ 2 Compilamos? / DeviceDriverK2. 6 / hello$ sudo make [ sudo ] password for alejandro : make C / l i b / modules/ / build M=/home / alejandro / DeviceDriverK2. 6 / hello make [ 1 ] : se ingresa a l d i r e c t o r i o / usr / src / l i n u x headers CC [M] / home / a l e j a n d r o / DeviceDriverK2. 6 / h e l l o / h e l l o. o B u i l d i n g modules, stage 2. MODPOST 1 modules CC / home / a l e j a n d r o / DeviceDriverK2. 6 / h e l l o / h e l l o.mod. o LD [M] / home / alejandro / DeviceDriverK2.6/2009/ hello / hello. ko make [ 1 ] : se sale del d i r e c t o r i o / usr / src / l i n u x headers / DeviceDriverK2. 6 / h e l l o $ 3 Listar el directorio y ver los archivos que se generaron. modules

11 haciendo cosas útiles en init y exit Registrando el dispositivo Capabilities Pasando parámetros al driver i n t h e l l o i n i t ( void ) { i n t r e s u l t ; r e s u l t = r e g i s t e r c h r d e v ( h e l l o m a j o r, h e l l o 2,& h e l l o f o p s ) ; p r i n t k (KERN INFO h e l l o 2 : e l número mayor es %d\n, r e s u l t ) ; h e l l o m a j o r = r e s u l t ; return 0; void h e l l o e x i t ( void ) { u n r e g i s t e r c h r d e v ( h e l l o m a j o r, h e l l o 2 ) ; m o d u l e i n i t ( h e l l o i n i t ) ; module exit ( h e l l o e x i t ) ;

12 variables importantes Registrando el dispositivo Capabilities Pasando parámetros al driver / v a r i a b l e donde se almacena e l Major number del módulo. Se i n i c i a l i z a a 0 para p e d i r un número a l sistema. / i n t h e l l o m a j o r = 0; / Declaración de l a s funciones que usará e l d r i v e r cuando sea accedido. / struct f i l e o p e r a t i o n s h e l l o f o p s = {. open = hello open,. release = h e l l o r e l e a s e,. owner = THIS MODULE ;

13 Manejando funciones... Registrando el dispositivo Capabilities Pasando parámetros al driver / Esta función es l a que contestará l o s llamados a l a función open ( char, i n t ) cuyo primer parámetro corresponda a l nodo en / dev cuyo major number corresponda a l de este d r i v e r / i n t hello open ( struct inode inode, struct f i l e f i l p ) { p r i n t k (KERN INFO Hello2 : Apertura de Archivo \n ) ; return 0; / Esta función es l a que contestará l o s llamados a l a función open ( char, i n t ) cuyo primer parámetro corresponda a l nodo en / dev cuyo major number corresponda a l de este d r i v e r / i n t h e l l o r e l e a s e ( struct inode inode, struct f i l e f i l p ) { return 0;

14 Como se hace... Prerequisitos Registrando el dispositivo Capabilities Pasando parámetros al driver Se pasan por línea de comandos al instalar el driver insmod. / h e l l o 2. ko h e l l o m a j o r =355 Se reciben en el código del módulo en una variable / Declaración de parámetro del módulo, \ r e f td3 major. Puede ser seteado por e l user a l hacer e l insmod. / module param ( h e l l o m a j o r, int, 0 ) ; module param tiene tres argumentos: nombre, tipo de dato, y la máscara de permisos con la que se creará la entrada en sysfs El tipo de dato es bool, asociado a una variable que debe ser de tipo int, (evaluada como TRUE o FALSE), o invbool que invierte el valor de la variable, o charp, para manejar strings. luego los tipos clásicos del C: int, long, short, uint, ulong, ushort

15 Automatizando la instalación Como obtenemos en N o Mayor Alojando dinámicamente el N o Mayor Al fuente hello3.c y a Makefile, en este tercer ejemplo sumamos un shell script para obtener dinámicamente el Número Mayor, y con él crear automáticamente los nodos necesarios en el /dev. / DeviceDriverK2. 6 / d r i v e r 3 $ cat h e l l o 3 d r i v e r. i n i t En particular importan las líneas 59 a 63 del script (activarlas en el editor que estén usando!!) i f $INSMOD $devpath $OPTIONS ; then MAJOR= awk \\$2==\ $DEVICE\ { p r i n t \\$1 / proc / devices r e m o v e f i l e s $FILES c r e a t e f i l e s $FILES else

16 Automatizando la instalación Como obtenemos en N o Mayor Alojando dinámicamente el N o Mayor Al fuente hello3.c y a Makefile, en este tercer ejemplo sumamos un shell script para obtener dinámicamente el Número Mayor, y con él crear automáticamente los nodos necesarios en el /dev. / DeviceDriverK2. 6 / d r i v e r 3 $ cat h e l l o 3 d r i v e r. i n i t En particular importan las líneas 59 a 63 del script (activarlas en el editor que estén usando!!) i f $INSMOD $devpath $OPTIONS ; then MAJOR= awk \\$2==\ $DEVICE\ { p r i n t \\$1 / proc / devices r e m o v e f i l e s $FILES c r e a t e f i l e s $FILES else

17 Automatizando la instalación Como obtenemos en N o Mayor Alojando dinámicamente el N o Mayor Al fuente hello3.c y a Makefile, en este tercer ejemplo sumamos un shell script para obtener dinámicamente el Número Mayor, y con él crear automáticamente los nodos necesarios en el /dev. / DeviceDriverK2. 6 / d r i v e r 3 $ cat h e l l o 3 d r i v e r. i n i t En particular importan las líneas 59 a 63 del script (activarlas en el editor que estén usando!!) i f $INSMOD $devpath $OPTIONS ; then MAJOR= awk \\$2==\ $DEVICE\ { p r i n t \\$1 / proc / devices r e m o v e f i l e s $FILES c r e a t e f i l e s $FILES else

18 Automatizando la instalación Como obtenemos en N o Mayor awk... mucho mas que un comando La base es el potente awk (o gawk en Linux, por GNU awk). Veamos un ejemplo desde el shell: / $ awk \$2==\ sound\ { p r i n t \$1 / proc / devices 14 / $ l s l a s / dev / dsp 0 crw rw 1 r o o t audio 14, 3 nov 8 13:58 / dev / dsp / $

19 Antes que nada... recursos del kernel Mandando a dormir al proceso desde el kernel Manejando eficientemente los bloqueos a procesos Escritura del dispositivo el método que pone el proceso a dormir es, típicamente, read Primer paso: agregamos los métodos en File Operations. struct f i l e o p e r a t i o n s h e l l o f o p s = {. read = h e l l o r e a d, / / read ( ) es bloqueante.. open = hello open,. release = h e l l o r e l e a s e,. owner = THIS MODULE ; Segundo paso: Escribimos la función read. s s i z e t h e l l o r e a d ( struct f i l e f i l p, char u s e r buf, s i z e t count, l o f f t f p o s ){ i n t r e s u l t ; r e s u l t = copy to user ( buf, k b u f f e r, s t r l e n ( k b u f f e r ) ) ; p r i n t k (KERN INFO h e l l o 4 : d i s p o s i t i v o l e í d o con número menor %d\n, i m i n o r ( f i l p >p r i v a t e d a t a ) ) ; return s t r l e n ( k b u f f e r ) ;

20 Antes que nada... recursos del kernel Mandando a dormir al proceso desde el kernel Manejando eficientemente los bloqueos a procesos Escritura del dispositivo el método que pone el proceso a dormir es, típicamente, read Primer paso: agregamos los métodos en File Operations. struct f i l e o p e r a t i o n s h e l l o f o p s = {. read = h e l l o r e a d, / / read ( ) es bloqueante.. open = hello open,. release = h e l l o r e l e a s e,. owner = THIS MODULE ; Segundo paso: Escribimos la función read. s s i z e t h e l l o r e a d ( struct f i l e f i l p, char u s e r buf, s i z e t count, l o f f t f p o s ){ i n t r e s u l t ; r e s u l t = copy to user ( buf, k b u f f e r, s t r l e n ( k b u f f e r ) ) ; p r i n t k (KERN INFO h e l l o 4 : d i s p o s i t i v o l e í d o con número menor %d\n, i m i n o r ( f i l p >p r i v a t e d a t a ) ) ; return s t r l e n ( k b u f f e r ) ;

21 Antes que nada... recursos del kernel Mandando a dormir al proceso desde el kernel Manejando eficientemente los bloqueos a procesos Escritura del dispositivo el método que pone el proceso a dormir es, típicamente, read Primer paso: agregamos los métodos en File Operations. struct f i l e o p e r a t i o n s h e l l o f o p s = {. read = h e l l o r e a d, / / read ( ) es bloqueante.. open = hello open,. release = h e l l o r e l e a s e,. owner = THIS MODULE ; Segundo paso: Escribimos la función read. s s i z e t h e l l o r e a d ( struct f i l e f i l p, char u s e r buf, s i z e t count, l o f f t f p o s ){ i n t r e s u l t ; r e s u l t = copy to user ( buf, k b u f f e r, s t r l e n ( k b u f f e r ) ) ; p r i n t k (KERN INFO h e l l o 4 : d i s p o s i t i v o l e í d o con número menor %d\n, i m i n o r ( f i l p >p r i v a t e d a t a ) ) ; return s t r l e n ( k b u f f e r ) ;

22 copy to user y copy from user Antes que nada... recursos del kernel Mandando a dormir al proceso desde el kernel Manejando eficientemente los bloqueos a procesos Escritura del dispositivo A copy from user la utilizaremos cuando nos ocupemos del método write

23 Hace falta retocar el resto Antes que nada... recursos del kernel Mandando a dormir al proceso desde el kernel Manejando eficientemente los bloqueos a procesos Escritura del dispositivo Tercer paso: en el método open (), conseguimos la referencia a filp->private data. / puntero a b u f f e r de cada device. / char k b u f f e r ; i n t hello open ( struct inode inode, struct f i l e f i l p ) { unsigned i n t minor number = im in or ( inode ) ; p r i n t k (KERN INFO h e l l o 4 : device %d opened\n, minor number ) ; / Para que l o s o t r o s metodos puedan obtener e l numero menor, l o guardo en e l campo p r i v a t e d a t a de l a e s t r u c t u r a f i l e. / f i l p >p r i v a t e d a t a = inode ; k b u f f e r = kmalloc ( s t r l e n ( INIT STRING ), GFP KERNEL ) ; memcpy ( ( char ) k b u f f e r, INIT STRING, s t r l e n ( INIT STRING ) + 1 ) ; return 0;

24 Semáforos del kernel Antes que nada... recursos del kernel Mandando a dormir al proceso desde el kernel Manejando eficientemente los bloqueos a procesos Escritura del dispositivo Primero instanciamos la estructura semaphore que define un semáforo del kernel, e inicializamos el semáforo en el método open(). / puntero a b u f f e r de cada device. / char k b u f f e r ; / Semáforos para s i n c r o n i z a r e l acceso a l b u f f e r. / struct semaphore sem ; i n t hello open ( struct inode inode, struct f i l e f i l p ) { unsigned i n t minor number = im in or ( inode ) ; p r i n t k (KERN INFO h e l l o 5 : device %d opened\n, minor number ) ; k b u f f e r =NULL ; s e m a i n i t (&sem, 1 ) ; / / liberado, para c o n t r o l de acceso a k b u f f e r return 0;

25 Tomando el semáforo Antes que nada... recursos del kernel Mandando a dormir al proceso desde el kernel Manejando eficientemente los bloqueos a procesos Escritura del dispositivo Una vez creado lo manejamos desde el método read (). Usamos la familia de funciones down () del kernel s s i z e t h e l l o r e a d ( struct f i l e f i l p, char u s e r buf, s i z e t count, l o f f t f p o s ) { i f (! d o w n i n t e r r u p t i b l e (&sem ) ) { k b u f f e r = kmalloc ( s t r l e n ( INIT STRING )+1, GFP KERNEL ) ; memcpy ( ( char ) k b u f f e r, INIT STRING, s t r l e n ( INIT STRING ) + 1 ) ; / copio e l contenido a l b u f f e r del usuario / i f ( copy to user ( buf, k b u f f e r, s t r l e n ( k b u f f e r ) ) ) { up(&sem ) ; p r i n t k (KERN INFO h e l l o 5 : E r r o r de Lectura en copy to user return EFAULT ;

26 liberando el semáforo Antes que nada... recursos del kernel Mandando a dormir al proceso desde el kernel Manejando eficientemente los bloqueos a procesos Escritura del dispositivo La función de liberación de un semáforo es: void up(struct semaphore *sem); else { up(&sem ) ; p r i n t k (KERN INFO h e l l o 5 : Lectura exitosa, %d bytes \n, s return s t r l e n ( k b u f f e r ) ; else { p r i n t k (KERN INFO h e l l o 5 : Lectura con e r r o r toma de semáforo \n ) ; return EFAULT ;

27 funciones down Prerequisitos Antes que nada... recursos del kernel Mandando a dormir al proceso desde el kernel Manejando eficientemente los bloqueos a procesos Escritura del dispositivo En el mundo Linux, la función P se llama down (o alguna variedad de ese nombre). down se refiere al hecho que su operación consiste en: decrementar el valor del semáforo, por lo general pone a dormir al proceso que invocó al método del módulo, hasta que el semáforo se libere, permitir el acceso a un recurso de manera segura

28 funciones down Prerequisitos Antes que nada... recursos del kernel Mandando a dormir al proceso desde el kernel Manejando eficientemente los bloqueos a procesos Escritura del dispositivo Hay tres variantes o versiones de down void down(struct semaphore *sem); int down interruptible(struct semaphore *sem); int down trylock(struct semaphore *sem); down decrementa el valor del semáforo y espera lo que resulte necesario. down interruptible hace lo mismo pero la operación es interrumpible. down trylock nunca duerme. Si el semáforo no está disponible al momento de la llamada, retorna immediatamente un valor no nulo.

29 Antes que nada... recursos del kernel Mandando a dormir al proceso desde el kernel Manejando eficientemente los bloqueos a procesos Escritura del dispositivo Versiones Interrumpibles vs. No Interrumpibles Debemos siempre tratar de utilizar la versión interrumpible de cualquier llamada para dormir un proceso, ya que permite.. que desde el espacio de usuario, el proceso que está dormido esperando (por un semáforo en este caso), pueda ser interrumpido por el usuario.

30 Antes que nada... recursos del kernel Mandando a dormir al proceso desde el kernel Manejando eficientemente los bloqueos a procesos Escritura del dispositivo Versiones Interrumpibles vs. No Interrumpibles Regla general No usar operaciones No interrumpibles, a menos que sea absolutamente necesario. Las operaciones No Interrumpibles son una excelente forma de crear procesos que no puedan ser terminados de ninguna manera posible (aparecen en estado D por Dreaded en la salida de ps). El uso de down interruptible requiere algunas precaucionea adicionales, sin embargo, al ser interrumpida la operación, la función retorna un valor no nulo, y el proceso llamante no mantiene el semaforo. Por lo tanto, el uso correcto de down interruptible requiere siempre chequear el valor retornado, y responder de manera acorde al proceso invocante.

31 Durmiendo y despertando al escribir Antes que nada... recursos del kernel Mandando a dormir al proceso desde el kernel Manejando eficientemente los bloqueos a procesos Escritura del dispositivo Antes de mirar este tramo de código, conviene abrir hello5.c y mirar la definición de file operations ;) s s i z e t h e l l o w r i t e ( struct f i l e f i l p, const char u s e r buf, s i z e t count, l o f f t f p o s ) { i f (! d o w n i n t e r r u p t i b l e (&sem ) ) { k f r e e ( k b u f f e r ) ; / destruyo e l b u f f e r a c t u a l / / / pido ( count ) bytes, especificados por e l usuario. k b u f f e r = kmalloc ( count, GFP KERNEL ) ; i f (! k b u f f e r ) { / s i hubo un e r r o r, devuelvo ENONMEM / p r i n t k (KERN INFO h e l l o 5 : E s c r i t u r a con e r r o r acceso a memoria \ k b u f f e r = NULL ; up(&sem ) ; return ENOMEM;

32 Durmiendo y despertando al escribir Antes que nada... recursos del kernel Mandando a dormir al proceso desde el kernel Manejando eficientemente los bloqueos a procesos Escritura del dispositivo / copio a k b u f f e r e l buf del usuario, s i hay e r r o r devuelvo EFAULT / i f ( copy from user ( k b u f f e r, buf, count ) ) { p r i n t k (KERN INFO h e l l o 5 : E s c r i t u r a con e r r o r en copy from user k f r e e ( k b u f f e r ) ; up(&sem ) ; return EFAULT ; else { p r i n t k (KERN INFO h e l l o 5 : E s c r i t u r a kmalloc para %d bytes \n, c p r i n t k (KERN INFO h e l l o 5 : %s \n, k b u f f e r ) ; up(&sem ) ; return count ; else { p r i n t k (KERN INFO h e l l o 5 : E s c r i t u r a con e r r o r toma de semaforo \n return EFAULT ; return 0;

33 Donde se pide? Prerequisitos Para usar una IRQ se la pedimos al kernel el handler bloquenado procesos Abrir holla6.c e ir al método open (). i n t hello open ( struct inode inode, struct f i l e f i l p ) { unsigned i n t minor number = im in or ( inode ) ; p r i n t k (KERN INFO h e l l o 6 : device %d opened\n, minor number ) ; k b u f f e r =NULL ; s e m a i n i t (&sem, 0 ) ; / / tomado, para c o n t r o l de acceso a k b u f f e r t i c k c o u n t e r = TICK RELOAD ; p r i n t k ( KERN INFO h e l l o 6 : Opening i r q device \n ) ; i f ( r e q u e s t i r q ( IRQ USED, &my handler, IRQF SHARED, h e l l o 6, ufa return EBUSY; p r i n t k ( KERN INFO h e l l o 6 : i r q t i c k c o u n t e r = %d\n, t i c k c o u n t e r ) ; p r i n t k ( KERN INFO h e l l o 6 : Salgo del Opening i r q device \n ) ; return 0;

34 que hacemos en el hadnler? Para usar una IRQ se la pedimos al kernel el handler bloquenado procesos Accedemos al hardware, y despertamos al proceso que ha sido bloqueado cuando solicitó los datos disponibles i r q r e t u r n t my handler ( i n t i r q, void dev id ) / /, s t r u c t p t r e g s re { t i c k c o u n t e r ; p r i n t k (KERN INFO h e l l o 6 : my handler con t i c k c o u n t e r= %d \n, t i c k c o i f (! t i c k c o u n t e r ) { p r i n t k (KERN INFO h e l l o 6 : t i c k c o u n t e r =0 l i b e r o sem \n ) ; t i c k c o u n t e r = TICK RELOAD ; up(&sem ) ; w a k e u p i n t e r r u p t i b l e (& tdig waitqueue ) ; return IRQ HANDLED ;

35 Para usar una IRQ se la pedimos al kernel el handler bloquenado procesos No lo habíamos hecho con semáforos? que mas? Utilizamos colas de mensaje / Waitqueue que usaremos en e l modo de espera. / DECLARE WAIT QUEUE HEAD( tdig waitqueue ) ; Cuando el proceso requiere los datos (invoca el método read () de nuestro módulo), lo bloqueamos hasta que los datos estén disponibles, utilizando otras funciones algo mas poderosas que los semáforos s s i z e t h e l l o r e a d ( struct f i l e f i l p, char u s e r buf, s i z e t cou p r i n t k (KERN INFO h e l l o 6 : Lectura ingreso \n ) ; i f (! d o w n i n t e r r u p t i b l e (&sem ) ) { k b u f f e r = kmalloc ( s t r l e n ( INIT STRING )+1, GFP KERNEL ) ; memcpy( ( char ) k b u f f e r, INIT STRING, s t r l e n ( INIT STRING ) + 1

36 Para usar una IRQ se la pedimos al kernel el handler bloquenado procesos No lo habíamos hecho con semáforos? que mas? Utilizamos colas de mensaje / Waitqueue que usaremos en e l modo de espera. / DECLARE WAIT QUEUE HEAD( tdig waitqueue ) ; Cuando el proceso requiere los datos (invoca el método read () de nuestro módulo), lo bloqueamos hasta que los datos estén disponibles, utilizando otras funciones algo mas poderosas que los semáforos s s i z e t h e l l o r e a d ( struct f i l e f i l p, char u s e r buf, s i z e t cou p r i n t k (KERN INFO h e l l o 6 : Lectura ingreso \n ) ; i f (! d o w n i n t e r r u p t i b l e (&sem ) ) { k b u f f e r = kmalloc ( s t r l e n ( INIT STRING )+1, GFP KERNEL ) ; memcpy( ( char ) k b u f f e r, INIT STRING, s t r l e n ( INIT STRING ) + 1

37 Para usar una IRQ se la pedimos al kernel el handler bloquenado procesos No lo habíamos hecho con semáforos? que mas? Utilizamos colas de mensaje / Waitqueue que usaremos en e l modo de espera. / DECLARE WAIT QUEUE HEAD( tdig waitqueue ) ; Cuando el proceso requiere los datos (invoca el método read () de nuestro módulo), lo bloqueamos hasta que los datos estén disponibles, utilizando otras funciones algo mas poderosas que los semáforos s s i z e t h e l l o r e a d ( struct f i l e f i l p, char u s e r buf, s i z e t cou p r i n t k (KERN INFO h e l l o 6 : Lectura ingreso \n ) ; i f (! d o w n i n t e r r u p t i b l e (&sem ) ) { k b u f f e r = kmalloc ( s t r l e n ( INIT STRING )+1, GFP KERNEL ) ; memcpy( ( char ) k b u f f e r, INIT STRING, s t r l e n ( INIT STRING ) + 1

38 Para usar una IRQ se la pedimos al kernel el handler bloquenado procesos No lo habíamos hecho con semáforos? que mas? i f ( copy to user ( buf, k b u f f e r, s t r l e n ( k b u f f e r ) ) ) / copio e l conte { up(&sem ) ; p r i n t k (KERN INFO h e l l o 6 : Lectura con e r r o r en copy to user \n return EFAULT ; else { / / up(&sem ) ; p r i n t k (KERN INFO h e l l o 6 : Lectura exitosa, %d bytes \n, s t r l e n return s t r l e n ( k b u f f e r ) ; else { p r i n t k (KERN INFO h e l l o 6 : Lectura con e r r o r toma de semaforo \n ) ; return EFAULT ;

LABORATORIO 2. La biblioteca a nivel de usuario semso (semáforos Sistemas Operativos) brinda las siguientes primitivas:

LABORATORIO 2. La biblioteca a nivel de usuario semso (semáforos Sistemas Operativos) brinda las siguientes primitivas: 1 Introducción LABORATORIO 2 En esta tarea se desea implementar un servicio sincronización de procesos a través de semáforos binarios con prioridad para el sistema operativo Linux. Para esto se deberá

Más detalles

Objetivos de la práctica: - Practicar uso de ficheros: abrir, cerrar y tratamiento de información contenida en el fichero.

Objetivos de la práctica: - Practicar uso de ficheros: abrir, cerrar y tratamiento de información contenida en el fichero. Objetivos de la práctica: - Practicar uso de ficheros: abrir, cerrar y tratamiento de información contenida en el fichero. Uso de Ficheros Todas las estructuras de datos vistas hasta ahora utilizan la

Más detalles

RESUMEN DE CONCEPTOS BASICOS DE PROGRAMACION JAVA

RESUMEN DE CONCEPTOS BASICOS DE PROGRAMACION JAVA UNED Centro Asociado de Cádiz RESUMEN DE CONCEPTOS BASICOS DE PROGRAMACION JAVA 1. OBJETOS Cualquier elemento del programa es un objeto. Un programa es un conjunto de objetos que se comunican entre sí

Más detalles

Examen de Fundamentos de sistemas distribuidos

Examen de Fundamentos de sistemas distribuidos Examen de Fundamentos de sistemas distribuidos Tiempo total: 2 horas Problema: Programa: Rendezvous con semáforos(5 puntos) Utilizando como único mecanismo de sincronización los semáforos descritos en

Más detalles

Memoria compartida y semáforos r/w. La página del manual que podría servir para describir estas funciones es la siguiente:

Memoria compartida y semáforos r/w. La página del manual que podría servir para describir estas funciones es la siguiente: (3 ptos) Memoria Compartida y Semáforos R/W 1. Objetivo En esta práctica se pretende crear una librería que dé la funcionalidad de un semáforo para resolver problemas con múltiples lectores y escritores

Más detalles

Interfaz de Programación del Controlador MCA

Interfaz de Programación del Controlador MCA Interfaz de Programación del Controlador MCA Alan Cox alan@redhat.com David Weinehall Chris Beauregard Interfaz de Programación del Controlador MCA por Alan Cox, David Weinehall, y Chris Beauregard Copyright

Más detalles

Introduccion al Lenguaje C. Omar Andrés Zapata Mesa Grupo de Fenomenología de Interacciones Fundamentales, (Gfif) Universidad de Antioquia

Introduccion al Lenguaje C. Omar Andrés Zapata Mesa Grupo de Fenomenología de Interacciones Fundamentales, (Gfif) Universidad de Antioquia Introduccion al Lenguaje C Omar Andrés Zapata Mesa Grupo de Fenomenología de Interacciones Fundamentales, (Gfif) Universidad de Antioquia Introducción C es un lenguaje de programación creado en 1972 por

Más detalles

Programación de Controladores para Linux

Programación de Controladores para Linux Programación de Controladores para Linux Edgardo E. Hames, Julio A. Bianco Revisión 2.0.1 (1740, 2012-09-27) 1. Introducción Linux es un clon del sistema operativo Unix, escrito desde cero por Linus Torvalds

Más detalles

Drivers para Linux embebido Martin Ribelotta

Drivers para Linux embebido Martin Ribelotta Drivers para Linux embebido Martin Ribelotta www.emtech.com.ar Temario Drivers en Linux Hola System-land Mundo! Recursos del Kernel IO-MEM, Direcciones Virtuales vs Reales Comunicándose con el user-land

Más detalles

Programación I: Funciones y módulos

Programación I: Funciones y módulos Programación I: Funciones y módulos Esteban De La Fuente Rubio 2 de abril de 23 Índice. Funciones.. Definición y llamado de funciones............................................. 2.2. Parámetros por omisión..................................................

Más detalles

En cualquier caso, tampoco es demasiado importante el significado de la "B", si es que lo tiene, lo interesante realmente es el algoritmo.

En cualquier caso, tampoco es demasiado importante el significado de la B, si es que lo tiene, lo interesante realmente es el algoritmo. Arboles-B Características Los árboles-b son árboles de búsqueda. La "B" probablemente se debe a que el algoritmo fue desarrollado por "Rudolf Bayer" y "Eduard M. McCreight", que trabajan para la empresa

Más detalles

Tecnólogo Informático- Estructuras de Datos y Algoritmos- 2009

Tecnólogo Informático- Estructuras de Datos y Algoritmos- 2009 Árboles Ejemplos de estructuras arborescentes: con forma de árbol Regla de Alcance: los objetos visibles en un procedimiento son aquellos declarados en él mismo o en cualquier ancestro de él (cualquier

Más detalles

Modulo 1 El lenguaje Java

Modulo 1 El lenguaje Java Modulo 1 El lenguaje Java 13 - Codificación en Java Una de las grandes diferencias entre Java y Pascal en cuando a la codificación es que Java se trata de un lenguaje de los llamados case sensitive Esto

Más detalles

Estructuras de Datos y Algoritmos Tecnólogo en Informática

Estructuras de Datos y Algoritmos Tecnólogo en Informática Estructuras de Datos y Algoritmos Tecnólogo en Informática INSTRUCTIVO DEL COMANDO MAKE ESTRUCTURAS DE DATOS Y ALGORITMOS - TECNÓLOGO EN INFORMÁTICA 1 Contenido Introducción... 3 El archivo makefile...

Más detalles

Sea el siguiente programa de nombre "c0p1" para copiar archivos (por simplicidad se ha eliminado todo control de errores): Se pide:

Sea el siguiente programa de nombre c0p1 para copiar archivos (por simplicidad se ha eliminado todo control de errores): Se pide: Sea el siguiente programa de nombre "c0p1" para copiar archivos (por simplicidad se ha eliminado todo control de errores): 1 /* c0p1 origen destino 2 * Copia "origen" sobre "destino" byte a byte, 3 * haciendo

Más detalles

LINUX - Los archivos de órdenes I

LINUX - Los archivos de órdenes I LINUX - Los archivos de órdenes I Objetivos: Se pretende introducir al alumno en el uso de los archivos de órdenes (conocidos como scripts) utilizando el lenguaje de programación propio del intérprete

Más detalles

Contenidos. Gestión dinámica de memoria. Gestión dinámica de memoria. Introducción. 1. Introducción 2. El operador NEW 3. El operador DELETE

Contenidos. Gestión dinámica de memoria. Gestión dinámica de memoria. Introducción. 1. Introducción 2. El operador NEW 3. El operador DELETE Contenidos 1. Introducción 2. El operador NEW 3. El operador DELETE 1 Introducción Hasta ahora hemos visto que cada vez que queremos usar una variable debemos reservarle un lugar de la memoria al comenzar

Más detalles

1. Ejemplo de clase : La clase Cuenta 2. Uso de la clase Cuenta. 3. Métodos y objetos receptores de mensajes (Importante)

1. Ejemplo de clase : La clase Cuenta 2. Uso de la clase Cuenta. 3. Métodos y objetos receptores de mensajes (Importante) 1. : La clase Cuenta. Uso de la clase Cuenta 3. Métodos y objetos receptores de mensajes (Importante) 1 Una clase para cuentas de un banco Vamos a modelar con una clase, un nuevo tipo de datos, donde los

Más detalles

SOLUCION EXAMEN junio 2006

SOLUCION EXAMEN junio 2006 SOLUCION EXAMEN junio 2006 1. Explique razonadamente si las siguientes afirmaciones son verdaderas o falsas: I) (1 p) En UNIX únicamente se distinguen dos tipos de procesos: los procesos de usuario y los

Más detalles

7. Manejo de Archivos en C.

7. Manejo de Archivos en C. 7. Manejo de Archivos en C. Los datos que hemos tratado hasta el momento han residido en la memoria principal. Sin embargo, las grandes cantidades de datos se almacenan normalmente en un dispositivo de

Más detalles

Entre los más conocidos editores con interfaz de desarrollo tenemos:

Entre los más conocidos editores con interfaz de desarrollo tenemos: Herramientas de programación Para poder programar en ensamblador se precisa de algunas herramientas básicas, como un editor para introducir el código, un ensamblador para traducir el código a lenguaje

Más detalles

Capítulo 3 Usando GUIDE. 3.1 Acerca de GUIDE

Capítulo 3 Usando GUIDE. 3.1 Acerca de GUIDE Capítulo 3 Usando GUIDE 3.1 Acerca de GUIDE Las interfaces gráficas de usuario (GUI - Graphical User Interface en inglés), es la forma en que el usuario interactúa con el programa o el sistema operativo

Más detalles

Un puntero no es más que una variable estática cuyo contenido es una dirección de memoria.

Un puntero no es más que una variable estática cuyo contenido es una dirección de memoria. Los punteros en C 1 Introducción Cómo se organiza la memoria asociada a un programa? Como una colección de posiciones de memoria consecutivas. En ellas se almacenan los distintos tipos de datos, que ocupan,

Más detalles

Se guardan en archivos con extencion c y los cabezales con extension h

Se guardan en archivos con extencion c y los cabezales con extension h Se guardan en archivos con extencion c y los cabezales con extension h Tipos de Variables: Tipo Tamaño(bytes) Limite inferior Limite superior char 1 -- -- unsigned char 1 0 255 short int 2-32768 +32767

Más detalles

Mensajes. (versión preliminar)

Mensajes. (versión preliminar) Mensajes (versión preliminar) Ejemplo: productor/consumidor con buffer de tamaño 0 void produce(item *p_it); void consume(item *p_it); int nmain() { ntask cons= nemittask(consproc); ntask prod= nemittask(prodproc,

Más detalles

Tema 5: Diseño modular. Índice. Notas. Programación 2. Curso 2014-2015. Notas. Ejemplo. La herramienta make. 1 Diseño modular.

Tema 5: Diseño modular. Índice. Notas. Programación 2. Curso 2014-2015. Notas. Ejemplo. La herramienta make. 1 Diseño modular. : Programación 2 Curso 2014-2015 Índice 1 2 3 (1/2) Cuando el programa crece es necesario dividirlo en módulos Cada módulo agrupa una serie de funciones con algo en común El módulo puede reutilizarse en

Más detalles

Objetivo: Introducción conceptual y aplicación básica de los lenguajes del lado del servidor.

Objetivo: Introducción conceptual y aplicación básica de los lenguajes del lado del servidor. Sesión 03: Lenguajes web del servidor Competencias a Conseguir: - Conocer el entorno de trabajo a nivel de servidores web. - Instalación del localhost (Servidor Local). - Repaso general de PHP y ejercicios

Más detalles

Clase 3: Archivos (texto, csv, dbf, Excel)

Clase 3: Archivos (texto, csv, dbf, Excel) Archivos Clase 3: Archivos (texto, csv, dbf, Excel) En líneas generales los archivos se leen y se escriben en 3 pasos: Lectura: 1. Abrir (open) 2. Leer (read, readlines, readline) 3. Cerrar (close) Escritura:

Más detalles

Práctica 00: Compilador

Práctica 00: Compilador Práctica 00: Compilador El objetivo de esta práctica es aprender a utilizar el compilador y el entorno de desarrollo instalado en las aulas de la Escuela Técnica Superior de Ingeniería ICAI. 1. Compiladores

Más detalles

Práctica 3 de Redes de Área Local Cliente y Servidor de ficheros concurrente

Práctica 3 de Redes de Área Local Cliente y Servidor de ficheros concurrente Práctica 3 de Redes de Área Local Cliente y Servidor de ficheros concurrente 3 o curso de Ingeniería Técnica en Informática de Sistemas 13 de abril de 2007 El objetivo de esta práctica es realizar una

Más detalles

TEMA 8: ESTRUCTURAS DE DATOS COMPLEJAS 1 VECTORES ESTÁTICOS 2 2 CADENAS O VECTORES DE CARACTERES 6 3 PASO DE CADENAS Y ARRAYS A FUNCIONES 8

TEMA 8: ESTRUCTURAS DE DATOS COMPLEJAS 1 VECTORES ESTÁTICOS 2 2 CADENAS O VECTORES DE CARACTERES 6 3 PASO DE CADENAS Y ARRAYS A FUNCIONES 8 TEMA 8: ESTRUCTURAS DE DATOS COMPLEJAS 1 VECTORES ESTÁTICOS 2 1.1 VECTORES O ARRAYS UNIDIMENSIONALES 2 1.2 ARRAYS MULTIDIMENSIONALES 3 1.3 INICIALIZACIÓN DE ARRAYS 4 1.3.1 INICIALIZACIÓN DE ARRAYS SIN

Más detalles

Programación Orientada a Objetos con Java

Programación Orientada a Objetos con Java Programación Orientada a Objetos con Java M.C. Jorge Eduardo Ibarra Esquer jorgeeie@uabc.mx Sobrecarga de métodos Java permite la definición de dos o más métodos que tengan el mismo nombre, dentro de la

Más detalles

La plantilla propone aprovechar esta estructura en común y sólo modificar el contenido del área del documento que sea diferente.

La plantilla propone aprovechar esta estructura en común y sólo modificar el contenido del área del documento que sea diferente. PLANTILLAS EN PHP El concepto de plantilla, es un criterio del desarrollo web que propone optimizar la cantidad de documentos HTML que se usan en el desarrollo de un sitio web. A lo largo de la navegación

Más detalles

Prof. Dr. Paul Bustamante

Prof. Dr. Paul Bustamante Carnet Nombre: Examen C++ Grupo A Informática II Fundamentos de Programación Prof. Dr. Paul Bustamante Pág.1 Índice 1. INTRODUCCIÓN... 1 2. EJERCICIO 1: AGENDA TELEFÓNICA (4.0 PTOS.)...1 3. EJERCICIO 2:

Más detalles

Sistemas Operativos Práctica 4

Sistemas Operativos Práctica 4 Sistemas Operativos Práctica 4 Ing. Andrés Bustamante afbustamanteg@unal.edu.co Ingeniería de Sistemas Facultad de Ingeniería Universidad de la Amazonia 2009 1. Objetivo El objetivo de la práctica es que

Más detalles

Tipos de variables en Visual Basic (integer, single, double, string, object, etc.). Ejemplos. (CU00308A)

Tipos de variables en Visual Basic (integer, single, double, string, object, etc.). Ejemplos. (CU00308A) aprenderaprogramar.com Tipos de variables en Visual Basic (integer, single, double, string, object, etc.). Ejemplos. (CU00308A) Sección: Cursos Categoría: Curso Visual Basic Nivel I Fecha revisión: 2029

Más detalles

CDI Exclusión mutua a nivel alto. conceptos

CDI Exclusión mutua a nivel alto. conceptos conceptos El concepto de usar estructuras de datos a nivel alto libera al programador de los detalles de su implementación. El programador puede asumir que las operaciones están implementadas correctamente

Más detalles

Capítulo 6. Introducción a la POO

Capítulo 6. Introducción a la POO Capítulo 6. Introducción a la POO 6. 1. Clases, Objetos y Métodos Definición La Programación Orientada a Objetos (POO) es una forma especial de programar, más cercana a cómo expresaríamos las cosas en

Más detalles

Concurrencia. Primitivas IPC con bloqueo

Concurrencia. Primitivas IPC con bloqueo Concurrencia Primitivas IPC con bloqueo Primitivas de IPC con bloqueo La solución de Peterson es correcta, pero tiene el defecto de requerir espera ocupada: Cuando un proceso quiere entrar en su región

Más detalles

Organización de Computadoras

Organización de Computadoras Organización de Computadoras Departamento de Ciencias e Ingeniería de la Computación Universidad Nacional del Sur Segundo Cuatrimestre de 2015 Proyecto N 1 Programación en Lenguaje C El objetivo principal

Más detalles

Curso PHP Módulo 1 R-Luis

Curso PHP Módulo 1 R-Luis Lenguaje PHP Introducción Archivos HTML y PHP: Crear un archivo php es tan sencillo como cambiarle la extensión a un archivo html, por ejemplo podemos pasar de index.html a index.php sin ningún inconveniente.

Más detalles

Parallel Virtual File System (PVFS)

Parallel Virtual File System (PVFS) Parallel Virtual File System (PVFS) Introducción: El sistema de archivos paralelo Parallel Virtual File System, permite a las distintas aplicaciones (paralelas y seriales) almacenar data en servidores

Más detalles

Esta extensión está obsoleta a partir de PHP 5.5.0, y será eliminada en el futuro

Esta extensión está obsoleta a partir de PHP 5.5.0, y será eliminada en el futuro USAR MYSQL EN PHP PHP tiene una librería de funciones nativas para conectarse a las base de datos MySQL. Por un lado reconoce la librería mysql y por otro mysqli. Se recomienda el uso de mysqli dado que

Más detalles

Sistemas Operativos. Curso 2016 Procesos

Sistemas Operativos. Curso 2016 Procesos Sistemas Operativos Curso 2016 Procesos Agenda Proceso. Definición de proceso. Contador de programa. Memoria de los procesos. Estados de los procesos. Transiciones entre los estados. Bloque descriptor

Más detalles

INSTALACIÓN DEL TARJETERO CRIPTOGRÁFICO Y LAS TARJETAS EN GUADALINEX EDU 10.0.4.

INSTALACIÓN DEL TARJETERO CRIPTOGRÁFICO Y LAS TARJETAS EN GUADALINEX EDU 10.0.4. INSTALACIÓN DEL TARJETERO CRIPTOGRÁFICO Y LAS TARJETAS EN GUADALINEX EDU 10.0.4. Las tarjetas CardOS M4 son tarjetas criptográficas fabricadas por Siemens y emitidas, entre otros, por la Junta de Andalucía.

Más detalles

SOLUCIÓN CASO GESTIÓN DE COMPRAS

SOLUCIÓN CASO GESTIÓN DE COMPRAS SOLUCIÓN CASO GESTIÓN DE COMPRAS Comenzamos por abrir un libro de trabajo y lo guardaremos con el nombre Compras. 1) En primer lugar resolveremos el primer apartado en la hoja 1 del libro de trabajo procediendo

Más detalles

Abelardo Pardo. Iria Estévez Ayres. Damaris Fuentes Lorenzo. Pablo Basanta Val. Pedro J. Muñoz Merino. Hugo A. Parada.

Abelardo Pardo. Iria Estévez Ayres. Damaris Fuentes Lorenzo. Pablo Basanta Val. Pedro J. Muñoz Merino. Hugo A. Parada. Arquitectura de sistemas Abelardo Pardo University of Sydney School of Electrical and Information Engineering NSW, 2006, Australia Autor principal del curso de 2009 a 2012 Iria Estévez Ayres Damaris Fuentes

Más detalles

Tutorial: Primeros Pasos con Subversion

Tutorial: Primeros Pasos con Subversion Tutorial: Primeros Pasos con Subversion Introducción Subversion es un sistema de control de versiones open source. Corre en distintos sistemas operativos y su principal interfaz con el usuario es a través

Más detalles

El lenguaje de Programación C. Fernando J. Pereda <ferdy@gentoo.org>

El lenguaje de Programación C. Fernando J. Pereda <ferdy@gentoo.org> El lenguaje de Programación C Fernando J. Pereda Por qué aprender C? Portable y muy extendido Estándar (C89, C99) El lenguaje de los sistemas Un lenguaje fácil (no, no es broma) Por

Más detalles

INSTITUTO POLITÉCNICO NACIONAL ESCUELA SUPERIOR DE INGENIERÍA MECÁNICA Y ELÉCTRICA UNIDAD CULHUACÁN INTEGRANTES

INSTITUTO POLITÉCNICO NACIONAL ESCUELA SUPERIOR DE INGENIERÍA MECÁNICA Y ELÉCTRICA UNIDAD CULHUACÁN INTEGRANTES INSTITUTO POLITÉCNICO NACIONAL ESCUELA SUPERIOR DE INGENIERÍA MECÁNICA Y ELÉCTRICA UNIDAD CULHUACÁN INTEGRANTES CÁRDENAS ESPINOSA CÉSAR OCTAVIO racsec_05@hotmail.com Boleta: 2009350122 CASTILLO GUTIÉRREZ

Más detalles

IPC SYSTEM V. Técnicas Digitales III Ing. Gustavo Nudelman 2011. Universidad Tecnológica Nacional - Facultad Regional Buenos Aires

IPC SYSTEM V. Técnicas Digitales III Ing. Gustavo Nudelman 2011. Universidad Tecnológica Nacional - Facultad Regional Buenos Aires IPC SYSTEM V Técnicas Digitales III Ing. Gustavo Nudelman 2011 IPC System V En la década del 70, se incorpora a Unix una gran cantidad de funcionalidades llamadas System V entre las cuales aparecen tres

Más detalles

TERMINAL DE COMANDOS (RED HAT, CENTOS Y FEDORA)

TERMINAL DE COMANDOS (RED HAT, CENTOS Y FEDORA) TERMINAL DE COMANDOS (RED HAT, CENTOS Y FEDORA) Ya que estos sistemas operativos son muy parecidos entres si los comandos que se utilizan en ellos son iguales a excepción de alguno que difieren entre sí

Más detalles

LnxComm. Linux Communication. Fernando Pujaico Rivera

LnxComm. Linux Communication. Fernando Pujaico Rivera LnxComm Linux Communication Fernando Pujaico Rivera LnxComm : Linux Communication por Fernando Pujaico Rivera Copyright 2011 GPL (http://www.gnu.org/licenses/gpl.html)

Más detalles

INSTRUCTIVO DEL COMANDO MAKE

INSTRUCTIVO DEL COMANDO MAKE INSTRUCTIVO DEL COMANDO MAKE Introducción Un programa escrito en C está normalmente compuesto por varios archivos. Estos archivos se van modificando según se va completando o cambiando el programa. Cada

Más detalles

Ejercicios - Persistencia en Android: ficheros y SQLite

Ejercicios - Persistencia en Android: ficheros y SQLite Ejercicios - Persistencia en Android: ficheros y SQLite Índice 1 Uso de ficheros (0.5 puntos)...2 2 Persistencia con ficheros (0.5 puntos)...3 3 Base de datos: SQLiteOpenHelper (0.5 puntos)... 3 4 Base

Más detalles

Introducción al tipo de dato ARRAY

Introducción al tipo de dato ARRAY CONTENIDOS. Introducción al tipo de dato ARRAY. Definición, Características, Declaración, Acceso e Inicialización.. Arrays multidimensionales Definición, Declaración, Acceso e Inicialización. Introducción

Más detalles

Selección de los puntos de montaje

Selección de los puntos de montaje PARTICIONES PARA LINUX Selección de los puntos de montaje Tanto para aquellos que vayan a instalar ahora, como para quienes quieran cambiar el tamaño de una partición o formatear este apunte (resumen de

Más detalles

Problemas de Redes de Computadores. Conjunto de problemas 1

Problemas de Redes de Computadores. Conjunto de problemas 1 Problemas de Redes de Computadores. Ingeniería Técnica en Informática de Gestión Conjunto de problemas 1 Pregunta 1.1: Si configuro mi servidor Web para que no acepte conexiones desde la dirección IP 130.206.1.1,

Más detalles

Sistemas de archivos distribuidos. Alvaro Ospina Sanjuan alvaro.ospina@correo.upb.edu.co

Sistemas de archivos distribuidos. Alvaro Ospina Sanjuan alvaro.ospina@correo.upb.edu.co Sistemas de archivos distribuidos Alvaro Ospina Sanjuan alvaro.ospina@correo.upb.edu.co >Abstracción del sistema operativo para representar y organizar los recursos de almacenamiento >Se debe hacer la

Más detalles

Preliminares. Tipos de variables y Expresiones

Preliminares. Tipos de variables y Expresiones Preliminares. Tipos de variables y Expresiones Felipe Osorio Instituto de Estadística Pontificia Universidad Católica de Valparaíso Marzo 5, 2015 1 / 20 Preliminares Computadoras desarrollan tareas a un

Más detalles

1. LIBRERÍA DEL USB: MPUSBAPI.DLL

1. LIBRERÍA DEL USB: MPUSBAPI.DLL 1. LIBRERÍA DEL USB: MPUSBAPI.DLL 1.1. INRODUCCIÓN Para una mayor facilidad de desarrollo de aplicaciones basadas en el bus USB, Microchip ha creado un archivo dll en el que proporciona las funciones de

Más detalles

Uso de Visual C++ Pre-Practica No. 3

Uso de Visual C++ Pre-Practica No. 3 Pre-Practica No. 3 Uso de Visual C++ Microsoft Visual C++ 2010 es una versión de Visual Studio específica para el lenguaje de programación C++. Es un entorno de desarrollo muy completo y profesional. Por

Más detalles

CASO PRÁCTICO DISTRIBUCIÓN DE COSTES

CASO PRÁCTICO DISTRIBUCIÓN DE COSTES CASO PRÁCTICO DISTRIBUCIÓN DE COSTES Nuestra empresa tiene centros de distribución en tres ciudades europeas: Zaragoza, Milán y Burdeos. Hemos solicitado a los responsables de cada uno de los centros que

Más detalles

Curso de Python Inicial

Curso de Python Inicial Logo IAA-CSIC Curso organizado por el Gabinete de Formación del CSIC Curso de Python Inicial Clases Contenidos 1. Paradigmas de la Programación 2. Programación Orientada a objetos 3. Clases 4. Objetos

Más detalles

Definiciones. Tema 21_Módulos Menú 1

Definiciones. Tema 21_Módulos Menú 1 Definiciones Un menú es una lista de opciones o de órdenes que forman parte de un mismo título, mediante los cuales se podrán seleccionar determinadas operaciones de la aplicación. El conjunto de todos

Más detalles

FACULTAD DE INGENIERÍA, U.B.A. Seminario de Sistemas Embebidos TRABAJO PRÁCTICO 0

FACULTAD DE INGENIERÍA, U.B.A. Seminario de Sistemas Embebidos TRABAJO PRÁCTICO 0 1 er Cuatrimestre de 2011 FACULTAD DE INGENIERÍA, U.B.A. Seminario de Sistemas Embebidos TRABAJO PRÁCTICO 0 Índice 1. Objetivo 2 2. Preparación del software 2 2.1. Instalación.......................................

Más detalles

En esta unidad añadiremos información sobre EXT3 y trabajaremos con aspectos visibles que nos proporcionan estos sistemas de archivos.

En esta unidad añadiremos información sobre EXT3 y trabajaremos con aspectos visibles que nos proporcionan estos sistemas de archivos. ESTRUCTURA DEL SISTEMA DE ARCHIVOS 1. Introducción. En la unidad anterior se esbozó mediante la explicación de los formatos del disco duro, distintos tipos de sistemas de archivos: FAT16, FAT32, NTFS y

Más detalles

ALGORITMICA Y PROGRAMACION POR OBJETOS I

ALGORITMICA Y PROGRAMACION POR OBJETOS I ALGORITMICA Y PROGRAMACION POR OBJETOS I Nivel 2 Definiendo situaciones y manejando casos Marcela Hernández Hoyos Qué vamos a aprender en este nivel: Diferencia entre clase y objeto Modelar características

Más detalles

Tema 4. Gestión de entrada/salida

Tema 4. Gestión de entrada/salida Tema 4. Gestión de entrada/salida 1. Principios de la gestión de E/S. 1.Problemática de los dispositivos de E/S. 2.Objetivos generales del software de E/S. 3.Principios hardware de E/S. 1. E/S controlada

Más detalles

Práctica 3ProgramacionRS232: Programación básica de la RS232

Práctica 3ProgramacionRS232: Programación básica de la RS232 Práctica 3ProgramacionRS232: Programación básica de la RS232 1 Objetivos El objetivo de esta práctica es la iniciación del alumno en la programación de las comunicaciones en un entorno de desarrollo basado

Más detalles

Tema 6. Reutilización de código. Programación 2015-2016. Programación - Tema 6: Reutilización de código

Tema 6. Reutilización de código. Programación 2015-2016. Programación - Tema 6: Reutilización de código Tema 6 Reutilización de código Programación 2015-2016 Programación - Tema 6: Reutilización de código 1 Tema 6. Reutilización de código Modularidad. Implementación de métodos. Uso de métodos. Programación

Más detalles

Curso de PHP con MySQL Gratis

Curso de PHP con MySQL Gratis Curso de PHP con MySQL Gratis Introducción Este mini curso o mini tutorial de PHP le ayudará a realizar cualquier sistema para que pueda insertar uno o varios registros a una base de datos con MySQL, este

Más detalles

Clases y Objetos. Informática II Ingeniería Electrónica

Clases y Objetos. Informática II Ingeniería Electrónica Clases y Objetos Informática II Ingeniería Electrónica Los Tipos de Datos Hasta ahora, en un programa podemos usar para representar variables a: Tipos fundamentales : enteros (int), caracteres (char),

Más detalles

Armando Ilich Torres Vázquez. Creacion de la base de datos utilizando wampserver. Introducimos la contraseña en la consola de mysql

Armando Ilich Torres Vázquez. Creacion de la base de datos utilizando wampserver. Introducimos la contraseña en la consola de mysql Creacion de la base de datos utilizando wampserver Introducimos la contraseña en la consola de mysql Creamos la base de datos alumnos Creamos las tablas Insertando valores en la tabla Al final tenemos

Más detalles

El lenguaje C. #define MAX LINEA 1000 /* maximo tamanio de linea de entrada */

El lenguaje C. #define MAX LINEA 1000 /* maximo tamanio de linea de entrada */ Principios de Programación El lenguaje C 1. Variables locales y globales 1.1. Variables locales Las funciones permiten al programador modularizar un programa. Todas las variables declaradas en las definiciones

Más detalles

Objetos y Clases en Java. ELO 329: Diseño y Programación Orientados a Objetos

Objetos y Clases en Java. ELO 329: Diseño y Programación Orientados a Objetos Objetos y Clases en Java ELO 329: Diseño y Programación Orientados a Objetos 1 Elementos de Análisis y Diseño orientado a objetos Notación y relaciones entre clases: Las clases son abstracciones para los

Más detalles

Esquema de un programa en C: bloques básicos

Esquema de un programa en C: bloques básicos Esquema de un programa en C: bloques básicos // Incluimos los ficheros de cabecera que necesitemos. // Esto es un comentario #include #include // Si queremos definir alguna constante,

Más detalles

Creacion de Script. Que es un Script?

Creacion de Script. Que es un Script? Creacion de Script Que es un Script? Los scripts son un conjunto de instrucciones generalmente almacenadas en un archivo de texto que deben ser interpretados línea a línea en tiempo real para su ejecución,

Más detalles

Contenidos. Archivos en C++ Archivos en C++ Introducción

Contenidos. Archivos en C++ Archivos en C++ Introducción Contenidos 1. Introducción. 2. Manipulación de ficheros. 3. Organización de archivos. 4. Tipo de almacenamiento. 5. Biblioteca de flujos. 6. Operaciones asociadas a archivos: Abrir fichero, Cerrar fichero,

Más detalles

Visual Basic 1. Empleo de módulos y Procedimientos. Procedimientos definidos por el usuario

Visual Basic 1. Empleo de módulos y Procedimientos. Procedimientos definidos por el usuario Empleo de módulos y Procedimientos Procedimientos definidos por el usuario Según lo que hemos visto hasta ahora, Visual Basic, almacena el código en módulos. Hay tres clases de módulos: formularios (.frm),

Más detalles

FORMACIÓN DE EQUIPOS DE E-LEARNING 2.0 MÓDULO DE DISEÑO Y PRODUCCIÓN DE MATERIALES UNIDAD 6 B

FORMACIÓN DE EQUIPOS DE E-LEARNING 2.0 MÓDULO DE DISEÑO Y PRODUCCIÓN DE MATERIALES UNIDAD 6 B 141 1 FORMACIÓN DE EQUIPOS DE E-LEARNING 2.0 Unidad 6 B 142 2 Índice SEGUIMIENTO DE PERSONAS 1 INFORMES 2 143 3 SEGUIMIENTO DE PERSONAS E INFORMES EN MOODLE El seguimiento de los participantes en Moodle

Más detalles

Constructores y Destructores

Constructores y Destructores Ya se ha apuntado que C++ no permite crear objetos sin dar un valor inicial apropiado a todas sus variables miembro. Esto se hace por medio de unas funciones llamadas constructores, que se llaman automáticamente

Más detalles

Examen Junio- Grupo A Lunes 17 de Junio - Programación en C++ Pág. 1

Examen Junio- Grupo A Lunes 17 de Junio - Programación en C++ Pág. 1 Examen Junio- Grupo A Lunes 17 de Junio - Programación en C++ Pág. 1 ÍNDICE ÍNDICE... 1 1.1 Ejercicio 1: Máquina Expendedora (3.5 ptos.)... 1 1.2 Ejercicio 2: Clase Circulo (1.0 pto.)... 3 1.3 Ejercicio

Más detalles

TUTORIAL DE PHP. M. en C. Erika Vilches. Parte 2. http://www.erikavilches.com

TUTORIAL DE PHP. M. en C. Erika Vilches. Parte 2. http://www.erikavilches.com TUTORIAL DE PHP M. en C. Erika Vilches Parte 2 http://www.erikavilches.com Enunciados Condicionales Inicia con la palabra clave if seguida de una condición entre paréntesis $number = 5; if ($number < 10)

Más detalles

Manejo de versiones 392

Manejo de versiones 392 Manejo de versiones 392 El desarrollo de software es un trabajo en equipo y cierto grado de confusión es inevitable. No puedo reproducir el error en esta versión! Qué pasó con el arreglo de la semana pasada?

Más detalles

Introducción a la programación orientada a objetos

Introducción a la programación orientada a objetos Introducción a la programación orientada a objetos 1. Introducción a la programación orientada a objetos 2. Las clases 3. El tipo Struct 4. Diferencias entre Class y Struct 5. Pilares de la Programación

Más detalles

Gestión de Permisos. Bizagi Suite. Copyright 2014 Bizagi

Gestión de Permisos. Bizagi Suite. Copyright 2014 Bizagi Gestión de Permisos Bizagi Suite Gestión de Permisos 1 Tabla de Contenido Gestión de Permisos... 3 Definiciones... 3 Rol... 3 Perfil... 3 Permiso... 3 Módulo... 3 Privilegio... 3 Elementos del Proceso...

Más detalles

Curso de Excel Avanzado

Curso de Excel Avanzado Curso de Excel Avanzado J. David Moreno TRABAJANDO CON RANGOS J. David Moreno 1 3 Para programar correctamente en VBA y trabajar con Excel es obligatorio aprender a trabajar con rangos (seleccionar, copiar,

Más detalles

Parallel Virtual File System (PVFS)

Parallel Virtual File System (PVFS) Introducción: Es un sistema de archivos paralelo que permite a las aplicaciones paralelas y seriales almacenar y recuperar datos desde de un conjuto de nodos o servidores de I/O unidos a través de la red.

Más detalles

Instituto Tecnológico de Las Américas (ITLA)

Instituto Tecnológico de Las Américas (ITLA) Instituto Tecnológico de Las Américas (ITLA) Sistema Operativo 3 (SO3) Abel Eliezer Mejía Amador Matricula: 2011-3891 How to: Creación de Scripts Scripts Qué es un Shell script en Linux? Shell es un programa

Más detalles

la red de Internet PRODIGY para poder tener acceso al sistema RAGNVALD vía Internet

la red de Internet PRODIGY para poder tener acceso al sistema RAGNVALD vía Internet Capítulo 5. Monitoreo Remoto En este capítulo se detallará lo referente a la configuración del instrumento virtual y la red de Internet PRODIGY para poder tener acceso al sistema RAGNVALD vía Internet

Más detalles

GUÍA RÁPIDA DE TRABAJOS CON ARCHIVOS.

GUÍA RÁPIDA DE TRABAJOS CON ARCHIVOS. GUÍA RÁPIDA DE TRABAJOS CON ARCHIVOS. 1 Direcciones o Ubicaciones, Carpetas y Archivos Botones de navegación. El botón Atrás permite volver a carpetas que hemos examinado anteriormente. El botón Arriba

Más detalles

Buceando en los MCUs Freescale...

Buceando en los MCUs Freescale... COMENTARIO TÉCNICO Buceando en los MCUs Freescale... Por Ing. Daniel Di Lella Dedicated Field Application Engineer www.edudevices.com.ar dilella@arnet.com.ar Serie Flexis...... Como migrar de 8 a 32 Bits

Más detalles

SISTEMAS OPERATIVOS AVANZADOS

SISTEMAS OPERATIVOS AVANZADOS SISTEMAS OPERATIVOS AVANZADOS TEMA 3 CLAVE: MIS 204 PROFESOR: M.C. ALEJA DRO GUTIÉRREZ DÍAZ 3. PROCESOS CONCURRENTES 3.1 Conceptos de programación concurrente 3.2 El problema de la sección crítica 3.3

Más detalles

PHP y MySQL. Inicio: - Herencia - Palabra clave Final - Polimorfismo - Type Hinting - Abstracción de clases

PHP y MySQL. Inicio: - Herencia - Palabra clave Final - Polimorfismo - Type Hinting - Abstracción de clases PHP y MySQL Inicio: - Herencia - Palabra clave Final - Polimorfismo - Type Hinting - Abstracción de clases Herencia de Objetos La herencia permite crear muchas clases que son similares entre si, sin tener

Más detalles

Repaso sobre lectura de datos desde la línea de comandos, manejo de memoria dinámica e introducción a la librería GSL

Repaso sobre lectura de datos desde la línea de comandos, manejo de memoria dinámica e introducción a la librería GSL Clase No. 5: Repaso sobre lectura de datos desde la línea de comandos, manejo de memoria dinámica e introducción a la librería GSL MAT 251 Dr. Alonso Ramírez Manzanares CIMAT, A.C. e-mail: alram@ cimat.mx

Más detalles

Introducción a la Programación en MATLAB

Introducción a la Programación en MATLAB Introducción a la Programación en MATLAB La programación en MATLAB se realiza básicamente sobre archivos M, o M-Files. Se los denomina de esta forma debido a su extensión.m. Estos archivos son simple archivos

Más detalles

Construcción de Escenarios

Construcción de Escenarios Construcción de Escenarios Consiste en observar los diferentes resultados de un modelo, cuando se introducen diferentes valores en las variables de entrada. Por ejemplo: Ventas, crecimiento de ventas,

Más detalles

HERRAMIENTA DE COMPRESIÓN Y CIFRADO

HERRAMIENTA DE COMPRESIÓN Y CIFRADO Programa de COMPRESIÓN Y CIFRADO SECRETZIP (sólo Windows). El programa se incluye con la unidad USB Flash. Consulte el manual de la unidad USB Flash o visite integralmemory.com para descargar el programa

Más detalles

Información sobre la configuración de una aplicación para transmitir datos ASCII por puerto serie, con pantallas terminales Magelis.

Información sobre la configuración de una aplicación para transmitir datos ASCII por puerto serie, con pantallas terminales Magelis. Información sobre la configuración de una aplicación para transmitir datos ASCII por puerto serie, con pantallas terminales Magelis. Materiales: En la confección de la presente Nota de Aplicación se utilizó

Más detalles