Foro de elhacker.net

Programación => Programación General => Mensaje iniciado por: GeorgArming en 29 Noviembre 2011, 19:54 pm



Título: ASM, arquitecturas y procesadores compatibles
Publicado por: GeorgArming en 29 Noviembre 2011, 19:54 pm
Según tengo entendido, cuando se crea un OS, éste es específico de una arquitectura determinada, no es portable. Tendrías que cambiar el código ASM para adaptarse a la nueva arquitectura.

Mi pregunta es si hay algún tipo de sintaxis ASM que sea multiplataforma. Por ejemplo, que funcione con procesadores Intel, con ARM,... (O alguna arquitectura multiplataforma). ¿Sabéis algo de eso?

Otra cosa, leí sobre un programador que hizo un OS muy simple pero multiplataforma, basándose en la arquitectura ewa. ¿Sabéis si esta arquitectura es verdaderamente compatible con todos los procesadores?

Básicamente, la pregunta es: hay alguna manera de programar un OS que sea portable a todas las arquitecturas?


Título: Re: ASM, arquitecturas y procesadores compatibles
Publicado por: x64core en 29 Noviembre 2011, 20:26 pm
como tu lo has dicho no es portable, por ejemplo el so windows se adapta a todas las pc porque trae varios
páquetes de drivers, para que instala dependiendo del hardware, por eso si te has fijado tambien existe el
winx86 y el winx64 eso es para aprovechar la nueva arquitectura de microprocesadores x64.
programas talves podrian pero SO's hasta donde sé no. con los programas podrias depender  de algunas
librerias del SO pero como eso tambien estaria dependiendo del SO


Título: Re: ASM, arquitecturas y procesadores compatibles
Publicado por: GeorgArming en 29 Noviembre 2011, 22:17 pm
¿entonces se tiene que programar un OS distinto para cada arquitectura? ¿seguro que no hay ninguna manera, aunque quede un OS muy minimalista, de que sea "universal"?

y, entonces, ASM no es portable a distintos procesadores... pero si programas íntegramente en C sí tendría que serlo, no?


Título: Re: ASM, arquitecturas y procesadores compatibles
Publicado por: GeorgArming en 29 Noviembre 2011, 22:48 pm
me he estado documentando, y he encontrado algo muy interesante, que ya mencioné anteriormente. se trata de la arquitectura ewa.

resumiendo, se trata de arrancar una especie de máquina virtual directamente sobre el procesador, y a partir de ahí arrancar el OS. ¿Qué pensáis?


Título: Re: ASM, arquitecturas y procesadores compatibles
Publicado por: pucheto en 30 Noviembre 2011, 03:58 am
¿entonces se tiene que programar un OS distinto para cada arquitectura? ¿seguro que no hay ninguna manera, aunque quede un OS muy minimalista, de que sea "universal"?

y, entonces, ASM no es portable a distintos procesadores... pero si programas íntegramente en C sí tendría que serlo, no?
El tema es que cada arquitectura tiene un juego de instrucciones distinto, y tiene estructuras y registros del procesador distintos... Lo que si se hace es tener la mayoria del codigo en C y solo una parte lo mas minima posible en ASM, asi a la hora de portar el codigo no hay q cambiar todo.


Título: Re: ASM, arquitecturas y procesadores compatibles
Publicado por: GeorgArming en 30 Noviembre 2011, 16:19 pm
El tema es que cada arquitectura tiene un juego de instrucciones distinto, y tiene estructuras y registros del procesador distintos... Lo que si se hace es tener la mayoria del codigo en C y solo una parte lo mas minima posible en ASM, asi a la hora de portar el codigo no hay q cambiar todo.

vale, es eso a lo que me refería. y una pregunta, y si hubiera un bootloader en ASM que cargase un programa en C... la parte en C sería portable, no?

si incluyes ASM en C inline y lo compilas, es portable?


Título: Re: ASM, arquitecturas y procesadores compatibles
Publicado por: Unbr0ken en 30 Noviembre 2011, 20:40 pm
Respondiendo a la pregunta principal:

Subjetivamente diría que sí es posible. Mi afirmación se basa en el proyecto eWa.

Claro está que mi opinión es relativamente cierta.

Veamos el esquema eWa...

(http://www.proyectoewa.com/w/images/9/90/Diagrama_PeWa.png)

Visto ésto, diría yo que sí es posible hacer un sistema multiplatafórmico, no obstante, con una imagen no se puede asegurar una afirmación; aquí te dejo el enlace del Proyecto eWa (http://www.proyectoewa.com/wiki/Proyecto_eWa). (Le veo muy bueno, pero... tengo que profundizar un poco más para saber de qué va éste) Espero le des una hojeada, a lo mejor te sirva de algo ;).

P.D.: Aquí está el cómo funciona su arquitectura (http://www.proyectoewa.com/wiki/Arquitectura_eWa), no está culminado, pero... es la idea principal.

Salud.


Título: Re: ASM, arquitecturas y procesadores compatibles
Publicado por: GeorgArming en 30 Noviembre 2011, 20:54 pm
muchísimas gracias, Unbr0ken. yo ya sabía de la arquitectura ewa, pero que alguien que entienda del tema lo explique te dice mucho sobre el valor de dicha arquitectura. además, esta imagen no la había encontrado...


Título: Re: ASM, arquitecturas y procesadores compatibles
Publicado por: GeorgArming en 30 Noviembre 2011, 23:27 pm
entonces me voy a documentar con el tema ewa.

otra cosa que se me ha ocurrido. hay varias máquinas virtuales. seguro que alguna está programada íntegramente en C. como C es portable, si se cargara de inicio esa máquina virtual, y en esa máquina virtual se creara un OS... sería portable, no?


Título: Re: ASM, arquitecturas y procesadores compatibles
Publicado por: pucheto en 1 Diciembre 2011, 14:40 pm
vale, es eso a lo que me refería. y una pregunta, y si hubiera un bootloader en ASM que cargase un programa en C... la parte en C sería portable, no?

si incluyes ASM en C inline y lo compilas, es portable?
Si incluis el ASM inline no es portable.

El tema con las maquinas virtuales es muy relativo, vos podes hacer un sistema operativo para correr sobre una arquitectura virtual, pero estas atado a esa arquitectura virtual (no sos portable entre arquitecturas, dependes de estar corriendo sobre la maquina virtual). Y la maquina virtual, en algun momento va a tener q manejar registros especificos de cada procesador, manejar interrupciones (las estructuras para manejar interrupciones son distintas en cada procesador), etc.

Podes tratar de alejarte lo mas que puedas del procesador, pero en algun momento alguien va a tener q manejarlo, seas vos, la maquina virtual, etc.


Título: Re: ASM, arquitecturas y procesadores compatibles
Publicado por: .:UND3R:. en 1 Diciembre 2011, 17:10 pm
Podríamos decir que tenemos los siguientes niveles de programación:

Lenguaje Alto nivel                                   <-Nivel 5
Lenguaje ensamblador                             <-Nivel 4
Sistema operativo                                   <-Nivel 3
Arquitectura del conjunto de instrucciones <-Nivel 2
Microarquitectura                                    <-Nivel 1
Lógica digital                                          <-Nivel 0

Desde el nivel 2 es en donde el usuario puede comenzar a programar, este nivel es en donde se trabaja bajo instrucciones binarias

La única posibilidad a mi parecer sería crear una Máquina virtual (todos sabemos que las máquinas virtuales son creadas para facilitar al programador con instrucciones mucho más cómodas), un ejemplo claro de ella es cualquier computador que tenga instalado VJM (Virtual java machine) podrá ejecutar aplicaciones java sin importar la Arquitectura del procesador, esto debido a que el código va descendiendo hasta llegar a la lógica digital en donde se interpretará las instrucciones.

El paso de un nivel a otro se puede realizar a través de dos métodos:

1-Traducción: la traducción consiste en que un programa traduzca un lenguaje a un nivel inferior, este programa debe estar hecho con el lenguaje del nivel anterior para que puede ser interpretado.

2-Interpretación: consiste en que mientras el programa está siendo ejecutado las instrucciones son interpretadas en los otros lenguaje

en ambos métodos los lenguajes deben ser progresivos ya que el tiempo de Interpretación o Traducción podría relentizar el proceso de ejecución de este debido a la pérdida de tiempo que se demorará en pasar de un lenguaje a otro

El gran problema es que con anterioridad se debe tener instalada la máquina virtual y para lograr eso la única forma de poder instarla es que este sea instalado con un lenguaje inferior. Esto puede ser problema si queremos diseñar un virus multiplataforma o programas de ese estilo, pero si nos enfocamos en la programación comercial la creación de una máquina virtual solucionaría el problema, pero insisto que la máquina virtual debería ser programada para cada arquitectura por lo que se convertiría en lo mismo

Saludos


Título: Re: ASM, arquitecturas y procesadores compatibles
Publicado por: GeorgArming en 1 Diciembre 2011, 19:24 pm
vale, comprendo. última pregunta (de momento XD): ¿el lenguaje C es portable? es decir, un programa en C que no tenga ninguna instrucción en ASM, es portable, no?

EDITO: otra pregunta (y no digo que es la última porque a saber XD): si cada arquitectura requiere un ASM diferente, cómo es que cuando vas a descargarte ubuntu sólo te dan 2 opciones (32 bits y 64 bits)? ¿eso significa que da igual que sea x86 o otra arquitectura y, por tanto, este ubuntu que te descargas es portable? ¿cómo es posible que cuando vayas a descargarte el kernel linux sólo haya un tipo de kernel (no hay kernel versión 2.5 de x86, ARM,... sólo hay kernel 2.5)?


Título: Re: ASM, arquitecturas y procesadores compatibles
Publicado por: GeorgArming en 1 Diciembre 2011, 21:00 pm
más concretamente:

"La Portabilidad del núcleo Linux y arquitecturas soportadas, se refiere a que originalmente escrito para procesadores Intel i386, el núcleo Linux fue recodificado para facilitar la portabilidad de éste.
Habiendo sido reescrito una vez para la arquitectura Motorola 68K, la perspectiva de las tediosas reescrituras para cada arquitectura posible, incitada por Linus Torvalds, se enfocaba en poseer una base de código modular que pudiese ser portada hacia diferentes arquitecturas con un mínimo de esfuerzo.
Carpetas específicas de arquitectura en las fuentes del núcleo, se dirigen a detalles particulares de cada procesador soportado, mientras todas las ventajas radican el en hecho de compartir un idéntico código de núcleo."


Título: Re: ASM, arquitecturas y procesadores compatibles
Publicado por: skapunky en 1 Diciembre 2011, 21:08 pm
vale, comprendo. última pregunta (de momento XD): ¿el lenguaje C es portable? es decir, un programa en C que no tenga ninguna instrucción en ASM, es portable, no?

El lenguaje C es universal pero no portable, a ver si me explico: Si tu programas directamente en la ROM del procesador en C éste programa debe tener enlazada una libreria del procesador que uses, no es lo mismo un intel, que un AMD un Zilog Z80... Este "include" simplemente defines cada parámetro del C a una dirección de memória donde evidentemente depende el procesador esta cambia.

El asm independiemente que cambie según la arquitectura, se le defínen igualmente posiciónes de memória. Por ejemplo las llamadas IRQ's que procesan en general los perfiféricos cada una tiene una dirección de memória (te lo digo como ejemplo).


Título: Re: ASM, arquitecturas y procesadores compatibles
Publicado por: GeorgArming en 1 Diciembre 2011, 21:14 pm
El lenguaje C es universal pero no portable, a ver si me explico: Si tu programas directamente en la ROM del procesador en C éste programa debe tener enlazada una libreria del procesador que uses, no es lo mismo un intel, que un AMD un Zilog Z80... Este "include" simplemente defines cada parámetro del C a una dirección de memória donde evidentemente depende el procesador esta cambia.

El asm independiemente que cambie según la arquitectura, se le defínen igualmente posiciónes de memória. Por ejemplo las llamadas IRQ's que procesan en general los perfiféricos cada una tiene una dirección de memória (te lo digo como ejemplo).

vale, te entiendo. ¿pero entonces cómo es que sólo hay una versión del kernel linux?


Título: Re: ASM, arquitecturas y procesadores compatibles
Publicado por: skapunky en 1 Diciembre 2011, 21:35 pm
El kernel de linux está optimizado para trabajar en mas de 1 tipo de procesador, pero eso no quita que cada empresa (intel,amd...)tenga que aportar codigo para que el kernel de linux sea compatible en su procesador.

Cada empresa ya se a encargado de dar su granito de arena para hacer compatible el kernel de linux y seguirán optimizando el codigo para corregir o mejorar su rendimiento.

El kernel de linux es algo complego, no es un solo archivo de codigo fuente. 


Título: Re: ASM, arquitecturas y procesadores compatibles
Publicado por: GeorgArming en 1 Diciembre 2011, 22:01 pm
muchísimas gracias a todos, mi duda ha quedado resuelta (aunque he descubierto que lo que quería no existe  :-\).

disculpad que vaya haciendo una pregunta tras otra  :D, pero ya que estamos, para no abrir un tema nuevo, y con relación con los OS: ¿por qué los sistemas operativos no tienen función main? hasta donde yo sé, cuando se ejecuta un programa, se va siguiendo la función main y se van haciendo las diferentes funciones. pero si un OS no tiene main, cuando se inicia el sistema operativo, ¿qué parte del código indica que tiene que comenzar por el bootloader, y no por otra parte del código?


Título: Re: ASM, arquitecturas y procesadores compatibles
Publicado por: skapunky en 3 Diciembre 2011, 12:41 pm
Piensa que si un SO tuviera un MAIN como lo conocemos en programación, solo se ejecutaria una instrucción en cada momento y la utilidad del pc seria nula, es decir, no funcionaria.

Un SO es mas complejo que un programa hecho por ejemplo en C, incluso mas complejo que un programa hecho en un microcontrolador. Yo te pondré el caso de un microcontrolador.

Un microcontrolador tiene una parte de programa principal (main) y aparte de forma paralela puede utilizar dos tipos de interrupciónes, las externas e internas. Es decir cuando se activan ejecutan el codigo que se les asigna. La función de estas es ejecutar un codigo paralelo al codigo del programa.

Un procesador de ordenador, para que me entiendas tendría una gran cantidad de "interrupciones" piensa que mientras se le el puerto del USB, se debe leer el teclado, o enviar una señal a la tarjeta grafica, o procesar el borrado de un archivo..como veras la lista es muy grande. Si el SO se ejecutase en una secuencia lineal en un MAIN todo eso no podría ser posible.

El tema del bootloader es otra cuestión, el bootloader se ejecuta directamente en el procesador a 16 bits en ensamblador, éste puede tener diferentes funciónes entre otras cargar archivos del SO para que se inície y estos ya pueden estar escritos en ensamblador o C.


Título: Re: ASM, arquitecturas y procesadores compatibles
Publicado por: GeorgArming en 3 Diciembre 2011, 16:02 pm
muchas gracias. veo que aquí hay auténticos cracks  :D.


Título: Re: ASM, arquitecturas y procesadores compatibles
Publicado por: pucheto en 3 Diciembre 2011, 16:28 pm
Fijate de conseguir http://www.amazon.com/Essentials-Computer-Organization-Architecture/dp/0763737690 (http://www.amazon.com/Essentials-Computer-Organization-Architecture/dp/0763737690)

Si queres saber mas sobre arquitecturas de computadoras ( Es introductorio, pero vale la pena leerlo ).


Título: Re: ASM, arquitecturas y procesadores compatibles
Publicado por: d(-_-)b en 3 Diciembre 2011, 21:14 pm
Fijate de conseguir http://www.amazon.com/Essentials-Computer-Organization-Architecture/dp/0763737690 (http://www.amazon.com/Essentials-Computer-Organization-Architecture/dp/0763737690)

Si queres saber mas sobre arquitecturas de computadoras ( Es introductorio, pero vale la pena leerlo ).

The Essentials of Computer Organization and Architecture

(http://ec1.images-amazon.com/images/I/41WSH5S4FKL._AA240_.jpg)

ISBN-10: 076370444X
ISBN-13: 978-0763704445

Book Description
Covers all the core topics, such as digital logic, data representation, machine-level language, general organization, and much more.

Book Info
Provides a textbook that incorporates all of the necessary organization and architecture topics, yet concise enough to allow the material to be covered in one semester. Allows students to tie the hardware knowledge covered in this book to the concepts learned in their introductory programming classes.

Password: books_for_all
Download (http://rapidshare.com/files/29752469/76925978-6FC2-40A8-A78B-015D03F05EAC.rar)

saludos...


Título: Re: ASM, arquitecturas y procesadores compatibles
Publicado por: GeorgArming en 3 Diciembre 2011, 23:24 pm
muy buen aporte!