{"id":30992,"date":"2019-10-31T21:38:47","date_gmt":"2019-10-31T18:38:47","guid":{"rendered":"https:\/\/prohoster.info\/blog\/operating-systems-three-easy-pieces-part-2-abstraktsiya-protsess-perevod\/"},"modified":"2019-10-31T21:38:47","modified_gmt":"2019-10-31T18:38:47","slug":"operating-systems-three-easy-pieces-part-2-abstraktsiya-protsess-perevod","status":"publish","type":"post","link":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/operating-systems-three-easy-pieces-part-2-abstraktsiya-protsess-perevod","title":{"rendered":"Sistemas Operativos: Tres Piezas Sencillas. Parte 2: Abstracci\u00f3n: Proceso (traducci\u00f3n)","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<h1>Introducci\u00f3n a los sistemas operativos<\/h1>\n<p>\n\u00a1Hola, Habr! Quiero presentar a su atenci\u00f3n una serie de art\u00edculos traducidos sobre una literatura que me parece interesante: OSTEP. Este material examina a fondo el funcionamiento de los sistemas operativos similares a Unix, es decir, el manejo de procesos, varios planificadores, memoria y otros componentes similares que conforman un sistema operativo moderno. Puede ver el origen de todos los materiales aqu\u00ed <noindex><a rel=\"nofollow\" href=\"http:\/\/pages.cs.wisc.edu\/~remzi\/OSTEP\/\">aqu\u00ed<\/a><\/noindex>. Por favor, tengan en cuenta que la traducci\u00f3n se realiz\u00f3 de manera no profesional (bastante libre), pero espero haber mantenido el sentido general.<\/p>\n<p>Los trabajos de laboratorio sobre este tema se pueden encontrar aqu\u00ed:<\/p>\n<ul>\n<li>original: <noindex><a rel=\"nofollow\" href=\"http:\/\/pages.cs.wisc.edu\/~remzi\/OSTEP\/Homework\/homework.html\">pages.cs.wisc.edu\/~remzi\/OSTEP\/Homework\/homework.html<\/a><\/noindex><\/li>\n<li>original: <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/remzi-arpacidusseau\/ostep-code\">github.com\/remzi-arpacidusseau\/ostep-code<\/a><\/noindex><\/li>\n<li>mi adaptaci\u00f3n personal: <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/bykvaadm\/OS\/tree\/master\/ostep\">github.com\/bykvaadm\/OS\/tree\/master\/ostep<\/a><\/noindex><\/li>\n<\/ul>\n<p>\nOtras partes:<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/post\/446340\/\">Parte 1: Introducci\u00f3n<\/a><\/noindex><\/li>\n<\/ul>\n<p>\nY tambi\u00e9n pueden visitar mi canal en <noindex><a rel=\"nofollow\" href=\"https:\/\/t.me\/bykvaadm\">Telegram<\/a><\/noindex> =)<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Consideremos la abstracci\u00f3n m\u00e1s fundamental que el sistema operativo proporciona a los usuarios: el proceso. La definici\u00f3n de proceso es bastante simple: es un <b>programa en ejecuci\u00f3n<\/b>. El programa en s\u00ed es una entidad inerte, que reside en el disco: un conjunto de instrucciones y posiblemente algunos datos est\u00e1ticos, esperando el momento de su ejecuci\u00f3n. Es el sistema operativo el que toma esos bytes y los ejecuta, transformando el programa en algo \u00fatil.<br \/>\n Con mayor frecuencia, los usuarios desean ejecutar m\u00e1s de un programa a la vez; por ejemplo, puede iniciar un navegador, un juego, un reproductor multimedia, un editor de texto, entre otros, en su computadora port\u00e1til. De hecho, un sistema t\u00edpico puede ejecutar decenas y cientos de procesos simult\u00e1neamente. Este hecho hace que el sistema sea m\u00e1s f\u00e1cil de usar; nunca tiene que preocuparse de si la CPU est\u00e1 libre, simplemente inicia los programas.<\/p>\n<p><i>De aqu\u00ed surge el problema: \u00bfc\u00f3mo proporcionar la ilusi\u00f3n de m\u00faltiples CPUs? \u00bfC\u00f3mo puede un sistema operativo crear la ilusi\u00f3n de pr\u00e1cticamente un n\u00famero infinito de CPUs, incluso si tiene solo una CPU f\u00edsica?<\/i><\/p>\n<p>El sistema operativo crea esta ilusi\u00f3n mediante la virtualizaci\u00f3n de la CPU. Ejecutando un proceso, luego deteni\u00e9ndolo, ejecutando otro proceso y as\u00ed sucesivamente, el sistema operativo puede mantener la ilusi\u00f3n de que existen m\u00faltiples CPUs virtuales, aunque en realidad solo hay uno o varios procesadores f\u00edsicos. Esta t\u00e9cnica se llama <b>divisi\u00f3n del tiempo de recursos de la CPU<\/b>. Esta t\u00e9cnica permite a los usuarios ejecutar tantos procesos simult\u00e1neamente como deseen. El costo de esta soluci\u00f3n es el rendimiento, ya que si varios procesos comparten la CPU, cada proceso se procesar\u00e1 m\u00e1s lentamente.<br \/>\n Para realizar la virtualizaci\u00f3n de la CPU, y especialmente para hacerlo bien, el sistema operativo necesita tanto soporte de bajo nivel como de alto nivel. El soporte de bajo nivel se denomina <b>mecanismos<\/b> \u2014 son m\u00e9todos o protocolos de bajo nivel que implementan la parte necesaria de la funcionalidad. Un ejemplo de esta funcionalidad es el cambio de contexto, que permite al sistema operativo detener un programa y ejecutar otro en el procesador. Esta divisi\u00f3n temporal se realiza en todos los sistemas operativos modernos.<br \/>\n En la parte superior de estos mecanismos se encuentra cierta l\u00f3gica integrada en el sistema operativo, en forma de \"pol\u00edticas\". <b>Pol\u00edtica<\/b> \u2014 es un algoritmo de toma de decisiones que el sistema operativo emplea. Tales pol\u00edticas, por ejemplo, deciden qu\u00e9 programa debe ejecutarse (de la lista de comandos) primero. As\u00ed, por ejemplo, esta tarea ser\u00e1 resuelta por una pol\u00edtica denominada <b>pol\u00edtica de planificaci\u00f3n (scheduling policy)<\/b> y al elegir una soluci\u00f3n se basar\u00e1 en datos como: la historia de ejecuci\u00f3n (qu\u00e9 programa ha estado en ejecuci\u00f3n m\u00e1s tiempo en el \u00faltimo minuto), qu\u00e9 carga est\u00e1 generando este proceso (qu\u00e9 tipos de programas se han ejecutado), m\u00e9tricas de rendimiento (si el sistema est\u00e1 optimizado para la interacci\u00f3n interactiva o para capacidad de procesamiento), etc.<\/p>\n<h3>Abstracci\u00f3n: proceso<\/h3>\n<p>\n La abstracci\u00f3n de un programa en ejecuci\u00f3n que realiza el sistema operativo es lo que llamamos <b>proceso<\/b>. Como ya se mencion\u00f3 anteriormente, un proceso es simplemente un programa en ejecuci\u00f3n, en un instante dado. Un programa que nos permite obtener informaci\u00f3n resumida de diversos recursos del sistema, y a los cuales accede o que esta programa afecta durante su ejecuci\u00f3n.<br \/>\n Para comprender los componentes de un proceso, es necesario entender los estados del sistema: qu\u00e9 puede leer o modificar un programa durante su funcionamiento. En cada momento, es necesario entender qu\u00e9 elementos del sistema son importantes para la ejecuci\u00f3n del programa.<br \/>\n Uno de los elementos m\u00e1s evidentes del estado del sistema que incluye un proceso es la <b>memoria<\/b>. Las instrucciones se almacenan en la memoria. Los datos que el programa lee o escribe tambi\u00e9n se encuentran en la memoria. As\u00ed, la memoria que el proceso puede direccionar (el llamado espacio de direcciones) es parte del proceso.<br \/>\n Tambi\u00e9n forman parte del estado del sistema los registros. Muchas instrucciones est\u00e1n dise\u00f1adas para cambiar el valor de los registros o leer su valor, por lo que los registros tambi\u00e9n se convierten en una parte importante del funcionamiento del proceso. <br \/>\nCabe destacar que el estado de la m\u00e1quina tambi\u00e9n se compone de algunos registros especiales. Por ejemplo,<b> IP \u2014 puntero de instrucci\u00f3n<\/b> \u2014 es el puntero de la instrucci\u00f3n que el programa est\u00e1 ejecutando en este momento. Tambi\u00e9n hay <b>puntero de pila<\/b> y el relacionado <b>puntero de marco<\/b>, que se utilizan para gestionar: par\u00e1metros de funciones, variables locales y direcciones de retorno.<br \/>\nFinalmente, los programas a menudo acceden a la ROM (memoria de solo lectura). Esta informaci\u00f3n sobre \u201cI\/O\u201d (entrada\/salida) debe incluir una lista de archivos abiertos por el proceso en ese momento.<\/p>\n<h3>API del proceso<\/h3>\n<p>\n Para mejorar la comprensi\u00f3n del funcionamiento del proceso, estudiaremos ejemplos de llamadas al sistema que deben incluirse en cualquier interfaz del sistema operativo. Estas APIs est\u00e1n disponibles de alguna manera en cualquier SO.<\/p>\n<p>\u25cf <b>Crear<\/b> (creaci\u00f3n): El SO debe contener alg\u00fan m\u00e9todo que permita crear nuevos procesos. Cuando ingresas un comando en la terminal o inicias una aplicaci\u00f3n haciendo doble clic en el \u00edcono, se env\u00eda una solicitud al SO para crear un nuevo proceso y ejecutar el programa especificado.<br \/>\n\u25cf <b>Eliminaci\u00f3n<\/b>: Dado que hay una interfaz para crear un proceso, el SO tambi\u00e9n debe proporcionar la posibilidad de eliminar forzosamente un proceso. La mayor\u00eda de los programas se iniciar\u00e1n y finalizar\u00e1n naturalmente a medida que se ejecutan. De lo contrario, el usuario querr\u00eda poder terminarlos, por lo que una interfaz para detener el proceso no estar\u00eda de m\u00e1s.<br \/>\n\u25cf <b>Esperar <\/b>(espera): A veces es \u00fatil esperar la finalizaci\u00f3n de un proceso, por lo que se proporcionan algunas interfaces que ofrecen esta posibilidad.<br \/>\n\u25cf <b>Control Miscel\u00e1neo<\/b> (gesti\u00f3n diversa): Adem\u00e1s de terminar y esperar procesos, existen otros m\u00e9todos de control diversos. Por ejemplo, la mayor\u00eda de los sistemas operativos ofrecen la opci\u00f3n de congelar un proceso (detener su ejecuci\u00f3n por un per\u00edodo) y reanudarlo posteriormente (continuar su ejecuci\u00f3n).<br \/>\n\u25cf <b>Estado <\/b>(estado): Existen diversas interfaces para obtener informaci\u00f3n sobre el estado de un proceso, como la duraci\u00f3n de su ejecuci\u00f3n o en qu\u00e9 estado se encuentra actualmente.<\/p>\n<p><img decoding=\"async\" alt=\"Sistemas Operativos: Tres Piezas Sencillas. Parte 2: Abstracci\u00f3n: Proceso (traducci\u00f3n)\" src=\"\/wp-content\/uploads\/2019\/04\/eccf4ba3b12a60a54a62bb13986a7783.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Creaci\u00f3n de procesos: detalles<\/h3>\n<p>Una de las cosas interesantes es c\u00f3mo las programas se transforman en procesos. Especialmente, c\u00f3mo el sistema operativo inicia y ejecuta un programa. C\u00f3mo se crea un proceso de manera espec\u00edfica.<br \/>\nEn primer lugar, el sistema operativo debe cargar el c\u00f3digo del programa y los datos est\u00e1ticos en la memoria (en el espacio de direcciones del proceso). Los programas generalmente se encuentran en disco o en una unidad de estado s\u00f3lido en alg\u00fan formato ejecutable. As\u00ed, el proceso de carga del programa y de los datos est\u00e1ticos en la memoria requiere que el sistema operativo tenga la capacidad de leer estos bytes del disco y ubicarlos en alg\u00fan lugar de la memoria.<\/p>\n<p>En los sistemas operativos m\u00e1s antiguos, el proceso de carga se realizaba de manera ansiosa (eagerly), lo que significa que el c\u00f3digo se cargaba completamente en la memoria antes de que se iniciara el programa. Los sistemas operativos modernos lo hacen de manera perezosa (lazily), es decir, cargando trozos de c\u00f3digo o datos solo cuando son necesarios durante la ejecuci\u00f3n del programa.<\/p>\n<p>Despu\u00e9s de que el c\u00f3digo y los datos est\u00e1ticos se han cargado en la memoria, el sistema operativo necesita realizar algunas cosas m\u00e1s antes de iniciar el proceso. Se debe asignar una cierta cantidad de memoria para la pila. <b>Los programas utilizan la pila para variables locales, par\u00e1metros de funciones y direcciones de retorno.<\/b>. El sistema operativo asigna esta memoria y la entrega al proceso. La pila tambi\u00e9n puede asignarse con ciertos argumentos, espec\u00edficamente llenando los par\u00e1metros de la funci\u00f3n main(), como un array con argc y argv.<\/p>\n<p>El sistema operativo tambi\u00e9n puede asignar cierta cantidad de memoria para el mont\u00f3n (heap) del programa. <b>El mont\u00f3n se utiliza por los programas para datos que se solicitan din\u00e1micamente.<\/b>. Los programas solicitan este espacio llamando a la funci\u00f3n. <b>malloc()<\/b> y lo liberan expl\u00edcitamente llamando a la funci\u00f3n. <b>free()<\/b>. La memoria din\u00e1mica es necesaria para estructuras de datos como: listas enlazadas, tablas hash, \u00e1rboles y otros. Al principio se asigna una peque\u00f1a cantidad de memoria para la memoria din\u00e1mica, pero con el tiempo, durante la ejecuci\u00f3n del programa, puede solicitar m\u00e1s memoria a trav\u00e9s de la llamada a la API de la biblioteca malloc(). El sistema operativo est\u00e1 involucrado en el proceso de asignaci\u00f3n de m\u00e1s memoria para ayudar a satisfacer estas solicitudes.<\/p>\n<p>El sistema operativo tambi\u00e9n lleva a cabo tareas de inicializaci\u00f3n, particularmente aquellas relacionadas con la entrada y salida. Por ejemplo, en sistemas UNIX, cada proceso tiene por defecto 3 descriptores de archivo abiertos, para el flujo est\u00e1ndar de entrada, salida y errores. Estos descriptores permiten a los programas leer entradas desde el terminal, as\u00ed como mostrar informaci\u00f3n en la pantalla. <\/p>\n<p>As\u00ed, al cargar c\u00f3digo y datos est\u00e1ticos en memoria, crear e inicializar una pila, as\u00ed como realizar otras tareas relacionadas con la ejecuci\u00f3n de operaciones de entrada y salida, el sistema operativo prepara el entorno para la ejecuci\u00f3n del proceso. Al final, queda una \u00faltima tarea: ejecutar el programa a trav\u00e9s de su punto de entrada, llamado funci\u00f3n main(). Al pasar a la ejecuci\u00f3n de la funci\u00f3n main(), el sistema operativo transfiere el control de la CPU al nuevo proceso, de esta manera, el programa comienza a ejecutarse. <\/p>\n<h3>Estado del proceso<\/h3>\n<p>\n Ahora que tenemos una comprensi\u00f3n b\u00e1sica de lo que es un proceso y c\u00f3mo se crea, enumeremos los estados del proceso en los que puede encontrarse. En su forma m\u00e1s simple, un proceso puede estar en uno de estos estados:<br \/>\n\u25cf <b>En ejecuci\u00f3n<\/b>. En estado en ejecuci\u00f3n, el proceso se ejecuta en la CPU. Esto significa que se est\u00e1n ejecutando instrucciones.<br \/>\n\u25cf <b>Listo<\/b>. En estado de listo, el proceso est\u00e1 preparado para ejecutarse, pero por alguna raz\u00f3n, el sistema operativo no lo est\u00e1 ejecutando en ese momento.<br \/>\n\u25cf <b>Bloqueado<\/b>. En estado bloqueado, el proceso est\u00e1 realizando alguna operaci\u00f3n que no le permite estar listo para la ejecuci\u00f3n hasta que ocurra alg\u00fan evento. Un ejemplo com\u00fan es cuando un proceso inicia una operaci\u00f3n de E\/S, se bloquea y, de esta manera, otro proceso puede utilizar la CPU.<\/p>\n<p><img decoding=\"async\" alt=\"Sistemas Operativos: Tres Piezas Sencillas. Parte 2: Abstracci\u00f3n: Proceso (traducci\u00f3n)\" src=\"\/wp-content\/uploads\/2019\/04\/d2c01bdb08e7b7aeea78edcbf6ce0250.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nImaginemos estos estados como un gr\u00e1fico. Como podemos ver en la imagen, el estado de un proceso puede cambiar entre RUNNING y READY a discreci\u00f3n del sistema operativo. Cuando el estado del proceso cambia de READY a RUNNING, significa que el proceso ha sido programado. En la direcci\u00f3n opuesta, se ha retirado de la planificaci\u00f3n. En el momento en que un proceso se convierte en BLOCKED, por ejemplo, al iniciar una operaci\u00f3n de E\/S, el sistema operativo lo mantendr\u00e1 en este estado hasta que ocurra alg\u00fan evento, como la finalizaci\u00f3n de la E\/S. En ese momento, el proceso cambiar\u00e1 al estado READY y posiblemente de inmediato al estado RUNNING, si as\u00ed lo decide el sistema operativo. <br \/>\nVeamos un ejemplo de c\u00f3mo dos procesos atraviesan estos estados. Para comenzar, asumamos que ambos procesos est\u00e1n en ejecuci\u00f3n y cada uno utiliza solo la CPU. En este caso, sus estados se ver\u00e1n de la siguiente manera.<\/p>\n<p><img decoding=\"async\" alt=\"Sistemas Operativos: Tres Piezas Sencillas. Parte 2: Abstracci\u00f3n: Proceso (traducci\u00f3n)\" src=\"\/wp-content\/uploads\/2019\/04\/904cef8e04c2f0d8eaf4fdc5860f5bfd.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEn el siguiente ejemplo, el primer proceso, tras un tiempo de trabajo, solicita E\/S y pasa al estado BLOCKED, permitiendo que el otro proceso se ejecute (VER 1.4). El sistema operativo observa que el proceso 0 no est\u00e1 utilizando la CPU y inicia el proceso 1. Durante la ejecuci\u00f3n del proceso 1, la E\/S finaliza y el estado del proceso 0 cambia a READY. Finalmente, el proceso 1 finaliza y, al concluir, el proceso 0 se inicia, se ejecuta y completa su tarea.<\/p>\n<p><img decoding=\"async\" alt=\"Sistemas Operativos: Tres Piezas Sencillas. Parte 2: Abstracci\u00f3n: Proceso (traducci\u00f3n)\" src=\"\/wp-content\/uploads\/2019\/04\/06f44895cc976e7755c1f7bf5afe466b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Estructura de datos<\/h3>\n<p>\n El sistema operativo en s\u00ed es un programa y, al igual que cualquier otro, tiene algunas estructuras de datos clave que rastrean diversas piezas de informaci\u00f3n relevantes. Para seguir el estado de cada proceso, el sistema operativo mantendr\u00e1 una <b>lista de procesos<\/b> para todos los procesos en estado READY y cierta informaci\u00f3n adicional para rastrear los procesos que se est\u00e1n ejecutando en ese momento. Adem\u00e1s, el sistema operativo debe rastrear los procesos bloqueados. Tras la finalizaci\u00f3n de la E\/S, el sistema operativo debe despertar el proceso correspondiente y cambiarlo al estado listo para ejecutarse.<\/p>\n<p>Por lo tanto, el sistema operativo debe guardar el estado de los registros de la CPU. En el momento en que el proceso se detiene, el estado de los registros se almacena en el espacio de direcciones del proceso, y al reanudar su ejecuci\u00f3n, se deben restaurar los valores de los registros y, de este modo, continuar la ejecuci\u00f3n de este proceso.<\/p>\n<p>Adem\u00e1s de los estados ready, blocked y running, hay otros estados. A veces, en el momento de la creaci\u00f3n, un proceso puede tener el estado INIT. Finalmente, un proceso puede entrar en el estado FINAL, cuando ya ha terminado, pero la informaci\u00f3n sobre \u00e9l a\u00fan no ha sido limpiada. En los sistemas UNIX, este estado se denomina <b>proceso zombi<\/b>. Este estado es \u00fatil para casos en los que el proceso padre desea conocer el c\u00f3digo de retorno del hijo; por ejemplo, normalmente 0 indica una finalizaci\u00f3n exitosa, y 1 indica un error, sin embargo, los programadores pueden implementar c\u00f3digos de salida adicionales, se\u00f1alando diferentes problemas. Al finalizar, el proceso padre realiza la \u00faltima llamada al sistema, como wait(), para esperar a que el proceso hijo termine y comunicar al SO que se pueden limpiar los datos asociados con el proceso finalizado.<\/p>\n<p><img decoding=\"async\" alt=\"Sistemas Operativos: Tres Piezas Sencillas. Parte 2: Abstracci\u00f3n: Proceso (traducci\u00f3n)\" src=\"\/wp-content\/uploads\/2019\/04\/4756790c823a7e9ebbe26ff067ca00cc.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Puntos clave de la lecci\u00f3n:<\/h3>\n<p>\n\u25cf <b>El proceso <\/b> \u2014 la principal abstracci\u00f3n de un programa en funcionamiento en el SO. En cualquier momento, un proceso puede ser descrito por su estado: el contenido de la memoria en su espacio de direcciones, el contenido de los registros del procesador, incluyendo el puntero de instrucciones y el puntero de pila, as\u00ed como informaci\u00f3n sobre IO, como archivos abiertos que se est\u00e1n leyendo o escribiendo.<br \/>\n\u25cf <b>API del proceso<\/b> consiste en llamadas que los programas pueden hacer en relaci\u00f3n con los procesos. Normalmente, estas son llamadas para crear, eliminar u otras acciones.<br \/>\n\u25cf Un proceso se encuentra en uno de muchos estados, incluyendo running, ready y blocked. Eventos diversos, como la programaci\u00f3n, la exclusi\u00f3n de programaci\u00f3n o la espera, pueden cambiar el estado de un proceso de uno a otro.<br \/>\n\u25cf <b>Lista de procesos<\/b> contiene informaci\u00f3n sobre todos los procesos en el sistema. Cada entrada se llama bloque de control de proceso, que en realidad es una estructura que contiene toda la informaci\u00f3n necesaria sobre un proceso espec\u00edfico.\u2003<br \/>\n<br \/>Fuente: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/446866\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u0425\u043e\u0447\u0443 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432\u0430\u0448\u0435\u043c\u0443 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044e \u0441\u0435\u0440\u0438\u044e \u0441\u0442\u0430\u0442\u0435\u0439-\u043f\u0435\u0440\u0435\u0432\u043e\u0434\u043e\u0432 \u043e\u0434\u043d\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0439 \u043d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434 \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u044b \u2014 OSTEP. \u0412 \u044d\u0442\u043e\u043c \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0435 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0433\u043b\u0443\u0431\u043e\u043a\u043e \u0440\u0430\u0431\u043e\u0442\u0430 unix-\u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u2014 \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430\u043c\u0438, \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c\u0438 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0430\u043c\u0438, \u043f\u0430\u043c\u044f\u0442\u044c\u044e \u0438 \u043f\u0440\u043e\u0447\u0438\u0438\u043c\u0438 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u043c\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u041e\u0421. \u041e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0432\u0441\u0435\u0445 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u043e\u0432 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432\u043e\u0442 \u0442\u0443\u0442. [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":22968,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-30992","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u0425\u043e\u0447\u0443 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432\u0430\u0448\u0435\u043c\u0443 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044e \u0441\u0435\u0440\u0438\u044e \u0441\u0442\u0430\u0442\u0435\u0439-\u043f\u0435\u0440\u0435\u0432\u043e\u0434\u043e\u0432 \u043e\u0434\u043d\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0439 \u043d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434 \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u044b \u2014 OSTEP.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/operating-systems-three-easy-pieces-part-2-abstraktsiya-protsess-perevod\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"es_ES\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47Operating Systems: Three Easy Pieces. Part 2: \u0410\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u044f: \u041f\u0440\u043e\u0446\u0435\u0441\u0441 (\u043f\u0435\u0440\u0435\u0432\u043e\u0434) | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u0425\u043e\u0447\u0443 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432\u0430\u0448\u0435\u043c\u0443 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044e \u0441\u0435\u0440\u0438\u044e \u0441\u0442\u0430\u0442\u0435\u0439-\u043f\u0435\u0440\u0435\u0432\u043e\u0434\u043e\u0432 \u043e\u0434\u043d\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0439 \u043d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434 \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u044b \u2014 OSTEP.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/operating-systems-three-easy-pieces-part-2-abstraktsiya-protsess-perevod\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T18:38:47+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T18:38:47+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Sistemas Operativos: Tres piezas f\u00e1ciles. Parte 2: Abstracci\u00f3n: Proceso (traducci\u00f3n) | ProHoster","description":"Introducci\u00f3n a los sistemas operativos Hola, Habr! Quiero presentar a su atenci\u00f3n una serie de art\u00edculos traducidos de una literatura que considero interesante: OSTEP.","canonical_url":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/operating-systems-three-easy-pieces-part-2-abstraktsiya-protsess-perevod","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"es_ES","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47Operating Systems: Three Easy Pieces. Part 2: \u0410\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u044f: \u041f\u0440\u043e\u0446\u0435\u0441\u0441 (\u043f\u0435\u0440\u0435\u0432\u043e\u0434) | ProHoster","og:description":"\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u0425\u043e\u0447\u0443 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432\u0430\u0448\u0435\u043c\u0443 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044e \u0441\u0435\u0440\u0438\u044e \u0441\u0442\u0430\u0442\u0435\u0439-\u043f\u0435\u0440\u0435\u0432\u043e\u0434\u043e\u0432 \u043e\u0434\u043d\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0439 \u043d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434 \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u044b \u2014 OSTEP.","og:url":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/operating-systems-three-easy-pieces-part-2-abstraktsiya-protsess-perevod","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T18:38:47+00:00","article:modified_time":"2019-10-31T18:38:47+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"30992","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-21 03:59:23","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 03:26:04","updated":"2026-01-21 03:59:23","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts\/30992","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/comments?post=30992"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts\/30992\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media\/22968"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media?parent=30992"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/categories?post=30992"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/tags?post=30992"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}