Skip to content

Instantly share code, notes, and snippets.

@matipan
Created October 15, 2015 11:34
Show Gist options
  • Save matipan/f19df76ad91679744484 to your computer and use it in GitHub Desktop.
Save matipan/f19df76ad91679744484 to your computer and use it in GitHub Desktop.
Practica 1 - Conceptos de Sistemas Operativos
=============================================
Punto 1
=======
A) GNU/Linux: Es un Sistema Operativo de tipo Unix, excepto que es de sofware libre y open-source, lo que indica que podemos estudiarlo,
personalizarlo, aprovecharnos de la documentacion, y ver la entera implementacion del sistema. Codigo de fuente de Linux:
https://github.com/torvalds/linux. Dado que es open-source y cada uno puede personalizarlo a gusto, existen muchas diferentes
implementaciones del mismo. Caracteristicas principales del mismo:
- Es multiusuario
- Es multitarea y multiprocesador
- Es altamente portable
- Posee diversos intérpretes de comandos, de los cuales algunos son programables
- Permite el manejo de usuarios y permisos
- Todo es un archivo (hasta los dispositivos y directorios)
- Cada directorio puede estar en una partición diferente (ejemplos /tmp, /home, etc)
- Es case sensitive
- Es de código abierto
B) Una clara comparacion con GNU/Linux es el sistema operativo Mac OSX de Apple, el cual tambien es un SO de tipo Unix excepto que no es
de ni software libre ni open-source, esto indica que la implementacion del SO no puede ser modificada por usuarios.
Otra comparacion seria el sistema operativo Windows de Microsoft, el cual esta basado en la familia de sistemas operativos
Windows NT(New Technology) creada por Microsoft. Windows, al igual que Mac OSX, no es de software libre ni open-source, por ende
los usuarios no pueden acceder a su implementacion, solo utilizarla.
C) GNU(acronimo recursivo: GNU, Not Unix) fue inicialmente fundado por Richard Stallman(creador de Emacs y Elisp, una
implementacion variada de Lisp creada para editar la configuracion de Emacs) en 1983 con el fin de crear un sistema Unix-like libre(el
cual todavia no esta implementado). Para llevar a cabo esto Richard Stallman crear la licencia GPL(general public license) y luego la
FSF(Free Software Foundation, en 1985) con el fin de obtener financiamiento para el proyeto GNU. Para el año 1990, GNU ya contaba con un
sofware llamado Emacs(el cual viene integrado con un motor para edicion de texto), un compilador llamado GCC y una gran cantidad de bibliotecas
que compone un Unix tipico. GNU se refiere a 4 libertades principales de los usuarios del software:
- Libertad de usar el programa con cualquier propósito
- Libertad de estudiar su funcionamiento
- Libertad para distribuir sus copias
- Libertad para mejorar los programas
D) En el proyecto GNU se venia trabajando en un nucleo llamado TRIX, el cual se decidio abandonarlo en el año 1988 debido a su
complejidad(requeria hardware costoso para funcionar). En ese momento se decide adoptar el nucleo llamado MACH para crear Hurd el
cual tampoco prospero. En el año 1991 Linus Torvalds empezo a trabajar en un Kernel llamado Linux(bajo la licencia GPL), en el
año 1992 Torvalds y Stallman deciden fusionar ambos proyectos y es alli donde nace GNU/Linux, el cual pertenece al desarrollo
del Software Libre.
E) La multitarea es la característica de los sistemas operativos modernos de permitir que varios procesos o aplicaciones se ejecuten
aparentemente al mismo tiempo, compartiendo uno o más procesadores. Como fue mencionado en el inciso A), GNU/Linux hace uso de
esta caracterisitica.
F) POSIX(Portable Operating System Interface): es una "familia" de standards especificada por la IEEE Computer Society para
mantener compatibilidad entre sistemas operativos. POSIX define una API(Application Programming Interface), command-line shells
y programas de utilidad para tener compatibilidad de software con distintas implementaciones de Unix y otros sistemas
operativos.
Punto 2
=======
A) Una distribucion de Linux es una customizacion de GNU/Linux formada por una version del Kernel y determinados programas con
sus configuraciones. 4 distribuciones de Linux pueden ser: ArchLinux, OpenSUSE, Debian y Ubuntu.
B) Se diferencian en el conjunto de aplicaciones que se instalar por defecto, el gestor de programas/paquetes que utilizan, la
version del kernel a la que da soporte.
Punto 3
=======
A) Los tres componentes fundamentales de GNU/Linux son:
- Nucleo(kernel): Es el encargado de ejecutar programas, gestionar dispositivos de hardware, comunicar a los programas
con el hardware, administrar la memoria y la CPU. Es un Nucleo monolitico hibrido ya que:
- Los drivers y codigo del kernel se ejecutan en modo privilegiado
- Posibilidad de cargar y descargar funcionalidad a traves de modulos.
Esta licenciado bajo la licencia GPL v2.
- Interprete de Comandos(CLI: Command-Line Interface): Es el medio mediante el cual el usuario se comunica con el SO.
Ejecuta programas a partir del ingreso de comandos, cada usuario tiene una interfaz(o shell) y son programables.
- Sistema de Archivos: Encargado de organizar la forma en la que se almancenan los achivos dispositivos de
almancenamiento(fat, ntfs, ext2, ext3). GNU/Linux opto por el Extended(v2(ext2), v3(ext3), v4(ext4))
B) Ademas de los componentes mencionados previamente, la estructura basica de un SO tambien esta compuesta por "Utilidades", los
cuales son:
- Paquete de software que permite diferenciar una distribucion de otra.
- Editores de texto tales como: vim, Emacs, joe.
- Herramientas de networking: wireshark, tcpdump
- Paquetes de oficina: OpenOffice
- Interfaces Graficas: GNOME, XDE, XFCE, Mate.
Punto 4
=======
A) Kernel es un software que constituye una parte fundamental del sistema operativo.
Breve historia: En 1991 Linus Torvalds inicia la programación de un Kernel Linux basado en Minix (Clon de Unix desarrollado por Tanembaum
en 1987 con el fin de crear un SO de uso didáctico). El 5 de octubre de 1991, se anuncia la primera versión "oficial" de Linux (0.02)
En 1992 se combina su desarrollo con GNU, formando GNU/Linux. En el año 1994 se hace el release de la version 1.0 de Linux, en 1996 se
elige a Tux como la "mascota" del proyecto. En 1996 se lanza la versión 2.0 y se define un sistema de nomenclatura. Se desarrolló hasta Febrero
de 2004 y terminó con la 2.0.40. En enero de 1999 se lanza la versión 2.2, que provee mejoras de portabilidad entre otras y se desarrolla hasta
Febrero de 2004 terminando en la versión 2.2.26. En 2001 se lanza la versión 2.4 y se deja de desarrollar a fines del 2010 con
la 2.4.37.11. La versión 2.4 fue la que catapultó a GNU/Linux como un SO estable y robusto. Durante este período es que se comienza
a utilizar Linux mas asiduamente. A fines del 2003 se lanza la versión 2.6. Esta versión ha tenido muchas mejoras para el SO dentro
de las que se destacan soporte de hilos, mejoras en la planificación y soporte de nuevo hardware. El 3 de agosto de 2011 se lanza la
versión 2.6.39.4 anunciándose la misma desde meses previos como la última en su revisión. En 17 Julio de 2011 se lanza la versión 3.0.
B) Sus funciones principales son: gestionar dispositivos de hardware, comunicar a los programas con el hardware, administrar la
memoria y la CPU, y es el encargado de ejecutar programas.
C) La version actual es la 4.2. El esquma de versionado que se puso es que: M.m.X (M = major release, m = minor release de la
version M, X = release pequeño con fixes a algunos bugs)
D) Si, es posible, uno puede tener multiples kernels instalados y elegir con cual bootear.
E) El kernel se encuentra ubicado en la paricion /boot del filesystem.
F) El kernel de Linux es monolitico ya que soporta multitarea y se ejecuta constantemente en modo kernel.
Punto 5
=======
A) Es una interfaz de usuario para acceder a servicios del sistema operativo.
B) Su proposito es permitir al usuario ejecutar programas a partir del ingreso de comandos.
C) Tres posibles interprete de comandos son:
- Bash(Born again shell)
- ZSH
- Fish
Punto 6
=======
A) Es el encargado de organizar la forma en que se almacenan los archivos en dispotivos de almancenamiento.
B) El adoptado por Linux es el extended(ext1, ext2, ext3, ext4)
D) La estructura basica de un file system GNU/Linux es:
- / : tope de la estructura
- /home : Se almacenan los archivos de los usuarios.
- /var : informacion que varia de tamaño
- /etc : archivos de configuracion
- /bin : archivos binarios y ejecutables
- /dev : Enlace a dispositivos
- /usr : aplicaciones de usuario
La sigla FHS hace referencia al: File Hierarchy System(Jerarquia del sistema de archivos).
Punto 7
=======
A) Es una forma de dividir logicamente el disco fisico. Hay tres distintos tipos de particiones:
- Partición Primaria: División cruda del disco (puede haber hasta 4 por disco). Se almacena información de la misma en el MBR
- Partición Extendida: Sirve para contener unidades lógicas en su interior. Solo puede existir una partición de este
tipo por disco. No se define un tipo de FS directamente sobre ella.
- Partición Lógica: Ocupa la totalidad o parte de la partición extendida y se le define un tipo de FS directamente.
C) Como minimo es necesario tener una particion para el " / ". Es una particion primaria, con el filesystem "ext4"
E) Para particionar existen dos tipos de softwares:
- Destructivos : Permiten crear y eliminar particiones. (fdisk)
- No destructivos: Permiten crear, eliminar y modificar particiones. (fips, GParted)
Punto 8
=======
A) El BIOS(Basic input/output system) es un "estandar de facto" que define la interfaz del firmware. En las arquitecturas x86 es
el responsable de iniciar la carga del SO a traves del MBC. El mismo esta grabado en un CHIP(ROM) de solo lectura, y en otras
arquitecturas tambien existe pero se lo puede conocer con otro nombre.
B) UEFI(Unified extensible firmware interface)Forum es una alianza entre varias compañías líderes de tecnología, con el objetivo
de “modernizar” el proceso de arranque. Su funcion es interactuar como puente entre el sistema operativo y el firmwarre base.
C) El MRB(Master boot record) es un sector reservado del disco físico (cilindro 0, cabeza 0, sector 1) utilizado para: arranque del sistema
operativo con bootstrap, o para almacenar la table de particiones. El MBC(Master boot code) es un pequeño codigo que permite arrancar el
sistema operatio.
D) GPL(General public license) es una licencia cuyo proposito es declarar que todo software publicado bajo esta licencia es
libre y protegerlo teniendo en cuenta las 4 libertados principales.
- Libertad de usar el programa con cualquier propósito
- Libertad de estudiar su funcionamiento
- Libertad para distribuir sus copias
- Libertad para mejorar los programas
Practica 2 - Conceptos de Sistemas Operativos
=============================================
Punto 1
=======
A) Editores: nano, vim, emacs.
B) Los comandos cat, more y less son usados simplemente para ver el contenido del archivo, sin darte la posibilidad de
modificarlo.
C) Vim(Vi improved) posee varios modos de operacion:
- Modo normal: Modo que se utiliza para navegar a traves del archivo(usando teclas como: h,j,k,l,w,e,b,ctrl+f,ctrl+b entre
otras), para acceder a la linea de comandos(con la tecla ":") propia de Vim, y para utilizar las convinaciones de
text-objects + motions con el proposito de manipular el texto de a bloques, por ejemplos si en modo normal te paras
sobre una palabra y ejecutas lo siguiente: ciw(change inner word), la palabra se va a eliminar y te vas a ubicar en modo
insertar para insertar texto.
- Modo insertar: Modo que se utiliza para insertar texto en el archivo, se puede acceder de cuatro formas: i(insert,
empezas a escribir a la izquierda de donde esta posicionado el cursor), a(append, empezas a escribir a la derecha de
donde esta posicionado el cursor), I(Insert-0, empezas a editar al comienzo de la linea) y A(Append-F, empezas a editar
al final de la linea.)
- Modo visual: Este modo te permite seleccionar el texto que se quiera(soport text-objects y motions), por ejemplo si se
ejecuta: viw(visual inner word) eso va a seleccionar la palabra sobre la que el cursor esta posicionado. Este modo tiene
2 variantes, Visual-line: permite seleccionar de a lineas enteras. Visual-block: permite seleccionar de a bloques en
diferentes lineas.
- Modo replace: Permite reemplazar de a una letra hasta que se salga del modo.
- Modo Ex: Modo que se utiliza para manipular el archivo entero, se puede ejecutar inserciones, indentaciones y otro tipo
de cosas.
D) La terminal interna a Vim nos permite ejecutar multiples comandos, desde setear opciones del editor(como por ejemplo los
numeros de linea o el coloreo de la sintaxis) hasta guardar el archivo y salir del editor. Ejemplos:
- :q[uit]: Sale del editor solo si no hay cambios sin guardar
- :q[all]: cierra todos los buffer y sale del editor
- :q[uit]! : Sale del editor ignorando cambios sin guardar
- :w[rite]: Guarda el archivo del buffer actual
- :w[rite]! : Guarda el archivo del buffer actual por mas de que haya sido modificado en otro lado.
- :set number : Habilita los numeros de linea a la izquierda de la pantalla
- :syntax on : Habilita el coloreo del codigo acorde al lenguaje.
Punto 2
=======
A) Proceso de inicio de un sistema GNU/Linux:
1. Se comienza a ejecutar el codigo de la BIOS.
2. La BIOS ejecuta el POST.
3. La BIOS lee el sector de arranque MBR.
4. Se carga el gestor de arranque MBC.
5. El bootloader carga el kernel y el initrd.
6. Se monta el initrd como sistema de archivos raiz y inicializan componentes esenciales.
7. Se ejecuta el proceso init y se desmonta el initrd
8. Se lee el /etc/inittab
9. Se ejecutan los scripts apuntados por el runlevel 1.
10. El final del runlevel 1 le indica que vaya al runlevel por defecto.
11. Se ejecutan los scripts apuntados por el runlevel por defecto.
12. El sistema esta listo para usarse.
B) Su function es cargar todos los subprocesos necesarios para el correcto funcionamiento del SO. Posee el PID 1 y se encuentra
en /sbin/init. En SysV se lo configura a traves del archivo /etc/inittab. No tiene padre y es el padre de todos los procesos
(pstree). Es el encargado de montar los filesystems y de hacer disponible los demas dispositivos
C) Luego de ejecutar pstree se ve que se imprime el arbol de directorios de la carpeta 'systemd'.
D) El runlevel define el estado de la maquina despues de booteo. Su objectivo es levantar o bajar una serie de servicios.
E) Segun el estandar, los runlevels hacen referencia a:
0. halt(parada). Apaga el sistema.
1. single user mode(mono-usuario). Modo para tareas administrativas.
2. multiuser mode(multi-usuario). Sin soport de red.
3. full multiuser mode console. Modo multiusuario completo por consola.
4. No se usa, lo puede definir el usuario para casos especiales.
5. Modo multiusuario completo con login grafico basado en el X gui server.
6. Reboot. Reinicia el sistema.
F) /etc/inittab: Su objetivo es tener las configuraciones para los runlevels. Estructura de la informacion:
id:nivelesEjecucion:accion:proceso
1. id: identifica la entrada en inittab
2. nivelesEjecucion: el/los niveles de ejecucion en los que se realiza la accion.
3. accion: describe la accion a realizar. Puede ser: wait, initdefault, ctraltdel, respawn, once, sysinit, boot, bootwait,
powerwait, etc.
4. proceso: El proceso exacto que sera ejecutado.
G) El comando que utilizarias para cambiar a cierto runlevel es: init X. Con X de 0..6. El cambio no es permanente, ya que
cuando se inicia la pc, se ejecuta el runlevel especificado como el initdefault, por ende si no se cambia el initdefault
entonces los cambios que: init X haria son temporales hasta que se reinicia la pc.
H) Los scripts RC son aquellos que se llaman para arrancar los runlevels especificados. Se almacenan en: /etc/rcX.d donde X es
el numero del runlevel.
I) Se utiliza para administrar el orden de los enlaces simbolicos del /etc/rdX.d, resolviendo las dependencias de forma
automatica. El mismo es utilizado por update-rc.d para instalar/remove links simbolicos.
J) Permite la ejecucion de trabajos de forma asincronica a traves de eventos. Estos trabajos se denominan "jobs", el principal
objetivo de estos es definir servicios o tareas a ser ejecutadas por el init. Cada job es ejecutado ante eventos, poseen un
objetivo(goal start/stop) y un estado(state). Cuando la maquina se prende init emite el evento "startup".
K) El Upstart utiliza en initctl para administrar los demonios, mientras que SystemV reemplaza al proceso init, el pasa a tener
PID de 1. SystemV puede ser controlado por el systemctl. Reemplaza a los runlevels por "targets".
N) SystemD es un sistema que centraliza la administracion de demonios y librerias del sistema.
O)
P) A la organizacion de procesos en forma jerarquica dentro de un grupo.
Punto 3
=======
A) El archivo utilizado es el "/etc/passwrd"
B) Hacen referencia a los indentificadores de los usuarios y de los grupos. No pueden repetirse ya que no pueden haber dos
usuarios con el mismo identificador(pero si pueden tener el mismo nombre).
C) El usuario root es aquel que posee todos los permisos en todos los modos(mono y multiusuario), se le denomina "cuenta del
administrador". No puede existir mas de un usuario "root", su UID=0
Punto 4
=======
A-C) Los permisos sobre archivos se definen utilizando el sistema octal, donde W(write) = 4, R(read) = 2 , X(excute) = 1. Se
pueden especificar permisos especificos para cada grupo/usuario.
D) Si, el usuario "root" o "superusuario" tiene acceso a todos los archivos del sistema.
E) full-path name: Es el camino que requiere llegar al archivo empezando desde /home.
relative-path name: es el directorio en el que estoy actualmente parado, supongamos que estoy en home y quiero editar un archivo
dentro de Documents que se llama "some.rb", ejemplos para los path serian:
- full-path: vim /home/kriox/Documents/some.rb
- relative-path: vim Documents/some.rb (ya que estoy posicionado en el ~/)
F) El comando "pwd" devuelve el "full-path" hasta el directorio en el que estoy posicionado. Para acceder al directorio
personal, se puede acceder mediante: "~/", ejemplos:
- cd /etc/
- pwd = /etc
- cd ~/Documents
- pwd = /home/kriox/Documents
Punto 5
=======
A) Es un programa en ejecucion, el cual tiene su propio PC(program counter). PID= process ID, es el identificador numerico del
proceso(unico para cada proceso, no puede haber repetidos). El PPID = parent process id, es el identificador numerico del
proceso padre del actual.
B) pstree, top
C) background process: aquellos que se ejecutan sin intervencion del usuario.
foreground process: aquellos que se ejecutan con la intervencion del usuario, y hasta que no se lo termina no se sale del
proceso. Por ejemplo, en la terminal, uno abre vim eso crea un foreground process.
E) La finalidad del pipe es "concatenar" comandos pasandole el resultado del comando de la izquierda al de la derecha, por
ejemplo:
- ls | more
- cat /etc/passwd | wc -l
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment