Protocolos de Comunicaciones

RolankUTN
3 Jan 202450:39

Summary

TLDREl script proporciona una descripción detallada sobre la creación de protocolos de comunicación entre módulos en un entorno de programación. Se discute la serialización de mensajes, la importancia de la comprensión del tamaño de los datos y cómo enviar y recibir paquetes de información entre el kernel y la memoria. Se destaca la necesidad de funciones genéricas para agregar y extraer diferentes tipos de datos a un buffer, como enteros, cadenas de caracteres y otros tipos de mensajes, y se abordan técnicas para manejar la memoria dinámicamente. Además, se menciona la importancia del código de operación para la serialización y deserialización de paquetes, asegurando que los datos se envíen y se reciban en el orden correcto. El video finaliza con una demostración de la aplicación de estos conceptos en la creación de una consola interactiva, destacando la interacción entre procesos y la gestión de prioridades.

Takeaways

  • 📝 Se discute la creación de protocolos para el envío de mensajes entre módulos en un sistema operativo.
  • 🔌 Se menciona la importancia de la serialización de mensajes y se hace referencia a una guía de serialización para evitar errores.
  • 💾 Se explica el proceso de envío de un mensaje desde un módulo, como el kernel, hacia la memoria, utilizando una función de envío de paquete.
  • 🔗 Se destaca la recepción de mensajes en la memoria, donde un bucle `while` espera y bloquea hasta recibir algo a través de un socket.
  • 📦 Se describe la estructura de los mensajes, que incluyen un código de operación, tamaño y el propio contenido del mensaje (payload).
  • ⚙️ Se detalla cómo se genera y maneja un buffer (`wofer`) que contiene información serializada para su envío y recepción.
  • 🔄 Se nombra la función `receive` como clave para extraer la información del buffer y convertirla en una estructura de datos utilizable.
  • 📚 Se sugiere la creación de funciones genéricas para agregar y extraer diferentes tipos de datos al buffer, como enteros (`int`), cadenas de caracteres (`char asterisco`) y otros.
  • 🧩 Se habla sobre el manejo de memoria dinámica, incluyendo la reserva y liberación de memoria para almacenar temporalmente los datos extraídos.
  • 🛠️ Se abordan técnicas de álgebra de punteros para manipular la dirección de memoria y el desplazamiento de datos durante la serialización y deserialización.
  • ➡️ Se ilustra el proceso de serialización de un paquete, que implica agregar información adicional al comienzo del buffer para facilitar la deserialización en el destinatario.

Q & A

  • ¿Qué es lo que se discute en el video sobre la creación de protocolos de envío de mensajes?

    -El video trata sobre la creación de protocolos para enviar mensajes entre módulos. Se menciona la importancia de la serialización y cómo se puede implementar la comunicación entre diferentes partes del sistema.

  • ¿Por qué es importante la serialización en el contexto del video?

    -La serialización es crucial para convertir datos estructurados en una secuencia de bytes que puedan ser transmitidos a través de una conexión. Esto permite que los datos sean enviados y recibidos de manera coherente entre módulos.

  • ¿Qué es un 'wofer' en el contexto del video?

    -Un 'wofer' es una estructura utilizada en el video para representar un paquete de datos que incluye información como el tamaño (size) y el flujo de bytes (stream). Es un componente clave en la serialización y deserialización de mensajes.

  • ¿Cómo se describe el proceso de envío de un mensaje desde el kernel a la memoria en el video?

    -El proceso comienza con la generación de un 'wofer' que contiene el mensaje a enviar. Luego, se utiliza una función de envío de paquete que incluye el 'wofer', la conexión de socket y el tamaño del mensaje. El mensaje se envía a través de esta conexión y espera ser recibido por la memoria.

  • ¿Qué contiene el 'choclo' que se menciona en el video?

    -El 'choclo' es una representación del mensaje que se envía y contiene tres partes generales: el código de operación, el tamaño de este código y el buffer de datos real. Este buffer puede contener diferentes tipos de datos, como enteros, cadenas de caracteres u otros bloques de datos.

  • ¿Cómo se espera que la memoria maneje la recepción de un mensaje?

    -La memoria espera recibir el mensaje a través de un socket, utilizando una función 'receive' que incluye un 'receive' bloqueante para esperar hasta que se reciba algo. Una vez que se recibe un mensaje, se extrae el código de operación y se almacena en la memoria.

  • ¿Qué es el 'código de operación' y cómo se utiliza en la comunicación entre módulos?

    -El 'código de operación' es una parte del 'choclo' que indica el tipo de operación que se está realizando. Se utiliza para que el receptor del mensaje sepa cómo interpretar y procesar los datos que le siguen.

  • ¿Cómo se describe la función 'crear super paquete' en el video?

    -La función 'crear super paquete' se utiliza para crear un paquete que incluye un código de operación y un 'wofer'. Este paquete es más grande y contiene toda la información necesaria para que el receptor sepa cómo manejar el mensaje.

  • ¿Qué es la consola interactiva que se menciona en el video?

    -La consola interactiva es una parte del sistema que permite a los usuarios interactuar con el kernel. En el video se muestra cómo se puede utilizar para enviar información, como el ID de proceso y la prioridad, al kernel.

  • ¿Cómo se aborda el tema de la prioridad en el video?

    -La prioridad se menciona en el contexto de la administración de procesos por parte del kernel. Aunque se puede establecer una prioridad para los procesos, se indica que esta información no se envía a la memoria, sino que es utilizada internamente por el kernel.

  • ¿Qué se espera que el espectador haya comprendido al final del video?

    -Se espera que el espectador haya comprendido el proceso de serialización y deserialización de mensajes, la importancia de la estructura 'wofer' y cómo se envían y reciben mensajes entre módulos. Además, se espera que comprenda cómo se utiliza la consola interactiva para enviar información al kernel.

Outlines

00:00

😀 Creación de protocolos de mensajería entre módulos

Se discute la creación de protocolos para enviar mensajes entre módulos, haciendo referencia a la importancia de la serialización y cómo se maneja la información en el kernel. Se menciona la utilización de funciones como 'enviar paquete' y se destaca la necesidad de estudiar la guía de serialización para evitar errores.

05:01

🔌 Proceso de recepción de mensajes en la memoria

Se explica cómo la memoria espera y recibe mensajes del kernel utilizando un receive bloqueante. Se describe el proceso de extracción de información, incluyendo el código de operación y el tamaño de los datos transmitidos. Además, se menciona la creación de estructuras para manejar diferentes tipos de mensajes según el código de operación recibido.

10:03

📦 Creación y recepción de un 'woof' en memoria

Se detalla cómo se crea una variable 't woofer' para recibir y almacenar información, y cómo se utiliza una función genérica para extraer el resto de la información de un 'woof'. Se abordan los conceptos de recepción de todo el buffer del mensaje y la importancia de manejar estructuras de datos adecuadamente.

15:04

📚 Contenido y manipulación del 'woof' en memoria

Se explora qué contiene el 'woof', que es una estructura de datos que puede incluir diferentes tipos de información, como enteros, cadenas de caracteres y otros bloques de datos. Se discute cómo se agregan y manipulan estos elementos dentro del 'woof', y cómo se impacta en el tamaño del stream de bytes.

20:07

🔄 Proceso de almacenamiento y extracción de información

Se describe el proceso de almacenamiento de información en un buffer y la creación de funciones para agregar y extraer información de dicho buffer. Se abordan técnicas como la 'álgebra de punteros' para manipular eficientemente la memoria y los datos almacenados.

25:09

🛠️ Funcionalidades para manejar buffers y streams

Se detallan las funcionalidades creadas para agregar y extraer información de un buffer, incluyendo la gestión de memoria dinámica y la creación de funciones genéricas para diferentes tipos de datos. Se destaca la importancia de liberar la memoria reservada una vez que se haya utilizado la información extraída.

30:13

🔗 Proceso de serialización de paquetes de mensajería

Se explica el proceso de serialización de paquetes, que implica agregar información adicional al mensaje para que el receptor pueda interpretarlo correctamente. Se discute la adición del código de operación y el tamaño del mensaje antes de enviarlo, y cómo el receptor utiliza esta información para extraer y manejar el contenido del mensaje.

35:16

📝 Pruebas de funcionamiento del sistema de mensajería

Se narran los pasos para probar el sistema de mensajería, incluyendo la creación de procesos y la ejecución de comandos en la consola interactiva. Se menciona el envío de información como PID y prioridad, y se destaca cómo la memoria recibe y maneja estos datos.

40:20

📈 Resumen y expectativas para la siguiente parte

Se ofrece un resumen de los conceptos y funcionalidades discutidos hasta el momento y se establecen expectativas para la siguiente parte del video, que se enfocará en la consola. Se cierra el párrafo con un adiós y una promesa de continuar la explicación en el próximo video.

Mindmap

Keywords

💡serialización

La serialización es el proceso de convertir una estructura de datos en una secuencia de bytes que puede ser enviada a través de una red o almacenada en un archivo. En el video, se discute cómo la serialización es fundamental para enviar mensajes entre módulos diferentes como 'kernel' y 'memoria'. Se menciona la importancia de saber cómo serializar datos correctamente para asegurar que el mensaje enviado sea recibido e interpretado adecuadamente en el otro extremo.

💡buffer

Un buffer en informática es un espacio de memoria en el que se almacenan temporalmente datos mientras son transferidos de un lugar a otro. En el video, se habla de cómo gestionar buffers para el envío de datos entre módulos, y se utiliza el término 'wofer' como una estructura que incluye tanto el tamaño del buffer como los datos mismos.

💡choclo

El término 'choclo' se usa en el video de manera informal para referirse a un conjunto o agrupación de datos que se manejan juntos. Este término se usa para explicar cómo se estructuran los datos antes de enviarlos a través de un socket, implicando una mezcla de varios tipos de datos como enteros, cadenas, etc., que están serializados juntos.

💡socket

Un socket es un punto final de un flujo de comunicación bidireccional entre dos programas que corren en la red. En el video, se habla de enviar un 'void asterisco' a través de un socket para la comunicación entre 'kernel' y 'memoria', destacando cómo se utiliza para transferir datos serializados.

💡memoria

En el contexto del video, 'memoria' parece referirse a un módulo o componente del sistema que recibe datos del 'kernel'. Se describe el proceso de cómo 'memoria' espera y recibe datos serializados, mostrando la importancia de tener un manejo adecuado de la recepción y procesamiento de datos en sistemas distribuidos.

💡reive

Reive parece ser una variación o error de transcripción de 'recv', una función en programación de sockets para recibir datos. En el video, se menciona cómo esta función bloquea el proceso esperando datos, lo que es crucial para entender cómo 'memoria' maneja la entrada de datos del 'kernel'.

💡función genérica

Una función genérica es una función diseñada para operar con diferentes tipos de datos. En el video, se describe cómo crear funciones genéricas para manipular los buffers, permitiendo agregar y extraer diferentes tipos de datos (int, char, etc.) de una forma modular y reutilizable.

💡operación

En el video, 'operación' se refiere a las acciones o tareas específicas que se realizan sobre los datos dentro del buffer. Se menciona una estructura de código de operación que ayuda a determinar cómo se debe tratar el mensaje recibido, lo que es esencial para el manejo correcto de los datos.

💡size

El término 'size' se refiere a la cantidad de espacio en bytes que ocupa un dato o conjunto de datos. Es crucial en la gestión de la memoria para saber cuánto espacio reservar y cómo interpretar los bytes recibidos. En el video, 'size' se utiliza para manejar adecuadamente la memoria al crear buffers y procesar datos recibidos.

💡estructura de datos

Una estructura de datos es una manera de organizar, administrar y almacenar datos de manera que sea fácil de acceder y modificar. En el video, se hace énfasis en cómo las estructuras de datos, como los buffers con sus respectivos 'sizes' y datos, son esenciales para la transmisión eficiente de información entre diferentes partes de un sistema.

Highlights

Se discute la creación de protocolos para el envío de mensajes entre módulos.

Se menciona la importancia de la serialización y se hace referencia a una guía de serialización.

Se explica paso a paso cómo serializar para evitar errores y se ofrece código de ejemplo.

Se describe el proceso de envío de un mensaje desde el módulo 'kernel' a 'memoria'.

Se detalla cómo se genera un 'void asterisco' utilizando una función de envío de paquete.

Se discute la recepción de mensajes en la memoria y cómo se espera la información enviada por el kernel.

Se destaca la estructura de los mensajes en tres partes generales y se mencionan subpartes adicionales.

Se describe el proceso de extracción del código de operación y su importancia para el manejo de diferentes tipos de mensajes.

Se explica cómo se almacenan y se accede a diferentes tipos de datos en el 'void asterisco'.

Se discute la creación de funcionalidades para agregar y extraer información de un 'wofer'.

Se abordan técnicas para manejar la memoria dinámica y evitar pérdidas de memoria.

Se describe el proceso de recepción de un mensaje completo y cómo se espera que el kernel envíe información adicional.

Se detallan las funciones genéricas para agregar y extraer información de un buffer.

Se discute la serialización de paquetes y su importancia para el intercambio de información entre módulos.

Se muestra cómo se crea un 'super paquete' utilizando el código de operación y se envía a la memoria.

Se ilustra el proceso de extracción de información de un buffer recibido por la memoria.

Se describe el uso de la consola interactiva y cómo se envían y reciben mensajes.

Se menciona que en una próxima clase se explicarán servicios de kernel y se dará más contexto sobre la consola.

Transcripts

play00:00

bien Bueno ahora toca el video de crear

play00:05

las funcionalidades de share para enviar

play00:07

mensajes entre módulos y probar el envío

play00:10

de mensajes entre módulos Bueno hoy

play00:12

vamos a crear esos protocolos estos

play00:14

protocolos de envío de mensajes Sí ahora

play00:18

antes de continuar explicando eso hay

play00:20

que mencionar que esa información de

play00:24

serialización y de envío de mensajes

play00:27

primeros

play00:28

pasos

play00:31

estaba a ver si me acuerdo en chiscar de

play00:35

Lino guía de serialización aquí está hay

play00:39

que verse todao esta

play00:43

charla donde eh te explica sobre cómo

play00:48

serializar está también ahí las

play00:50

explicación ahí en texto por si queres

play00:54

eh explicado paso por paso como para que

play00:58

no haya errores y bueno un montón de

play01:00

código de ejemplo como para que aprendas

play01:02

a serializar sí es necesario que lo

play01:07

mires lo estudies lo vivas Bueno lo

play01:10

mismo en fin bueno

play01:14

básicamente cómo vamos a hacer por

play01:16

ejemplo ahora para en el ejemplo que

play01:18

vamos a ocupar ahora carnel va a enviar

play01:20

un mensaje a memoria Imagínate que esta

play01:22

cosa todo este coso shif p era Sí todo

play01:27

este coso es un Boy asterisco

play01:30

un void asterisco Sí todo esto es un

play01:34

void asterisco todo absolutamente todo y

play01:37

eso vamos a llamar enviar un voy

play01:41

asterisco al socket memoria en dónde

play01:45

está eso pues aquí hay una función de

play01:47

enviar paquete enviar paquete Bueno ya

play01:50

Les explico que es esto de paquete pero

play01:53

básicamente es generamos un voy

play01:56

asterisco como aquí lo pueden ver que se

play01:58

llama enviar y lo enviamos enviamos ese

play02:02

voy asterisco con la conexión que le

play02:05

ponemos Por ejemplo si estamos enviar

play02:07

desde kernel el módulo consola c ya eh

play02:12

Ya vamos a explicar el módulo consola

play02:14

pun c en el próximo video pero aprovecho

play02:17

que ya lo he creado para explicarles eso

play02:21

desde consola c eh Le pongo el el socket

play02:26

de memoria F descripto de memoria la

play02:28

conexión con memoria que ya creamos al

play02:30

inicio y lo enviamos y lo que hace esa

play02:33

función es generar utilizando este

play02:36

paquete genera un Buy asterisco o sea

play02:40

genera todo todo este

play02:45

choclo todo ese choclo y eh Lo envía con

play02:49

la conexión que le pasamos en este caso

play02:51

F el escripto de memoria lo enviamos

play02:53

Este es el tamaño de la cosa que se

play02:55

envía y bueno y nada Eso es básicamente

play02:59

en enviar con ese Send que enviar

play03:01

paquete esa funcionalidad que tenemos es

play03:04

lo que hace es enviar un choclo a

play03:06

memoria correcto bien Eso es

play03:09

todo

play03:11

ponele eso es la esencia básica y ahora

play03:14

Qué contiene ese choclo como puedes ver

play03:15

ese choclo contiene tres partes

play03:19

generales porque en realidad esto

play03:21

contiene más subpartes que ya vamos a

play03:24

explicar e más adelante pero de en

play03:27

líneas generales tiene tres partes el el

play03:29

primero ya vamos a explicar cómo es que

play03:32

kernel lo arma este choclo pero quiero

play03:37

que sepas cómo es que memoria lo recibe

play03:39

para que vayas haciendo ti una idea Por

play03:43

ejemplo antes me antes de que kernel

play03:47

genere este choclo para enviárselo sí

play03:49

antes de que lo genere vamos a dejarlo

play03:51

por arriba aquí memoria cómo está

play03:54

memoria memoria vamos a memoria c

play03:57

obviamente en memoria

play04:00

source memoria c en la parte donde se

play04:04

quede escuchando a

play04:06

kernel eh memoria kernel acá si te das

play04:12

cuenta

play04:14

eh okay se queda en un While casi

play04:18

infinito y aquí en recibir operación

play04:23

recibir operación que es de nuestra

play04:25

sharet contiene esa cosa que consiste en

play04:30

reive Ese reive es clave porque ese

play04:34

reive se queda o sea este igual en lugar

play04:37

de ciclar continuamente se queda aquí en

play04:40

esta en este en esta línea porque esta

play04:43

función contiene un reive y el reive lo

play04:47

lo bloquea aquí si se queda tildado

play04:49

hasta línea esperando en recibir algo

play04:52

por ese socket este socket esta conexión

play04:56

en este caso Sí o sea se queda aquí se

play04:59

queda en esta línea y se queda esperando

play05:01

ese

play05:02

reive bueno y se queda esperando aquí en

play05:05

su receive memoria en ese hilo está

play05:07

esperando que kern le envíe algo y se

play05:09

queda tildado en esa línea Ah no avanza

play05:12

más ese Wi se queda ahí bien teniendo en

play05:16

mente eso cuando

play05:18

kernel

play05:19

apenas envía genera un choclo todo este

play05:22

es un voy asterisco envía ese choclo y

play05:26

le llega a

play05:27

memoria entonces

play05:30

lo primero que hace ese reive

play05:32

literalmente al detectar que hay bits lo

play05:35

primero que extrae es reive aparece te

play05:39

aparece el socket de donde quieres

play05:42

recibir

play05:44

el wofer o sea Don dónde lo quieres

play05:47

almacenar y el tamaño de esa cosa que

play05:49

quieras almacenar por ejemplo está

play05:51

extrayendo el código de operación y el

play05:54

tamaño de ese código de operación es un

play05:56

size of in o sea está ext no extrae si

play05:59

te das cuenta no está recibiendo el todo

play06:03

el buffer todo este voy asterisco

play06:06

asqueroso no no no porque no sabe Cuánto

play06:10

cuánto cuántos byes tiene encima así que

play06:13

Pero lo que sí sabe es

play06:16

eh shift p lo que sí sabe Es que este

play06:20

código de

play06:21

operación es un size of int size

play06:28

of int Ahí va es un size of

play06:34

int Qué significa eso Acá está Qué es el

play06:39

tamaño de un in no extrae ese código de

play06:42

operación y para qué extrae ese código

play06:44

de

play06:46

operación básicamente extrae esta parte

play06:49

y para qué extrae esa parte porque

play06:52

después que lo

play06:54

extrae con ese código de operación según

play06:57

el código de operación que nos nosotros

play06:59

tengamos porque tenemos acá una

play07:01

estructura de operación code

play07:03

eh según estos estas estos de acá o las

play07:07

las demás que agreguemos en el

play07:09

futuro podemos tratar ese mensaje de

play07:12

alguna forma u otra sí podemos tratarlo

play07:18

eh ponerle que algunos mensajes ponerle

play07:21

que este algunos mensajes van a tener

play07:22

solo números int int in in van a tener

play07:25

int int in int otros mensajes pueden

play07:28

tener

play07:29

int pueden tener un 32 un 32 y pueden

play07:34

tener al final un char asterisco acá sí

play07:37

pueden O sea hay distintos tipos de

play07:39

mensaje y según este código de operación

play07:44

Vamos a ingresar este switch Case y

play07:47

vamos a tratarlo de una forma u otra en

play07:50

este caso esto o esto o esto no Para eso

play07:53

es el switch Case bien bueno el tema es

play07:57

que este primer

play07:59

código de operación lo que hace es

play08:01

recibir operación y ese recibir

play08:03

operación contiene un reive que es

play08:04

bloqueante o sea hasta que no reciba

play08:06

nada no se mueve de ahí una vez que

play08:09

recibe algo lo primero que extrae es un

play08:13

es un

play08:14

int si extrae 4 by ponerle creo que se

play08:18

son 4 by y lo almacena y lo retorna ese

play08:21

código de operación y lo retorna

play08:24

aquí Bueno hasta

play08:27

ahí nosotros entonces sabemos que si ya

play08:31

extrajimos esta parte esta parte ya está

play08:34

extraída significa que

play08:41

nuestro vamos a ver si me deja

play08:45

nuestro coso ya se redujo

play08:49

ahora lo que tenemos que esto ya está

play08:51

esto ya está utilizado

play08:54

esto Esta parte de acá ya fue utilizada

play08:58

con el código de operación Ahora nos

play09:00

falta recibir lo demás bien

play09:03

eh y lo siguiente que tenemos que

play09:06

recibir es a lo que hemos

play09:10

Eh bueno esa funcionalidad nos falta

play09:13

crear recibir todo el buffer del mensaje

play09:16

por eso es que aquí le puse ya está

play09:18

creada ahora Les explico recibir todo el

play09:21

buffer del mensaje y lo que hace es

play09:24

obviamente terminar de extraer este size

play09:27

y todo este choclo Sí este size

play09:31

obviamente es un int también

play09:33

eh contiene la información de la

play09:37

cantidad de bytes que que que pesa ese

play09:43

ese Boy asterisco que le sigue no por

play09:46

ejemplo esto puede decir 12 bytes este

play09:47

puede entonces todo este choclo eh pesa

play09:51

12 bytes Si nos dice que es 28 by

play09:53

entonces todo este choclo pesa 28 by Sí

play09:56

bueno Y dónde almacenamos esto bueno

play09:59

tenemos estructuras del tp0 estructuras

play10:03

como estas t woofer y ya te imaginarás

play10:07

la funcionalidad que vamos a crear para

play10:10

extraer el resto

play10:12

de de cosas

play10:15

va va a consistir en crear una variable

play10:18

tipo t woofer extraer este size de aquí

play10:23

y ubicarlo aquí luego según la

play10:26

información que nos haya dado ses

play10:31

tomar el resto de lo que falta ese voy

play10:34

asterisco y ponerlo aquí que también

play10:36

tenemos un voy asterisco ahí y listo y

play10:38

luego vamos a trabajar con esa

play10:40

estructura porque ya lo recibimos acá

play10:42

vamos a tener nuestro

play10:45

t ponele Ahí vamos a tener nuestro t

play10:49

woofer eh un wofer ponele

play10:55

sí eh vamos a

play10:59

poner así tenemos tofer un

play11:03

wofer y ese wofer va a

play11:06

tener ponerle dos cosas no es

play11:13

cierto ese va a tener dos cosas va a

play11:16

tener el

play11:19

si que es

play11:22

este y va

play11:24

tenery asterisco va

play11:27

ser es asterisco y vamos a trabajar con

play11:31

ese buer de acuerdo

play11:34

Bueno ya tengo creada esa funcionalidad

play11:37

Claro que sí se llama

play11:41

recibir bueno acá está recibir todo del

play11:44

buer Y contiene esos reive Porque así es

play11:47

como

play11:48

recibo extraigo el in primero ese in de

play11:53

aquí Este porque este es un in lo

play11:57

extraigo

play12:01

eh Y luego creo memoria para el voy

play12:05

asterisco que voy a alojar creo memoria

play12:08

para para esto O sea según este valor

play12:11

que ya lo puse Aquí creo memoria según

play12:15

este valor un

play12:18

maloc para almacenar todo este choclo

play12:21

que viene acá necesito crear una memoria

play12:24

lo suficientemente grande que almacene

play12:25

todo esto así que por eso el siguiente

play12:28

es otro receive que lo

play12:32

almacena aquí porque aquí ya agregué y

play12:37

lo almacena ahí y listo y retorna ese

play12:40

buffer un buer que ya crea acá sí y hace

play12:44

eso bueno retorna este buffer Bueno y

play12:47

con este buffer que tiene el size y el

play12:49

voy asterisco ya en memoria yo lo puedo

play12:53

trabajar a esa altura ponele yo

play12:59

Ups Ups Ups Ups a esa altura yo ya este

play13:04

yo ya terminé a ver si borro todo esto

play13:08

yo ya

play13:10

terminé de extraer con el primer receive

play13:13

y de extraer

play13:15

todo y una vez que extraigo todo lo del

play13:20

mensaje bueno

play13:22

Eh Esto regresa y vuelve a esta línea a

play13:25

esperar a que kernel en este caso le

play13:28

envíe

play13:29

le envíe algo porque ya se extrajo todo

play13:32

básicamente correcto se extrajo todo así

play13:35

que vuelve a a esa línea esperar que

play13:38

kern le devuelva algo bueno y hasta que

play13:41

kern le vuelva a dar lo mismo un choclo

play13:45

lo primero que va a hacer

play13:47

es recibir ese código de

play13:51

operación recibir ese código de

play13:54

operación

play13:55

tu y con esta funci finidad de recibir

play14:00

todo el woofer o sea en realidad debería

play14:03

decir recibir el resto del woofer lo que

play14:04

hace es crear una variable tipo woofer y

play14:07

este size almacenarlo y este voy

play14:10

asterisco en su respectivo No acá arriba

play14:12

creo que está acá está mejor

play14:15

sí este size almacenarlo aquí y este

play14:20

todo este choclo almacenarlo aquí arriba

play14:23

y listo y comienzo a trabajar con esa

play14:26

variable correcto bien

play14:32

bueno qué

play14:33

más claro era

play14:39

para bueno era para mostrarlo este aquí

play14:43

directamente es igual a esto y este se

play14:46

almacenamos aquí y este voy almacenamos

play14:48

aquí y ya está Y con esa estructura esa

play14:51

variable Pues en memoria ya utilizamos

play14:53

para que nosotros queramos Bueno es es

play14:55

en esencia lo que tenemos que crear

play14:58

bueno Y de alguna manera ya está creado

play15:00

No ese reive que recibe el resto de

play15:04

eh de

play15:06

estructuras Bueno ya ahora la pregunta

play15:09

del millón y Qué contiene Este voy

play15:11

asterisco está bien Eso es el protocolo

play15:13

general como como lo recibe la pregunta

play15:17

es

play15:19

eh A ver si me deja

play15:24

no este voy asterisco Qué contiene se

play15:28

supone que ya lo extraje ya lo tengo acá

play15:30

Qué contiene este Boy Stream este size

play15:33

es el tamaño en bice de este Boy Stream

play15:35

pero Qué contiene este Boy Stream ese

play15:37

Boy Stream ese Boy asterisco es un

play15:41

choclo que contiene Data Data De qué

play15:44

tipo Data como esta puede contener un

play15:49

entero puede contener un Win 32 un

play15:53

String una cadena de caracteres o otro

play15:56

choclo adicional dentro Sí eso es lo que

play15:59

contiene

play16:00

eh ese voy asterisco puede contener

play16:03

cualquier cosa sí bien y cómo lo vamos a

play16:08

guardar ahí obviamente vamos a crear las

play16:10

funcionalidades para agregar a un voy

play16:13

asterisco vacío sí inicialmente Este voy

play16:16

asterisco va a estar

play16:19

vacío Quiero agregar un in va a crecer

play16:22

hasta Quiero agregar otro inom va a

play16:25

crecer Quiero agregar más Data Boom y

play16:28

así y así y

play16:30

así obviamente todo esto va a impactar

play16:33

ponerle que sea esta variable va a

play16:35

impactar en este stre y en este en este

play16:39

que va a ser este asterisco que va a

play16:41

estar

play16:42

aumentando y este si que va a estar

play16:45

almacenando el tamaño en

play16:47

by bien bueno Y es así es como vamos a a

play16:52

generar ese vo

play16:55

ese Este choclo de aquí este solo este

play16:59

pedacito de

play17:03

aquí solo este pedacito de aquí si es lo

play17:06

que vamos a explicar ahora qué es lo que

play17:08

contiene inicialmente no va a contener

play17:10

nada sí no va a contener nada Pero

play17:13

conforme Le vamos agregando va a ir

play17:15

creciendo va a ir creciendo va a ir

play17:17

creciendo podemos agregarle

play17:19

in in

play17:21

32 asterisco o voy asterisco

play17:25

bien qué más

play17:30

obviamente vamos a crear esas

play17:31

funcionalidades para cargar en el wofer

play17:34

en un wofer nuevo sí aprovechemos que el

play17:38

wofer es una estructura que contiene

play17:41

eh que contiene Ahí va que contiene un

play17:46

Stream un hy asterisco y el tamaño de

play17:48

ese hy asterisco que es indispensable

play17:50

porque no hay función que te diga queé

play17:52

tamaño hay en esta estructura de bytes

play17:55

porque son

play17:56

bytes bien creamos esas funcionalidades

play17:59

que esas las detallo justamente aquí a

play18:03

agregar in al boofer agregar un 32 al

play18:06

woofer agregar Stream al woofer agregar

play18:08

y vo al woofer y obviamente así como

play18:11

agrego también extraer porque una vez

play18:13

que lo recibe por ejemplo kernel es lo

play18:16

que hace crea un buffer y le va a

play18:19

agregar lo que necesite agregar in

play18:21

String las cosas que necesite lo va a

play18:24

agregar ese wofer para luego enviar en

play18:26

memoria y una vez que lo recibe en

play18:27

memoria extrae ese buffer memoria tiene

play18:30

que extraer ese int ese Wi 32 ese String

play18:35

en el orden en el orden

play18:37

correspondiente correcto bien eh Ahora

play18:42

vamos a explicar eso cómo vamos a

play18:43

almacenar esto bueno en mi grupo esta

play18:46

estas decisiones lo tomamos creo que en

play18:47

una semana después de pelearnos un poco

play18:50

con el código es tener hay que tener en

play18:53

cuenta que lo aprendimos sobre la marcha

play18:55

eh Cómo gestionaremos esto la forma más

play18:59

estandarizada y más fácil que vimos es

play19:02

hacerlo de esta forma por ejemplo hacer

play19:05

nos concentraremos en

play19:08

esta esto imagínate que es un genérico

play19:12

no voy asterisco que puede ser cualquier

play19:14

cosa puede ser un in un char un in

play19:16

asterisco un in 32 type o un char

play19:20

asterisco o un mismo voy asterisco y un

play19:22

size Sí siempre va a estar almacenado

play19:24

así este size va a contener el tamaño en

play19:26

bytes de lo que viene a continu

play19:29

s y así vamos a agregar ir agregando en

play19:33

un voy asterisco más grande nuestro t

play19:35

woofer almacenamos este

play19:39

size Y luego almacenamos el el siguiente

play19:44

coso

play19:46

Sí por ejemplo si queremos expresar un

play19:48

char asterisco guardamos el tamaño de

play19:51

ese char asterisco y obviamente luego la

play19:54

cadena de caracteres Si queremos agregar

play19:57

un 32 almacenamos el tamaño Cómo tenemos

play20:02

ese tamaño con estos 32t son 4 byes y

play20:06

obviamente el número que propiamente

play20:10

dicho y acá también cuando queremos

play20:12

almacenar un int almacenaremos el si y

play20:15

el int el si que son 4 bytes y el número

play20:20

propiamente dicho y así por ejemplo

play20:24

poner que esto sale No queremos

play20:27

almacenar tuki lo ponemos ahí listo

play20:31

almacenado con

play20:35

l

play20:37

eh voy a ver si

play20:41

puedo Ahí va creo que era así la verdad

play20:45

no me acuerdo Ahí va almacenamos ahí

play20:48

ponerle que Quiero agregar otro in pues

play20:50

no hay problema agregamos otro in ahí al

play20:52

lado y así sucesivamente vamos a ir

play20:55

agregando Quiero agregar un un esto un

play20:59

char asterisco Bueno agregamos un char

play21:01

asterisco que necesito al final de eso

play21:03

Uy al final de eso agregar esto Pues

play21:06

bueno lo agregamos al final y listo y

play21:08

eso sería todo nuestro choclo vamos a

play21:12

crear esas

play21:13

funcionalidades para ir

play21:16

eh agregando esto vamos a Ahí va a ir

play21:20

agregando Primero este luego nuestro voy

play21:24

asterisco nuestro Stream este o

play21:26

almacenar primero estos dos Luego si

play21:30

queremos agregar va a almacenar esto Si

play21:33

queremos almacenar un char asterisco

play21:35

tenemos su size y esto un Win 32 su size

play21:38

y el valor siempre su size y el valor el

play21:42

size y el valor el size el size de lo

play21:45

que pesa lo que viene no esto y el size

play21:48

de lo que pesa lo que viene siempre

play21:50

siempre bajo ese criterio y obviamente

play21:53

cuando lo extraigamos vamos a utilizar

play21:56

ese mismo criterio vamos a valer no los

play22:00

cuatro primeros bytes que nos van a

play22:01

indicar cuántos bytes hay que hay que

play22:05

extraer esto también esto por ejemplo si

play22:08

la cadena caracteres tiene 25 caracteres

play22:12

aquí con este est lench asterisco no nos

play22:15

bota el tamaño ponerle 25 caracteres nos

play22:18

va poner 25 Sí entonces Esto va a decir

play22:22

25 y bueno leemos todos los 25

play22:26

caracteres Bueno más el el caráter

play22:30

centinela que que indica fin del Stream

play22:34

también hay que

play22:36

incluirlo el tamaño de este 32 también y

play22:40

bueno Y así creamos las funciones para

play22:44

para

play22:46

Agregar

play22:48

agregar Y también vamos a tener que

play22:50

crear las funciones

play22:52

para

play22:55

extraer extraer de di buffer extraer

play23:01

esas esos valores que son justamente

play23:04

estas cosas que hemos propuesto acá

play23:06

extraer y agregar cosas al buffer Sí

play23:10

bueno una vez que ha quedado esto claro

play23:17

eh vamos a explicar el código

play23:21

ahora el código que hicimos

play23:24

para agregar in al buffer vamos a

play23:28

explicar lo que es agregar primero acá

play23:30

crear boofer ya sabemos el T boofer

play23:33

contiene un size y un Stream creamos

play23:36

memoria para almacenar ese de woofer

play23:38

samos en cero porque recién estamos

play23:39

creando y el Stream en nul porque

play23:41

obviamente no tiene nada el comienzo

play23:44

obviamente la función para destruirlo y

play23:47

aquí Cómo agregamos una función genérica

play23:49

No empecemos con la función genérica

play23:51

Cómo agregamos El choclo al buffer

play23:54

agregamos de la siguiente forma

play23:56

mira tenemos lo

play23:58

siguiente primero vemos si el wofer está

play24:02

vacío Obviamente si está vacío si es la

play24:04

primera vez que se va a agregar es

play24:07

básicamente es encontrar al wofer vacío

play24:11

O sea que todavía todavía no se le

play24:12

agregó nada Es decir que recién le

play24:15

estamos agregando el

play24:17

primer la

play24:21

primera el primero par de elementos que

play24:25

queremos

play24:26

agregar bueno agregamos Ese par de

play24:29

elementos Perdón ahí

play24:31

Justo interrumpieron a ver agregamos Ese

play24:35

par de

play24:37

elementos

play24:39

eh significa Que obviamente está vacío

play24:42

no estaba así Perdón me desconcentré

play24:44

estaba ahí vacío significa que ahora

play24:46

queremos agregar su primer bloque de

play24:48

elementos eh Si es así entonces bueno

play24:53

acá detecta que inicialmente el tamaño

play24:56

era cero Entonces le cre Crea una

play24:59

memoria con el int y el valor si está

play25:04

reservando

play25:05

memoria está reservando memoria para

play25:08

esto size of in y el

play25:14

valor size del cho Sí bueno Y luego

play25:19

copia obviamente de lo copia ahí dentro

play25:23

de eso copia el el

play25:26

valor

play25:28

y también copia

play25:30

el El choclo propiamente

play25:33

dicho a ver esto Stream má 6 of in es

play25:37

álgebra de punteros que también está en

play25:40

las guías en las guías estas tienes que

play25:43

leer todo en alguna parte está yo

play25:45

recuerdo haberlo leído eh pero está está

play25:48

está completamente este álgebra de

play25:50

punteros que básicamente te está

play25:52

diciendo si yo apunto acá pero no quiero

play25:55

que escribas a partir de ahí Por qué

play25:58

ponerle que yo tengo el puntero

play26:01

aquí aquí en esta parte apunta yo

play26:05

escribo el size este size lo escribo acá

play26:08

donde apunta este lo escribo

play26:10

acá

play26:12

perfecto qué es lo que hace esto escribe

play26:15

ahí donde apunta el Stream y

play26:20

escribe el tamaño del in lo que lo pasas

play26:23

por

play26:24

parámetro lo escribe aquí o sea esto ya

play26:26

está escrito

play26:28

ahora qué Qué pasa si es que yo vos

play26:31

ponés men copy acá de vuelta y copias El

play26:36

choclo propiamente dicho significa que

play26:38

en este puntero vas a volver a

play26:40

sobreescribir sobre est esta esta línea

play26:44

o sea el size y el in lo vas a

play26:47

sobreescribir

play26:48

acá y lo cual no queremos o sea queremos

play26:52

donde apunta

play26:54

desplazado una cierta cantidad de bits o

play26:57

sea aquí Y a partir de aquí escribir el

play27:00

dato que sigue si por eso es que se

play27:03

llama álgebra de punteros a esta cosa

play27:07

donde ponem Perdón acá ponemos Stream

play27:10

más el size of

play27:12

int o sea más esto O sea el puntero más

play27:17

esta cantidad de bytes y aquí ahora está

play27:19

apuntando

play27:20

aquí Y a partir de aquí queremos que

play27:23

escriba lo demás obviamente Y a partir

play27:25

de ahí escribe El choclo y todo Bueno lo

play27:29

lo correspondiente

play27:31

a al dato sí eh Bueno obviamente Esto si

play27:36

es que el size es cero si es que el size

play27:38

no es cer0 significa que ya había

play27:40

contenido escrito en en el coso y lo que

play27:44

estamos haciendo es escribiéndole más

play27:46

contenido Sí así que para eso se se se

play27:50

utiliza el real loock real loock lo que

play27:52

hace es agrandar agrandar esa porción de

play27:55

memoria agrandarlo agrandarlo andarlo

play27:58

según la cantidad que necesitemos de

play28:01

acuerdo bien bueno

play28:08

Eh bueno nos dice A cuánto más espacio

play28:11

queremos agregar Obviamente le pasamos

play28:13

todo el espacio que mencionamos Y

play28:15

copiamos sí hay que tener cuidado en el

play28:18

álgebra

play28:20

de de punteros eso sí y bueno Y

play28:25

actualizamos ese buffer que nos pasaron

play28:27

no el size ya es más grande

play28:30

eh Y nada

play28:33

más y teniendo esta función genérica que

play28:37

nos nos agrega en ese buffer El choclo o

play28:41

el contenido que le mandemos y

play28:43

obviamente el tamaño de ese choclo que

play28:45

le mandemos utilizamos y le aprovechamos

play28:48

para armar cargar cargar in al

play28:52

wofer cargar in al wofer hace eso

play28:56

eh lo que hacemos Es agregamos al

play29:02

choclo le pasamos el

play29:04

wofer el puntero del valor El choclo que

play29:09

es la

play29:11

dirección del valor y el tamaño y el

play29:14

tamaño como es un int si of int y

play29:18

almacena al buer si cuando cargamos 32

play29:22

básicamente lo mismo un valor y cuando

play29:25

cargamos este alofer básicamente lo

play29:28

mismo aquí el tamaño de eslen de un

play29:32

String pero también le sumamos + un por

play29:34

el caráter el barra cero que indica fin

play29:37

fin del Stream sí está considerado para

play29:41

copiarlo

play29:42

bien Eso es todo Así es como se carga

play29:46

cargamos esto esto este choclo que

play29:51

va de de par en par sí bien ahora Cómo

play29:58

extraemos la información básicamente

play30:01

Hicimos lo mismo extraer choclo del

play30:03

buffer creamos una función genérica para

play30:05

extraer El choclo Obviamente con

play30:08

las con las eh medidas necesarias para

play30:12

prevenir errores Qué pasa si el tamaño

play30:15

del boofer que me pasan Yo quiero

play30:18

extraerle algo y resulta que ese boofer

play30:20

tiene tamaño cerero o sea básicamente

play30:22

que no tiene nada ya en su mal o sea

play30:26

Cómo podes extraer algo si ya ese buer

play30:29

ya no tiene nada si ese buer ya fue ya

play30:31

le han extraído

play30:33

todo obviamente su size va a ser cero y

play30:37

obviamente te tienen que avisar

play30:39

que ese buffer está vacío es cierto así

play30:44

que error al intentar extraer un

play30:47

contenido de un t woofer vacío o Peor si

play30:50

es si es menor que cer hay que loguear

play30:53

bueno Y si no es nada de esto Bueno

play30:56

entonces sí no el size del choclo que

play31:01

como ya

play31:02

sabemos si queremos exer esta parte

play31:05

primero tenemos que traer siempre el

play31:08

size y ahí está y luego bueno Y luego

play31:12

generamos memoria para

play31:14

almacenar según ese dato de aquí

play31:17

almacenamos memoria para almacenar el

play31:19

dato

play31:21

relevante el dato per no el dato

play31:24

propiamente dicho que eh que queremos

play31:27

guardar sí y y para eso utilizamos este

play31:31

segundo men copy bueno Y luego

play31:34

redimension es lógica para redimensionar

play31:38

ahora si ese nuevo size hace que el

play31:41

buffer o sea o sea básicamente esto que

play31:45

le acabamos de extraer al wofer hace que

play31:48

el wofer esté vacío que se se igual a

play31:50

cer entonces básicamente sete al woofer

play31:53

liberamos memoria y retornamos ese ese

play31:57

choclo que que

play31:59

extrajimos pero si resulta que bueno

play32:02

Obviamente si es menor que cero Hay

play32:05

algún error no es cierto no nos puede

play32:07

dar nunca negativo hay que logarlo bueno

play32:10

Y luego

play32:12

eh creamos un nuevo String para asignar

play32:15

porque se supone que si ya extrajimos

play32:18

este el nuevo el nuevo Buy Stream con

play32:22

este size tiene que ser un uno más chico

play32:25

porque esto ya lo extrajimos nos queda

play32:27

Solo este solo este pedazo Bueno eso es

play32:31

lo que hacemos aquí eso es lo que

play32:33

hacemos aquí

play32:35

aquí un malo con el nuevo si ese nuevo

play32:38

si que ya sufrió la resta de esos dos

play32:42

elementos copiamos en ese nuevo

play32:45

size Perdón en ese nuevo nuevo Stream

play32:49

copiamos el Stream anterior pero

play32:52

desplazado cierta cantidad de

play32:56

byes y

play32:57

Nada luego liberamos

play33:00

reasigna s ese nuevo stam de tal manera

play33:04

que ahora ya ese ese ese s y ese Stream

play33:09

ya no contemplen todo eso sino que

play33:11

contemplen a partir de acá ahora y es

play33:14

porque esto ya se lo extrajo si ahora el

play33:17

asterisco ya está más chico nada Esos

play33:20

son los controles que hace y obviamente

play33:21

retorno El choclo cuando

play33:24

termine bueno y basado en esa función

play33:27

genérica Ya te imaginarás Qué pasa

play33:29

cuando quiero extraer indel wofer bueno

play33:32

como este extraer choclo del wofer es

play33:36

esto y retorno un voy asterisco yo puedo

play33:38

hacer como este retorno un voy asterisco

play33:41

yo puedo hacer

play33:43

que tratar ese voy asterisco que me

play33:45

retorna como un int porque un voy

play33:48

asterisco es un puntero y un int un

play33:52

asterisco también es un puntero Así que

play33:54

sí si este me retorna voy asterisco yo

play33:58

puedo decir muy bien es un puntero y

play34:00

puedo decirle que a ese puntero tratarlo

play34:03

como si fuera un in asterisco y Bueno

play34:06

luego asigno un valor

play34:10

diferente le creo un valor a retornar y

play34:13

le asigno ese el valor que extraje acá y

play34:16

libero por qué hago esto porque si te

play34:18

das cuenta cuando extraer choclo del

play34:22

buffer

play34:24

Eh Yo estoy reservando memoria ese

play34:29

choclo que retorno acá esto es memoria

play34:34

reservada que estoy asignando y como es

play34:37

memoria reservada en algún momento tengo

play34:39

que liberarlo y para no olvidarme de

play34:42

liberarla en algún momento Entonces lo

play34:44

que hago

play34:45

es ese contenido lo guardo en una

play34:49

variable

play34:50

temporal libero esa memoria dinámica

play34:53

bueno Y luego retorno ese valor que que

play34:57

bueno que se que se que Bueno es es

play35:00

parte del stack no que cuando retorna

play35:02

todo este esta memoria se pierde y

play35:05

retorna el valor nada más Bueno es es un

play35:09

tema que tienen que estudiarlo y verlo

play35:12

cuando aprendan estas estas cosas pero

play35:16

pero básicamente Espero que se haya

play35:17

entendido Por qué hago el free acá si

play35:19

porque esta función cuando extrae El

play35:22

choclo te devuelve un voy asterisco un

play35:24

voy asterisco que reserva una memoria

play35:27

y en algún momento tengo que liberar esa

play35:29

memoria y para no olvidarme en el futuro

play35:31

por eso lo libero Aquí bueno y Pero

play35:34

antes rescaté ese valor que extraje aquí

play35:37

y

play35:39

bueno y luego lo retorno ese valor Eso

play35:41

es para in por ejemplo para el Win 32 es

play35:45

casi lo mismo extraer El choclo Esto me

play35:48

devuelve un voy

play35:50

asterisco y ese voy asterisco lo trato

play35:53

como es un puntero lo puedo tratar como

play35:54

un puntero in 32 que me me deja y Bueno

play35:59

luego declaro una nueva variable y

play36:02

asigno ese el contenido de ese valor

play36:07

ahí como una variable Temporal y Bueno

play36:10

luego libero Esa esa memoria porque no

play36:13

te olvides que esto genera memoria

play36:15

dinámica libero esa memoria y bueno

play36:17

retorno ese valor que que aquí auxiliar

play36:20

eh

play36:21

salvé bueno para el char asterisco Si

play36:24

eso sí sí o sí tengo que retornar ese

play36:26

String este me devuelve un voy asterisco

play36:28

que puedo tratar con un puntero a un

play36:29

char asterisco bueno Y eso lo retorno

play36:31

directamente porque Bueno cuando

play36:33

extraigo un char ya

play36:35

eh Ya será mi control el tema de cuándo

play36:39

liberar ese String cuando lo deje de

play36:42

usar bien y así es básicamente como

play36:46

hemos armado las funcionalidades de int

play36:49

Win 32 obviamente hemos creado crear

play36:52

wofer qué es esto Li destruir wofer eh y

play36:56

también creamos el super paquete que ya

play36:59

Les explico rápidamente Cómo es acá

play37:01

todas estas cositas no es que les hemos

play37:03

sacado de la nada eh todas estas cosas

play37:07

los hemos sacado de nuestro queridísimo

play37:11

tpc aquí a ver eh utils c me aparece

play37:18

eh crear conexión por ejemplo Enviar

play37:21

mensaje tenemos un Send o sea aquí está

play37:25

serialización paquete ahora es

play37:26

explicamos crear wofer

play37:29

eh También está

play37:36

eh crear paquete agregar a paquete por

play37:39

ejemplo Acá está el realo que les dije

play37:41

que hace que aumentar el tamaño

play37:43

dinámicamente una memoria Así que todas

play37:46

esas funcionalidades lo hemos extraído

play37:48

del tp0 no es que los nos hemos sacado

play37:50

así de la nada no no no no le hemos

play37:53

estudiado el tp0 a fondo y hemos

play37:55

descubierto Cómo

play37:57

Cómo tomar esas funcionalidades y

play38:01

adecuarlas a nuestras necesidades bien

play38:05

bueno por último vamos a hacer el tema

play38:07

de la serialización Qué hace lo de

play38:09

serialización

play38:11

[Música]

play38:16

bueno Qué hace lo de

play38:19

serialización Ponle

play38:25

que

play38:27

Ponle que yo

play38:44

ya estoy teniendo problemas con esto qué

play38:51

[Música]

play38:52

barbaridad

play38:55

buenoo

play38:57

ponerle que ya está en este nuestro

play38:59

agregamos no con

play39:02

Agregar agregar extraer cargar choclo

play39:06

cargar cargar in cargamos cargamos un

play39:09

montón de cosas y Se generó Esto sí

play39:12

obviamente esto lo generamos en una

play39:14

estructura no una estructura que es esto

play39:17

y el size que contiene el tamaño porque

play39:19

lo fuimos agregando y se fue

play39:21

actualizando el size de nuestra

play39:23

estructura

play39:24

bien Pero para qué serializar si esto

play39:27

queremos enviar sí pero si lo enviamos

play39:29

Así nada más no va el receptor en este

play39:33

caso kernel genera este buffer y se lo

play39:36

envía Así nada más a memoria memoria no

play39:39

va a ver Che me mandas un choclo pero no

play39:42

sé cuánto

play39:44

mide bueno Y vos dirás Bueno si no sabes

play39:47

cuánto mide

play39:49

para tengo la solución te

play39:55

creo

play39:57

te creo otro otro choclo igual pero que

play40:00

contenga el in o sea copio El choclo y

play40:04

te copio el L delante así tienes el

play40:06

tamaño perfecto pero cómo distingo ahora

play40:10

si se entiende no copio este choclo acá

play40:13

y meto el in delante O sea primero

play40:15

genero genero una una memoria dinámica

play40:19

para almacenar el in y

play40:23

luego agrego todo lo demás todo ese

play40:27

choclo Así sé cuántos bytes tiene este

play40:30

este este choclo que sigue bien pero yo

play40:33

te digo Hay un montón de de tipos de

play40:36

mensajes cómo voy a saber en qué orden

play40:40

sacarlo Sí porque acordate que puede

play40:44

puedes enviarlo aquí Según esto Según

play40:46

esto Según esto sí por ejemplo acá yo

play40:50

estoy marcando que me envías un pid un

play40:53

int un char asterisco y un int en ese

play40:56

orden puede ser que en otro por ejemplo

play40:58

aquí Pon no estoy así puede ser que aquí

play41:02

solo envíes

play41:04

int

play41:06

y y un in Pon l

play41:10

no 22 que se a ponerle un registro no sé

play41:15

solo esos dos valores Cómo

play41:18

diferenciar porque con esto voy a

play41:22

extraer un in un char y un in y aquí con

play41:24

esto Con este código de operación voy

play41:26

extraer Solo este y este Cómo saber en

play41:30

en en dónde En dónde ubicarlo para hacer

play41:35

las funcionalidades respectivas de

play41:36

extracción bueno para eso está el código

play41:38

de operación Así que para eso tenemos el

play41:42

código de operación Así que con eso ya

play41:48

estamos primero agrego el código de

play41:50

operación agrego el tamaño del void y le

play41:55

agrego el vo propiamente dicho y así

play41:57

creamos un nuevo choclo y ese choclo

play42:01

Adivinaste es lo que mandamos aquí ese

play42:06

choclo es el que mandamos ahí el código

play42:09

de operación ahí está el size que viene

play42:12

a ser esto y ese voy asterisco que es

play42:15

este de aquí todo ese choclo nuevo es el

play42:18

que mandamos a memoria y memoria

play42:20

Obviamente con las funcionalidades que

play42:21

vimos al comienzo lo que hace es bueno

play42:25

extraer este y saber dónde atenderlo y

play42:28

luego terminar de extraer todo no extrae

play42:30

este y según la información de este

play42:32

termina de extraer lo demás y una vez

play42:34

que lo tiene almacenado en una memoria

play42:36

bueno eh extrae lo que necesite el in el

play42:40

in y en char sí y así es como funciona

play42:44

nuestra serialización eso es lo que lo

play42:46

que consiste en serializar agarrar ese

play42:49

voy asterisco es est estructura y crear

play42:52

una estructura más grande agregando

play42:54

estos dos datos al inicio s código de

play42:56

operación el tamaño y el

play42:59

choque Bueno eso es lo que hace nuestra

play43:04

serialización serializar paquete agarra

play43:07

eh

play43:09

eh claro el paquete es una estructura

play43:11

que

play43:15

tiene un código de operación y el wofer

play43:18

y dentro de ese wofer está el size y el

play43:22

Stream bueno Y luego obviamente una vez

play43:25

que crea es a enviar es ese nuevo choclo

play43:28

más grande o sea este mega choclo con

play43:32

todo dentro

play43:35

este una vez que tiene eso bueno lo

play43:38

envía eso y el otro lo

play43:41

recibe bien Así es como

play43:44

eh

play43:46

eh Por

play43:48

ejemplo estamos eh Ya explicaré lo que

play43:52

es la consola sí solo quiero que

play43:57

tengas en cuenta esto que cree una

play43:59

variable tipo wofer creamos el wofer y

play44:03

luego las funciones de carga cargamos un

play44:05

int cargamos un

play44:08

String cargamos otro in porque lo voy a

play44:11

mandar en ese orde int char char int Sí

play44:17

y bueno Y luego creamos el paquete con

play44:21

la función crear super

play44:24

paquete con el código de operación que

play44:27

es uno de estos sí que lo va a recibir

play44:30

memoria uno de estos códigos que lo va a

play44:33

recibir

play44:34

memoria y obviamente ese

play44:38

ese

play44:41

ese ese buffer no que se va a enviar

play44:45

porque así está estipulado

play44:49

en crear super paquete

play44:53

eh Bueno luego en esta crear super

play44:56

paquete luego enviamos paquete al F

play44:59

escripto

play45:01

memoria y nada y memoria obviamente

play45:06

memoria lo que tiene que hacer es

play45:08

extraer el código de operación y una vez

play45:10

que caiga acá eh tiene que extraer en

play45:14

este orden en ese mismo esto es

play45:15

importante el mismo orden con que lo

play45:17

mandé int String int es el mismo orden

play45:22

con que tengo que sacarlo int String

play45:27

in bueno acá lo que hago es recibir todo

play45:30

el wofer y le mando una función para que

play45:32

lo atienda y bueno te imaginarás extraer

play45:35

in del wofer extraer Stream del wofer y

play45:38

otra vez extraer in del wofer Sí bueno y

play45:42

lo que hago es logarlo loguear esos tres

play45:44

valores que extraje de ese buffer que me

play45:47

llegó vamos a probarlo Espero que se

play45:50

haya

play45:51

entendido sí espero que Cuántos minutos

play45:54

de grabación llevo 45 minutos perfecto

play45:59

vamos a probarlo no nos queda otra que

play46:01

probarlo A ver vamos el ZZ acá el redmi

play46:06

creo que acá Ahí

play46:13

va

play46:18

CD perfecto vamos a dividir esto esto

play46:24

esto

play46:27

Perfecto dividimos

play46:33

op Bueno ejecutamos

play46:39

memoria ejecutamos file

play46:46

System se conect esperando cpu

play46:49

ejecutamos cpu

play46:54

UPS

play46:56

Y por último ejecutamos

play47:03

kernel listo y acá

play47:05

se se pone nuestra consola interactiva

play47:08

Eh bueno en la siguiente video voy a

play47:11

explicar cómo creer la consola

play47:12

interactiva Pero bueno básicamente es

play47:14

esto iniciar proceso pad size

play47:17

prioridad bueno así que vamos a

play47:22

hacerlo iniciar proceso

play47:29

p prioridad bueno el p ponerle que sea

play47:33

no

play47:38

play47:40

archivo y aquí que sea el si que sea 120

play47:45

y la

play47:48

prioridad y acá te

play47:51

log

play47:54

el in y la

play47:58

prioridad sí

play48:00

eh

play48:06

bien Vamos a enviarlo otra

play48:10

vez Vamos a ponerle un cero más

play48:14

prioridad

play48:16

11 y así sucesivamente mire memoria está

play48:19

recibiendo esos datos el pid bueno que

play48:21

es algo que genera kernel para

play48:23

identificar cada cada uno que in es un

play48:26

proceso así que eso es algo servicios de

play48:29

kernel que seguramente explicaré en la

play48:30

próxima clase donde explique la consola

play48:34

Pero bueno el tema es que recibe este

play48:38

este este choclo que puse acá utn si el

play48:43

pn sdo y el size 120 120 1200 que era lo

play48:48

que lo que puse acá y así es como Bueno

play48:53

vamos a iniciar proceso nuevamente vamos

play48:56

a agregar un choclo muy

play49:00

grande con mayúscula

play49:04

minúsculas

play49:07

eh 100 y nu prioridad y me llegó todo

play49:13

ese choclo enorme el pad tucu tucu tucu

play49:15

tucu el 600 Obviamente el pid 4 porque

play49:19

ojo que esto de prioridad no el de

play49:21

prioridad solo es para administración de

play49:23

kernel El de prioridad no se envía a

play49:25

memoria Sí bueno en en este caso en mi

play49:28

tp bueno Y así es como enviamos a a de

play49:33

kernel a memoria Sí creamos

play49:35

funcionalidades para agregar el el un

play49:39

char asterisco un in un in al woofer y

play49:41

creamos las funciones necesarias para

play49:43

extraer

play49:44

extraer extraer in char asteriscos del

play49:48

wofer y para poder logarlo en este caso

play49:52

solo la mostramos nosotros podemos eh

play49:54

usar hacer lo que queramos según lo

play49:58

nuestro enunciado del tp Y eso sería

play50:01

todo eso sería correspondiente a

play50:03

serialización Espero que se me haya

play50:05

entendido creo que esta vez lo expliqué

play50:07

mejor es la segunda vez que hago este

play50:08

video

play50:09

eh Pero bueno en términos generales ya

play50:12

explicamos Cómo llega las

play50:14

funcionalidades que extraen esto y las

play50:15

funcionalidades que extraen lo demás hay

play50:17

funcionalidades para agregar cargar eh

play50:22

cosos al wofer y funcionalidades para

play50:24

extraer

play50:26

cosos del buffer sí

play50:29

Bueno espero que se haya entendido nos

play50:31

vemos en el próximo y creo que último

play50:33

video que es de consola me parece así

play50:36

que sin más adiós

Rate This

5.0 / 5 (0 votes)

Ähnliche Tags
Protocolos de ComunicaciónSistemas OperativosSerializaciónEnvío de MensajesGestión de BuffersProgramación de SOConexión de MódulosConsola InteractivaKernelMemoriaTPC
Benötigen Sie eine Zusammenfassung auf Englisch?