Documentos de Académico
Documentos de Profesional
Documentos de Cultura
O (Segundo Cuatrimestre)
Máquinas virtuales:
El concepto de virtualización hace referencia a una tecnología que permite la ejecución
de varias máquinas virtuales sobre una máquina física con el objetivo de aprovechar al
máximo los recursos de un sistema.
Un hypervisor o monitor de máquina virtual es una capa de software para realizar una
virtualización de hardware que permite utilizar, al mismo tiempo, diferentes sistemas
operativos en una misma computadora.
Prompt:
Cuando inician sesión, les aparece el “prompt”, este lo coloca el intérprete de comandos, el
prompt invita al usuario a ingresar comandos, ej: “#”.
Intérprete de comandos:
El intérprete de comandos se encarga de analizar lo ingresado por el usuario en el prompt, y
en el caso de un comando ejecutable de un programa, lo ubican en los directorios que tiene
variable de entorno “path”.
Variables de entorno:
Las variables de entorno, son variables del S.O que guardan información para el entorno de
trabajo de los usuarios.
Ejecutables:
Los programas ejecutables en linux pueden ser:
● Binarios
○ i386(32 bits)
○ arm arch 64
○ x86_64 (64 bits)
Consolas virtuales:
Una consola en linux comprende una pantalla y un teclado.
● Como linux es un sistema multiusuario, es decir pueden usarlo más de un usuario a
la vez, posee lo que se denominan consolas virtuales, las cuales se pueden acceder
con las combinaciones de teclas: CTRL + Fn
● A las consolas virtuales se las designan /dev/ttyX donde X representa el número de
consola.
Consolas en linux:
Las consolas de linux tienen una entrada estándar (stdin), una salida estándar (stdout), y
una salida de error (stderr).
El S.O de linux usa un intérprete de comandos, por defecto el bash, el cual es un intérprete
entre el usuario y el S.O linux ya que permite interactuar con él.
Los archivos se guardan en directorios, los cuales para la teoría de S.O los directorios son
archivos que contienen archivos en su interior.
La estructura de directorios en el directorio raíz de linux posee una jerarquía donde cada
directorio posee una función.
● Bin: aplicaciones binarias básicas que pueden usar todos los usuarios.
● Boot: se encuentra el kernel de linux, y además el gestor de arranque de linux.
● Dev: se encuentran los archivos que hacen referencia a los dispositivos de hardware
del sistema.
● Etc: se encuentran los archivos de configuración del S.O y aplicaciones.
● Home: directorios personales de los usuarios del sistema.
● Lib: archivos de librería de funciones, necesarias para la ejecución de los
programas, y además se encuentran los módulos controladores de los dispositivos.
● Media: se encuentran los puntos de montaje para medios removibles (pendrive).
● Mnt: punto de montaje para sistemas de archivos, similar a media.
● Opt: para instalar aplicaciones opcionales de terceros.
● Proc: directorio dinámico que contiene información sobre el estado del sistema.
● Root: directorio personal root.
● Sbin: aplicaciones binarias que son importantes para el inicio, funcionamiento y
apagado del sistema.
● Srv: guarda información y datos que es servida en los servidores instalados en el
sistema.
● Tmp: archivos y directorios temporales del sistema y aplicaciones.
● Usr: se encuentran todas las aplicaciones y utilitarios que los usuarios pueden usar.
● Var: archivos con información del sistema o aplicaciones, que se guardan, como
registros(logs).
Permisos en linux:
Los permisos pueden ser de tipo:
● R
● W
● X
Si son archivos:
● R = read = leer
● W = write = escribir
● X = execute = ejecutar
Si son directorios:
● R = read = listar
● W = write = escribir en el directorio
● X = execute = ingresar al directorio
Ejemplo:
“ -rw-r--r--”
Comandos en linux:
“ - <una letra “
“ -- <una palabra> “
Lista de comandos:
“ . “ → directorio actual
“ .. “ → directorio inmediato superior
Cambio de permisos:
#chmod <opciones de permisos> <nom.archivo o dir>
Opciones de permisos:
u = propietario
g= grupo
o = otros
a = todos
+ = agregar
- = sacar
“=” = igualar
R = read = leer
W = write = escribir
X = execute = ejecutar
R=4
W=2
X=1
○ Redireccionamiento de stderr:
■ #<comando> &> <nombre_archivo>
○ Redireccionamiento de stdin:
■ #<comando> < <nombre_archivo>
Comando less: permite pausar la pantalla, pero además permite avanzar no solo hacia
adelante , sino que también hacia atrás.
Ej: #ls -al /etc | less
● Paquetes de software:
○ Gestor de paquetes
Los paquetes de software en linux es un archivo que contiene en su interior todos los
archivos necesarios y propios de sus aplicaciones, con instrucciones de a donde se deben
instalar, y qué configuración debe tener.
Para buscar y bajar un paquete de software, el gestor de paquetes busca los mismos en sus
repositorios espejo de la distribución de linux instalada.
Los tipos de software que se puede encontrar en los repositorios depende de cómo cada
distribución maneja el tema de las licencias.
Una ventaja de usar los gestores de paquetes es que el mismo resuelve las dependencias
para la instalación de un paquete de software, las dependencias son otros paquetes
necesarios para el correcto funcionamiento de un software.
Aunque los comprimidos con el código fuente tiene la ventaja de la libre configuración a
nivel código.
Para buscar que paquete provee un archivo en particular: #yum provides <nom.arch>
○ Descomprimir:
■ #gzip -d <nombre_archivo.gz>
■ #gunzip <nombre_archivo>
● Con bzip2:
○ Comprimir:
■ #bzip2 -c <nombre_archivo> > <nombre_archivo.bz2>
○ Descomprimir:
■ #bzip2 -d <nombre_archivo>
■ #bunzip2 <nombre_archivo.gz>
Para mostrar todos los procesos del sistema se usa: #ps -ax
Una vez que linux bootea se ejecuta el primer proceso con PID 1, el cual es el servicio o
demonio “systemd”.
Un servicio es un programa que ejecuta el sistema operativo para proveer un servicio, por
ejemplo funcionalidad de red, en linux los servicios o demonios se identifican por tener una
“d” al final del nombre.
Para controlar servicios se usan los comandos systemctl.
-status
-start
-stop
-restart
Niveles de inicio:
- Poweroff.target
- resure.target
- multi-user.target
- graphical.target
- reboot.target
1- Encendido de la computadora.
2- Cargar el S.O.
3- ejecutar el S.O
1-
Al encender la computadora, si las condiciones eléctricas son adecuadas, se saca al
procesador del reset, al salir del reset el micro siempre va a ejecutar la instrucción que se
encuentre en la dirección 0xf f f f f f f f 0.
Si las rutinas POST pasan bien las pruebas de hardware el BIOS pasa a configurar el
hardware según la configuración del BIOS setup.
2- Carga del S.O
El primer sector es el mbr (master boot record), los sectores de un disco poseen 512 bytes,
y en el mbr se encuentra:
En el caso particular de linux, el programa de arranque que se ubica en el mbr es parte del
programa LILO u GRUB. Se ubica una parte ya que estos programas poseen un tamaño
mayor a 446 bytes, con lo cual en el mbr se ubica una primera parte(llamada “stage 1”).
Esta primera etapa va a ir a buscar el resto del programa de arranque ya sea LILO o GRUB
a este se lo llama etapa o stage 2.
El resto del código para la etapa 2 generalmente y típicamente se ubica en los 62 sectores
restantes desde el MBR.
En la versión más nueva de GRUB, el GRUB 2, la que sería la etapa 2 se lo menciona como
etapa 1.5; y la etapa 2 se completa al buscar en la partición de linux donde se encuentra el
directorio /boot el resto de programa del programa de arranque.
Esto es debido a que GRUB 2 posee mayores capacidades que LILO y el GRUB original,
como por ejemplo cargar otros S.O con distintos sistemas de archivos.
3- Ejecutar el S.O
Una vez cargado el LILO o GRUB este irá a buscar el kernel selecciona en el menú de
arranque en el directorio /boot de la partición donde se encuentra el linux seleccionado; para
esto el LILO o GRUB se basa en los drivers que posee el bios para acceder a los discos.
Activo el planificador de corto plazo y ejecuta el primer proceso(pid 1), originalmente el init,
actualmente el systemd.
A su vez el systemd levanta otros programas por medio de scripts que se encuentran en
/etc/sysconfig, cuando se usaba init se ejecutaban programas por medio de scripts ubicados
en /etc/initd siendo el último en ejecutar el programa login para iniciar sesión.
Gestión de memoria:
En la gestión o administración de memoria se debe garantizar una correcta operación que
proteja al sistema operativo de los posibles accesos por parte de los procesos de los
usuarios y que también proteja a los procesos usuarios de otros, esta protección se debe
dar por parte del hardware, el encargado de esta protección es el MMU.
Dirección lógica: indica una posición relativa al comienzo del programa. Las instrucciones
del programa contienen solo direcciones lógicas.
Protección de memoria:
Podemos proporcionar esta protección utilizando dos registros, usualmente una base y un
límite. El registro base almacena la dirección de memoria física legal más pequeña,
mientras que el registro límite especifica el tamaño del rango.
Registro de reubicación: representa la primera dirección física del mapa de memoria del
proceso.
Esto se puede observar como que me desplazó una cantidad igual a la dirección lógica,
desde la posición inicial dada por la dirección física que contiene el registro de reubicación.
Esta dirección lógica también se la puede considerar como “desplazamiento” u “offsets” que
indica cuánto me tengo que desplazar desde el inicio del mapa de memoria.
Reasignación de memoria:
Esta posee la clara desventaja que una vez que el proceso sea cargado en memoria no
podrá ser reasignado/movido/desplazado en la memoria.
Pero puede ser que se requiera realizar protección de memoria en esta situación, para esto
la MMU utiliza 2 registros: registro base y el registro límite.
El registro contiene la primera dirección física donde comienza el área de memoria donde
fue cargado el mapa de memoria.
Swapping:
Una posibilidad más eficiente consiste en utilizar particiones de tamaño variable. Cuando un
proceso se introduce en memoria, se le asigna exactamente la memoria que necesita y no
más. El método empieza bien, pero eventualmente puede llevar a situaciones en las que
hay muchos huecos pequeños en memoria. A medida que pasa el tiempo, la memoria se
fragmenta más y más, y empeora su utilización. Una técnica para solucionar este problema
es la compactación: de vez en cuando, el sistema operativo desplaza los procesos en
memoria para juntar toda la memoria libre en un bloque. Este es un procedimiento que
consume parte del tiempo del procesador.
Tanto la estrategia de primer ajuste como la de mejor ajuste para la asignación de memoria
sufren del problema denominado fragmentación externa. A medida que se cargan procesos
en memoria y se los elimina, el espacio de memoria libre se descompone en una serie de
fragmentos de pequeño tamaño. El problema de la fragmentación externa aparecer cuando
hay un espacio de memoria total suficiente como para satisfacer una solicitud, pero esos
espacios disponibles no son contiguos; el espacio de almacenamiento está fragmentado en
un gran número de pequeños agujeros.
Se descompone la memoria física en bloques de tamaño fijo y asignar la memoria en
unidades basadas en el tamaño de bloque. Con esta técnica, la memoria asignada a un
proceso puede ser ligeramente superior a la memoria solicitada. La diferencia entre los dos
valores será la fragmentación interna, es decir, la memoria que es interna a una partición
pero que no está siendo utilizada.
Tanto las particiones de tamaño fijo como las de tamaño variable son ineficaces en el
aprovechamiento de la memoria. Supóngase, no obstante, que la memoria se divide en trozos
iguales de tamaño fijo y relativamente pequeño, y que cada proceso también se divide en
pequeños trozos de tamaño fijo. Después los trozos de un programa, conocidos como
páginas, se podrían asignar a los trozos de memoria disponibles, conocidos como marcos
(frames). Entonces, el espacio de memoria desperdiciado por un proceso es, como mucho,
una fracción de la última página.
La memoria principal se divide en muchos marcos pequeños de igual tamaño. Cada proceso
se divide en páginas del tamaño de los marcos: los procesos más pequeños necesitan menos
páginas, los procesos mayores necesitan más. Cuando un proceso se lleva a memoria, sus
páginas se cargan en los marcos disponibles y la tabla de páginas se actualiza.
Sería claramente un derroche cargar todas las páginas del proceso cuando solo se
utilizarán unas pocas antes de que el proceso se suspenda. Podemos hacer un mejor uso
de la memoria cargando solo unas pocas páginas. Después, si el programa salta a una
instrucción de una página que no está en memoria principal, o si el programa hace
referencia a un dato de una página que no está en memoria, se produce un fallo de página.
Esto indica al sistema operativo que debe cargar la página deseada.
La mayoría de los esquemas de memoria virtual hacen uso de una caché especial para los
elementos de la tabla de páginas, llamada usualmente buffer de traducción anticipada (TLB,
Translation Lookaside Buffer). Este buffer funciona de la misma manera que una memoria
caché y contiene aquellos elementos de la tabla de páginas a los que se ha accedido más
recientemente.