Linux Devices DriversDesarrollo de un char device
|
|
- María Concepción Carrasco Villalba
- hace 8 años
- Vistas:
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:
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 detallesObjetivos 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 detallesRESUMEN 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 detallesExamen 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 detallesMemoria 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 detallesInterfaz 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 detallesIntroduccion 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 detallesProgramació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 detallesDrivers 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 detallesProgramació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 detallesEn 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 detallesTecnó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 detallesModulo 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 detallesEstructuras 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 detallesSea 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 detallesLINUX - 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 detallesContenidos. 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 detalles1. 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 detallesSOLUCION 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 detalles7. 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 detallesEntre 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 detallesCapí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 detallesUn 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 detallesSe 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 detallesMensajes. (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 detallesTema 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 detallesObjetivo: 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 detallesClase 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 detallesPrá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 detallesPrá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 detallesTEMA 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 detallesProgramació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 detallesLa 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 detallesProf. 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 detallesSistemas 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 detallesTipos 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 detallesCDI 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 detallesCapí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 detallesConcurrencia. 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 detallesOrganizació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 detallesCurso 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 detallesParallel 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 detallesEsta 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 detallesSistemas 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 detallesINSTALACIÓ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 detallesSOLUCIÓ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 detallesAbelardo 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 detallesTutorial: 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 detallesEl 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 detallesINSTITUTO 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 detallesIPC 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 detallesTERMINAL 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 detallesLnxComm. 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 detallesINSTRUCTIVO 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 detallesEjercicios - 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 detallesIntroducció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 detallesSelecció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 detallesProblemas 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 detallesSistemas 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 detallesPreliminares. 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 detalles1. 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 detallesUso 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 detallesCASO 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 detallesCurso 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 detallesDefiniciones. 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 detallesFACULTAD 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 detallesEn 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 detallesALGORITMICA 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 detallesTema 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 detallesPrá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 detallesTema 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 detallesCurso 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 detallesClases 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 detallesArmando 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 detallesEl 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 detallesObjetos 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 detallesEsquema 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 detallesCreacion 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 detallesContenidos. 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 detallesVisual 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 detallesFORMACIÓ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 detallesConstructores 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 detallesExamen 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 detallesTUTORIAL 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 detallesManejo 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 detallesIntroducció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 detallesGestió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 detallesCurso 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 detallesParallel 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 detallesInstituto 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 detallesla 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 detallesGUÍ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 detallesBuceando 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 detallesSISTEMAS 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 detallesPHP 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 detallesRepaso 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 detallesIntroducció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 detallesConstrucció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 detallesHERRAMIENTA 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 detallesInformació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