Changes
Translation components API.
See the Weblate's Web API documentation for detailed description of the API.
GET /api/components/freebsd-doc/articles_linux-emulation/changes/?format=api&page=17
{ "count": 893, "next": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/changes/?format=api&page=18", "previous": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/changes/?format=api&page=16", "results": [ { "unit": "https://translate-dev.freebsd.org/api/units/26552/?format=api", "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api", "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api", "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api", "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api", "timestamp": "2020-12-17T19:30:04.332217Z", "action": 5, "target": "Introducción a la sincronización", "id": 93242, "action_name": "New translation", "url": "https://translate-dev.freebsd.org/api/changes/93242/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/26553/?format=api", "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api", "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api", "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api", "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api", "timestamp": "2020-12-17T19:31:09.729930Z", "action": 5, "target": "Los subprocesos necesitan algún tipo de sincronización y <trademark class=\"registered\">POSIX</trademark> proporciona algunos de ellos: mutex para exclusión mutua, bloqueos de lectura y escritura para exclusión mutua con una proporción sesgada de lecturas y escrituras y variables de condición para señalar un cambio de estado. Es interesante notar que<trademark class=\"registered\">POSIX</trademark> La API de subprocesos carece de soporte para semáforos. Esas implementaciones de rutinas de sincronización dependen en gran medida del tipo de soporte de subprocesos que tenemos. En el modelo puro 1: M (espacio de usuario), la implementación se puede realizar únicamente en el espacio de usuario y, por lo tanto, es muy rápida (las variables de condición probablemente terminarán implementándose mediante señales, es decir, no rápido) y simple. En el modelo 1: 1, la situación también es bastante clara: los subprocesos deben sincronizarse utilizando las instalaciones del kernel (lo cual es muy lento porque se debe realizar una llamada al sistema). El escenario mixto M: N simplemente combina el primer y segundo enfoque o se basa únicamente en el kernel. La sincronización de subprocesos es una parte vital de la programación habilitada para subprocesos y su rendimiento puede afectar mucho al programa resultante. Pruebas de rendimiento recientes en el sistema operativo FreeBSD mostraron que una implementación mejorada de sx_lock produjo un 40% de aceleración en <firstterm>ZFS</firstterm> (un usuario pesado de sx), esto es algo dentro del kernel pero muestra claramente cuán importante es el rendimiento de las primitivas de sincronización.", "id": 93243, "action_name": "New translation", "url": "https://translate-dev.freebsd.org/api/changes/93243/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/26555/?format=api", "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api", "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api", "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api", "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api", "timestamp": "2020-12-17T19:31:29.200303Z", "action": 5, "target": "Introducción a los futexes", "id": 93245, "action_name": "New translation", "url": "https://translate-dev.freebsd.org/api/changes/93245/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/26556/?format=api", "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api", "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api", "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api", "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api", "timestamp": "2020-12-17T19:31:53.994097Z", "action": 5, "target": "<trademark class=\"registered\">Linux</trademark> implementa subprocesos 1: 1, es decir, tiene que usar primitivas de sincronización en el kernel. Como se indicó anteriormente, los programas con subprocesos bien escritos tienen poca contención de bloqueo. Entonces, una secuencia típica podría realizarse como dos contadores de referencia mutex de aumento/disminución atómicos, que es muy rápido, como se presenta en el siguiente ejemplo:", "id": 93246, "action_name": "New translation", "url": "https://translate-dev.freebsd.org/api/changes/93246/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/26558/?format=api", "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api", "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api", "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api", "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api", "timestamp": "2020-12-17T19:32:03.033465Z", "action": 5, "target": "El subproceso 1: 1 nos obliga a realizar dos llamadas al sistema para esas llamadas mutex, lo cual es muy lento.", "id": 93247, "action_name": "New translation", "url": "https://translate-dev.freebsd.org/api/changes/93247/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/157266/?format=api", "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api", "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api", "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api", "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api", "timestamp": "2020-12-17T19:32:32.975829Z", "action": 5, "target": "La solución <trademark class=\"registered\">Linux</trademark> 2.6 implementos se llama futexes. Los futexes implementan la verificación de contención en el espacio de usuario y llaman a las primitivas del núcleo solo en caso de contención. Por tanto, el caso típico tiene lugar sin ninguna intervención del núcleo. Esto produce una implementación de primitivas de sincronización razonablemente rápida y flexible.", "id": 93248, "action_name": "New translation", "url": "https://translate-dev.freebsd.org/api/changes/93248/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/26561/?format=api", "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api", "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api", "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api", "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api", "timestamp": "2020-12-17T19:32:48.526173Z", "action": 5, "target": "La llamada al sistema futex se ve así:", "id": 93249, "action_name": "New translation", "url": "https://translate-dev.freebsd.org/api/changes/93249/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/26562/?format=api", "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api", "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api", "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api", "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api", "timestamp": "2020-12-17T19:32:51.628025Z", "action": 37, "target": "int futex(void *uaddr, int op, int val, struct timespec *timeout, void *uaddr2, int val3);", "id": 93250, "action_name": "Marked for edit", "url": "https://translate-dev.freebsd.org/api/changes/93250/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/26563/?format=api", "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api", "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api", "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api", "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api", "timestamp": "2020-12-17T19:33:19.454040Z", "action": 5, "target": "En este ejemplo <varname>uaddr</varname>es una dirección del mutex en el espacio de usuario, <varname>op</varname> es una operación que estamos a punto de realizar y los demás parámetros tienen un significado por operación.", "id": 93251, "action_name": "New translation", "url": "https://translate-dev.freebsd.org/api/changes/93251/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/26564/?format=api", "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api", "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api", "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api", "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api", "timestamp": "2020-12-17T19:33:28.259580Z", "action": 5, "target": "Los Futexes implementan las siguientes operaciones:", "id": 93252, "action_name": "New translation", "url": "https://translate-dev.freebsd.org/api/changes/93252/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/26565/?format=api", "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api", "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api", "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api", "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api", "timestamp": "2020-12-17T19:33:30.779156Z", "action": 37, "target": "<literal>FUTEX_WAIT</literal>", "id": 93253, "action_name": "Marked for edit", "url": "https://translate-dev.freebsd.org/api/changes/93253/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/26566/?format=api", "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api", "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api", "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api", "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api", "timestamp": "2020-12-17T19:33:33.455255Z", "action": 37, "target": "<literal>FUTEX_WAKE</literal>", "id": 93254, "action_name": "Marked for edit", "url": "https://translate-dev.freebsd.org/api/changes/93254/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/26567/?format=api", "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api", "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api", "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api", "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api", "timestamp": "2020-12-17T19:33:36.496755Z", "action": 37, "target": "<literal>FUTEX_FD</literal>", "id": 93255, "action_name": "Marked for edit", "url": "https://translate-dev.freebsd.org/api/changes/93255/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/26568/?format=api", "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api", "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api", "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api", "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api", "timestamp": "2020-12-17T19:33:39.232006Z", "action": 37, "target": "<literal>FUTEX_REQUEUE</literal>", "id": 93256, "action_name": "Marked for edit", "url": "https://translate-dev.freebsd.org/api/changes/93256/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/26569/?format=api", "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api", "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api", "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api", "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api", "timestamp": "2020-12-17T19:33:41.652893Z", "action": 37, "target": "<literal>FUTEX_CMP_REQUEUE</literal>", "id": 93257, "action_name": "Marked for edit", "url": "https://translate-dev.freebsd.org/api/changes/93257/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/26570/?format=api", "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api", "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api", "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api", "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api", "timestamp": "2020-12-17T19:33:44.555913Z", "action": 37, "target": "<literal>FUTEX_WAKE_OP</literal>", "id": 93258, "action_name": "Marked for edit", "url": "https://translate-dev.freebsd.org/api/changes/93258/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/26571/?format=api", "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api", "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api", "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api", "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api", "timestamp": "2020-12-17T19:33:47.576012Z", "action": 37, "target": "FUTEX_WAIT", "id": 93259, "action_name": "Marked for edit", "url": "https://translate-dev.freebsd.org/api/changes/93259/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/26572/?format=api", "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api", "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api", "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api", "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api", "timestamp": "2020-12-17T19:34:37.593572Z", "action": 5, "target": "Esta operación verifica que en la dirección <varname>uaddr</varname> el valor <varname>val</varname> está escrito. Si no, <literal>EWOULDBLOCK</literal> se devuelve, de lo contrario, el hilo se pone en cola en el futex y se suspende. Si el argumento <varname>timeout</varname> es distinto de cero, especifica el tiempo máximo para dormir; de lo contrario, el sueño es infinito.", "id": 93260, "action_name": "New translation", "url": "https://translate-dev.freebsd.org/api/changes/93260/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/26574/?format=api", "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api", "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api", "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api", "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api", "timestamp": "2020-12-17T19:35:11.786897Z", "action": 5, "target": "Esta operación toma un futex en <varname>uaddr</varname> y se despierta <varname>val</varname> Primeros futexes en cola en este futex.", "id": 93261, "action_name": "New translation", "url": "https://translate-dev.freebsd.org/api/changes/93261/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/26576/?format=api", "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api", "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api", "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api", "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api", "timestamp": "2020-12-17T19:35:19.530391Z", "action": 5, "target": "Esta operación asocia un descriptor de archivo con un futex dado.", "id": 93262, "action_name": "New translation", "url": "https://translate-dev.freebsd.org/api/changes/93262/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/26577/?format=api", "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api", "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api", "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api", "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api", "timestamp": "2020-12-17T19:35:23.144704Z", "action": 37, "target": "FUTEX_REQUEUE", "id": 93263, "action_name": "Marked for edit", "url": "https://translate-dev.freebsd.org/api/changes/93263/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/26578/?format=api", "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api", "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api", "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api", "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api", "timestamp": "2020-12-17T19:36:07.473683Z", "action": 5, "target": "Esta operación toma <varname>val</varname> hilos en cola en futex en <varname>uaddr</varname>, Los despierta y toma<varname>val2</varname> siguientes hilos y los coloca en futex en <varname>uaddr2</varname>.", "id": 93264, "action_name": "New translation", "url": "https://translate-dev.freebsd.org/api/changes/93264/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/26579/?format=api", "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api", "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api", "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api", "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api", "timestamp": "2020-12-17T19:36:10.695260Z", "action": 37, "target": "FUTEX_CMP_REQUEUE", "id": 93265, "action_name": "Marked for edit", "url": "https://translate-dev.freebsd.org/api/changes/93265/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/26580/?format=api", "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api", "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api", "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api", "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api", "timestamp": "2020-12-17T19:36:41.401015Z", "action": 5, "target": "Esta operación hace lo mismo que <literal>FUTEX_REQUEUE</literal>pero comprueba que <varname>val3</varname> igual a <varname>val</varname> primero.", "id": 93266, "action_name": "New translation", "url": "https://translate-dev.freebsd.org/api/changes/93266/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/26581/?format=api", "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api", "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api", "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api", "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api", "timestamp": "2020-12-17T19:36:44.231685Z", "action": 37, "target": "FUTEX_WAKE_OP", "id": 93267, "action_name": "Marked for edit", "url": "https://translate-dev.freebsd.org/api/changes/93267/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/26582/?format=api", "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api", "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api", "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api", "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api", "timestamp": "2020-12-17T19:37:55.161559Z", "action": 5, "target": "Esta operación realiza una operación atómica en <varname>val3</varname> (que contiene algún otro valor codificado) y<varname>uaddr</varname>. Entonces se despierta <varname>val</varname> hilos en futex en <varname>uaddr</varname> y si la operación atómica devolvió un número positivo, se despierta <varname>val2</varname> hilos en futex en<varname>uaddr2</varname>.", "id": 93268, "action_name": "New translation", "url": "https://translate-dev.freebsd.org/api/changes/93268/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/26583/?format=api", "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api", "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api", "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api", "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api", "timestamp": "2020-12-17T19:38:08.739317Z", "action": 5, "target": "Las operaciones implementadas en <literal>FUTEX_WAKE_OP</literal>:", "id": 93269, "action_name": "New translation", "url": "https://translate-dev.freebsd.org/api/changes/93269/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/26589/?format=api", "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api", "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api", "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api", "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api", "timestamp": "2020-12-17T19:38:54.161642Z", "action": 5, "target": "No hay <varname>val2</varname> parámetro en el prototipo futex. los <varname>val2</varname> es tomado de la <varname>struct timespec *timeout</varname> parámetro para operaciones <literal>FUTEX_REQUEUE</literal>, <literal>FUTEX_CMP_REQUEUE</literal> y <literal>FUTEX_WAKE_OP</literal>.", "id": 93270, "action_name": "New translation", "url": "https://translate-dev.freebsd.org/api/changes/93270/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/26590/?format=api", "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api", "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api", "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api", "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api", "timestamp": "2020-12-17T19:39:04.021285Z", "action": 5, "target": "Emulación Futex en FreeBSD", "id": 93271, "action_name": "New translation", "url": "https://translate-dev.freebsd.org/api/changes/93271/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/26591/?format=api", "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api", "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api", "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api", "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api", "timestamp": "2020-12-17T19:39:41.649911Z", "action": 5, "target": "La emulación futex en FreeBSD se toma de NetBSD y nosotros la ampliamos. Se coloca en <filename>linux_futex.c</filename> and <filename>linux_futex.h</filename> archivos. la <literal>futex</literal> estructura se parece a:", "id": 93272, "action_name": "New translation", "url": "https://translate-dev.freebsd.org/api/changes/93272/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/26591/?format=api", "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api", "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api", "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api", "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api", "timestamp": "2020-12-17T19:39:44.976106Z", "action": 2, "target": "La emulación futex en FreeBSD se toma de NetBSD y nosotros la ampliamos. Se coloca en <filename>linux_futex.c</filename> and <filename>linux_futex.h</filename> archivos. la <literal>futex</literal> estructura se parece a:", "id": 93273, "action_name": "Translation changed", "url": "https://translate-dev.freebsd.org/api/changes/93273/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/26593/?format=api", "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api", "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api", "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api", "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api", "timestamp": "2020-12-17T19:40:03.933785Z", "action": 5, "target": "Y la estructura <literal>waiting_proc</literal> es:", "id": 93274, "action_name": "New translation", "url": "https://translate-dev.freebsd.org/api/changes/93274/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/26593/?format=api", "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api", "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api", "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api", "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api", "timestamp": "2020-12-17T19:40:07.508986Z", "action": 2, "target": "Y la estructura <literal>waiting_proc</literal> es:", "id": 93275, "action_name": "Translation changed", "url": "https://translate-dev.freebsd.org/api/changes/93275/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/26596/?format=api", "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api", "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api", "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api", "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api", "timestamp": "2020-12-17T19:40:41.467112Z", "action": 5, "target": "Un futex se obtiene utilizando el <function>futex_get</function>función, que busca en una lista lineal de futexes y devuelve el encontrado o crea un nuevo futex. Al liberar un futex del uso, lo llamamos <function>futex_put</function> función, que disminuye un contador de referencia del futex y si el refcount llega a cero se libera.", "id": 93276, "action_name": "New translation", "url": "https://translate-dev.freebsd.org/api/changes/93276/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/26598/?format=api", "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api", "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api", "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api", "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api", "timestamp": "2020-12-17T19:42:08.869770Z", "action": 5, "target": "Cuando un futex pone en cola un hilo para dormir, crea un <literal>working_proc</literal> estructura y coloca esta estructura en la lista dentro de la estructura futex, entonces solo realiza una <citerefentry><refentrytitle>tsleep</refentrytitle><manvolnum>9</manvolnum></citerefentry> suspender el hilo. El tiempo de sueño se puede agotar. Después <citerefentry><refentrytitle>tsleep</refentrytitle><manvolnum>9</manvolnum></citerefentry> devuelve (el hilo se despertó o se agotó el tiempo de espera) el <literal>working_proc</literal> La estructura se elimina de la lista y se destruye. Todo esto se hace en el <function>futex_sleep</function>función. Si nos despertaran de <function>futex_wake</function> Nosotros tenemos <varname>wp_new_futex</varname> establecido para que podamos dormir en él. De esta manera, la puesta en cola real se realiza en esta función..", "id": 93277, "action_name": "New translation", "url": "https://translate-dev.freebsd.org/api/changes/93277/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/26600/?format=api", "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api", "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api", "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api", "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api", "timestamp": "2020-12-17T19:42:49.308582Z", "action": 5, "target": "Despertar un hilo durmiendo en un futex se realiza en el <function>futex_wake</function> función. Primero en esta función imitamos el extraño <trademark class=\"registered\">Linux</trademark> comportamiento, donde despierta N subprocesos para todas las operaciones, la única excepción es que las operaciones REQUEUE se realizan en N + 1 subprocesos. Pero esto generalmente no hace ninguna diferencia ya que estamos despertando todos los hilos. A continuación, en la función en el bucle, activamos n subprocesos, después de esto, verificamos si hay un nuevo futex para poner en cola. Si es así, ponemos en cola hasta n2 subprocesos en el nuevo futex. Esto coopera con <function>futex_sleep</function>.", "id": 93278, "action_name": "New translation", "url": "https://translate-dev.freebsd.org/api/changes/93278/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/26602/?format=api", "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api", "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api", "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api", "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api", "timestamp": "2020-12-17T19:45:25.953170Z", "action": 5, "target": "La <literal>FUTEX_WAKE_OP</literal> El funcionamiento es bastante complicado. Primero obtenemos dos futexes en direcciones<varname>uaddr</varname> and <varname>uaddr2</varname> luego realizamos la operación atómica usando <varname>val3</varname> and <varname>uaddr2</varname>. Then <varname>val</varname> los camareros en el primer futex se despiertan y si la condición de operación atómica se mantiene, nos despertamos <varname>val2</varname> (es decir. <varname>timeout</varname>) camarero en el segundo futex.", "id": 93279, "action_name": "New translation", "url": "https://translate-dev.freebsd.org/api/changes/93279/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/26603/?format=api", "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api", "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api", "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api", "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api", "timestamp": "2020-12-17T19:45:36.481650Z", "action": 5, "target": "operación atómica futex", "id": 93280, "action_name": "New translation", "url": "https://translate-dev.freebsd.org/api/changes/93280/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/26604/?format=api", "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api", "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api", "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api", "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api", "timestamp": "2020-12-17T19:45:59.765278Z", "action": 5, "target": "La operación atómica toma dos parámetros <varname>encoded_op</varname> y <varname>uaddr</varname>. La operación codificada codifica la operación en sí, comparando valor, argumento de operación y argumento de comparación. El pseudocódigo para la operación es como este:", "id": 93281, "action_name": "New translation", "url": "https://translate-dev.freebsd.org/api/changes/93281/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/26606/?format=api", "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api", "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api", "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api", "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api", "timestamp": "2020-12-17T19:46:45.951212Z", "action": 5, "target": "Y esto se hace de forma atómica. Primero una copia del número en <varname>uaddr</varname> se realiza y se hace la operación. El código maneja fallas de página y si no ocurre ninguna falla de página <varname>oldval</varname> se compara con <varname>cmparg</varname> argumento con comparador cmp.", "id": 93282, "action_name": "New translation", "url": "https://translate-dev.freebsd.org/api/changes/93282/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/26607/?format=api", "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api", "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api", "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api", "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api", "timestamp": "2020-12-17T19:46:56.192327Z", "action": 5, "target": "Bloqueo futex", "id": 93283, "action_name": "New translation", "url": "https://translate-dev.freebsd.org/api/changes/93283/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/26608/?format=api", "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api", "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api", "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api", "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api", "timestamp": "2020-12-17T19:47:30.176837Z", "action": 5, "target": "La implementación de Futex utiliza dos listas de bloqueo que protegen<function>sx_lock</function> y cerraduras globales (ya sea gigante u otra <function>sx_lock</function>). Cada operación se realiza bloqueada desde el principio hasta el final.", "id": 93284, "action_name": "New translation", "url": "https://translate-dev.freebsd.org/api/changes/93284/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/26609/?format=api", "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api", "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api", "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api", "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api", "timestamp": "2020-12-17T19:47:45.072700Z", "action": 5, "target": "Implementación de varias llamadas al sistema", "id": 93285, "action_name": "New translation", "url": "https://translate-dev.freebsd.org/api/changes/93285/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/26610/?format=api", "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api", "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api", "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api", "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api", "timestamp": "2020-12-17T19:47:52.938718Z", "action": 5, "target": "En esta sección voy a describir algunas llamadas al sistema más pequeñas que vale la pena mencionar porque su implementación no es obvia o esas llamadas al sistema son interesantes desde otro punto de vista.", "id": 93286, "action_name": "New translation", "url": "https://translate-dev.freebsd.org/api/changes/93286/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/26611/?format=api", "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api", "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api", "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api", "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api", "timestamp": "2020-12-17T19:48:08.850993Z", "action": 5, "target": "*en familia de llamadas al sistema", "id": 93287, "action_name": "New translation", "url": "https://translate-dev.freebsd.org/api/changes/93287/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/26612/?format=api", "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api", "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api", "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api", "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api", "timestamp": "2020-12-17T19:49:59.683193Z", "action": 5, "target": "Durante el desarrollo de <trademark class=\"registered\">Linux</trademark>2.6.16 kernel, se agregaron las llamadas al sistema * at. Esas llamadas al sistema (<function>openat</function>por ejemplo) funcionan exactamente como sus contrapartes at-less con la ligera excepción de <varname>dirfd</varname> parámetro. Este parámetro cambia donde está el archivo dado, en el que se va a realizar la llamada al sistema. Cuando el <varname>filename</varname> el parámetro es absoluto <varname>dirfd</varname> se ignora pero cuando la ruta al archivo es relativa, se trata de la obra. los <varname>dirfd</varname> El parámetro es un directorio relativo al que se comprueba la ruta relativa. los <varname>dirfd</varname> parámetro es un descriptor de archivo de algún directorio o <literal>AT_FDCWD</literal>. Entonces, por ejemplo, el <function>openat</function> syscall puede ser así:", "id": 93288, "action_name": "New translation", "url": "https://translate-dev.freebsd.org/api/changes/93288/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/157268/?format=api", "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api", "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api", "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api", "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api", "timestamp": "2020-12-17T19:51:21.773207Z", "action": 5, "target": "Esta infraestructura es necesaria para evitar carreras al abrir archivos fuera del directorio de trabajo. Imagine que un proceso consta de dos subprocesos, el subproceso A y el subproceso B. Problemas del subproceso A <literal>abrir(./tmp/foo/bah., flags, mode)</literal> y antes de regresar se reemplaza y se ejecuta el hilo B. El hilo B no se preocupa por las necesidades del hilo A y cambia el nombre o elimina<filename>/tmp/foo/</filename>. Tenemos una carrera. Para evitar esto podemos abrir <filename>/tmp/foo</filename> and use it as <varname>dirfd</varname>para <function>openat</function>syscall. Esto también permite al usuario implementar directorios de trabajo por subproceso.", "id": 93289, "action_name": "New translation", "url": "https://translate-dev.freebsd.org/api/changes/93289/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/26615/?format=api", "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api", "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api", "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api", "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api", "timestamp": "2020-12-17T19:52:03.105021Z", "action": 5, "target": "<trademark class=\"registered\">Linux</trademark> familia de *at syscalls contiene: <function>linux_openat</function>, <function>linux_mkdirat</function>, <function>linux_mknodat</function>, <function>linux_fchownat</function>, <function>linux_futimesat</function>, <function>linux_fstatat64</function>, <function>linux_unlinkat</function>, <function>linux_renameat</function>, <function>linux_linkat</function>, <function>linux_symlinkat</function>, <function>linux_readlinkat</function>, <function>linux_fchmodat</function> and <function>linux_faccessat</function>. Todos estos se implementan utilizando el modificado <citerefentry><refentrytitle>namei</refentrytitle><manvolnum>9</manvolnum></citerefentry> capa de envoltura rutinaria y simple.", "id": 93290, "action_name": "New translation", "url": "https://translate-dev.freebsd.org/api/changes/93290/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/26617/?format=api", "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api", "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api", "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api", "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api", "timestamp": "2020-12-17T19:55:51.757115Z", "action": 5, "target": "La implementación se realiza alterando el <citerefentry><refentrytitle>namei</refentrytitle><manvolnum>9</manvolnum></citerefentry> rutina (descrita arriba) para tomar un parámetro adicional <varname>dirfd</varname> en su <literal>nameidata</literal>estructura, que especifica el punto de inicio de la búsqueda de nombre de ruta en lugar de utilizar el directorio de trabajo actual cada vez. La resolución de <varname>dirfd</varname> desde el número de descriptor de archivo hasta un vnode se realiza en nativo *en syscalls. Cuando <varname>dirfd</varname> is <literal>AT_FDCWD</literal> el <varname>dvp</varname> entrada en <literal>nameidata</literal> la estructura es <literal>NULL</literal> pero cuando <varname>dirfd</varname> es un número diferente, obtenemos un archivo para este descriptor de archivo, verificamos si este archivo es válido y si hay un vnode adjunto, obtenemos un vnode. Luego verificamos que este vnode sea un directorio. En el actual <citerefentry><refentrytitle>namei</refentrytitle><manvolnum>9</manvolnum></citerefentry> rutina simplemente sustituimos el <varname>dvp</varname> vnode para <varname>dp</varname> variable en el <citerefentry><refentrytitle>namei</refentrytitle><manvolnum>9</manvolnum></citerefentry> función, que determina el punto de partida. los <citerefentry><refentrytitle>namei</refentrytitle><manvolnum>9</manvolnum></citerefentry> no se utiliza directamente, sino a través de un rastro de diferentes funciones en varios niveles. Por ejemplo el <function>openat</function> va así:", "id": 93291, "action_name": "New translation", "url": "https://translate-dev.freebsd.org/api/changes/93291/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/26617/?format=api", "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api", "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api", "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api", "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api", "timestamp": "2020-12-17T19:55:57.269854Z", "action": 2, "target": "La implementación se realiza alterando el <citerefentry><refentrytitle>namei</refentrytitle><manvolnum>9</manvolnum></citerefentry> rutina (descrita arriba) para tomar un parámetro adicional <varname>dirfd</varname> en su <literal>nameidata</literal>estructura, que especifica el punto de inicio de la búsqueda de nombre de ruta en lugar de utilizar el directorio de trabajo actual cada vez. La resolución de <varname>dirfd</varname> desde el número de descriptor de archivo hasta un vnode se realiza en nativo *en syscalls. Cuando <varname>dirfd</varname> is <literal>AT_FDCWD</literal> el <varname>dvp</varname> entrada en <literal>nameidata</literal> la estructura es <literal>NULL</literal> pero cuando <varname>dirfd</varname> es un número diferente, obtenemos un archivo para este descriptor de archivo, verificamos si este archivo es válido y si hay un vnode adjunto, obtenemos un vnode. Luego verificamos que este vnode sea un directorio. En el actual <citerefentry><refentrytitle>namei</refentrytitle><manvolnum>9</manvolnum></citerefentry> rutina simplemente sustituimos el <varname>dvp</varname> vnode para <varname>dp</varname> variable en el <citerefentry><refentrytitle>namei</refentrytitle><manvolnum>9</manvolnum></citerefentry> función, que determina el punto de partida. los <citerefentry><refentrytitle>namei</refentrytitle><manvolnum>9</manvolnum></citerefentry> no se utiliza directamente, sino a través de un rastro de diferentes funciones en varios niveles. Por ejemplo el <function>openat</function> va así:", "id": 93292, "action_name": "Translation changed", "url": "https://translate-dev.freebsd.org/api/changes/93292/?format=api" } ] }