The translation is temporarily closed for contributions due to maintenance, please come back later.
Context English Portuguese (Brazil) State
Note that the <filename>boot0.S</filename> source file is assembled <quote>as is</quote>: instructions are translated one by one to binary, with no additional information (no <acronym>ELF</acronym> file format, for example). This kind of low-level control is achieved at link time through special control flags passed to the linker. For example, the text section of the program is set to be located at address <literal>0x600</literal>. In practice this means that <filename>boot0</filename> must be loaded to memory address <literal>0x600</literal> in order to function properly. Note que o <filename>boot0.S</filename> arquivo de origem é montado <quote>como é</quote> : instruções são traduzidas uma a uma para binário, sem informações adicionais (sem formato de arquivo <acronym>ELF</acronym>, por exemplo). Esse tipo de controle de baixo nível é obtido no momento do link por meio de sinalizadores de controle especiais passados ​​para o vinculador. Por exemplo, a seção de texto do programa está configurada para estar localizada no enderço <literal>0x600</literal>. Na prática, isso significa que <filename>boot0</filename> deve ser carregado no endereço de memória <literal>0x600</literal> para funcionar corretamente.
Finally, a jump is performed to <literal>start_input</literal>, where the <acronym>BIOS</acronym> services are used to start a timer and for reading user input from the keyboard; if the timer expires, the default option will be selected: Finalmente, um salto é realizado para <literal>start_input</literal> , onde os serviços da <acronym>BIOS</acronym> são usados ​​para iniciar um timer e para ler a entrada do usuário a partir do teclado; se o temporizador expirar, a opção padrão será selecionada:
In the code above, register <literal>%dl</literal> maintains information about the boot device. This is passed on by the <acronym>BIOS</acronym> and preserved by the <acronym>MBR</acronym>. Numbers <literal>0x80</literal> and greater tells us that we are dealing with a hard drive, so a call is made to <literal>nread</literal>, where the <acronym>MBR</acronym> is read. Arguments to <literal>nread</literal> are passed through <literal>%si</literal> and <literal>%dh</literal>. The memory address at label <literal>part4</literal> is copied to <literal>%si</literal>. This memory address holds a <quote>fake partition</quote> to be used by <literal>nread</literal>. The following is the data in the fake partition: No código acima, o registro <literal>%dl</literal> mantém informações sobre o dispositivo de inicialização. Isso é transmitido pelo <acronym>BIOS</acronym> e preservado pelo <acronym>MBR</acronym>. Os números <literal>0x80</literal> e maiores nos dizem que estamos lidando com um disco rígido, então uma chamada é feita para <literal>nread</literal>, onde o <acronym>MBR</acronym> é lido. Argumentos para <literal>nread</literal> são passados ​​através de <literal>%si</literal> e <literal>%dh</literal>. O endereço de memória no rótulo <literal>part4</literal> é copiado para <literal>%si</literal>. Este endereço de memória contém uma <quote>partição falsa</quote> a ser usada por <literal>nread</literal>. A seguir estão os dados na partição falsa:
This is necessary for legacy reasons. Interested readers should see <link xlink:href="http://en.wikipedia.org/wiki/A20_line"/>. Isso é necessário por razões de legado. Os leitores interessados ​​devem ver <link xlink:href="http://en.wikipedia.org/wiki/A20_line"/>
Next, the real-mode <acronym>IVT</acronym> (Interrupt Vector Table is updated. The <acronym>IVT</acronym> is an array of segment/offset pairs for exception and interrupt handlers. The <acronym>BIOS</acronym> normally maps hardware interrupts to interrupt vectors <literal>0x8</literal> to <literal>0xf</literal> and <literal>0x70</literal> to <literal>0x77</literal> but, as will be seen, the 8259A Programmable Interrupt Controller, the chip controlling the actual mapping of hardware interrupts to interrupt vectors, is programmed to remap these interrupt vectors from <literal>0x8-0xf</literal> to <literal>0x20-0x27</literal> and from <literal>0x70-0x77</literal> to <literal>0x28-0x2f</literal>. Thus, interrupt handlers are provided for interrupt vectors <literal>0x20-0x2f</literal>. The reason the <acronym>BIOS</acronym>-provided handlers are not used directly is because they work in 16-bit real mode, but not 32-bit protected mode. Processor mode will be switched to 32-bit protected mode shortly. However, the <acronym>BTX</acronym> server sets up a mechanism to effectively use the handlers provided by the <acronym>BIOS</acronym>: Em seguida, a <acronym>IVT</acronym> em modo real (Tabela de Vetores de Interrupções) é atualizado. O <acronym>IVT</acronym> é uma matriz de pares de segmento/deslocamento para manipuladores de exceção e interrupções. A <acronym>BIOS</acronym> normalmente mapeia interrupções de hardware para vetores de interrupção <literal>0x8</literal> para <literal>0xf</literal> e <literal>0x70</literal> para <literal>0x77</literal> mas, como será visto, o Controlador de Interrupção Programável 8259A, o chip que controla o mapeamento real de interrupções de hardware para vetores de interrupção, é programado para remapear esses vetores de interrupção de <literal>0x8-0xf</literal> para <literal>0x20-0x27</literal> e de <literal>0x70-0x77</literal> para <literal>0x28-0x2f</literal> . Assim, manipuladores de interrupção são fornecidos para vetores de interrupção <literal>0x20-0x2f</literal>. A razão pela qual os manipuladores fornecidos pela <acronym>BIOS</acronym> não são usados ​​diretamente é porque eles funcionam no modo real de 16 bits, mas não no modo protegido de 32 bits. O modo do processador será alternado para o modo protegido de 32 bits em breve. No entanto, o servidor <acronym>BTX</acronym> define um mecanismo para usar efetivamente os manipuladores fornecidos pela <acronym>BIOS</acronym>:
The next block creates the <acronym>IDT</acronym> (Interrupt Descriptor Table). The <acronym>IDT</acronym> is analogous, in protected mode, to the <acronym>IVT</acronym> in real mode. That is, the <acronym>IDT</acronym> describes the various exception and interrupt handlers used when the processor is executing in protected mode. In essence, it also consists of an array of segment/offset pairs, although the structure is somewhat more complex, because segments in protected mode are different than in real mode, and various protection mechanisms apply: O próximo bloco cria o <acronym>IDT</acronym> (Interrupt Descriptor Table). O <acronym>IDT</acronym> é análogo, no modo protegido, ao <acronym>IVT</acronym> em modo real. Ou seja, o <acronym>IDT</acronym> descreve os vários manipuladores de exceção e interrupções usados ​​quando o processador está executando em modo protegido. Em essência, ele também consiste em uma matriz de pares segmento/deslocadores, embora a estrutura seja um pouco mais complexa, porque os segmentos no modo protegido são diferentes do modo real, e vários mecanismos de proteção se aplicam:
The next step is to initialize the <acronym>TSS</acronym> (Task-State Segment). The <acronym>TSS</acronym> is a hardware feature that helps the operating system or executive software implement multitasking functionality through process abstraction. The IA-32 architecture demands the creation and use of <emphasis>at least</emphasis> one <acronym>TSS</acronym> if multitasking facilities are used or different privilege levels are defined. Since the <filename>boot2</filename> client is executed in privilege level 3, but the <acronym>BTX</acronym> server does in privilege level 0, a <acronym>TSS</acronym> must be defined: O próximo passo é inicializar o <acronym>TSS</acronym> (Task-State Segment). O <acronym>TSS</acronym> é um recurso de hardware que ajuda o sistema operacional ou o software executivo a implementar a funcionalidade multitarefa por meio da abstração do processo. A arquitetura IA-32 exige a criação e o uso de <emphasis>ao menos</emphasis> um <acronym>TSS</acronym> se forem usados ​​recursos multitarefa ou se forem definidos níveis de privilégios diferentes. Porque o cliente <filename>boot2</filename> é executado no nível de privilégio 3, mas o servidor <acronym>BTX</acronym> executado no nível de privilégio 0, um <acronym>TSS</acronym> deve ser definido:
<literal>boot2</literal> enters into an infinite loop waiting for user input, then calls <function>load()</function>. If the user does not press anything, the loop breaks by a timeout, so <function>load()</function> will load the default file (<filename>/boot/loader</filename>). Functions <function>ino_t lookup(char *filename)</function> and <function>int xfsread(ino_t inode, void *buf, size_t nbyte)</function> are used to read the content of a file into memory. <filename>/boot/loader</filename> is an <acronym>ELF</acronym> binary, but where the <acronym>ELF</acronym> header is prepended with <filename>a.out</filename>'s <literal>struct exec</literal> structure. <function>load()</function> scans the loader's ELF header, loading the content of <filename>/boot/loader</filename> into memory, and passing the execution to the loader's entry: <literal> boot2 </literal> entra em um loop infinito esperando por entrada do usu�rio, ent�o chama <function> carga() </function> . Se o usu�rio n�o pressionar nada, o loop ser� interrompido por um tempo limite, <function> carga() </function> ir� carregar o arquivo padr�o ( <filename> / boot / loader </filename> ). Fun��es <function> pesquisa ino_t (char * filename) </function> e <function> int xfsread (inodo_t inode, void * buf, tamanho_t nbyte) </function> s�o usados ​​para ler o conte�do de um arquivo na mem�ria. <filename> / boot / loader </filename> � um bin�rio <acronym>ELF</acronym> , mas onde o cabe�alho <acronym>ELF</acronym> � prefixado com <filename> a.out </filename> ';s <literal> struct exec </literal> estrutura. <function> carga() </function> varre o cabe�alho ELF do carregador, carregando o conte�do do <filename> / boot / loader </filename> na mem�ria e passando a execu��o para a entrada do carregador:
Initialize the kernel tunable parameters, passed from the bootstrapping program. Inicialize os par�metros ajust�veis ​​do kernel, passados ​​do programa de bootstrapping.
<function>init386()</function> initializes the tunable parameters passed from bootstrap by setting the environment pointer (envp) and calling <function>init_param1()</function>. The envp pointer has been passed from loader in the <literal>bootinfo</literal> structure: <function> init386 () </function> inicializa os par�metros ajust�veis ​​passados ​​do bootstrap definindo o ponteiro de ambiente (envp) e chamando <function> init_param1 () </function> . O ponteiro envp foi passado do carregador no <literal> bootinfo </literal> estrutura:
This document outlines the locking used in the FreeBSD kernel to permit effective multi-processing within the kernel. Locking can be achieved via several means. Data structures can be protected by mutexes or <citerefentry><refentrytitle>lockmgr</refentrytitle><manvolnum>9</manvolnum></citerefentry> locks. A few variables are protected simply by always using atomic operations to access them. Este documento descreve o bloqueio usado no kernel do FreeBSD para permitir um multiprocessamento efetivo dentro do kernel. O bloqueio pode ser alcan�ado atrav�s de v�rios meios. As estruturas de dados podem ser protegidas por mutexes ou <citerefentry><refentrytitle> lockmgr </refentrytitle><manvolnum> 9 </manvolnum></citerefentry> fechaduras. Algumas vari�veis ​​s�o protegidas simplesmente por usar sempre opera��es at�micas para acess�-las.
Atomically Protected Variables Vari�veis ​​Atomicamente Protegidas
An atomically protected variable is a special variable that is not protected by an explicit lock. Instead, all data accesses to the variables use special atomic operations as described in <citerefentry><refentrytitle>atomic</refentrytitle><manvolnum>9</manvolnum></citerefentry>. Very few variables are treated this way, although other synchronization primitives such as mutexes are implemented with atomically protected variables. Uma vari�vel atomicamente protegida � uma vari�vel especial que n�o � protegida por um bloqueio expl�cito. Em vez disso, todos os acessos a dados para as vari�veis ​​usam opera��es at�micas especiais, como descrito em <citerefentry><refentrytitle> at�mico </refentrytitle><manvolnum> 9 </manvolnum></citerefentry> . Muito poucas vari�veis ​​s�o tratadas dessa maneira, embora outras primitivas de sincroniza��o, como mutexes, sejam implementadas com vari�veis ​​protegidas atomicamente.
On most <trademark class="registered">UNIX</trademark> systems, <literal>root</literal> has omnipotent power. This promotes insecurity. If an attacker gained <literal>root</literal> on a system, he would have every function at his fingertips. In FreeBSD there are sysctls which dilute the power of <literal>root</literal>, in order to minimize the damage caused by an attacker. Specifically, one of these functions is called <literal>secure levels</literal>. Similarly, another function which is present from FreeBSD 4.0 and onward, is a utility called <citerefentry><refentrytitle>jail</refentrytitle><manvolnum>8</manvolnum></citerefentry>. <application>Jail</application> chroots an environment and sets certain restrictions on processes which are forked within the <application>jail</application>. For example, a jailed process cannot affect processes outside the <application>jail</application>, utilize certain system calls, or inflict any damage on the host environment. Na maioria <trademark class="registered"> UNIX </trademark> sistemas, <literal> raiz </literal> tem poder onipotente. Isso promove inseguran�a. Se um atacante ganhou <literal> raiz </literal> em um sistema, ele teria todas as fun��es na ponta dos dedos. No FreeBSD existem sysctls que diluem o poder de <literal> raiz </literal> , a fim de minimizar os danos causados ​​por um invasor. Especificamente, uma dessas fun��es � chamada <literal> n�veis seguros </literal> . Similarmente, outra fun��o presente no FreeBSD 4.0 e em diante, � um utilit�rio chamado <citerefentry><refentrytitle> cadeia </refentrytitle><manvolnum> 8 </manvolnum></citerefentry> . <application> Cadeia </application> chroots um ambiente e define certas restri��es em processos que s�o bifurcados dentro do <application> cadeia </application> . Por exemplo, um processo preso n�o pode afetar processos fora do <application> cadeia </application> , utilizar determinadas chamadas do sistema ou causar danos ao ambiente do host.
As you can see, there is an entry for each of the arguments passed to the <citerefentry><refentrytitle>jail</refentrytitle><manvolnum>8</manvolnum></citerefentry> program, and indeed, they are set during its execution. Como voc� pode ver, h� uma entrada para cada um dos argumentos passados ​​para o <citerefentry><refentrytitle> cadeia </refentrytitle><manvolnum> 8 </manvolnum></citerefentry> programa, e, de fato, eles s�o definidos durante a sua execu��o "
There are certain protocols which are very common, such as TCP, UDP, IP and ICMP. IP and ICMP are on the same level: the network layer 2. There are certain precautions which are taken in order to prevent a jailed process from binding a protocol to a certain address only if the <literal>nam</literal> parameter is set. <literal>nam</literal> is a pointer to a <literal>sockaddr</literal> structure, which describes the address on which to bind the service. A more exact definition is that <literal>sockaddr</literal> "may be used as a template for referring to the identifying tag and length of each address". In the function <literal>in_pcbbind_setup()</literal>, <literal>sin</literal> is a pointer to a <literal>sockaddr_in</literal> structure, which contains the port, address, length and domain family of the socket which is to be bound. Basically, this disallows any processes from <application>jail</application> to be able to specify the address that does not belong to the <application>jail</application> in which the calling process exists. Existem certos protocolos que s�o muito comuns, como TCP, UDP, IP e ICMP. IP e ICMP est�o no mesmo n�vel: a camada de rede 2. H� certas precau��es que s�o tomadas para evitar que um processo preso seja vinculado. um protocolo para um determinado endere�o apenas se o <literal> nam </literal> par�metro est� definido. <literal> nam </literal> � um ponteiro para um <literal> sockaddr </literal> estrutura, que descreve o endere�o no qual ligar o servi�o. Uma defini��o mais exata � que <literal> sockaddr </literal> \ "pode ​​ser usado como um modelo para referir-se � tag de identifica��o e comprimento de cada endere�o ". Na fun��o <literal> in_pcbbind_setup () </literal> , <literal> pecado </literal> � um ponteiro para um <literal> sockaddr_in </literal> estrutura, que cont�m a porta, endere�o, comprimento e fam�lia de dom�nio do socket que deve ser ligado. Basicamente, isso impede qualquer processo de <application> cadeia </application> para poder especificar o endere�o que n�o pertence ao <application> cadeia </application> em que o processo de chamada existe.
SYSINIT relies on the ability of the linker to take static data declared at multiple locations throughout a program's source and group it together as a single contiguous chunk of data. This linker technique is called a <quote>linker set</quote>. SYSINIT uses two linker sets to maintain two data sets containing each consumer's call order, function, and a pointer to the data to pass to that function. O SYSINIT depende da capacidade do vinculador de obter dados est�ticos declarados em v�rios locais ao longo da origem de um programa e agrup�-los como um �nico bloco cont�guo de dados. Essa t�cnica de vinculador � chamada de <quote> conjunto de linker </quote> . O SYSINIT usa dois conjuntos de linkers para manter dois conjuntos de dados contendo cada ordem de chamada do consumidor, fun��o e um ponteiro para os dados a serem passados ​​para essa fun��o.
In most cases, sysctl's and loader tunables of the same name modify the same parameters, and control behavior such as enforcement of protections relating to various kernel subsystems. In addition, if MAC debugging support is compiled into the kernel, several counters will be maintained tracking label allocation. It is generally advisable that per-subsystem enforcement controls not be used to control policy behavior in production environments, as they broadly impact the operation of all active policies. Instead, per-policy controls should be preferred, as they provide greater granularity and greater operational consistency for policy modules. Na maioria dos casos, sysctl';s e loaders sintoniz�veis ​​do mesmo nome modificam os mesmos par�metros e controlam o comportamento, como a aplica��o de prote��es relacionadas a v�rios subsistemas do kernel. Al�m disso, se o suporte de depura��o MAC for compilado no kernel, v�rios contadores ser�o mantidos. � geralmente aconselh�vel que os controles de fiscaliza��o por subsistema n�o sejam usados ​​para controlar o comportamento de pol�ticas em ambientes de produ��o, pois eles geralmente afetam a opera��o de todas as pol�ticas ativas. granularidade e maior consist�ncia operacional para m�dulos de pol�ticas.
Loading and unloading of policy modules is performed using the system module management system calls and other system interfaces, including boot loader variables; policy modules will have the opportunity to influence load and unload events, including preventing undesired unloading of the policy. O carregamento e descarregamento de m�dulos de pol�ticas � realizado usando as chamadas do sistema de gerenciamento de m�dulos do sistema e outras interfaces do sistema, incluindo vari�veis ​​do carregador de inicializa��o; os m�dulos de pol�tica ter�o a oportunidade de influenciar a carga e descarga de eventos, incluindo a preven��o de descarregamento indesejado da pol�tica.
As kernel objects of interest may generally be accessed from more than one thread at a time, and simultaneous entry of more than one thread into the MAC Framework is permitted, security attribute storage maintained by the MAC Framework is carefully synchronized. In general, existing kernel synchronization on kernel object data is used to protect MAC Framework security labels on the object: for example, MAC labels on sockets are protected using the existing socket mutex. Likewise, semantics for concurrent access are generally identical to those of the container objects: for credentials, copy-on-write semantics are maintained for label contents as with the remainder of the credential structure. The MAC Framework asserts necessary locks on objects when invoked with an object reference. Policy authors must be aware of these synchronization semantics, as they will sometimes limit the types of accesses permitted on labels: for example, when a read-only reference to a credential is passed to a policy via an entry point, only read operations are permitted on the label state attached to the credential. Como os objetos de interesse do kernel geralmente podem ser acessados ​​de mais de um thread de cada vez, e a entrada simult�nea de mais de um thread no MAC Framework � permitida, o armazenamento de atributos de seguran�a mantido pelo MAC Framework � cuidadosamente sincronizado. A sincroniza��o do kernel nos dados do objeto kernel � usada para proteger os r�tulos de seguran�a do MAC Framework no objeto: por exemplo, os r�tulos MAC nos soquetes s�o protegidos usando o mutex de soquete existente Da mesma forma, as sem�nticas para acesso simult�neo s�o geralmente id�nticas �quelas dos objetos cont�ineres: credenciais, a sem�ntica de copy-on-write � mantida para o conte�do da etiqueta como no restante da estrutura de credencial.O MAC Framework afirma os bloqueios necess�rios em objetos quando invocado com uma refer�ncia de objeto.Os autores da pol�tica devem estar cientes dessas sem�nticas de sincroniza��o, pois elas �s vezes, limitar os tipos de acessos permitidos nos r�tulos: por exemplo, quando uma refer�ncia somente leitura a uma credencial � passada para uma pol�tica por meio de um ponto de entrada, somente as opera��es de leitura s�o permitidas no estado da etiqueta anexado � credencial.