Download - Resumen taller de informática
Universidad Nacional de Misiones
Facultad de Ingeniería
Taller de Informática
Resumen Teórico según Planificación 2.010
Autor:
Krujoski Matías Gabriel
Observación: para un mejor aprovechamiento del espacio en el papel
todos los ítems distribuidos con viñetas están alineados al margen
derecho; pero respetan el siguiente esquema de jerarquía:
o Donde la viñetas
escapan a la jerarquía y se utilizan simplemente para listar elementos en cualquier nivel.
Oberá, Misiones
2010
Tema 1: introducción a la informática
La informática: ciencia encargada del estudio y desarrollo de máquinas y métodos para procesar
información; nació para trabajos repetitivos y rutinarios: Cálculo, gestión. En término es de origen
francés, en el año 1962 (INFORmation autoMATIQUE). Estudio de tratamiento automático porque
utilizan máquinas que capturan, procesan y presentan la información y racional porque el proceso está
organizado según el razonamiento humano.
Incluye:
Desarrollo de nuevas máquinas
Desarrollo de nuevos métodos de trabajo
La construcción de aplicaciones informáticas
Mejorar neto de aplicaciones existentes
Hardware:
Computadora: tecnologías de la información y las comunicaciones son todas aquellas
tecnologías que intervienen en la colección, emisión, recepción, almacenamiento, procesamiento y
recuperación de datos e información a través del uso de señales electrónicas analógicas y digitales.
Componentes:
Hardware: componentes físicos de una computadora, de una red o dispositivos electrónicos.
o Unidad central de proceso (CPU): es parte del procesador central, controla los demás elementos de
cálculo, está integrado por la Unidad De Control y la Unidad Aritmético Lógica; trabaja con el
almacenamiento primario almacenando temporalmente los datos y las instrucciones del programa
durante el procesamiento.
o Unidad Aritmético-Lógica: realizar las principales operaciones de lógica y aritméticas (suma y resta,
además de operaciones lógicas para números y letras).
o Unidad De Control: coordina y controla otras partes del sistema, lee un programa almacenado, una
instrucción a la ves y dirige otros componentes para realizar la tarea que se requiere.
o Almacenamiento primario: almacena temporalmente instrucciones de programación y datos que
usados en las instrucciones de la CPU; tiene tres funciones:
Almacenar todo o parte del programa que se está ejecutando
Almacenar los programas del sistema operativo que administra la operación de la computadora.
Guarda los datos que están siendo usados por el programa que se está ejecutando.
Se la conoce como RAM (Random Acces Memory) porque puede acceder a puntos aleatorios de
memoria simultáneamente; se divide en celdas de un byte y cada una tiene una dirección individual.
o Almacenamiento Secundario: es perdurable en el tiempo, no volátil, está fuera de la CPU (discos,
flash, etc.); tiene un mayor tiempo de acceso que la RAM.
o Dispositivos de Entrada:
Teclado: es la forma tradicional de introducir datos; el estándar actual es de 101 teclas, con 12
teclas de función además de teclas de control y cursores; existen modelos exclusivos para
aplicaciones específicas.
Mouse: es un dispositivo manual que captura los movimientos y con ellos controla la posición
del cursor en pantalla, permitiendo hacer selecciones rápidas en íconos y menús.
Pantalla sensible al tacto: permite realizar selecciones y accesos al tocar la superficie de la
pantalla de video.
Automatización de datos fuente: permite acceder a datos legibles para la computadora en el
lugar en que se originan los datos; estas tecnologías evitan los erros cometidos al introducir
datos por teclado. Podemos listar los siguientes:
Dispositivos ópticos: lector de marcas o rastreador de marca óptica: usa luz reflejada para
determinar la posición de marcas de lápiz en formularios estándar; lector de códigos de barras;
lápiz óptico: usa luz para leer caracteres escritos con un tipo especial de letra también legible
para las personas; rastreador de página: rastrea e interpreta los caracteres alfanuméricos de las
páginas impresas normales, se utiliza para digitalizar libros y documentos.
Dispositivos magnéticos: MICR (magnetic ink character recognition) lector de caracteres
magnéticos: lee los caracteres impresos con tinta magnética en los cheques, son muy precisos y
rápidos; lector de bandas magnéticas: son los utilizados con las tarjetas de créditos.
Digitalizadores: de imágenes (scanner): obtiene una representación digital de cualquier imagen
impresa; cámara digital: permite tomar fotografías; de audio: puede digitalizar sonidos
provenientes de un micrófono y otro dispositivo de audio para procesarlo con la computadora;
de video: con los circuitos apropiados digitaliza señales de video para procesarla en la
computadora; dispositivos sensores: permiten medir parámetros físicos en tiempo real.
o Dispositivos de salida:
Monitor: es una VDT (Video display terminal) permite recibir mensajes visuales del computador;
las imágenes en él se construyen con pequeños puntos llamados pixeles, la cantidad de éstos
por pulgada cuadrada (DPI: dot per inch) determina la calidad de imagen del monitor.
Impresora: permite realizar una copia impresa (física) de cualquier información que esté en la
computadora.
Trazadores: es un dispositivo automatizado para crear gráficos de alta calidad, lo logra moviendo
una pluma sobre el papel (o ambos) todo coordinado por la computadora.
Respuesta audible: permiten generar señales audibles para informar eventos; pueden hacerlo
utilizando un mensaje grabado o con un sintetizador de voz.
Principios de funcionamiento: para que la información pueda procesarse dentro de la computadora
todos los símbolos, imágenes o palabras deben ser reproducidos mediante una cadena de dígitos
binarios, estas cadenas están compuestas por:
o bit: dígito binario que representa la unió a información más pequeña; tiene sólo dos estados
representados por 0 o 1.
o byte: cadena de ocho bits que se emplea para representar un número carácter almacenado en un
sistema de cómputos.
SOFT. DE SISTEMA
HARDWARE
SOFT. DE APLICACIÓN
SOFT. DE USUARIO FINAL
Como el usuario no puede trabajar con números binarios se desarrollaron Códigos Binarios Estándar,
ASCII (American Standard Code For Information Interchanges), donde se establecen las asociaciones
pertinentes entre los códigos numéricos binarios y los caracteres que le usuario si puede interpretar.
Software: es un conjunto de instrucciones detalladas que controlan la operación de un sistema de
cómputos; sus principales funciones son: administrar los recursos de cómputos; proporcionar las
herramientas a los usuarios para que aprovechen estos recursos; actuar como intermediarios entre
los usuarios y la información almacenada.
Clasificación de software: existen tres tipos principales:
de Sistema: administran los recursos de la computadora: CPU, dispositivos de comunicaciones y los
periféricos.
de Aplicación: son programas específicos escritos para
una finalidad exclusiva que le dan los usuarios finales.
de Usuario Final: tipo especial de aplicación que
contiene herramientas de software que permiten el
desarrollo de aplicaciones por los usuarios finales con
muy poca o nula intervención de programadores
profesionales.
Estos tres tipos están interrelacionados y deben interactuar.
Datos e información: los datos son símbolos, valores, etc que describen o miden una situación; en
cambio la información es una adecuada organización de los datos para comprender una determinada
situación, generar ideas, modelos o conclusiones.
Tema 2: Introducción a la Programación:
Análisis y resolución de problemas:
Problema: es un asunto o conjunto de cuestiones que se plantean para ser resueltas; varían según el
contexto, en informática sólo se consideran aquellos que pueden calcularse utilizando una serie de
reglas introducidas en la computadora. En general la resolución de este tipo de problemas puede
dividirse en tres etapas:
Análisis del problema: se pretende comprender y definir claramente la naturaleza del mismo, es
importante establecer con claridad que debe realizar el programa que se pretende construir; para
poder encuadrar bien la situación problemática es importante considerar los siguientes aspectos:
o Definición del problema
o Especificaciones de entrada
o Especificaciones de salida
Diseño del algoritmo: se determina cómo hace el programa la tarea solicitada; es esta etapa se
construye un algoritmo que resuelva el problema utilizando alguna herramienta algorítmica como el
diagrama de flujo, que permite trabajar de forma organizada y estructurada.
Un algoritmo es un método para resolver un problema mediante una serie de pasos precisos,
definidos y finitos; debe obtener un resultado en un tiempo finito.
Implementación del algoritmo en la computadora: consiste en codificar el algoritmo siguiendo las
reglas sintácticas y semánticas de un determinado lenguaje de programación. Comprende los
siguientes aspectos:
o Codificación
o Compilación y ejecución
o Verificación
o Depuración
o Documentación
Programa: es la implementación de un algoritmo en un determinado lenguaje de programación;
puede considerarse una secuencia de acciones o instrucciones que manipulan un conjunto de
objetos, los datos.
Partes de un programa: contiene dos bloques:
Declaraciones: se especifican todos los objetos que utiliza el programa; constantes, variables, tablas,
registros, archivos, etc.
Instrucciones: contiene todo el conjunto de operaciones que se han de realizar para la obtención de
los resultados deseados.
Elementos principales:
o Entrada de datos: todas aquellas instrucciones que toman datos de algún dispositivo externo y los
almacenan para ser utilizados.
o Proceso: instrucciones que modifican los objetos desde su estado inicial hasta dejarlos almacenados
en la memoria principal en su estado final.
o Salida de resultados: toman los datos de la memoria central y los envían a los dispositivos externos.
Etapas de creación de un programa:
Análisis del problema: evaluar estos tres aspectos fundamentales:
o Para que (salidas)
o Que hacer (proceso)
o Con que (entradas)
Diseño: consiste en diseñar como el programa cumple con la tarea encomendada; generalmente se
divide el programa en sub-programas y a su vez éstos en módulos, para ir de lo más general a lo más
específico. Esta descomposición generalmente se hace por un criterio funcional, dónde cada módulo
ejecuta una o más funciones.
Implementación del algoritmo en la computadora: sus principales elementos son:
o Codificación: se escribe en un lenguaje de programación la representación del algoritmo
desarrollado; su producto es un programa fuente.
o Compilación y ejecución: utilizando un compilador se traduce el programa fuente al lenguaje
máquina que la computadora puede comprender; su producto es el programa objeto que con el
sistema operativo se carga con las librerías del compilador para obtener finalmente el programa
ejecutable que ya puede evaluarse.
o Verificación y depuración: se comprueba que el programa trabaje correctamente y cumpla con los
requerimientos del usuario.
Verificar: se ejecuta el programa con una amplia variedad de datos de entrada (con los valores
habituales, y los valores extremos para evaluar los límites del programa).
Depurar: proceso de encontrar y eliminar los errores que puede contener el programa; los
errores pueden ser: de compilación: suelen provenir de errores de sintaxis; de ejecución: suelen
ser instrucciones que la computadora comprende pero no puede realizar (por ejemplo: división
por cero); de lógica: son errores en el algoritmo del programa, se detectan por los resultados
incorrectos.
Documentación y mantenimiento: se debe indicar los pasos a dar en proceso de resolución de un
problema. El mantenimiento es la actualización de los programas con los cambios requeridos por el
usuario o corrección de posibles errores futuros.
Técnicas de programación: al diseñar un algoritmo y luego escribir su código habitualmente se
procede a dividir el programa un subprogramas más pequeños y luego estos en módulos, esta forma
de trabajo permite simplificar la tarea que realiza cada módulo y así facilitar el trabajo de
programación, permite pasar de lo general a lo más específico, esta forma de organizar la
programación se conoce como “top-down”; en rasgos generales podemos identificar las siguientes
filosofías a la hora de programar:
Programación no estructurada: este tipo de códigos son sencillos y poseen un solo programa
principal; es decir una secuencia de comandos o instrucciones que modifican datos que son globales
en el transcurso de todo el programa; entonces se opera directamente sobre datos globales. Esta
técnica tiene desventajas cuando el programa se hace lo suficientemente extenso y complejo.
Programación procedimental: en esta se pueden combinar aquellas secuencias de código repetibles
en un solo lugar, entonces con una “llamada de procedimiento” (funciones) se puede invocar la
secuencia necesaria en cualquier sección del código que sea requerida. Esta técnica permite que los
programas sean mas estructurados y libres de errores; de este modo el programa es visto como una
secuencia de llamados a procedimientos.
Programación modular: en esta técnica los procedimientos con una funcionalidad común son
agrupados en módulos separados; quedando el programa fraccionado en secciones y sub-secciones,
donde cada una puede contener sus propios datos, manejándose en cada una un estado interno con
sus propias llamadas a procedimientos; sin embargo sólo hay un estado por módulo y cada módulo
existe una única vez dentro del programa.
Tema 3: Algoritmos:
Algoritmo: es un conjunto ordenado y finito de pasos o instrucciones que conducen a la solución
de un problema.
Características:
Líneas de Flujo
Operación de Proceso
Entrada de datos
Salida de datos
Decisión
Terminal (inicio, fin)
Preciso: tiene que indicar el orden de realización en cada paso.
Definido: si el algoritmo se prueba dos veces, en estas dos pruebas, se debe obtener el mismo
resultado.
Finito: tiene que tener un número determinado de pasos
Debe producir un resultado en un tiempo finito.
Diseño: existen diversas formas de representar un algoritmo, pueden ser:
Pseudocódigo: es una combinación de símbolos, términos y otras características comúnmente
utilizadas en uno o más lenguajes de alto nivel.
Diagramas de Flujo: [sección particular].
Aplicación de estrategias de resolución de problemas: todos los planteamientos descriptos para la
resolución de problemas son valederos y aplicables en la construcción de algoritmos; en rasgos
generales se pueden seguir las siguientes pautas de resolución:
Comprender el problema
Trazar un plan para resolverlo
Poner en práctica el plan
Comprobar los resultados.
Diagrama de Flujo: utiliza símbolos (cajas) estándar q contienen los pasos del algoritmo escrito en
ellas y unidas por flechas, denominadas “líneas de flujo” que indican la secuencia en la que se
deben ejecutar. Siempre contienen:
Una caja de “Inicio”
Otra caja de “Fin”
Otras cajas con formas diversas que representan distintas operaciones.
Símbolos: cada símbolo representa el tipo de operación a ejecutar y el diagrama indica la secuencia
de ejecución de las operaciones:
Prueba de escritorio: es una herramienta útil para entender que hace un determinado algoritmo, o
para verificar que un algoritmo cumple con la especificación sin necesidad de ejecutarlo.
Básicamente, una prueba de escritorio es una ejecución ‘a mano’ del algoritmo, por lo tanto se
debe llevar registro de los valores que va tomando cada una de las variables involucradas en el
mismo, esto habitualmente se hace en una tabla con columnas independientes para cada variable y
las filas corresponden a la ejecución de una secuencia o instrucción.
Estructuras básicas: cada proceso posee subprocesos y estos a su vez de subprocesos mas
elementales; así los programas están formados por conjuntos de funciones hasta llegar a las
operaciones elementales del procesador u operaciones máquina. Las instrucciones son
construcciones de lenguaje máquina (cadenas finitas de dígitos) que permiten invocar a las
operaciones elementales; por cada operación hay sólo una instrucción. Como principales
estructuras de ejecución tenemos:
Lineales:
Instrucción de entrada o lectura de datos: permite asignar valores desde dispositivos para
almacenarlos en memoria.
Instrucción de salida o escritura: permite visualizar resultados mediante los dispositivos de salida.
Instrucción de asignación: consiste en dar a una variable el valor de una expresión, el de otra
variable o un valor constante; la asignación es destructiva porque destruye el valor previo de la
variable que recibe la asignación.
Selectivas: en los algoritmos es necesario realizar “tomas de decisiones” que determinan los pasos
siguiente en la ejecución; en concreto estructuras de programación que se utilizan cuando se desea
ejecutar una acción dependiendo de si una expresión es verdadera o falsa. Se clasifican de la
siguiente forma:
Estructura de selección simple IF (SI): posee una condición lógica, o combinación de ellas, que el
programa las evalúa; al ser verdadera(s) ejecuta las instrucciones contenidas dentro de la
estructura de selección y cuando la condición lógica resulta falsa ignora las instrucciones interiores
y continúa la ejecución con la instrucción siguiente a la selección.
Estructura de selección doble IF-ELSE (SINO): permite bifurcar el flujo de ejecución según el
argumento (condición lógica) del IF; esta sentencia ejecuta las instrucciones dentro del IF sí la
condición es verdadera y de lo contrario ejecuta las instrucciones etiquetadas con el ELSE.
Estructura de selección doble en cascada (IF – ELSE IF – ELSE): las estructuras de selección doble
están en cascada cuando la instrucción que sigue a un ELSE es otro IF a excepción del último ELSE;
las condiciones se evalúan en orden descendente pasando de una a otra si la anterior resulta falsa
hasta encontrar una expresión que resulta verdadera y se ejecute sus instrucciones ó hasta llegar al
último ELSE y ejecutar sus instrucciones.
Estructura de selección múltiple (CASE): permite elegir entre diferentes opciones; está compuesta
por varias sentencias simples y al ejecutarse sólo una de ellas se selecciona y ejecutan sus
instrucciones.
Estructuras de Control Repetitivas: permiten repetir un conjunto o bloque de instrucciones
mientras una condición dada sea cierta; iterativas son aquellas en las que se ejecuta el bloque de
instrucciones un número determinado de veces, dependiendo de un valor predefinido o el
cumplimiento de una determinada acción. Son estructuras con una entrada y una salida que en su
interior ejecutan los bloques de instrucciones.
Bucle: es una serie de sentencias que pueden ser de cualquier tipo las cuales serán repetidas n
veces; dependiendo n de un valor o una condición lógica.
Estructura While (mientras): en ella el cuerpo del bucle se repite mientras se cumple una
determinada condición; ésta realiza primero la evaluación de la condición luego la ejecución por
ello se debe tener precaución con los valores iniciales para la expresión lógica, pues esta puede no
ejecutar ni una sola vez el bucle.
Estructura Do … While (Hacer … mientras): se repite mientras la expresión sea verdadera; pero en
ésta primero se ejecuta el bloque y luego se evalúa la condición por lo tanto su bucle se ejecutará al
menos una vez independientemente de los valores iniciales para la expresión.
Estructura For (desde/para): ejecuta el bucle un número específico de veces y de modo automático
controla el número de iteraciones o pasos a través del bucle.
Estructuras anidadas: se denominan así a todos los bloques de instrucciones que estén incluidos
dentro de otros bloques de instrucciones; es importante que la inclusión sea correctamente
“cerrada” sin que se “crucen” distintos niveles de anidamiento.
Contadores y acumuladores: la computadora al ejecutar un programa guarda todos los datos en
variables que se almacenan en la memoria, lo hace mediante expresiones de asignación; pero
existen algunas asignaciones particulares de gran utilidad:
Contadores: es un juego de expresión que permite incrementar una variable en una unidad o una
cantidad específica constante de incremento.
Acumuladores: es una variable que se incrementa a una cantidad variable por cada iteración.
Introducción a las Estructuras de Datos: las estructuras o arreglos de datos son una colección de
datos de un determinado tipo organizados de una manera en particular; poseen un único nombre
de variable que representa a todos sus elementos los cuales deben identificarse individualmente
por un índice que acompaña al nombre del arreglo.
Vectores: o arreglos unidimensionales son una lista o columna de datos del mismo tipo; poseen un
número finito de elementos que debe ser conocido a la hora de compilar el programa; todos sus
elementos son almacenados en posiciones contiguas de memoria; cada elemento se puede
procesar como variable simple indicando el nombre del arreglo y el índice correspondiente: vector2
vector[2] se hace referencia al tercer (los índices comienzan en 0) elemento del arreglo vector.
Operaciones con vectores: se requiere el uso de estructuras repetitivas para recorrer todos los
elementos de un vector; las operaciones más comunes son:
o Lectura / Escritura: son similares, sólo cambia la instrucción (lectura o escritura) del bucle en la
estructura repetitiva la cual se utiliza para “cambiar” o “incrementar” los valores numéricos que
denotan los índices del vector, por lo general se utiliza una sentencia FOR que está limitada a la
“longitud” del vector, es decir a su cantidad de elementos.
o Búsqueda: permite encontrar la/las ubicacion/es del/los elemento/s coincidente/s con un patrón
de referencia para buscar, se utiliza una sentencia de selección cuya condición es la igualdad del
elemento del vector con el patrón de referencia, cuando se hace verdadera puede registrarse o
visualizarse la posición (índice) de coincidencia.
o Orden: permite organizar los elementos del vector según algún criterio dado; por ejemplo
creciente, etc.; existen varios métodos para ordenar.
o Intercalación: se combinan los elementos de más de un vector según se indique.
Matrices: o arreglos bidimensionales; es un arreglo de arreglos unidimensionales, es un conjunto
de m por n elementos de igual tipo cada uno identificado por dos índices que hacen referencia a las
filas y columnas respectivamente, por ejemplo matriz1;2 matriz[1][2] hace referencia al
elemento de la segunda fila y tercer columna del arreglo matriz.
Recorrido: por tener dos dimensiones pueden ser recorridas en dos sentidos, por columnas o por
filas; en ambos casos se utiliza la estructura básica para recorrer un vector anidada dentro de una
estructura igual, para recorrer por filas la sentencia más interna debe corresponder al índice de
columnas y la externa al índice de filas, en cambio para recorrer por columnas la más interna
corresponde al índice de filas y la externa al índice de columnas. Esta operación de recorrido es
utilizada tanto para lectura y escritura, como para búsqueda y demás procesamientos del arreglo;
pudiendo por supuesto además acceder a elementos individuales o grupos de ellos, por ejemplo
una fila o columna en particular.
Almacenamiento: al igual que los vectores, todos los elementos de una matriz son almacenados en
posiciones contiguas de memoria, entonces la calidad de bidimensional es sólo a efectos de
organizar la información y facilitar su acceso y procesamiento.
Tema 4: Lenguajes de Programación
Lenguaje de Programación: es un conjunto de símbolos y palabras con reglas de sintácticas y
semánticas que le permiten a las personas con el conocimiento suficiente escribir algoritmos de
computadoras para que éstas puedan luego interpretarlos y llevarlos a cabo. En un sentido más
estricto, las computadoras sólo manejan un lenguaje binario, bivalente: cero y uno, que es bastante
complejo de ser comprendido con rapidez por las personas entonces a la hora de crear un
programa de computadora o un sistema operativo para éstas se hace prácticamente imposible
escribir este programa directamente en ese lenguaje binario, porque para determinadas
operaciones que se deben dirigir en el hardware son muy complejas las operaciones matemáticas
para codificarlas, por ello surgieron casi con las computadoras mismas los lenguajes de
programación que son mucho más versátiles y comprensibles para los seres humanos y nos
permiten, siguiendo una secuencia apropiada de procesamiento, obtener finalmente una programa
de computadora en el lenguaje binario que la máquina comprende y puede ejecutar.
Alto y Bajo nivel: se define como lenguaje de alto nivel a aquellos que son adecuados a la
capacidad cognitiva del ser humano, es decir los que pueden ser fácilmente comprensibles por
estos; en cambio los lenguajes de bajo nivel son aquellos que “están más cerca de la máquina”, es
decir pueden ser comprendidos por la computadora, proporcionan un set de instrucciones
aritmeticológicas sin la capacidad de encapsular dichas instrucciones en funciones que no estén ya
contempladas en la arquitectura del hardware, por lo tanto son muy focalizados para cada
hardware en especial según sus especificaciones técnicas, esto los hace difícil de ser portables y
adaptables, además secuenciar las operaciones de un programa en este nivel de lenguaje es
extremadamente complicado.
Compiladores: dentro del proceso de creación de un programa es necesario “traducir” el código
fuente que el programador escribe, utilizando un lenguaje de programación porque puede
entenderlo, a un lenguaje que la computadora pueda comprender, pare eso se utilizan los
compiladores que se encargan de tomar el código fuente de un programa y “compilarlo” en un
“programa objeto” el cual no tiene un significado directo para el ser humano pero que la
computadora puede comprenderlo y procesarlo para hacer los “enlaces” (linkeo) correspondiente
para obtener el programa ejecutable. Los compiladores son diferentes para distintos sistemas
operativos aunque compilen para los mismos lenguajes de programación, esto se debe a la forma
que tiene cada sistema operativo de tratar a los programas ejecutables.
Interpretes: son programas que tienen la capacidad de comprender el lenguaje de programación y
ejecutarlo sin la necesidad de compilar, se utilizan para evaluar las distintas porciones de código de
un programa fuente; habitualmente los intérpretes no traducen todo el código sino que lo hacen
instrucción por instrucción a medida que lo vaya requiriendo, nunca guardan el resultado de esa
“traducción” que hacen.
Lenguaje C: es un lenguaje de programación de propósito general que ofrece una “economía de
expresión”, control de flujo, estructuras de datos modernas y un amplio conjunto de operadores.
Fue creado por Dennis Ritchie en 1972 en la compañía Bell Telephone; surgió como una evolución
del ya existente lenguaje B que carecía de los “tipos de datos” que se incorporan en C, en particular
fue diseñado para construir el sistema operativo UNIX de la DEC PDP 11, pero debido a su
versatilidad evolucionó y se requirieron algunos controles en cuanto a sus variantes que surgieron;
para ello en 1983 el ANSI (American National Standards Institute) estableció un comité que tuvo
por resultado el Standard ANSI C, donde se proporcionó una nueva forma de declaración de
funciones, especifica una biblioteca estándar con un amplio conjunto de funciones de entrada y
salida, administración de memoria, manipulación de cadenas, etc. Sus principales características
son: su poder y flexibilidad, que es común por su amplia difusión, transportable porque puede
correr en cualquier tipo de computadora, tiene pocas palabras clave, es modular. En 1980 Bjarne
Strousrup desarrolló el C++ que es una ampliación del C orientada a Objetos; pero mantiene
absoluta compatibilidad con éste; sus nuevas características son: concepto de clases, herencia,
funciones virtuales y sobrecarga de operadores. El C++ también está regulado por el estándar ANSI,
donde se indican un conjunto de reglas que debe cumplir un compilador para ser considerado de C
o C++.
Convenciones léxicas: un programa consiste en una o más unidades de traducción almacenadas en
archivos; este es traducido en varias fases, las primeras fases realizan transformaciones léxicas de
bajo nivel, ejecutan directivas del preprocesador y realizan definiciones (prototipos) y expansiones;
cuando estas fases están completas el programa quedó reducido a una secuencia de componentes
léxicos (tokens) éstos son traducidos individualmente según la siguiente clasificación por categorías:
Identificadores
Palabras reservadas
Constantes
Cadenas literales
Operadores
Separadores
Todos estos componentes serán descriptos con mayor profundidad luego.
Estructura de un programa: básicamente todos los programas de computadora deben ingresar y
almacenar datos, procesarlos y mostrar, almacenar o imprimir los resultados obtenidos; por eso
para cada dato a utilizar se debe indicar de que tipo es para que el compilador sepa como debe
almacenarlo y recuperarlo y cuanta memoria debe reservar para ese dato. Por ello todos los
programas en C tienen una función main() que indica donde comienza la ejecución y finaliza la
ejecución; se debe declarar todas las variables antes de utilizarlas. Las partes más importantes de
un programa en C son:
Directivas del Preprocesador: se identifica la línea con #, puede utilizar la instrucción include que
indica al preprocesador que incluya en la compilación el archivo indicado (# include
<archivo>), ó define que permite definir un reemplazo o sustitución para una determinado
nombre (#define nombre valor).
Declaración de variables globales: son espacios de memoria asignados con nombres que tienen
determinado un tipo de dato para almacenar y al declararse aquí son accesibles desde cualquier
parte del programa.
Prototipos de Funciones: permiten indicarle al compilador las funciones personalizadas que se
utilizaran como así el número y tipo de argumentos que requiere.
Función main: es la función que indica el inicio y fin de la ejecución, con la apertura y cierre de sus
llaves respectivamente (main() {…}).
Definición de Funciones: se encabeza la función igual a su definición pero sin cerrar la línea con
punto y coma, luego va el cuerpo de instrucciones pertenecientes a la función entre llaves.
Declaraciones: consisten en detallar todos y cada uno de los datos que han de utilizarse durante la
ejecución del programa, para que el procesador puede almacenarlos de la forma correcta y
asignarles el espacio de memoria suficiente, cada uno se almacena bajo un nombre único.
Datos: son todos aquellos datos utilizados durante la ejecución del programa que deben
almacenarse y procesarse.
Tipos de datos: en C++ existen tipos básicos de datos, aunque en versiones distintas del lenguaje
pueden aparecer otros tipos; los fundamentales son:
Carácter: character char
Entero: integer int
Punto flotante: floating point float
Enumerados: enum
Booleano: bool
Variables: es un espacio de memoria cuyo contenido se modificará durante la ejecución del
programa, todas deben ser declaradas antes de ser utilizadas indicando su tipo y de ser necesario
tamaño (tipo nombre;); en el nombre o identificador sólo se pueden utilizar letras mayúsculas y
minúsculas (se distinguen), números y ciertos caracteres alfanuméricos (pero no punto, coma, gión,
comillas o símbolos matemáticos o interrogantes), sólo los primeros 32 dígitos son significativos
para los identificadores. A veces conviene inicializar las variables, es decir darle un valor inicial, esto
se puede hacer al declararlas (tipo nombre=valor_inicial).
Constantes: éstas sólo toman un valor en el momento de la declaración, luego cualquier intento de
modificación será considerado un error. Se declaran del mismo modo que las variables pero
anteponiendo el prefijo const antes del tipo de dato (const tipo nombre=valor).
Operadores: son elementos o caracteres que producen ciertos cálculos cuando son aplicados a
variables u otros objetos en expresiones, es un símbolo que le dice al compilador que realice
manipulaciones matemáticas o lógicas específicas.
Tipos de operadores:
o Aritméticos: se utilizan para crear expresiones matemáticas.
Unitarios: ‘+’, ‘-‘, ‘++’, ‘--‘, dónde los dos últimos sólo trabajan sobre variables como asignaciones de
incremento y decremento.
Binarios: ‘+’, ‘-‘, ‘*‘, ‘/’ , ‘%’.
o Relacionales: permiten determinar la relación entre un valor o cantidad con respecto a otro;
funciona mediante la idea de verdadero o falso, siendo cualquier valor distinto de cero verdadero y
cero es falso. Estos operadores son: ‘>’, ‘<’, ‘>=’, ‘<=’, ‘==’ (igual), ‘!=’ (distinto).
o Lógicos: permiten determinar como se presentan las relaciones entre las expresiones involucradas,
son:
&& AND o Y
|| OR u O
! NOT
o Asignación: consiste en dar el nombre de la variable a asignarle un valor, seguido del nombre igual
y del valor; siempre el valor de la izquierda se asigna a la variable de la derecha, no son ecuaciones.
Existen prácticas combinaciones especiales de asignación que se tabulan:
Operador Descripción Uso Equivalente a+= Suma y asignación x+=y x=x+y-= Resta y asignación x-=y x=x-y*= Multiplicación y asignación x*=y x=x*y/= División y asignación x/=y x=x/y%= Resto y asignación x%=y x=x%y
o Sizeof: devuelve el tamaño de la variable o tipo que está operando, si se utiliza para un tipo de dato
este va entre paréntesis (sizeof expresión; ó sizeof (tipo)).
o Condicional: opera con tres argumentos, ( expresión_lógica ? expresión_1 : expresión_2)
entonces se evalúa la expresión lógico, si es verdadero se evalúa la expresión 1 y si la expresión
lógica es falsa se evalúa la expresión 2.
o Coma: este operando permite encadenar diversas expresiones, provoca una secuencia de
operaciones a realizar, separa elementos en una lista de argumentos y separa expresiones.
Expresiones: es la combinación de variables, constantes definidas o números con uno o más
operadores, que dan como resultado un valor; según el diccionario “un conjunto de términos que
representan una cantidad”. Reconocemos como operando cada una de las cantidades, variables,
constantes o expresiones que participan de una expresión. Clasificamos las expresiones según el
tipo de objetos que manejan:
Aritméticas: cuyo resultado es numérico; son análogas a las fórmulas matemáticas, las variables y
constantes son numéricas (enteras o punto flotante) y las operaciones son aritméticas.
Lógicas: cuyo resultado es del tipo lógico (verdadero o falso).
Carácter: cuyo resultado es del tipo carácter.
Reglas de precedencia: en expresiones dónde hay más de un operador es necesario establecer
reglas matemáticas que determinen el orden de las operaciones; estas son:
Las operaciones entre paréntesis se evalúan primero, si existen paréntesis anidados primero se
evalúa el más interno.
Si coinciden varios operadores de igual prioridad, el orden es de izquierda a derecha.
El orden de prioridad de operadores es el siguiente:
Orden de evaluación
Operadores
1º ^, **2º *, /3º DIV, MOD4º +, -
Evaluación de expresiones: existen ciertos aspectos relacionados con el orden de precedencia de
los operadores y la forma en que el programa evaluará cada expresión que no están contemplados
en el estándar ANSI C, por lo tanto existe la posibilidad que un mismo código produzca resultados
diferentes al ser compilados con distintos compiladores o en diferentes equipos; para evitar estos
inconvenientes es aconsejable no escribir el código basándose en el orden de precedencia, sino que
procurando dejar explícita la secuencia de evaluación para cada expresión.
Sentencias: o instrucciones son las acciones de nuestro programa para resolver el problema,
describen la secuencia de pasos; podemos clasificarlas por funcionalidad predominante:
Asignación: consiste en dar a una variable el valor de una expresión, el de otra variable o de una
constante; sitúa un valor determinado en una posición de memoria.
Modificación de valores almacenados: tener en cuenta que al guardar un valor sobre una variable
se “pisa” el valor históricamente existente en ella, es decir que es reemplazado por el nuevo valor.
Control: son estructuras que permiten dirigir el flujo de la ejecución según se requiera y bajo el
cumplimiento de determinadas condiciones; podemos separarlas en:
Condicionales: permiten seleccionar distintas sentencias en función de diferentes valores para un
expresión que se evalúa; existen las siguientes:
o If: evalúa una condición lógico o combinación de éstas y sí el resultado de la evaluación es
verdadero ejecuta el bloque de instrucciones que le preceden (If(condición){bloque};).
o If – else: bajo las mismas reglas de ejecución que el If pero sí la evaluación resulta falsa se ejecuta el
bloque de instrucciones correspondiente al else (sino) (If(condición){bloque_verdadero}
Else {bloque_falso};).
o Switch: al utilizar esta sentencia el flujo de ejecución se transfiere al punto etiquetado con el “case)
cuya expresión constante coincida con el valor de la variable del switch, y a partir de ese punto son
ejecutadas todas las sentencias hasta el final del switch a menos que se intercale la ruptura
(switch(variable){case “etiqueta”: sentencias; break;… default:
sentencias;}); la etiqueta default se toma cuando la opción ingresada en la variable no
corresponde con ninguna de las declaradas, puede no estar.
Repetitivas: permiten la repetición de una serie determinada de sentencias, hay que diferenciar
bien estas sentencias a repetir escribiéndolas en un bloque, las distintas construcciones son:
o While: del inglés mientras, el bucle de sentencias se repite mientras la condición dada sea
verdadera, es una sentencia sencilla pero muy potente, es importante cuidar el valor inicial de las
variables de la condición porque puede que nunca se llegue a ejecutar el bloque y también se debe
controlar las expresiones que influyen sobre esa condición para evitar un bucle infinito
(while(condición) {sentencias};).
o Do while: en cuanto a condiciones de ejecución es igual al while; la diferencia radica en que la
condición se evalúa al final de cada ejecución, por lo tanto el bloque de sentencias se ejecuta al
menos una vez por más que inicialmente la condición resulte falsa (do {sentencias}
while(condición);).
o For: en este caso el bloque de sentencias se repite una cantidad finita de veces determinada por
una condición lógica que depende de incrementos fijos (o variables desde el interior del bucle, que
no es aconsejable), es importante “inicializar” las variables que interfieren en la condición (éstas se
pueden declarar e inicializar dentro del argumento de la sentencia) sintaxis
(for(inicialización;condición;incremento){sentencias};).
Salto: permiten romper la ejecución secuencial de un programa para llevarla al punto de ejecución
requerido; las opciones son:
continue: el uso dentro de un bucle permite pasar el control al final de la sentencia de bucle.
goto: permite saltar el flujo de ejecución a la etiqueta indicada (goto etiqueta).
Salida: permiten “sacar” el flujo de ejecución del ámbito o función que la invoca saltándose
secuencias, son:
break: el uso dentro de un bucle pasa la ejecución a la primera sentencia después del bucle.
return: sale de la función donde se encuentra y devuelve el control a la función que la llamó,
además puede devolver un valor a ésta (return(valor)).
Arreglos: es un conjunto de elementos del mismo tipo que se almacenan bajo el mismo nombre de
variable conformando una estructura organizada. Sus cualidades son: cada posición de
almacenamiento del arreglo se llama elemento, para identificar elementos en particular se utilizan
índices, todos poseen el mismo y único nombre de variable, físicamente están almacenados en
lugares contiguos de memoria, para un arreglo de n elementos se utilizan los índices desde 0 (cero)
hasta n-1, por sí sólo el nombre del arreglo apunta al primer elemento. Pueden tener distintas
dimensiones:
Vectores: son aquellos de una sola dimensión, también se conocen como listas o matrices, sólo
poseen un índice que permite identificar a cada elemento en particular, declaración (tipo
nombre[número_de_elementos]). No pueden asignarse o leerse todos los elementos en una
única sentencia, para ello hay que “recorrerlos”, generalmente utilizando una estructura repetitiva
que modifica los índices del arreglo que se procesan en cada iteración.
Matrices: o tablas son arreglos bidimensionales, por lo tanto es necesario dos índices para ubicar a
cada elemento del arreglo, en genera tienen propiedades muy similares a los vectores; pero al
cargarlos o procesarlos existen dos formas de recorrerlos: por filas, dónde se coloca una estructura
repetitiva que modifique el índice de las columnas anidada en la que modifica el índice de las filas;
o por columnas, dónde la estructura anidada modifica los índices de las filas mientras la externa
hace lo propio con el índice de las columnas.
Funciones: son un conjunto de instrucciones que realizan una tarea específica, en general toman
valores de entrada llamados parámetros y devuelven uno o ningún valor de salida; al igual que las
variables las funciones se declaran y definen.
Partes de una función:
Declaración: se realizar con la sentencia prototipo, consiste en una definición de la función sin
cuerpo y terminando con ‘;’ (tipo func(tipo1 nombre1, tipo2 nombre2, tipon
nombren);).
Definición: posee las siguientes secciones:
o Tipo de almacenamiento: opcionalmente una palabra que indique lo indique, puede ser “extern” o
“static”, si no se especifica es “extern”.
o Tipo de valor de retorno: se debe indicar de que tipo es el resultado que retorna la función, para
aquellas sin retorno se utiliza “void” y sí no se especifica es tomado como “int”.
o Modificadores opcionales: son para usos muy específicos.
o Nombre de la función: se acostumbra utilizar nombres claros y descriptivos de la operación que
realiza, si se requieren varias palabras pueden utilizarse ‘_’ para separarlas.
o Lista de parámetros (entre paréntesis): se incluye una lista de todos los parámetros o valores que
la función requiere, indicando su tipo y tamaño si es necesario, se separan por comas.
o Cuerpo de la función: es el bloque de código que será ejecutado al llamar a la función, dentro de él
los datos parámetros se manejan con los nombres que se le dio en la lista de parámetros, y si la
función posee un valor de retorno la última instrucción será el (return(valor);).
Ámbito de variables: determina desde que partes del programa será o no accesible los datos
almacenados en una variable dependiendo de en que lugar fue declarada, existen dos ámbitos:
Locales: son todas aquellas declaradas dentro del cuerpo de una función, entonces sólo serán
accesibles en el interior de la misma, si son declaradas dentro de un bucle sólo son accesibles en
éste.
Globales: son aquellas que se declaran fuera del cuerpo de una función, entonces son accesibles a
todas las funciones; excepto que en el interior de alguna función se declare otro variable con igual
nombre, en cuyo caso prevalecerá la local sólo dentro de esa función.
Parámetros: como ya se mencionó son todos aquellos valores que una función requiere tomar del
entorno en que se está ejecutando para poder realizar el procesamiento adecuado de los datos
dentro de la misma y devolver el resultado correspondiente a su entorno nuevamente. En el
prototipo de función puede simplemente listarse el tipo de los parámetros que requiere la función,
pero en la definición de la misma es necesario darle un nombre a cada uno que será tomado como
variable local dentro del cuerpo de la función; es muy importante respetar el orden de los
parámetros, en el mismo orden en que se dieron en el prototipo deben de cargarse (separados por
coma) en la llamada de la función y también en el mismo orden deben de declararse en la
definición de la función, de lo contrario se producirá un error de tipo en el compilador.
Recursividad: se aplica a aquellas funciones que calculan la solución llamándose a si misma, esa
llamada a si misma se conoce como recursiva, generalmente se va reduciendo el “tamaño” del
problema hasta su punto más simple en el cual el programa genera una solución y a partir de allí
retrocede en la cadena de autollamadas hasta obtener la solución del problema completo.
Preprocesamiento: el Preprocesamiento son aquellas instrucciones que se dan al inicio del código y
le indican al compilador que archivos debe incluir en el compilado de ese código para que estén
disponibles las funcionalidades que ofrecen esos archivos los cuales en C se conocen como
bibliotecas; además las “directivas del preprocesador” pueden indicar al compilador una definición
(define) para que realice el reemplazo o sustitución correspondiente en el código cuando encuentre
el argumento de esta directiva. Las directivas de Preprocesamiento se reconocen porque su línea
comienza con el símbolo numeral # seguido de la instrucción apropiada.
Bibliotecas: a diferencia de otros en el lenguaje C todas las operaciones más elementales
(entrada/salida, etc.) no están incluídas como palabras reservadas del propio lenguaje y han de
realizarse con funciones escritas para tal fín; todo este tipo de funciones o funcionalidades que le
lenguaje puede ofrecer están establecidas en archivos externos al código fuente del programa que
deben ser incluidos durante la compilación para disponer de sus características, estos archivos
externos se conocen como Bibliotecas, constituyen básicamente una recopilación de ficheros con
cabeceras (headers: conjuntos de código fuente que proveen una interfaz para los diferentes tipos
de datos) y rutinas para ejecutar las distintas funciones que la biblioteca ofrece. Existe en C una
biblioteca fundamental conocida como “Biblioteca Estándar” porque está reglamentada por el
estándar ANSI C, esta biblioteca siempre está disponible en un compilador que cumple con dicha
regulación, la misma ofrece todas las funcionalidades fundamentales de entrada y salida de datos
como así también de procesamiento de los mismos; además están disponibles para el programador
otras bibliotecas estándar con funciones orientadas a ámbitos más específicos y un sin número de
bibliotecas no estándar con infinidad de posibilidades, por ejemplo la compilación del lenguaje para
plataformas diferentes a las de un PC.
Tema 5: Sistemas Operativos
Sistema Operativo: es un software que actúa de interfaz entre los dispositivos de hardware y los
programas de usuario o el usuario mismo para utilizar un computador. Es responsable de gestionar,
coordinar las actividades y llevar a cabo el intercambio de los recursos y actúa como intermediario
entre el hardware de un computador y las aplicaciones que se ejecutan; es decir administra la
memoria, gestiona el uso del CPU y administra los dispositivos de E/S.
Clasificación: los sistemas se pueden clasificar o separar según los aspectos fundamentales de éstos
que deseemos considerar; en rasgos generales podemos clasificarlos según los siguientes
parámetros:
Licencia: gratis o de pago.
Tipo de ejecución: monotarea o multitarea; en la actualidad la mayoría de SO’s son del tipo
multitarea, es decir pueden ejecutar más de una aplicación en forma simultánea.
Plataforma de usuario: monousuario o multiusuario; esto depende del núcleo sobre el que está
construido el SO, porque en él se establece la posibilidad o no de manejar múltiples usuarios del
sistema, inclusive en forma simultánea.
Interfaz de usuario: por comandos o con GUI (Graphical user interface); la mayoría de los sistemas
operativos actuales se utilizan a través de una interfaz gráfica pero también ofrecen la posibilidad
de hacerlo en el modo de consola o comando, donde ha de tipearse el comando adecuado para
realizar la tarea que se requiere.
Ancho de palabra: antiguamente algunos sistemas operativos trabajaban en 16 bit o menos
inclusive (los primeros procesadores fueron de 4); luego surgieron los de 32 bit que brindaban un
aumento significativo en la capacidad de procesamiento y en la actualidad existen de 64 bit con aún
mayor capacidad de procesamiento que no se ha explotado en su totalidad porque las aplicaciones
deben de ser desarrollas para tal fin a los efectos de utilizar los recursos extra.
UNIX: es un sistema operativo portable, multitarea y multiusuario; desarrollado, en principio, en
1969 por un grupo de empleados de los laboratorios Bell de AT&T, entre los que figuran Ken
Thompson, Dennis Ritchie y Douglas McIlroy. En principio fue desarrollado en Lenguaje
Ensamblador para la DEC PDP-7, luego bajo solicitud de los laboratorios Bell fue reescrito para la
DEC PDP 11/20 y también le agregaron algunas herramientas como editor de textos; finalmente en
1972 fue reescrito pero ya en lenguaje C, haciéndolo portable; es decir que podía ser utilizado en
distintas máquinas; y a partir de ese momento su desarrollo continuó vertiginosamente hasta
nuestros días; teniendo en la actualidad versiones libres (gratis, como GNU/Linux) y también
versiones bajo licencia (como MacOS ó Solaris).
Interfaz de usuario: por su nombre en inglés “Graphical User Interface (GUI)” es un programa del
SO destinado a generar un “entorno amigable” al usuario para facilitar la utilización del SO; esto
consiste en representar las funcionalidades y operaciones mediante imágenes o íconos que pueden
“tocarse” con un cursor (accionado por el mouse o la pantalla táctil, como se mencionó) y de este
modo facilitar la comprensión que el usuario tiene sobre las operaciones del sistema para que le
sea más fácil usarlo. Las interfaces están disponibles en la mayoría de SO actuales, pero muchas
veces son “deshabilitadas” por los usuarios expertos que prefieren utilizar el sistema mediante
comandos para evitar el consumo de recursos de hardware por parte del GUI.
Procesos: es un programa en ejecución; son sinónimos tarea y job. Un proceso es dinámico, tiene
contador de programa (program counter) y un ciclo de vida desde que se “dispara” o inicia hasta
que finaliza; en ese ciclo de vida pasas por diferentes “estados”, básicamente: nuevo (new),
ejecutándose (running), en espera (waiting), listo para ejecutar (ready), terminado (terminated).
Posee como mínimo tres partes: código o texto; datos: variables globales; stack: son dos, uno para
el modo usuario y otro para el modo kernel, en éstos se almacenan datos temporarios como
parámetros de subrutinas, variables temporales y direcciones de retorno.
Atributos de un proceso: Id de proceso y del proceso padre, usuario que lo “disparó”, si hay
estructura de grupos se indica el que lo disparó, en ambientes multiusuario de qué terminal se
disparó.
Espacio de direcciones: conjunto de direcciones de memoria que ocupa; en modo usuario puede
acceder sólo a su espacio; en modo kernel, a estructuras del kernel o a espacios de direcciones de
otros procesos.
Contexto: incluye toda la información que el SO necesita para administrar el proceso, y que la CPU
necesita para ejecutarlo correctamente; son parte del contexto: los registros de cpu, inclusive el
contador de programa, prioridad del proceso, si tiene E/S pendientes, etc.
Relación entre proceso hijo y proceso padre: el hijo consume recursos dentro de los del padre,
comparten los recursos; pero el hijo gestiona independientemente los suyos. El proceso padre
continúa su ejecución pero espera a que los hijos terminen la suya. En UNIX el proceso hijo es un
duplicado del padre para el espacio de direcciones y en VMS se crea el proceso y el programa es
cargado dentro.
Relación entre procesos: son independientes cuando no afectan ni pueden ser afectados por otros
procesos ó cooperativos cuando afectan o son afectados por otros procesos.
Comunicación entre procesos: puede hacerse por memoria compartida, espacios a donde ambos
tienen acceso; o por IPC (Inter Process Communication) que permite la comunicación con un
sistema de mensajes.
Files System: los sistemas de archivos o ficheros (filesystem en inglés), estructuran la información
guardada en una unidad de almacenamiento (normalmente un disco duro de una computadora),
que luego será representada ya sea textual o gráficamente utilizando un gestor de archivos; la
mayoría de los sistemas operativos manejan su propio sistema de archivos. Se utilizan dispositivos
de almacenamiento de datos que permiten el acceso a los datos como una cadena de bloques de
un mismo tamaño, a veces llamados sectores, usualmente de 512 bytes de longitud; el software del
sistema de archivos es responsable de la organización de estos sectores en archivos y directorios y
mantiene un registro de qué sectores pertenecen a qué archivos y cuáles no han sido utilizados. La
estructura de directorios suele ser jerárquica, ramificada o "en árbol", aunque en algún caso podría
ser plana. En algunos sistemas de archivos los nombres de archivos son estructurados, con sintaxis
especiales para extensiones de archivos y números de versión; en otros los nombres de archivos
son simplemente cadenas de texto y los metadatos de cada archivo son alojados separadamente.
En las estructuras jerárquicas la ubicación de un archivo en particular es determinada por una
“ruta” o “path” en la cual se visualiza la estructura de jerarquía de directorios en la que se
encuentra el archivo; la sintaxis de esta ruta como así la estructura en sí depende del sistema de
archivos y su correspondiente sistema operativo.
Linux: es, a simple vista, un Sistema Operativo; pero constituye una implementación de libre
distribución UNIX para computadoras personales (PC), servidores, y estaciones de trabajo. Fue
desarrollado para el i386 y ahora soporta los procesadores i486, Pentium, Pentium Pro y Pentium II,
así como los clones AMD y Cyrix; también soporta máquinas basadas en SPARC, DEC Alpha,
PowerPC/PowerMac, y Mac/Amiga Motorola 680x0. Nació a principio de los noventa como una
adaptación del sistema Minix basado en UNIX; su escritor original fue Linus B. Torvalds, estudiante
de informática de la Universidad Helsinki en Finlandia; quien pretendía agregar a Minix
características especialmente útiles para los estudiantes de sistemas; con el paso del tiempo Linux
se fue independizando del Minix hasta conformarse en sí mismo; actualmente es el núcleo (kernel)
de todas las distribuciones GNU/Linux.
Características: Es multitarea, multiusuario, multiplataforma y multiprocesador; en las plataformas
Intel corre en modo protegido; protege la memoria para que un programa no pueda hacer caer al
resto del sistema; carga sólo las partes de un programa que se usan; comparte la memoria entre
programas aumentando la velocidad y disminuyendo el uso de memoria; usa un sistema de
memoria virtual por páginas; utiliza toda la memoria libre para cache; permite usar bibliotecas
enlazadas tanto estática como dinámicamente; se distribuye con código fuente; usa hasta 64
consolas virtuales; tiene un sistema de archivos avanzado pero puede usar los de los otros
sistemas; y soporta redes tanto en TCP/IP como en otros protocolos.
Interfaz: La interfaz primaria o básica del Unix/Linux es de tipo texto y hasta no hace mucho ha sido
la única para el sistema. Actualmente hay interfaces gráficas como el X Windows, Open Look,
GNOME o KDE.
Comandos principales: el sistema Linux fundamentalmente es manejado por medio de comandos
que se introducen en un “terminal” o consola; existe infinidad de comandos comunes a todas las
distribuciones de Linux, además de los comandos personalizados que cada usuario puede añadir;
en rasgos generales éstos son los más importantes y necesarios a la hora de operar una máquina:
man comando: visualiza la ayuda del comando comando
clear: limpia la consola
date: visualiza en pantalla el día y la hora
ls: listado de contenido de directorio
mkdir: crea directorios
chmod: cambia los permisos de los archivos
cp: copia archivos
rm: borra y directorios
mv: mover y renombrar archivos y directorios.
pwd: visualiza la posición actual dentro del directorio raíz y también el usuario que se está
utilizando.
g++ -c ejemplo.cc: crea el programa objeto desde un terminal, donde ejemplo.cc es el código
fuente.
g++ - o ejemplo ejemplo.o: crea el ejecutable ejemplo a través del programa objeto ejemplo.o.
Tema 6: Software de Aplicación:
Planilla de Cálculo: también conocidas como hojas de cálculo son software para el usuario final
destinado a realizar cálculos, que además permiten generar gráficos y bases de datos; básicamente
manipulan datos numéricos y alfanuméricos organizados en forma de tablas, a cuyas casillas se
denomina celda y cada una de éstas tiene una forma única de referenciarse mediante una
combinación alfanumérica dónde la letra corresponde a la columna y el número a la fila, entonces
en todas las operaciones a realizar se puede hacer referencia (tomar el valor) de una celda
indicando esta “dirección” del dato dentro de la hoja.
Las principales funcionalidades están disponibles en la mayoría de opciones existentes de éstos
programas, a saber:
Cálculos aritméticos
Funciones estadísticas
Ordenamiento de datos
Personalización de formatos y formatos condicionales para datos
Funciones lógicas elementales
Búsqueda y filtrado de datos
Gráficos de datos
Tema 7: Conceptos de Redes e Internet:
Redes: técnicamente una red constituye una interconexión de datos entre computadoras, que
permite la transferencia de información digitalizada entre ellas, como tal surgió en 1969 con la
primer conexión de computadoras denominada ARPANET, que interconectaba tres universidades
en EEUU; luego los desarrollos tecnológicos permitieron ampliar este tipo de conexiones hasta
convertirlas en un servicio fácilmente disponible para los usuarios civiles, actualmente conocido
como Internet. El desarrollo de éstas interconexiones físicas vino acompañado del aumento de
servicios u opciones disponibles que utilizan este medio de comunicación para funcionar, así por
ejemplo existen los servicios de correo electrónico (SMTP: Simple Mail Transfer Protocol: Protocolo
Simple de Transferencia de Correo), transferencias de archivos (FTP: File Transfer Protocol:
Protocolo de Transferencia de Archivos y P2P: Peer to Peer: Redes de Pares), la Web (WWW: World
Wide Web) como forma de consulta remota de archivos de hipertexto (páginas web), mensajería
instantánea (MSN, GoogleTalk, etc.), telefonía sobre internet (VoIP: Voz sobre Protocolo de
Internet), televisión (IPTv: Internet Protocol Television); y un sin número de nuevas opciones que
pueden desarrollarse para utilizar la red como medio de interconexión debido a su vertiginosa
proliferación y versatilidad técnica - operativa.
Bibliografía:
“El lenguaje de Programación C” Segunda Edición, Brian W. Kernighan – Dennis M. Ritchie, Pearson
Educación; ISBN: 968-880-205-0.
“Wikipedia” en español: http://es.wikipedia.org/
Apuntes de Cátedra: “Taller de Informática” de la Facultad de Ingeniería – Universidad Nacional de
Misiones.