Changes
Translation components API.
See the Weblate's Web API documentation for detailed description of the API.
GET /api/translations/freebsd-doc/articles_linux-emulation/pt_BR/changes/?format=api
https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/pt_BR/changes/?format=api&page=2", "previous": null, "results": [ { "unit": null, "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/pt_BR/?format=api", "user": null, "author": null, "timestamp": "2019-10-20T12:10:44.270576Z", "action": 0, "target": "", "id": 17674, "action_name": "资源更新", "url": "https://translate-dev.freebsd.org/api/changes/17674/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/26650/?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/pt_BR/?format=api", "user": "https://translate-dev.freebsd.org/api/users/dbaiobs2/?format=api", "author": "https://translate-dev.freebsd.org/api/users/dbaiobs2/?format=api", "timestamp": "2019-10-20T12:39:56.207457Z", "action": 45, "target": "", "id": 50123, "action_name": "新贡献者", "url": "https://translate-dev.freebsd.org/api/changes/50123/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/26650/?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/pt_BR/?format=api", "user": "https://translate-dev.freebsd.org/api/users/dbaiobs2/?format=api", "author": "https://translate-dev.freebsd.org/api/users/dbaiobs2/?format=api", "timestamp": "2019-10-20T12:39:56.211580Z", "action": 2, "target": "Rafael Mentz Aquino, rafael@lk6.com.br, 2018\nEdson Brandi, ebrandi@FreeBSD.org, 2018\nDanilo G. Baio, dbaio@FreeBSD.org, 2018", "id": 50124, "action_name": "修改了译文", "url": "https://translate-dev.freebsd.org/api/changes/50124/?format=api" }, { "unit": null, "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/pt_BR/?format=api", "user": "https://translate-dev.freebsd.org/api/users/dbaio/?format=api", "author": null, "timestamp": "2019-10-20T12:45:28.272482Z", "action": 17, "target": "", "id": 50234, "action_name": "提交了更改", "url": "https://translate-dev.freebsd.org/api/changes/50234/?format=api" }, { "unit": null, "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/pt_BR/?format=api", "user": "https://translate-dev.freebsd.org/api/users/dbaio/?format=api", "author": "https://translate-dev.freebsd.org/api/users/dbaio/?format=api", "timestamp": "2019-11-02T18:34:38.524318Z", "action": 0, "target": "", "id": 50440, "action_name": "资源更新", "url": "https://translate-dev.freebsd.org/api/changes/50440/?format=api" }, { "unit": null, "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/pt_BR/?format=api", "user": "https://translate-dev.freebsd.org/api/users/dbaio/?format=api", "author": "https://translate-dev.freebsd.org/api/users/dbaio/?format=api", "timestamp": "2019-11-02T20:37:09.791549Z", "action": 0, "target": "", "id": 50598, "action_name": "资源更新", "url": "https://translate-dev.freebsd.org/api/changes/50598/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/26650/?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/pt_BR/?format=api", "user": "https://translate-dev.freebsd.org/api/users/ebrandi/?format=api", "author": "https://translate-dev.freebsd.org/api/users/ebrandi/?format=api", "timestamp": "2019-11-03T00:21:42.998484Z", "action": 45, "target": "", "id": 51146, "action_name": "新贡献者", "url": "https://translate-dev.freebsd.org/api/changes/51146/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/26650/?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/pt_BR/?format=api", "user": "https://translate-dev.freebsd.org/api/users/ebrandi/?format=api", "author": "https://translate-dev.freebsd.org/api/users/ebrandi/?format=api", "timestamp": "2019-11-03T00:21:43.002038Z", "action": 2, "target": "translator-credits", "id": 51147, "action_name": "修改了译文", "url": "https://translate-dev.freebsd.org/api/changes/51147/?format=api" }, { "unit": null, "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/pt_BR/?format=api", "user": "https://translate-dev.freebsd.org/api/users/ebrandi/?format=api", "author": null, "timestamp": "2019-11-03T00:46:16.292146Z", "action": 17, "target": "", "id": 51259, "action_name": "提交了更改", "url": "https://translate-dev.freebsd.org/api/changes/51259/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/26650/?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/pt_BR/?format=api", "user": "https://translate-dev.freebsd.org/api/users/ebrandi/?format=api", "author": "https://translate-dev.freebsd.org/api/users/ebrandi/?format=api", "timestamp": "2019-11-03T00:52:07.118686Z", "action": 2, "target": "translator-credit", "id": 51298, "action_name": "修改了译文", "url": "https://translate-dev.freebsd.org/api/changes/51298/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/26650/?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/pt_BR/?format=api", "user": "https://translate-dev.freebsd.org/api/users/ebrandi/?format=api", "author": "https://translate-dev.freebsd.org/api/users/ebrandi/?format=api", "timestamp": "2019-11-03T00:52:32.026650Z", "action": 2, "target": "translator-credits", "id": 51344, "action_name": "修改了译文", "url": "https://translate-dev.freebsd.org/api/changes/51344/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/26650/?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/pt_BR/?format=api", "user": "https://translate-dev.freebsd.org/api/users/dbaio/?format=api", "author": "https://translate-dev.freebsd.org/api/users/dbaio/?format=api", "timestamp": "2019-11-03T13:04:39.780672Z", "action": 8, "target": "Rafael Mentz Aquino, rafael@lk6.com.br, 2018\nEdson Brandi, ebrandi@FreeBSD.org, 2018\nDanilo G. Baio, dbaio@FreeBSD.org, 2018", "id": 51424, "action_name": "还原了译文", "url": "https://translate-dev.freebsd.org/api/changes/51424/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/26650/?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/pt_BR/?format=api", "user": "https://translate-dev.freebsd.org/api/users/dbaio/?format=api", "author": "https://translate-dev.freebsd.org/api/users/dbaio/?format=api", "timestamp": "2019-11-03T13:24:16.718077Z", "action": 8, "target": "Edson Brandi, ebrandi@FreeBSD.org, 2018", "id": 51470, "action_name": "还原了译文", "url": "https://translate-dev.freebsd.org/api/changes/51470/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/26650/?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/pt_BR/?format=api", "user": "https://translate-dev.freebsd.org/api/users/dbaio/?format=api", "author": "https://translate-dev.freebsd.org/api/users/dbaio/?format=api", "timestamp": "2019-11-03T13:26:04.977687Z", "action": 2, "target": "Rafael Mentz Aquino, rafael@lk6.com.br, 2018\nEdson Brandi, ebrandi@FreeBSD.org, 2018\nDanilo G. Baio, dbaio@FreeBSD.org, 2018", "id": 51515, "action_name": "修改了译文", "url": "https://translate-dev.freebsd.org/api/changes/51515/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/26650/?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/pt_BR/?format=api", "user": "https://translate-dev.freebsd.org/api/users/dbaio/?format=api", "author": "https://translate-dev.freebsd.org/api/users/dbaio/?format=api", "timestamp": "2019-11-03T13:34:07.601239Z", "action": 2, "target": "Edson Brandi, ebrandi@FreeBSD.org, 2018", "id": 51560, "action_name": "修改了译文", "url": "https://translate-dev.freebsd.org/api/changes/51560/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/26650/?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/pt_BR/?format=api", "user": "https://translate-dev.freebsd.org/api/users/dbaio/?format=api", "author": "https://translate-dev.freebsd.org/api/users/dbaio/?format=api", "timestamp": "2019-11-03T13:52:09.831429Z", "action": 2, "target": "translator-credits", "id": 51602, "action_name": "修改了译文", "url": "https://translate-dev.freebsd.org/api/changes/51602/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/26650/?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/pt_BR/?format=api", "user": "https://translate-dev.freebsd.org/api/users/dbaio/?format=api", "author": "https://translate-dev.freebsd.org/api/users/dbaio/?format=api", "timestamp": "2019-11-04T00:07:51.133794Z", "action": 2, "target": "Edson Brandi, ebrandi@FreeBSD.org, 2018\nKanazuchi, contato@kanazuchi.com, 2018\nDanilo G. Baio, dbaio@FreeBSD.org, 2018", "id": 51668, "action_name": "修改了译文", "url": "https://translate-dev.freebsd.org/api/changes/51668/?format=api" }, { "unit": null, "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/pt_BR/?format=api", "user": "https://translate-dev.freebsd.org/api/users/dbaio/?format=api", "author": null, "timestamp": "2019-11-04T00:20:27.138969Z", "action": 17, "target": "", "id": 51706, "action_name": "提交了更改", "url": "https://translate-dev.freebsd.org/api/changes/51706/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/26702/?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/pt_BR/?format=api", "user": "https://translate-dev.freebsd.org/api/users/ebrandi/?format=api", "author": "https://translate-dev.freebsd.org/api/users/ebrandi/?format=api", "timestamp": "2019-11-09T00:55:33.238428Z", "action": 2, "target": "Suporte PECoff para executáveis PECoff do FreeBSD", "id": 52098, "action_name": "修改了译文", "url": "https://translate-dev.freebsd.org/api/changes/52098/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/26704/?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/pt_BR/?format=api", "user": "https://translate-dev.freebsd.org/api/users/ebrandi/?format=api", "author": "https://translate-dev.freebsd.org/api/users/ebrandi/?format=api", "timestamp": "2019-11-09T00:55:38.771395Z", "action": 2, "target": "Emulações ativamente desenvolvidas são a camada <trademark class=\"registered\">Linux</trademark> e várias camadas FreeBSD-on-FreeBSD. Outros não devem funcionar corretamente nem ser utilizáveis nos dias de hoje.", "id": 52099, "action_name": "修改了译文", "url": "https://translate-dev.freebsd.org/api/changes/52099/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/26709/?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/pt_BR/?format=api", "user": "https://translate-dev.freebsd.org/api/users/ebrandi/?format=api", "author": "https://translate-dev.freebsd.org/api/users/ebrandi/?format=api", "timestamp": "2019-11-09T00:55:42.681629Z", "action": 2, "target": "Syscalls no FreeBSD são emitidos executando a interrupção <literal> 0x80 </literal> com o registrador <varname>%eax</varname> definido para um número de syscall desejado com argumentos passados na pilha.", "id": 52100, "action_name": "修改了译文", "url": "https://translate-dev.freebsd.org/api/changes/52100/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/26710/?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/pt_BR/?format=api", "user": "https://translate-dev.freebsd.org/api/users/ebrandi/?format=api", "author": "https://translate-dev.freebsd.org/api/users/ebrandi/?format=api", "timestamp": "2019-11-09T00:55:47.817413Z", "action": 2, "target": "Quando um processo emite uma interrupção <literal>0x80</literal>, a syscall manipuladora de trap <literal>int0x80</literal> é proclamada (definida em <filename>sys/i386/i386/exception.s</filename>), que prepara argumentos (ou seja, copia-os para a pilha) para uma chamada para uma função C <citerefentry><refentrytitle>syscall</refentrytitle><manvolnum>2</manvolnum></citerefentry> (definida em <filename>sys/i386/i386/trap.c</filename>), que processa o trapframe passado. O processamento consiste em preparar a syscall (dependendo da entrada <literal>sysvec</literal>), determinando se a syscall é de 32 ou 64 bits (muda o tamanho dos parâmetros), então os parâmetros são copiados, incluindo a syscall. Em seguida, a função syscall real é executada com o processamento do código de retorno (casos especiais para erros <literal>ERESTART</literal> e <literal>EJUSTRETURN</literal>). Finalmente, um <literal>userret()</literal> é agendado, trocando o processo de volta ao ritmo do usuário. Os parâmetros para a syscall manipuladora atual são passados na forma de argumentos <literal>struct thread *td </literal>, <literal>struct syscall args*</literal> onde o segundo parâmetro é um ponteiro para o copiado na estrutura de parâmetros.", "id": 52101, "action_name": "修改了译文", "url": "https://translate-dev.freebsd.org/api/changes/52101/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/26726/?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/pt_BR/?format=api", "user": "https://translate-dev.freebsd.org/api/users/ebrandi/?format=api", "author": "https://translate-dev.freebsd.org/api/users/ebrandi/?format=api", "timestamp": "2019-11-09T00:55:52.229124Z", "action": 2, "target": "Syscalls em <trademark class=\"registered\">Linux</trademark> são executados (no espaço de usuário) usando macros <literal>syscallX</literal> onde X substitui um número que representa o número de parâmetros da syscall dada. Essa macro traduz um código que carrega o registro <varname>% eax </varname> com um número da syscall e executa a interrupção <literal>0x80</literal>. Depois disso, um retorn da syscall é chamado, o que traduz valores de retorno negativos para valores <literal>errno</literal> positivos e define <literal>res</literal> para <literal>-1</literal> em caso de erro. Sempre que a interrupção <literal>0x80</literal> é chamada, o processo entra no kernel no manipulador de trap das syscalls. Essa rotina salva todos os registros na pilha e chama a entrada syscall selecionada. Note que a convenção de chamadas <trademark class=\"registered\">Linux</trademark> espera que os parâmetros para o syscall sejam passados pelos registradores como mostrado aqui:", "id": 52102, "action_name": "修改了译文", "url": "https://translate-dev.freebsd.org/api/changes/52102/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/26764/?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/pt_BR/?format=api", "user": "https://translate-dev.freebsd.org/api/users/ebrandi/?format=api", "author": "https://translate-dev.freebsd.org/api/users/ebrandi/?format=api", "timestamp": "2019-11-09T00:55:56.415800Z", "action": 2, "target": "Nenhuma emulação é perfeita e as emulações tendem a não ter algumas partes, mas isso geralmente não causa nenhuma desvantagem séria. Imagine um emulador de console de jogos que emula tudo, menos a saída de música. Não há dúvida de que os jogos são jogáveis e pode-se usar o emulador. Pode não ser tão confortável quanto o console original, mas é um compromisso aceitável entre preço e conforto.", "id": 52103, "action_name": "修改了译文", "url": "https://translate-dev.freebsd.org/api/changes/52103/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/26784/?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/pt_BR/?format=api", "user": "https://translate-dev.freebsd.org/api/users/ebrandi/?format=api", "author": "https://translate-dev.freebsd.org/api/users/ebrandi/?format=api", "timestamp": "2019-11-09T00:56:00.575583Z", "action": 2, "target": "Operações atômicas são implementadas através de um conjunto de funções que executam aritmética simples em operandos de memória de maneira atômica com relação a eventos externos (interrupções, preempção, etc.). Operações atômicas podem garantir atomicidade apenas em pequenos tipos de dados (na ordem de magnitude do tipo de dados C da arquitetura <literal>.long.</literal>), portanto raramente devem ser usados diretamente no código de nível final, se não apenas para operações muito simples (como configuração de flags em um bitmap, por exemplo). De fato, é bastante simples e comum escrever uma semântica errada baseada apenas em operações atômicas (geralmente referidas como lock-less). O kernel do FreeBSD oferece uma maneira de realizar operações atômicas em conjunto com uma barreira de memória. As barreiras de memória garantirão que uma operação atômica ocorrerá seguindo alguma ordem especificas em relação a outros acessos à memória. Por exemplo, se precisarmos que uma operação atômica aconteça logo depois que todas as outras gravações pendentes (em termos de instruções reordenando atividades de buffers) forem concluídas, precisamos usar explicitamente uma barreira de memória em conjunto com essa operação atômica. Portanto, é simples entender por que as barreiras de memória desempenham um papel fundamental na construção de bloqueios de alto nível (assim como referências, exclusões mútuas, etc.). Para uma explicação detalhada sobre operações atômicas, consulte <citerefentry><refentrytitle>atomic</refentrytitle><manvolnum>9</manvolnum></citerefentry>. É muito, no entanto, notar que as operações atômicas (e as barreiras de memória também) devem, idealmente, ser usadas apenas para construir bloqueios front-ending (como mutexes).", "id": 52104, "action_name": "修改了译文", "url": "https://translate-dev.freebsd.org/api/changes/52104/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/26786/?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/pt_BR/?format=api", "user": "https://translate-dev.freebsd.org/api/users/ebrandi/?format=api", "author": "https://translate-dev.freebsd.org/api/users/ebrandi/?format=api", "timestamp": "2019-11-09T00:56:04.583897Z", "action": 2, "target": "Refcounts são interfaces para manipular contadores de referência. Eles são implementados por meio de operações atômicas e destinam-se a ser usados apenas para casos em que o contador de referência é a única coisa a ser protegida, portanto, até mesmo algo como um spin-mutex é obsoleto. Usar a interface de recontagem para estruturas, onde um mutex já é usado, geralmente está errado, pois provavelmente devemos fechar o contador de referência em alguns caminhos já protegidos. Uma manpage discutindo refcount não existe atualmente, apenas verifique <filename>sys/refcount.h</filename> para uma visão geral da API existente.", "id": 52105, "action_name": "修改了译文", "url": "https://translate-dev.freebsd.org/api/changes/52105/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/26794/?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/pt_BR/?format=api", "user": "https://translate-dev.freebsd.org/api/users/ebrandi/?format=api", "author": "https://translate-dev.freebsd.org/api/users/ebrandi/?format=api", "timestamp": "2019-11-09T00:56:08.796048Z", "action": 2, "target": "Spin locks permitem que os acumuladores rotacionarem até que eles não consigam adquirir um lock. Uma questão importante é quando um segmento contesta em um spin lock se não for desmarcado. Uma vez que o kernel do FreeBSD é preventivo, isto expõe o spin lock ao risco de deadlocks que podem ser resolvidos apenas desabilitando as interrupções enquanto elas são adquiridas. Por essa e outras razões (como falta de suporte à propagação de prioridade, falta de esquemas de balanceamento de carga entre CPUs, etc.), os spin locks têm a finalidade de proteger endereçamentos muito pequenos de código ou, idealmente, não serem usados se não solicitados explicitamente ( explicado posteriormente).", "id": 52106, "action_name": "修改了译文", "url": "https://translate-dev.freebsd.org/api/changes/52106/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/26816/?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/pt_BR/?format=api", "user": "https://translate-dev.freebsd.org/api/users/ebrandi/?format=api", "author": "https://translate-dev.freebsd.org/api/users/ebrandi/?format=api", "timestamp": "2019-11-09T00:56:13.501813Z", "action": 2, "target": "Geralmente, eles devem ser usados apenas em um contexto específico e, mesmo que possam substituir bloqueios, eles devem ser evitados porque eles não permitem o diagnóstico de problemas simples com ferramentas de depuração de bloqueio (como <citerefentry><refentrytitle>witness</refentrytitle><manvolnum>4</manvolnum></citerefentry>).", "id": 52107, "action_name": "修改了译文", "url": "https://translate-dev.freebsd.org/api/changes/52107/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/26896/?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/pt_BR/?format=api", "user": "https://translate-dev.freebsd.org/api/users/ebrandi/?format=api", "author": "https://translate-dev.freebsd.org/api/users/ebrandi/?format=api", "timestamp": "2019-11-09T00:56:17.941088Z", "action": 2, "target": "A camada de emulação do <trademark class=\"registered\">Linux</trademark> no FreeBSD suporta a configuração de tempo de execução da versão emulada. Isso é feito via <citerefentry><refentrytitle>sysctl</refentrytitle><manvolnum>8</manvolnum></citerefentry>, a saber <literal>compat.linux.osrelease</literal>. A configuração dessa <citerefentry><refentrytitle>sysctl</refentrytitle><manvolnum>8</manvolnum></citerefentry> afeta o comportamento de tempo de execução da camada de emulação. Quando definido como 2.6.x, ele configura o valor de <literal>linux_use_linux26</literal> enquanto a configuração para algo mais o mantém não definido. Essa variável (mais variáveis por prisão do mesmo tipo) determina se a infraestrutura 2.6 (principalmente o PID) é usada no código ou não. A configuração da versão é feita em todo o sistema e isso afeta todos os processos <trademark class=\"registered\">Linux</trademark>. A <citerefentry><refentrytitle>sysctl</refentrytitle><manvolnum>8</manvolnum></citerefentry> não deve ser alterada ao executar qualquer binário do <trademark class=\"registered\">Linux</trademark>, pois pode causar danos .", "id": 52108, "action_name": "修改了译文", "url": "https://translate-dev.freebsd.org/api/changes/52108/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/26937/?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/pt_BR/?format=api", "user": "https://translate-dev.freebsd.org/api/users/ebrandi/?format=api", "author": "https://translate-dev.freebsd.org/api/users/ebrandi/?format=api", "timestamp": "2019-11-09T00:56:21.856402Z", "action": 2, "target": "Threads precisam de algum tipo de sincronização e <trademark class=\"registered\">POSIX</trademark> fornece alguns deles: mutexes para exclusão mútua, bloqueios de leitura/gravação para exclusão mútua com relação de polarização de leituras e gravações e variáveis de condição para sinalizar um mudança de status. É interessante observar que a API de thread <trademark class=\"registered\">POSIX</trademark> não tem suporte para semáforos. Essas implementações de rotinas de sincronização são altamente dependentes do tipo de suporte a threading que temos. No modelo puro 1:M (espaço de usuário), a implementação pode ser feita apenas no espaço do usuário e, portanto, ser muito rápida (as variáveis de condição provavelmente serão implementadas usando sinais, ou seja, não rápido) e simples. No modelo 1:1, a situação também é bastante clara - as threading devem ser sincronizadas usando as facilidades do kernel (o que é muito lento porque uma syscall deve ser executada). O cenário M:N misto combina apenas a primeira e a segunda abordagem ou depende apenas do kernel. A sincronização de threads é uma parte vital da programação ativada por threads e seu desempenho pode afetar muito o programa resultante. Benchmarks recentes no sistema operacional FreeBSD mostraram que uma implementação sx_lock melhorada gerou 40% de aceleração no <firstterm>ZFS</firstterm> (um usuário sx pesado), isso é algo in-kernel, mas mostra claramente quão importante é o desempenho das primitivas de sincronização. .", "id": 52109, "action_name": "修改了译文", "url": "https://translate-dev.freebsd.org/api/changes/52109/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/27007/?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/pt_BR/?format=api", "user": "https://translate-dev.freebsd.org/api/users/ebrandi/?format=api", "author": "https://translate-dev.freebsd.org/api/users/ebrandi/?format=api", "timestamp": "2019-11-09T00:56:26.449357Z", "action": 2, "target": "Cada syscall deve ser debugável. Para isso, introduzimos uma pequena infra-estrutura. Nós temos o recurso ldebug, que informa se uma dada syscall deve ser depurada (configurável através de um sysctl). Para impressão, temos as macros LMSG e ARGS. Essas são usadas para alterar uma string imprimível para mensagens uniformes de depuração.", "id": 52110, "action_name": "修改了译文", "url": "https://translate-dev.freebsd.org/api/changes/52110/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/26703/?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/pt_BR/?format=api", "user": "https://translate-dev.freebsd.org/api/users/ebrandi/?format=api", "author": "https://translate-dev.freebsd.org/api/users/ebrandi/?format=api", "timestamp": "2019-11-09T00:56:47.915760Z", "action": 2, "target": "Emulação SVR4 do <trademark class=\"registered\">UNIX</trademark> System V revisão 4", "id": 52112, "action_name": "修改了译文", "url": "https://translate-dev.freebsd.org/api/changes/52112/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/26887/?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/pt_BR/?format=api", "user": "https://translate-dev.freebsd.org/api/users/ebrandi/?format=api", "author": "https://translate-dev.freebsd.org/api/users/ebrandi/?format=api", "timestamp": "2019-11-09T00:56:53.592811Z", "action": 2, "target": "Parte da amada de emulação -MI do <trademark class=\"registered\">Linux </trademark>", "id": 52113, "action_name": "修改了译文", "url": "https://translate-dev.freebsd.org/api/changes/52113/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/26958/?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/pt_BR/?format=api", "user": "https://translate-dev.freebsd.org/api/users/ebrandi/?format=api", "author": "https://translate-dev.freebsd.org/api/users/ebrandi/?format=api", "timestamp": "2019-11-09T00:57:04.603940Z", "action": 2, "target": "Esta operação tem um futex em <varname>uaddr</varname> e acorda os primeiros futexes <varname>val</varname> enfileirados neste futex.", "id": 52114, "action_name": "修改了译文", "url": "https://translate-dev.freebsd.org/api/changes/52114/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/26669/?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/pt_BR/?format=api", "user": "https://translate-dev.freebsd.org/api/users/ebrandi/?format=api", "author": "https://translate-dev.freebsd.org/api/users/ebrandi/?format=api", "timestamp": "2019-11-09T00:57:21.516841Z", "action": 2, "target": "Um olhar para dentro…", "id": 52115, "action_name": "修改了译文", "url": "https://translate-dev.freebsd.org/api/changes/52115/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/26671/?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/pt_BR/?format=api", "user": "https://translate-dev.freebsd.org/api/users/ebrandi/?format=api", "author": "https://translate-dev.freebsd.org/api/users/ebrandi/?format=api", "timestamp": "2019-11-09T00:57:38.314490Z", "action": 2, "target": "O que é o <trademark class=\"registered\"> UNIX </trademark>", "id": 52116, "action_name": "修改了译文", "url": "https://translate-dev.freebsd.org/api/changes/52116/?format=api" }, { "unit": null, "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/pt_BR/?format=api", "user": "https://translate-dev.freebsd.org/api/users/dbaio/?format=api", "author": null, "timestamp": "2019-11-09T09:08:40.484159Z", "action": 17, "target": "", "id": 52127, "action_name": "提交了更改", "url": "https://translate-dev.freebsd.org/api/changes/52127/?format=api" }, { "unit": null, "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/pt_BR/?format=api", "user": "https://translate-dev.freebsd.org/api/users/dbaio/?format=api", "author": "https://translate-dev.freebsd.org/api/users/dbaio/?format=api", "timestamp": "2019-12-09T23:50:29.423123Z", "action": 0, "target": "", "id": 52728, "action_name": "资源更新", "url": "https://translate-dev.freebsd.org/api/changes/52728/?format=api" }, { "unit": null, "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/pt_BR/?format=api", "user": "https://translate-dev.freebsd.org/api/users/dbaio/?format=api", "author": "https://translate-dev.freebsd.org/api/users/dbaio/?format=api", "timestamp": "2019-12-09T23:50:29.499954Z", "action": 44, "target": "", "id": 52730, "action_name": "要翻译的新字符串", "url": "https://translate-dev.freebsd.org/api/changes/52730/?format=api" }, { "unit": null, "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/pt_BR/?format=api", "user": "https://translate-dev.freebsd.org/api/users/dbaio/?format=api", "author": null, "timestamp": "2019-12-10T00:07:22.892450Z", "action": 17, "target": "", "id": 52830, "action_name": "提交了更改", "url": "https://translate-dev.freebsd.org/api/changes/52830/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/26887/?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/pt_BR/?format=api", "user": "https://translate-dev.freebsd.org/api/users/dbaio/?format=api", "author": "https://translate-dev.freebsd.org/api/users/dbaio/?format=api", "timestamp": "2019-12-10T00:28:48.656194Z", "action": 2, "target": "Parte da camada de emulação -MI do <trademark class=\"registered\">Linux</trademark>", "id": 52834, "action_name": "修改了译文", "url": "https://translate-dev.freebsd.org/api/changes/52834/?format=api" }, { "unit": null, "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/pt_BR/?format=api", "user": "https://translate-dev.freebsd.org/api/users/dbaio/?format=api", "author": null, "timestamp": "2019-12-10T00:29:10.974893Z", "action": 17, "target": "", "id": 52835, "action_name": "提交了更改", "url": "https://translate-dev.freebsd.org/api/changes/52835/?format=api" }, { "unit": null, "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/pt_BR/?format=api", "user": "https://translate-dev.freebsd.org/api/users/dbaio/?format=api", "author": "https://translate-dev.freebsd.org/api/users/dbaio/?format=api", "timestamp": "2020-04-18T18:14:56.001893Z", "action": 0, "target": "", "id": 64967, "action_name": "资源更新", "url": "https://translate-dev.freebsd.org/api/changes/64967/?format=api" }, { "unit": null, "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/pt_BR/?format=api", "user": "https://translate-dev.freebsd.org/api/users/dbaio/?format=api", "author": "https://translate-dev.freebsd.org/api/users/dbaio/?format=api", "timestamp": "2020-04-18T18:14:56.052822Z", "action": 44, "target": "", "id": 64969, "action_name": "要翻译的新字符串", "url": "https://translate-dev.freebsd.org/api/changes/64969/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/157279/?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/pt_BR/?format=api", "user": "https://translate-dev.freebsd.org/api/users/dbaio/?format=api", "author": "https://translate-dev.freebsd.org/api/users/dbaio/?format=api", "timestamp": "2020-04-18T19:19:02.476435Z", "action": 5, "target": "A API comum do <trademark class=\"registered\">UNIX</trademark> define uma syscall como uma forma de emitir comandos de um processo do espaço do usuário para o kernel. A implementação mais comum é usando uma instrução de interrupção ou especializada (pense em instruções <literal>SYSENTER</literal>/<literal>SYSCALL</literal> para ia32). Syscalls são definidos por um número. Por exemplo, no FreeBSD, a syscall número 85 é a syscall <citerefentry><refentrytitle>swapon</refentrytitle><manvolnum>2</manvolnum></citerefentry> e a syscall número 132 é a syscall <citerefentry><refentrytitle>mkfifo</refentrytitle><manvolnum>2</manvolnum></citerefentry>. Algumas syscalls precisam de parâmetros, que são passados do espaço do usuário para o espaço do kernel de várias maneiras (dependente da implementação). Syscalls são síncronas.", "id": 65478, "action_name": "新译文", "url": "https://translate-dev.freebsd.org/api/changes/65478/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/157280/?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/pt_BR/?format=api", "user": "https://translate-dev.freebsd.org/api/users/dbaio/?format=api", "author": "https://translate-dev.freebsd.org/api/users/dbaio/?format=api", "timestamp": "2020-04-18T19:19:08.531031Z", "action": 5, "target": "O FreeBSD é um sistema operacional baseado no <trademark class=\"registered\">UNIX</trademark> com todos os recursos do <trademark class=\"registered\">UNIX</trademark>. Multitarefa preemptiva, necessidades de multiusuário, rede TCP/IP, proteção de memória, suporte a multiprocessamento simétrico, memória virtual com VM mesclada e cache de buffer, todos eles estão lá. Um dos recursos interessantes e extremamente úteis é a capacidade de emular outros sistemas operacionais <trademark class=\"registered\">UNIX</trademark>-like. A partir de dezembro de 2006 e do desenvolvimento do 7-CURRENT, as seguintes funcionalidades de emulação são suportadas:", "id": 65479, "action_name": "新译文", "url": "https://translate-dev.freebsd.org/api/changes/65479/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/157281/?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/pt_BR/?format=api", "user": "https://translate-dev.freebsd.org/api/users/dbaio/?format=api", "author": "https://translate-dev.freebsd.org/api/users/dbaio/?format=api", "timestamp": "2020-04-18T19:19:14.539425Z", "action": 5, "target": "O <trademark class=\"registered\">Linux</trademark> segue o esquema tradicional do <trademark class=\"registered\">UNIX</trademark> de dividir a execução de um processo em duas metades: o kernel e o espaço do usuário. O kernel pode ser inserido de duas maneiras: via trap ou via syscall. O retorno é tratado apenas de uma maneira. A descrição mais detalhada aplica-se ao <trademark class=\"registered\">Linux</trademark> 2.6 na arquitetura <trademark>i386</trademark>. Esta informação foi retirada de [2].", "id": 65480, "action_name": "新译文", "url": "https://translate-dev.freebsd.org/api/changes/65480/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/157282/?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/pt_BR/?format=api", "user": "https://translate-dev.freebsd.org/api/users/dbaio/?format=api", "author": "https://translate-dev.freebsd.org/api/users/dbaio/?format=api", "timestamp": "2020-04-18T19:19:18.638987Z", "action": 5, "target": "Na versão 2.6, o sistema operacional <trademark class=\"registered\">Linux</trademark> redefiniu algumas das primitivas tradicionais do <trademark class=\"registered\">UNIX</trademark>, especialmente PID, TID e thread. O PID é definido para não ser exclusivo para cada processo, portanto, para alguns processos (threading) <citerefentry><refentrytitle>getppid</refentrytitle><manvolnum>2</manvolnum></citerefentry> retorna o mesmo valor. A identificação exclusiva do processo é fornecida pelo TID. Isso ocorre porque o <firstterm>NPTL</firstterm> (Nova Biblioteca de threading <trademark class=\"registered\">POSIX</trademark>) define threading para serem processos normais (assim chamado threading 1:1). Gerar um novo processo no <trademark class=\"registered\">Linux</trademark> 2.6 acontece usando a syscall <literal>clone</literal> (as variantes do fork são reimplementadas usando-o). Esta syscall clone define um conjunto de sinalizadores que afetam o comportamento do processo de clonagem em relação à implementação do threading. A semântica é um pouco confusa, pois não existe uma única bandeira dizendo a syscall para criar uma thread.", "id": 65481, "action_name": "新译文", "url": "https://translate-dev.freebsd.org/api/changes/65481/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/157283/?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/pt_BR/?format=api", "user": "https://translate-dev.freebsd.org/api/users/dbaio/?format=api", "author": "https://translate-dev.freebsd.org/api/users/dbaio/?format=api", "timestamp": "2020-04-18T19:19:25.207334Z", "action": 5, "target": "A solução que o <trademark class=\"registered\">Linux</trademark> 2.6 implementa é chamada de futexes. Futexes implementam a verificação de contenção no espaço do usuário e chama primitivas do kernel apenas em um caso de contenção. Assim, o caso típico ocorre sem qualquer intervenção do kernel. Isso produz uma implementação de primitivas de sincronização razoavelmente rápida e flexível.", "id": 65482, "action_name": "新译文", "url": "https://translate-dev.freebsd.org/api/changes/65482/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/157284/?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/pt_BR/?format=api", "user": "https://translate-dev.freebsd.org/api/users/dbaio/?format=api", "author": "https://translate-dev.freebsd.org/api/users/dbaio/?format=api", "timestamp": "2020-04-18T19:19:31.569595Z", "action": 5, "target": "Esta infra-estrutura é necessária para evitar corridas ao abrir arquivos fora do diretório de trabalho. Imagine que um processo consiste em duas threads, thread A e thread B. Thread A emite <literal>open (./tmp/foo/bah., Flags, mode)</literal> e antes de retornar ele se antecipa e a thread B é executada. A thread B não se preocupa com as necessidades da thread A e renomeia ou remove o <filename>/tmp/foo/</filename>. Nós temos uma corrida. Para evitar isso, podemos abrir o <filename>/tmp/foo</filename> e usá-lo como <varname>dirfd</varname> para a syscall <function>openat</function>. Isso também permite que o usuário implemente diretórios de trabalho por thread.", "id": 65483, "action_name": "新译文", "url": "https://translate-dev.freebsd.org/api/changes/65483/?format=api" } ] }{ "count": 66, "next": "