Los gordos
      • Sharing URL Link copied
      • /edit
      • View mode
        • Edit mode
        • View mode
        • Book mode
        • Slide mode
        Edit mode View mode Book mode Slide mode
      • Customize slides
      • Note Permission
      • Read
        • Owners
        • Signed-in users
        • Everyone
        Owners Signed-in users Everyone
      • Write
        • Owners
        • Signed-in users
        • Everyone
        Owners Signed-in users Everyone
      • Engagement control Commenting, Suggest edit, Emoji Reply
    • Invite by email
      Invitee

      This note has no invitees

    • Publish Note

      Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note

      Your note will be visible on your profile and discoverable by anyone.
      Your note is now live.
      This note is visible on your profile and discoverable online.
      Everyone on the web can find and read all notes of this public team.
      See published notes
      Unpublish note
      Please check the box to agree to the Community Guidelines.
      View profile
    • Commenting
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
      • Everyone
    • Suggest edit
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
    • Emoji Reply
    • Enable
    • Versions and GitHub Sync
    • Note settings
    • Note Insights New
    • Engagement control
    • Make a copy
    • Transfer ownership
    • Delete this note
    • Insert from template
    • Import from
      • Dropbox
      • Google Drive
      • Gist
      • Clipboard
    • Export to
      • Dropbox
      • Google Drive
      • Gist
    • Download
      • Markdown
      • HTML
      • Raw HTML
Menu Note settings Note Insights Versions and GitHub Sync Sharing URL Help
Menu
Options
Engagement control Make a copy Transfer ownership Delete this note
Import from
Dropbox Google Drive Gist Clipboard
Export to
Dropbox Google Drive Gist
Download
Markdown HTML Raw HTML
Back
Sharing URL Link copied
/edit
View mode
  • Edit mode
  • View mode
  • Book mode
  • Slide mode
Edit mode View mode Book mode Slide mode
Customize slides
Note Permission
Read
Owners
  • Owners
  • Signed-in users
  • Everyone
Owners Signed-in users Everyone
Write
Owners
  • Owners
  • Signed-in users
  • Everyone
Owners Signed-in users Everyone
Engagement control Commenting, Suggest edit, Emoji Reply
  • Invite by email
    Invitee

    This note has no invitees

  • Publish Note

    Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note

    Your note will be visible on your profile and discoverable by anyone.
    Your note is now live.
    This note is visible on your profile and discoverable online.
    Everyone on the web can find and read all notes of this public team.
    See published notes
    Unpublish note
    Please check the box to agree to the Community Guidelines.
    View profile
    Engagement control
    Commenting
    Permission
    Disabled Forbidden Owners Signed-in users Everyone
    Enable
    Permission
    • Forbidden
    • Owners
    • Signed-in users
    • Everyone
    Suggest edit
    Permission
    Disabled Forbidden Owners Signed-in users Everyone
    Enable
    Permission
    • Forbidden
    • Owners
    • Signed-in users
    Emoji Reply
    Enable
    Import from Dropbox Google Drive Gist Clipboard
       Owned this note    Owned this note      
    Published Linked with GitHub
    • Any changes
      Be notified of any changes
    • Mention me
      Be notified of mention me
    • Unsubscribe
    SO: Resumen === [TOC] # Sistema operativo Es el programa que controla todos los recursos de la computadora y establece la base sobre la que pueden escribirle los programas de aplicacion. También es un programa que controla la ejecucion de aplicaciones y programas, hace de interfaz entre apps y hardware. * Debe ser: * Eficiente -> Administrando recursos * Robusto -> Contra programas q funcionan mal * Tipos: 1. Por lote 2. Propositos generales 3. Paralelos 4. Distribuidos 5. De tiempo real 6. Embebidos * Arquitecturas * Monoliticos * Monoliticos y modulares * Monoliticos en capas * Maquinas virtuales > **Registros privilegiados**: Solo son accesibles en modo privilegiado > **Modo privilegiado**: Se accede via interrupciones o tramas de kernel > **Instrucciones privilegiadas**: Se utilizan para utilizar registros privilegiados. Incluyen las no privilegiadas > Algunos procesadores tienen varios niveles de privilegios. ## Manejo de E/S * **Por estado**: El procesodr interroga * **Por interrupciones**: El dispositivo de E/S emite la interrupcion * Controlada por programa: el proce las maneja * Iniciado por programa: las maneja el DMA, no usa CPU, pero tiene tiempo de acceso a memoria * Controlado por canal: las maneja un canal dedicado, un micro-procesador a parte # Memoria ![](https://cdn.discordapp.com/attachments/835912758939484161/989615504807305286/unknown.png) > **Cache write through**: Actualizacion de memoria cache y lenta > **Delayed write**: Actualizacion de memoria cache, pero posterga la lenta > # Planificador de procesos La planificacion de procesos es una herramienta del sistema operativo para dictarle al procesador en que orden se tienen que ejecutar los procesos entrantes. > **Proceso**: una instancia de programa en ejecucion. ## Diagrama de estado ![](https://i.imgur.com/16xAJA7.png) Los estados mas importantes son el de **ready**, **running** y **blocked**: 1. Ready: listo para la ejecucion, **espera a la CPU.** 2. Running: ejecutandose, **posee la CPU**. 3. Bloqueado: no esta listo para ejecutarse, esta **esperando un recurso**. ## Cambio de contexto Es lo que hace el procesador cada vez que cambia el proceso que se encuentra en **ejecucion**, y consiste en: 1. Guarda el estado del proceso o hilo en ejecucion. (Registros) 2. Carga el estado del nuevo proceso o hilo a ejecutar. 3. Repite... > El cambio de procesos puede ser caro si es que se sobrecarga la memoria, por lo que para un proceso es siempre preferible continuar con la misma CPU. ## Tipos de planificacion Encontramos de 3 tipos: ![](https://i.imgur.com/hif4ALd.png) **Planificacion a largo plazo:** Planificacion del conjunto de procesos a ser ejecutados. **Planificacion a mediano plazo**: Planificacion del conjunto de procesos a mantener en la memoria principal. **Planificacion a corto plazo**: Planificacion de la asignacion de la CPU. ## Criterios de planificacion > Imagen porque no sabemos si incluirlo o no... ![](https://i.imgur.com/nDIFpTt.png) --- # Hilos Un hilo es un proceso ligero, que ejecuta una secuencia de tareas. Tambien conocido como una secuencia de tareas encadenadas muy pequeñas. ![](https://i.imgur.com/95YdtKm.png) ## Ventajas 1. Menor tiempo de creacion que un proceso. 2. Menor tiempo de finalizacion. 3. Menor tiempo para cambiar entre 2 hilos. 4. Los hilos comparten el **mismo espacio de memoria**. Para evitar la interferencia entre hilos es necesario utilizar tecnicas de **sincronizacion**, que se ven mas adelante. 5. **La comunicacon entre hilos es mas facil que la de procesos, ya que no requiere participacion del kernel.** ## Tipos de hilos ### Hilo a nivel usuario Un hilo a nivel usuario se maneja completamente en espacio de usuario, por lo que el kernel no sabe que existe. #### Ventajas 1. No requiere llamadas al sistema. 2. La conmutacion entre hilo es rapida. 3. Se pueden implementar en un sistema operativo que no maneje hilos. #### Desventajas 1. Un solo procesador. 2. Problemas con las llamadas bloqueantes. 3. Bloqueos en llamadas al sistema. ### Hilo a nivel kernel El kernel es el que planifica y administra los hilos. #### Ventajas 1. No se necesita un planificador de procesos. 2. Si un hilo se bloquea, el kernel puede activar otro. 3. Con esto se logra el verdadero paralelismo. #### Desventajas 1. Costo de creacion y destruccion alto. 2. Alto costo de conmutacion. --- # Interrupciones Se pueden dar por software o hardware. Estas interrumpen el estado del sistema, haciendo que la CPU deje de hacer lo que estaba haciendo para gestionar la interrupcion. Al recibir una interrupcion, la CPU guarda el estado y hace el cambio de contexto, disparando la rutina de servicio de interrupcion. ### Control de interrupciones * Agrupamiento * Codificacion * Priorizacion * Habilitacion/Deshabilitacion ## Rutina de servicio de interrupcion * Guarda los registros esenciales de la CPU. * Salta a la rutina de servicio de interrupcion (maneja la interrupcion). * Recupera los registros esenciales al retornar. # Concurrencia > Proceso determinista: Es cuando podemos predecir el resultado del proceso. En otras palabras, su ejecucion va a ser la misma siempre. ## Soluciones ### Exclusion mutua usando regiones criticas La exclusion mutua consiste en que un proceso, si quiere utilizar una variable, la bloquea de acceso para el resto de procesos o hilos. > **Region critica**: parte del programa donde se acceden a variables compartidas. ![](https://i.imgur.com/xcuZHV3.png) ### Por software #### Busy wait Incorporamos un bucle while con una condicion, hasta que termine de ejecutar la operacion. El lado negativo, es que consume muchos recursos, ya que mantiene al procesador evaluando constantemente la condicion. #### Alternancia estricta Lo que hace es imponer un orden. Lo que hace es mientras uno de los bucles se esta ejecutando, el otro no se va a poder ejecutar hasta que el primero finalice su operacion. ```c= int turn = 0; while (TRUE) { while (turn != 0) {} // BUSY WAIT critical_region(); turn = 1; noncritical_region() } while (TRUE) { while (turn != 1) {} // BUSY WAIT critical_region(); turn = 0; noncritical_region() } ``` #### Solucion de Peterson No nos sirve para usos practicos, y el profe dijo que era inutil ya que nos sirve para 2 procesos unicamente. Sirve para mencionarlo y poco mas xd. ### Semaforos ### Transferencia de mensajes Consiste en utilizar una tuberia (pipe), donde tengamos 2 procesos comunicados, siendo 1 que mande el mensaje y el otro que quede bloqueado hasta que se haga la lectura o escritura. ### Interbloqueo El interbloqueo puede ser definido como "el bloqueo permanente" de un conjunto de procesos que compiten por recursos del sistema o se comunican entre sí. Un conjunto de procesos esta interbloqueado cuando cada proceso se bloquea esperando un evento(por lo gral que se libere algun recurso) que solo puede ser generado por otro evento bloqueado del conjunto. ![](https://i.imgur.com/QzOu5cn.png) #### Condiciones 1. Exclusion mutua 2. Retencion y espera 3. No apropiacion 4. Cola circular **Las condiciones 1 a 3 son necesarias pero no suficientes para que se de un interbloqueo.** #### Maneras de tratarlo 1. Impedir/Prevenir que ocurran: Eliminando alguna de las condiciones necesarias. * Generalmente es muy costoso 2. Evitar que ocurran: Permite que se den todas las condiciones, pero realiza tareas para que no ocurran. Por ejemplo solicitar informacion de que tipo re cursos requiere un proceso antes de dejarlo iniciar. 3. Detectar y recuperar: El sistema debe autoexaminarse periodicamente para detectar interbloqueos y eliminarlos. 4. Ignorarlos. # Comunicacion entre procesos * **Señales**: Interrupciones de software * **Tuberias**: Canal unidireccional * **Sockets**: Punto de comunicacion entre multiples procesos, de propositos generales ## Tuberias Solo existen entre procesos con mismo padre (el que crea la tuberia) ## Sockets Tienen llamadas de funciones asociadas. La API consiste en: * Formato de direcciones para familias de protocolos de red * Funciones para crear, nombrar, conectar y destruir * Funciones para convertir nombres legibles en direcciones y viceversa * Funciones para enviar y recibir datos * Funciones para multiplexar la E/S en varios sockets Tipos de sockets: * De flujo: flujo de bytes * Datagramas: mensajeria no confiable * En crudo: enviar y recibir datagramas en crudo # Administracion de memoria * **Memoria Principal RAM:** * Conjunto ordenado de palabras o bytes * Cada palabra o bryte tiene una direccion unica **El SO** es en encargado de: * Asignar y liberar regiones de memoria * Decidir que procesos se cargan en la mem * Controla y supervisa el uso **MMU:** * Mapea el espacio de direcciones logicas en el espacio de direcciones fisicas * Asignacion dinamica de memoria para procesos * Memoria compartida * Proteccion contra accesos erroneos/no autorizados * Swaping: Cuando pasamos algo de la memoria principal a una mas lenta(disco) cuando no nos alcanza la memoria. * El planificador **NO** los debe considerar ejecutables ## Tipos de Asignacion: * **Segmentacion** * Segmentos llamados overlays * Distintos segmentos pueden tener distintos derechos de acceso(ro/rw) * Fragmentacion externa * Las distintas estrategias de posicionado pueden cambiar la edifiencia y comportamiento. * **Asignacion Contigua:** * Se almacena la direccion base y la direccion limite * Hay 2 tipos * Particiones Estaticas(fragmentacion interna) * Particiones dinamicas(fragmentacion externa) * Requiere compactacion para combatir la frag externa. * Estrategias de busqueda de huecos: * First fit: Asigna el primer hueco con espacio suficiente * Next fit: Asigna el primer hueco con espacio suficiente desde la ultima busqueda * Best fit: Asigna el hueco mas pequeño pero suficiente. * Worst fit: Asigna el hueco mas grande. * Sistema de colegas(No se si lo explicó) * Los huecos siempre tienen tamaño 2^i * Hay una lista para cada i * 2 huecos de la lista i se pueden combinar para tener uno de la lista i+1(porque es potencia de 2) * 1 hueco de la lista i se puede dividir en 2 huecos de la lista i-1 * **Son rapidos porque se busca en listas pequeñas** * Es el algoritmo que usa malloc() * **Paginación:** * La memoria *fisica* se organiza en marcos * La memoria *logica* se organiza en paginas * Las paginas se mapean a marcos utilizando una **tabla de pagina** * Las paginas **no necesariamente** tienen que estar contiguas(pueden estar en cualquier parte de la memoria) * Pros: * No hay fragmentacion externa y no se necesita compactacion * Las paginas de tamaño fijo pueden ser movidas dentro/fuera de la mem principal * Las **direcciones logicas** estan compuestas por 2 componentes (p, d) donde p indica el indice en la tabla de paginas(que pagina es) y d es el corrimiento(offset) dentro de la pagina p * La **direccion fisica** esta compuesta por 2 comp (f,d) donde f es el numero de marco y d es el corrimiento dentro del marco. ![](https://i.imgur.com/bhiuXRr.png) * Ambas son generalmente en hexa(por ej 0xpppddd) * **Propiedades** * La traduccion tiene q ser rapida * La tabla de paginas puede requerir mucho espacio(direcciones de 32 bits con paginas de 4096 bytes necesita 1 millon de entradas) * Se debe incluir informacion adicional en la tabla: * Bit de proteccion(lectura/escritura/ejecucion) * Dirty bit(con valor si la pag se modifico y hay q cambiarlo en la otra mem) * No es necesario tener todas las pag en la memoria principal para que se ejecute el programa. * Cuando el programa necesita una pag que no se encuentra en memoria se produce un **fallo de pagina** ![](https://i.imgur.com/EWYeUj0.png) * **Caracteristicas** * Fragmentacion interna limitada(solo la ultima pag) * Los fallos de pag son costosos(son lentos) * Intentar asegurar que las paginas "esenciales" de un proceso *esten siempre en memoria* * Tratar de seleccionar paginas usadas(victimas) que *no se usen en el futuro* * Mientras se resuelve el fallo de pagina *ejecutar otros procesos* * *Trashing:* El sistema esta ocupado swapeando paginas de memoria y no hace tareas utiles * Translation Lookaside Buffer(TLB) * Una especie de cache pero solo de paginas ![](https://i.imgur.com/FnH36uy.png) * **Memoria Virtual** *

    Import from clipboard

    Paste your markdown or webpage here...

    Advanced permission required

    Your current role can only read. Ask the system administrator to acquire write and comment permission.

    This team is disabled

    Sorry, this team is disabled. You can't edit this note.

    This note is locked

    Sorry, only owner can edit this note.

    Reach the limit

    Sorry, you've reached the max length this note can be.
    Please reduce the content or divide it to more notes, thank you!

    Import from Gist

    Import from Snippet

    or

    Export to Snippet

    Are you sure?

    Do you really want to delete this note?
    All users will lose their connection.

    Create a note from template

    Create a note from template

    Oops...
    This template has been removed or transferred.
    Upgrade
    All
    • All
    • Team
    No template.

    Create a template

    Upgrade

    Delete template

    Do you really want to delete this template?
    Turn this template into a regular note and keep its content, versions, and comments.

    This page need refresh

    You have an incompatible client version.
    Refresh to update.
    New version available!
    See releases notes here
    Refresh to enjoy new features.
    Your user state has changed.
    Refresh to load new user state.

    Sign in

    Forgot password

    or

    By clicking below, you agree to our terms of service.

    Sign in via Facebook Sign in via Twitter Sign in via GitHub Sign in via Dropbox Sign in with Wallet
    Wallet ( )
    Connect another wallet

    New to HackMD? Sign up

    Help

    • English
    • 中文
    • Français
    • Deutsch
    • 日本語
    • Español
    • Català
    • Ελληνικά
    • Português
    • italiano
    • Türkçe
    • Русский
    • Nederlands
    • hrvatski jezik
    • język polski
    • Українська
    • हिन्दी
    • svenska
    • Esperanto
    • dansk

    Documents

    Help & Tutorial

    How to use Book mode

    Slide Example

    API Docs

    Edit in VSCode

    Install browser extension

    Contacts

    Feedback

    Discord

    Send us email

    Resources

    Releases

    Pricing

    Blog

    Policy

    Terms

    Privacy

    Cheatsheet

    Syntax Example Reference
    # Header Header 基本排版
    - Unordered List
    • Unordered List
    1. Ordered List
    1. Ordered List
    - [ ] Todo List
    • Todo List
    > Blockquote
    Blockquote
    **Bold font** Bold font
    *Italics font* Italics font
    ~~Strikethrough~~ Strikethrough
    19^th^ 19th
    H~2~O H2O
    ++Inserted text++ Inserted text
    ==Marked text== Marked text
    [link text](https:// "title") Link
    ![image alt](https:// "title") Image
    `Code` Code 在筆記中貼入程式碼
    ```javascript
    var i = 0;
    ```
    var i = 0;
    :smile: :smile: Emoji list
    {%youtube youtube_id %} Externals
    $L^aT_eX$ LaTeX
    :::info
    This is a alert area.
    :::

    This is a alert area.

    Versions and GitHub Sync
    Get Full History Access

    • Edit version name
    • Delete

    revision author avatar     named on  

    More Less

    Note content is identical to the latest version.
    Compare
      Choose a version
      No search result
      Version not found
    Sign in to link this note to GitHub
    Learn more
    This note is not linked with GitHub
     

    Feedback

    Submission failed, please try again

    Thanks for your support.

    On a scale of 0-10, how likely is it that you would recommend HackMD to your friends, family or business associates?

    Please give us some advice and help us improve HackMD.

     

    Thanks for your feedback

    Remove version name

    Do you want to remove this version name and description?

    Transfer ownership

    Transfer to
      Warning: is a public team. If you transfer note to this team, everyone on the web can find and read this note.

        Link with GitHub

        Please authorize HackMD on GitHub
        • Please sign in to GitHub and install the HackMD app on your GitHub repo.
        • HackMD links with GitHub through a GitHub App. You can choose which repo to install our App.
        Learn more  Sign in to GitHub

        Push the note to GitHub Push to GitHub Pull a file from GitHub

          Authorize again
         

        Choose which file to push to

        Select repo
        Refresh Authorize more repos
        Select branch
        Select file
        Select branch
        Choose version(s) to push
        • Save a new version and push
        • Choose from existing versions
        Include title and tags
        Available push count

        Pull from GitHub

         
        File from GitHub
        File from HackMD

        GitHub Link Settings

        File linked

        Linked by
        File path
        Last synced branch
        Available push count

        Danger Zone

        Unlink
        You will no longer receive notification when GitHub file changes after unlink.

        Syncing

        Push failed

        Push successfully