|
Mostrar Mensajes
|
Páginas: [1]
|
1
|
Programación / Programación C/C++ / Re: planificamiento de hilos en linux
|
en: 5 Noviembre 2012, 09:42 am
|
claro te cuento que lo de las funciones te lo dije porque leí que a nivel programación multihilo, la planificación, así como la creación, destrucción, etc lo hace el programador. ya sea mediante una librería o mediante su programación particular. por eso mencioné algunas funciones como esas, porque me imagino que si quiero poner un hilo a dormir y que me libere la cpu debería usar algo como 'wait'
bien, yo entiendo que por ejemplo el kernel mediante el scheduler por ejemplo use round robin para los procesos, digamos.... pero en cuanto a los hilos de un proceso cómo los planifica? osea espera a que duerma uno para proseguir con otro, o espera señales del programa (programación, ejemplo 'wait'), o el kernel interviene directamente con los hilos y los planifica por ejemplo usando algun algoritmo de prioridades.
Eso es lo que quiero saber, porque si es así que el kernel lo hace, entonces lo que yo leí que el programador debía encargarse de todo está mal, y lo leí en varios lugares. por ejemplo usando una libreria.
aparte si el kernel interviene tiene que poder reconocer que es un hilo y que es un proceso, y saber cuantos hilos hay en un proceso determinado, para poder planificarlos. algo como una lista de subprocesos, no lo se. pero yo leí que el kernel ve a un proceso en modo user como si fuera un sólo hilo, así tenga 5 o más.
son controversias que nunca me terminan de aclarar la situación. tan sólo estoy interesado en saber quien lo hace y medianamente como lo hace. porque me imagino que si es el kernel como te dije antes, entonces debería poder reconocer cuantos hilos hay en un proceso, pero como te dije, he leído que no se da cuenta de la cantidad de hilos que tiene un proceso. por eso estaba casi convencido de que lo hacía el programador.
pero entonces surge un inconveniente, quién provoca el context switch y cómo? porque el programador pueda usar alguna función del sistema para provocar un switch, también puede poner a dormir un hilo para poder continuar con otro por ejemplo, ese tipo de cosas son mis dudas.
lo de la biblioteca que se encarga de todo te juro que lo leí no lo estoy inventando, se dice que la librería hace todo, crea, destruye, planifica, etc pero eso no aclara nada porque lo que quisiera saber en ese caso es como hace el kernel para hacer el switch en base a la librería y como sincronizarse en si con la librería (yo asumiía que mediante systemcalls) pero cómo el kernel reconoce los hilos de un proceso? yo leí que no notaba más de un hilo
|
|
|
3
|
Programación / Bases de Datos / pregunta con SUM en access
|
en: 4 Noviembre 2012, 11:29 am
|
hola, estoy con el access tratando de resolver un problema, pasa que no soy experto en sql novato digamos. tengo esta consulta SELECT Sum(StockEquipoXLocal.stock) AS Expr1, Locales.NombreLocal, Equipos.NombreEquipo FROM SumaStock, Locales INNER JOIN (Equipos INNER JOIN StockEquipoXLocal ON Equipos.codEquipo = StockEquipoXLocal.codEquipo) ON Locales.localID = StockEquipoXLocal.localID WHERE (((StockEquipoXLocal.codEquipo)=[@codEquipo]) AND ((StockEquipoXLocal.stock)>0));
y el access me dice: "ha intentado ejecutar una consulta que no incluye la expresión especificada 'NombreLocal' como parte de una función de agregado"bien, entiendo que yo quiero hacer un select de 2 campos más aparte del sum. osea quiero mostrar las 3 cosas los 3 resultados, pero sólo me deja mostrar el sum, osea de esta forma: SELECT Sum(StockEquipoXLocal.stock) AS Expr1 FROM SumaStock, Locales INNER JOIN (Equipos INNER JOIN StockEquipoXLocal ON Equipos.codEquipo = StockEquipoXLocal.codEquipo) ON Locales.localID = StockEquipoXLocal.localID HAVING (((StockEquipoXLocal.codEquipo)=[@codEquipo]) AND ((StockEquipoXLocal.stock)>0)); quisiera saber como hacer correctamente para poder lograr los 3 resultados. gracias
|
|
|
4
|
Programación / Programación C/C++ / Re: planificamiento de hilos en linux
|
en: 4 Noviembre 2012, 11:19 am
|
me gustaron mucho sus respuestas especialmente la última  en verdad estoy interesado en los dos aspectos, primero a nivel planificación del SO. esa era mi pregunta principal. digamos, entiendo que un algoritmo como el round robin puede usarse desde el modulo planificador del kernel a los procesos en modo usuario (sin detallar si un proceso en modo user tiene una imagen a nivel kernel). osea les asigna un cuantum a cada uno. ahora supongamos que uno de entre varios procesos de user tiene 5 hilos. bien yo preguntaba como se planifican esos 5 hilos dentro del proceso. osea quién los planifica en primer lugar, el kernel o lo debe hacer el programador manualmente usando funciones del sistema (por ejemplo wait, wake, etc) mi pregunta es específica sobre como se realiza la planificación de los hilos dentro de un proceso. (suponiendo que tiene por ejemplo 3 o más hilos) cómo hace el cambio de contexto de un hilo a otro, cómo se reparten los tiempos de ejecución (imagino que entre esos 5 hilos deben repartirse el cuantum asignado al proceso, y su planificación no puede salirse de ese tiempo), quién y cómo lo hace, esa es mi duda. siempre hablando de procesos y hilos a nivel usuario no a nivel kernel. espero sus respuestas.
|
|
|
5
|
Programación / Programación C/C++ / planificamiento de hilos en linux
|
en: 30 Octubre 2012, 20:24 pm
|
estoi investigando sobre procesos en linux, quisiera saber si alguno lo sabe ya. como hace linux para planificar por ejemplo un proceso que tiene 3 hilos. no se si es el foro que va del tema pero es sobre programar en c me imagino. hasta donde yo se para planificar procesos lo hace el kernel de linux pero los hilos estuve viendo que lo debe hacer el programador manualmente o usar una biblioteca. eso significa que el kernel no es el que planifica los hilos de unproceso sino es como que el kernel ve al proceso como un hilo solo. si alguno sabe como se hace el planificamiento o planificacion de hilos en linux me gustaria saberlo,desde ya gracias
|
|
|
6
|
Programación / ASM / duda con parametros sin definir y saber su direccion
|
en: 14 Agosto 2011, 05:52 am
|
hola de nuevo  , tengo una funcion en c que lleva un parametros fijo, y luego permite mas parametros que no estan definidos , lo que necesito es saber con asm la direccion de esos parametros, pero aqui viene el tema de la convencion de llamada me parece  , yo en este caso quisiera saber la direccion del segundo parametro, porque yo se que se le va a pasar 1 mas, por eso digo el segundo int AgregarRegistro(int reg_tipo, ...) { void* ptrreg; __asm eax, esp __asm add eax,4 __asm mov ptrreg, eax
//...... } supongamos que la llamo asi class Usuario reg; AgregarRegistro(1 , reg);
bueno yo necesitaria saber con asm la direccion de reg, esto lo haria dentro de la propia AgregarRegistro() alguna idea  PS: noten que puse add 4 porque supuse que el primer parametro fijo ocupa 4 bytes, entonces despues de ese viene el segundo osea el que quiero, pero esto no estoy seguro, por eso pregunto
|
|
|
8
|
Programación / ASM / Re: duda add esp, 4 y crash
|
en: 13 Agosto 2011, 18:35 pm
|
format PE console entry main include 'c:\fasm\include\win32a.inc' section '.data' data readable writeable msg db "hello world!",0 p db "pause>nul",0
section '.code' code readable executable main: push ebp mov ebp,esp sub ebp,4 mov dword [esp],msg call [printf] mov dword [esp],p call [system] mov dword [esp],0 call [exit]
section '.idata' import data readable library msvcrt,'msvcrt.dll' import msvcrt,\ printf,'printf',\ system,'system',\ exit,'exit'
mas dudas me surgieron por favor necestio comprender esto push ebp mov ebp,esp sub ebp,4
el registro ebp se usa como auxiliar de la pila para dentro de las rutinas es verdad? entonces entiendo que mueva esp a ebp para tener una copia, y despues porque substrae 4 (DWORD) ?  y por otro lado me pregunto, porque guarda la direccion de msg en esp? osea seria como hacer un push msg? pero no me queda claro mov dword [esp],msg call [printf]
aparte no usa add, 4 en la pila luego de llamar 
|
|
|
10
|
Programación / ASM / duda add esp, 4 y crash
|
en: 12 Agosto 2011, 05:02 am
|
hola ando decidio a apreder asm  , trato de compilar este pequeño programa pero no anda (pero compila), compilado con fasm. agradeceria sus correcciones de las cosas que esten mal . mi duda primero es porque no anda y despues tube que comentar los add esp, 4 que estaban originalmente en el codigo porque no entiendo bine su funcion, si entiendo que suma 4 (un doble palabra) a puntero pila pero no entiendo el objetivo. gracias  format pe console entry main include 'c:\fasm\include\win32a.inc' section ".data" data readable writeable
hello db 'Hello, world!' pausa db 'pause'
section ".code" code readable writeable
main: push hello call printf ;add esp,4 push pausa call system ;add esp,4 mov eax,0 ret
section ".idata" import data readable library msvcrt, "msvcrt" import msvcrt, printf, "printf" , system, "system"
|
|
|
|
|
|
|