{"id":79,"date":"2023-08-10T11:15:43","date_gmt":"2023-08-10T09:15:43","guid":{"rendered":"http:\/\/eines-informatiques.recursos.uoc.edu\/introduccion-a-los-entornos-de-trabajo-gnu-linux\/?page_id=79"},"modified":"2023-08-31T18:18:01","modified_gmt":"2023-08-31T16:18:01","slug":"1-4-programas-y-procesos","status":"publish","type":"page","link":"http:\/\/eines-informatiques.recursos.uoc.edu\/introduccion-a-los-entornos-de-trabajo-gnu-linux\/es\/1-4-programas-y-procesos\/","title":{"rendered":"1.4. Programas y procesos"},"content":{"rendered":"<p>Los ordenadores ejecutan programas que son listados de instrucciones que indican c\u00f3mo procesar un conjunto de datos.<\/p>\n<p>Podemos dividir los lenguajes de programaci\u00f3n entre:<\/p>\n<ul>\n<li>Bajo nivel: ensambladores y de m\u00e1quina. Cercanos al c\u00f3digo binario.<\/li>\n<li>Alto nivel: f\u00e1ciles de leer y entender (por ejemplo, C, PHP, Python o Java).<\/li>\n<\/ul>\n<p>As\u00ed mismo podemos diferenciar los lenguajes de alto nivel compilados o interpretados.<\/p>\n<p>Un programa escrito con un lenguaje de programaci\u00f3n compilado, para poder ejecutarse, necesita ser antes procesado por un compilador adecuado, y traducido a lenguaje m\u00e1quina (binario). Los compiladores son programas encargados de realizar el an\u00e1lisis l\u00e9xico, sint\u00e1ctico y sem\u00e1ntico del c\u00f3digo. Una vez superada esa etapa de verificaci\u00f3n, el compilador genera un fichero objeto que debe ser enlazado con varias librer\u00edas de funciones del sistema para generar un fichero ejecutable binario. El usuario puede ejecutar este archivo cuando sea preciso. La depuraci\u00f3n de los programas compilados es costosa, y es rentable solo en los casos en que el rendimiento \u00f3ptimo de estos, en t\u00e9rminos de tiempo de ejecuci\u00f3n y espacio de memoria, es capital.<\/p>\n<p>Para efectuar tareas m\u00e1s sencillas es posible dise\u00f1ar prototipos (en ingl\u00e9s, <em>scripts<\/em>) empleando lenguajes orientados a la producci\u00f3n r\u00e1pida de programas, como Perl o Python, lenguajes interpretados. Estos lenguajes de <em>scripting<\/em> poseen un juego de instrucciones espec\u00edficamente dise\u00f1ado para facilitar la adquisici\u00f3n y tratamiento de ficheros de texto. Sus int\u00e9rpretes procesan los programas instrucci\u00f3n a instrucci\u00f3n, salt\u00e1ndose de ese modo la creaci\u00f3n de un fichero binario. A cambio, su rendimiento, en comparaci\u00f3n con los ficheros ejecutables, es menor.<\/p>\n<p>Una vez el usuario decide ejecutar un programa, el SO debe crear una entidad l\u00f3gica asociada a este c\u00f3digo a la que dotar de recursos suficientes para desarrollar su actividad (procesador, memoria y acceso a dispositivos). Esta metodolog\u00eda permite ejecutar de forma concurrente varias instancias de la misma aplicaci\u00f3n sin mayor inconveniente que los propios de la compartici\u00f3n de algunos recursos (f\u00e1cilmente subsanables dentro del programa, utilizando nombres \u00fanicos para los ficheros y otros dispositivos).<\/p>\n<p>Dado que solo un proceso puede estar simult\u00e1neamente en posesi\u00f3n de la CPU, debe realizarse una planificaci\u00f3n \u00f3ptima para decidir en cada momento a qu\u00e9 proceso le corresponde su uso. Pese a que la compartici\u00f3n del procesador parece una seria limitaci\u00f3n, es en realidad una gran ventaja, pues un proceso gasta una fracci\u00f3n importante de su tiempo esperando para acceder a otros dispositivos m\u00e1s lentos. Por tanto, solapando el uso de la CPU con las esperas de los procesos, se consigue simular un trabajo en paralelo, cuando realmente solo existe un procesador.<\/p>\n<p>Las estaciones de trabajo actuales est\u00e1n dotadas de multiprocesadores, esto es, nodos con dos, cuatro o m\u00e1s procesadores dentro de la misma m\u00e1quina. Gracias a esta ampliaci\u00f3n de los recursos disponibles, el SO, mediante las librer\u00edas de dise\u00f1o de programas apropiadas, puede hacer trabajar sus programas en paralelo, permitiendo que determinados fragmentos de estos trabajen independientemente sobre distintos conjuntos de datos en diferentes procesadores. Cada unidad de c\u00f3digo ejecutable en paralelo dentro del proceso recibe el nombre de <em>hilo de ejecuci\u00f3n<\/em> (en ingl\u00e9s, <em>thread<\/em>). En un sistema con una \u00fanica CPU, el SO tambi\u00e9n es capaz de planificar varios <em>threads<\/em> para simular paralelismo, siempre que la carga de trabajo de la m\u00e1quina no sea excesiva.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Los ordenadores ejecutan programas que son listados de instrucciones que indican c\u00f3mo procesar un conjunto de datos. Podemos dividir los lenguajes de programaci\u00f3n entre: Bajo nivel: ensambladores y de m\u00e1quina. Cercanos al c\u00f3digo binario. Alto nivel: f\u00e1ciles de leer y entender (por ejemplo, C, PHP, Python o Java). As\u00ed mismo podemos diferenciar los lenguajes de [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":[],"acf":[],"_links":{"self":[{"href":"http:\/\/eines-informatiques.recursos.uoc.edu\/introduccion-a-los-entornos-de-trabajo-gnu-linux\/es\/wp-json\/wp\/v2\/pages\/79"}],"collection":[{"href":"http:\/\/eines-informatiques.recursos.uoc.edu\/introduccion-a-los-entornos-de-trabajo-gnu-linux\/es\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"http:\/\/eines-informatiques.recursos.uoc.edu\/introduccion-a-los-entornos-de-trabajo-gnu-linux\/es\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"http:\/\/eines-informatiques.recursos.uoc.edu\/introduccion-a-los-entornos-de-trabajo-gnu-linux\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/eines-informatiques.recursos.uoc.edu\/introduccion-a-los-entornos-de-trabajo-gnu-linux\/es\/wp-json\/wp\/v2\/comments?post=79"}],"version-history":[{"count":2,"href":"http:\/\/eines-informatiques.recursos.uoc.edu\/introduccion-a-los-entornos-de-trabajo-gnu-linux\/es\/wp-json\/wp\/v2\/pages\/79\/revisions"}],"predecessor-version":[{"id":298,"href":"http:\/\/eines-informatiques.recursos.uoc.edu\/introduccion-a-los-entornos-de-trabajo-gnu-linux\/es\/wp-json\/wp\/v2\/pages\/79\/revisions\/298"}],"wp:attachment":[{"href":"http:\/\/eines-informatiques.recursos.uoc.edu\/introduccion-a-los-entornos-de-trabajo-gnu-linux\/es\/wp-json\/wp\/v2\/media?parent=79"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}