Advertisement
cmilton92

SO II

May 31st, 2016
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.91 KB | None | 0 0
  1. ***********************************************
  2. 12/4
  3. ************************************************
  4.  
  5. man 2 'function'
  6.  
  7. Sistema de archivos
  8.  
  9. Archivo: Unidad de almacenamiento de datos en el disco (o cualquier medio de almacenamiento persistente). Usualmente se le asocia un nombre a cada archivo y los datos se recuperan a través de ese nombre.El sistema de archivos se encarga de representar los archivos en el almacenamiento persistente
  10.  
  11. Usualmente se usa una ordenación jerárquica (estructura de directorios). Esto da lugar a que un nombre de un archivo involucre rutas (PATH). Cambien pueden aparecer distintos volúmenes dentro de un sistema de archivos virtual.
  12. En DOS, los volúmenes corresponden con unidades o particiones (aunque se pueden crear volúmenes virtuales).
  13. En Unix, los distintos volúmenes aparecen dentro (debajo) de un directorio dentro de una única jerarquía de directorios.
  14.  
  15. Operaciones con archivos:
  16. Abrir y/o crear:
  17. int open (char *path, int flags, int mode);
  18. Devuelve un file descriptor, o sea, un numero que le permitirá al proceso referenciar el archivo en sucesivas operaciones.
  19. int creat (char *file, int mode);
  20.  
  21. Leyendo y escribiendo datos:
  22. int read (int fd, void *buffer, size_t count);
  23. int write (int fd, void *buffer, size_t count);
  24. Ambos retornan el nro de bytes leidos/escritos. En caso de error, (-1)
  25.  
  26. Cerrando el archivo:
  27. int close(int fd);
  28. Se usa al terminar de trabajar con un archivo para asi liberar recursos. Es importante verificar que close termino de forma correcta.
  29.  
  30. Borrando un archivo:
  31. int unlink (char *path);
  32. En realidad, borra el enlace al que referencia ese path. Si no hay otras referencias al archivo, entonces si se borran todos los datos.
  33.  
  34. Otras operaciones:
  35. Crear links, obtener información sobre el archivo (y cambiarla), crear y administrar directorios
  36.  
  37. Posicionándose en el archivo:
  38. Cuando se hace una lectura, la siguiente lectura continua en donde termino la lectura anterior. Lo mismo ocurre con la escritura. Es decir, el sistema debe saber por
  39. cada fd cual fue el lugar de la ultima operación (no se hace distinción si fue lectura o escritura)
  40. Se puede cambiar la posición desde donde comenzara la próxima operación la seek position
  41. off_t lseek (int fd, off_t offset, int whence)
  42. donde whence indica que se toma como referencia para el offset.
  43.  
  44. Información necesaria:
  45. Por cada proceso, se necesita mantener información sobre cada archivo abierto por ese proceso (file descriptor).
  46. Información general para cada archivo
  47. Nro de procesos que lo tienen abierto.
  48. Ubicación en el disco.
  49. Control de acceso simultaneo y bloqueos.
  50.  
  51.  
  52. ¿Como manejar el acceso concurrente a un archivo?
  53. Puedo usar shared locks o exclusive locks. En el problema de lectores/escritores, los lectores tienen un shared lock y los escritores poseen un exclusive lock.
  54. El sistema de bloqueos puede ser obligatorio ( mandatory locking - se setea automáticamente o forzosamente), puede que sea programado por el usuario (advisory locking) o pueden ser combinados. Algunos sistemas pueden bloquear la parte de un archivo.
  55. DOS usa mandatory lockings con exlusive locks, en cambio, UNIX usa advisory locking y por defecto no bloquea el archivo
  56.  
  57. ***********************************************
  58. ************************************************
  59.  
  60. PAGINACION
  61.  
  62. ¿Que puede pasar al tratar de acceder a una pagina?
  63. 1) La PTE correspondiente esta en la TLB. Accedemos a la memoria sin sobrecosto.
  64. 2) La PTE no esta en la TLB. Hay un fallo de pagina
  65. - Buscamos en la tabla la entrada correspondiente
  66. - Cambiamos una entrada de la TLB por esta
  67. - Volvemos a ejecutar la instruccion
  68. 3) La PTE dice que es invalida
  69. - El SO verifica que el proceso puede acceder a esa pagina (NO MATA AL PROCESO)
  70. - Elegimos una pagina a reemplazar -> Algoritmos de reemplazo
  71. - Si esta modificada, copiarla a disco
  72. - Cargar la nueva pagina a memoria
  73. - Cambiar las PTE de las paginas en cuestion. Invalidar las entradas de ellas en la TLB
  74. - Continuar la ejecucion
  75. ---------------------------------------------
  76. Cuando toda la memoria esta usada y se necesita una pagina podemos elegir una pagina victima para enviarla a swap.
  77.  
  78. Recordemos que una page fault puede deberse a
  79. - Intento de acceso a una dir virtual no asignada (SIGSEGV al proceso)
  80. - Crecimiento del stack
  81.  
  82. Políticas de reemplazo
  83.  
  84. FIFO: Elijo la pagina que esta hace mas tiempo en memoria. Supongamos que la secuencia de accesos a paginas virtuales de proceso (la llamaremos traza) es la siguiente: (Ver ejemplo libro pag. 171)
  85. - Ventajas: fácil de implementar
  86. - Desventaja: Anomalía de Belady (quitamos de memoria una página de memoria muy usada, sólo porque es la más antigua)
  87.  
  88. Algoritmo optimo: Sacar la pagina mas lejana en el tiempo. Problema: No puedo ver a futuro las pag. necesitadas :(
  89.  
  90. Una forma de aproximarse al algoritmo optimo es mirar la historia del proceso y seleccionar la pagina que hace mas tiempo que no se usa, es decir, la usada menos recientemente. Este algoritmo se llama LRU (Least recently used) e intenta proveer un comportamiento casi óptimo mediante la observación de las páginas que menos fueron usadas recientemente. Este tipo de páginas, estadísticamente son las que tienen menor probabilidad de ser usadas nuevamente.
  91. - Desventajas: Es costoso de implementar
  92.  
  93. Otra opción de implementación es guardar los accesos en una lista (doble enlazada) ordenada por hora de acceso. Este algoritmo parece mejor pero puede involucrar cambiar hasta todos los punteros.
  94.  
  95. Muchos SO utilizan algún algoritimo aproximado a LRU pero con una implementación para barata
  96.  
  97. ***********************************************
  98. 31/5
  99. ***********************************************
  100.  
  101. Memoria compartida (libro)
  102. Asignación de marcos
  103.  
  104. Cada proceso para poder realizar trabajo útil posiblemente necesite de:
  105. - la pagina correspondiente a la instrucción en el .text
  106. - al menos una pagina del .data
  107. - al menos una pagina del stack
  108.  
  109. Esto nos da la idea de que es conveniente tener al menos 3 paginas en RAM de cada proceso. Conviene asegurarnos que un proceso tenga un conjunto mínimo de paginas en memoria. Lo optimo seria que este su working set (cantidad de memoria que un proceso requiere en un intervalo de tiempo dado)
  110.  
  111. ¿Cuantas paginas asigno a cada proceso? (Pag 177)
  112.  
  113. -Asignación igualitaria: determina el tamaño de un proceso en memoria en función de una constante (o de un numero de procesos y el tamaño de la RAM). Esto penaliza demasiado a los procesos grandes
  114. -Asignación proporcional: asignar la memoria en proporción a la memoria virtual de un proceso. El problema de esto es que cuando aparece un proceso nuevo debemos recalcular todos los procesos y también tener en cuenta la memoria dinámica
  115. -Asignación proporcional con prioridades: asigno la memoria teniendo en cuenta la prioridad de cada proceso
  116.  
  117. ***********************************************
  118. 07/6
  119. ***********************************************
  120. Virtualizacion:
  121. -> Emulacion
  122. -> Hipervisores (tipo I)
  123. -> Paravirtualizacion
  124. -> Dockers (contenedores)
  125.  
  126. Emulacion (Mirar apunte Virtualizacion)
  127.  
  128. Si queremos emular una maq virtual de la misma arquitectura que el anfitrion no nos hace falta traducir todas las instrucciones
  129. ¿Que traducimos? Las intrucciones relacionadas con el hardware requeriran una traduccion pero ¿como hacemos para simular solo esas instrucciones?
  130.  
  131. La mejor seria que cuando se ejecute una instruccion que requiera privilegios, el programa (huesped) se interrumpa dando lugar a que el anfitrion
  132. la simule. ¿Como podemos lograr esto?
  133.  
  134. 1) Analizar el assambler antes de ejectuarlo y buscar instrucciones privilegiadas para cambiarlas por "saltos" al anfitrion y asi poder emularlas pero acerlo con el binario
  135. completo es muy costoso por lo tanto se suele tomar porciones de codigo (hasta encontrar un salto o una instruccion privilegiada) para ejecutar ese codigo llamando luego al
  136. anfitrion para que haga los arreglos necesarios. Asi, las instrucciones comunes se ejecutan en el hardware real y el analisis del codigo solo se hace una sola vez
  137. A ese tipo de emulacion se lo llama EMULADOR (o Hipervisor de tipo II)
  138.  
  139.  
  140. 2) Con apoyo del hardware ( hipervisores de tipo I). Como el hardware detecta automaticamente las instrucciones sensibles (privilegiadas) no es necesario realizar el analisis
  141. del codigo ya que el hardware llamara al anfitrion (hipervisor) cuando encuentre una instruccion de este tipo. Para poder ejecutar muchas copias de un SO sencillo (CMS) se crea
  142. un pequeño programa de control (cp) que coordenaba el trabajo de estos (CP/CMS)
  143.  
  144. En los x86 (hasta el 2005) algunas instrucciones sensibles cuando se ejecutaban en modo usuario no producian ningun efecto (ni siquiera un fallo). En el 2005, Instel corrige esto
  145. para que las instrucciones privilegiadas produzcan fallos aun cuando se ejecuten en modo usuario. Tambien se agregan drivers para dispositivos simulados que pueden funcionar
  146. mejor que el hardware real
  147.  
  148. Uno podria pensar que el tipo II de virtualizacion es mas lenta que la virtualizacion hecha por hipervisores, dado que hay que crear los bloques en tiempo de ejecucion y
  149. emularlas instrucciones en modo usuario. Sin embargo, este esquema de virtualizacion a veceses mas rapido debido al cacheo de instrucciones y a que no se salta a modo kernel
  150. tan seguido.
  151.  
  152. Paravirtualizacion
  153.  
  154. ¿Como evitar toda la sobrecarga generada por la emulacion de dispositivos? Puedo modificar el SO huesped para que la I/O sea mas sencilla, o sea, hacer que el hipervisor presente
  155. una API al hardware mucho mas facil de simular. Un hipervisor de paravirtualizacion es practicamente un microkernel que ejecuta S.O. huespedes como procesos.
  156.  
  157. Contenedores (Dockers): la idea es fabricar espacios independientes dentro del mismo SO (util para distrubicion de recursos / seguridad).
  158. Permite separar -tablas de procesos, -señales e IPC, -tarjetas de red, -multiplexacion de dispositivos
  159.  
  160. Un contenedor Docker, a diferencia de una máquina virtual, no requiere incluir un sistema operativo independiente. En su lugar, se basa en las funcionalidades del kernel y
  161. utiliza el aislamiento de recursos (CPU, la memoria, el bloque E / S, red, etc.) y namespaces separados para aislar de vista la aplicación del sistema operativo.
  162. --------------------------------------
  163. Virtualizacion de memoria
  164.  
  165. ¿Como simular las tablas de paginacion?
  166. El problema que se plantea en virtualizacion de memoria es como mapear las paginas fısicas que el S.O. huesped cree que existen con paginas reales, o sea que debe haber un
  167. segundo nivel de traduccion: pagina virtual huesped -> pagina fisica huesped -> pagina fisica anfitrion.
  168.  
  169. El hipervisor lleva una shadow page table con la traduccion de las paginas que le dio al S.O. huesped. Esto es facil de hacer mediante las caracteristicas que proveen las
  170. tecnologıas de virtualizacion de Intel (EPT) y AMD (NPT+RVI). Ambas tecnologias reespectivamente se encargar de solucionar el problema que surge con la TLB ya que si bien una
  171. forma seria flushear la TLB cada vez que se pase a otra VM, esto reduciria el rendimiento ya que habria que estar llenandola cada vez a cada cambio de contexto
  172.  
  173. Virtualizacion de I/O
  174.  
  175. El S.O. huesped tratara de escribir en las posiciones de memoria donde cree que un dispositivo puede leer (a traves de DMA). Sin embargo, estas direcciones no son reales,
  176. por lo cual el hipervisor debe traducir estas llamadas para escribir realmente en la posicion fısica donde el hardware pueda leerlo. De la misma manera cuando un dispositivo
  177. escribe en una posicion determinada por DMA, se debe copiar, o mapear esa direccion fisica a una direccion que pueda leer el S.O. huesped. Este proceso es lento y proclive a introducir errores
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement