Pthread scheduling (sistema e processo)

5

Eu li os conceitos do sistema operacional da 8ª edição escrita por abraham silberschatz. No entanto, eu não entendo o Pthread Scheduling.

  • A biblioteca de threads agenda segmentos de nível de usuário no LWP (Lightweight Process).

    This is Process-Contention Scope(PCS) because contention occurs between threads belonging to the same process.

  • O SO agenda threads de kernel na CPU.

    This is System-Contention Scope(SCS) because contention occurs between all threads belonging to the system.

Eu achei que o PCS é correspondente ao segmento de nível de usuário e o SCS é correspondente ao segmento de nível do kernel.

Mas o código a seguir está configurando o modo de thread como modo de usuário.

pthread_attr_setscope(&attr, PTHREAD_SCOPE_SYSTEM);

Eu não entendo porque é o modo de usuário, não o modo kernel. Por favor, alguém ciente disso me avise, obrigado pela leitura.

    
por Danny_Kim 28.10.2015 / 20:20
fonte

1 resposta

3

Acho que você está confundindo espaço entre processos (usuário), encadeamentos intraprocessos e espaço do sistema. Então vamos começar com algumas definições.

Os segmentos pertencem a um processo. Um processo pode ser executado dentro do espaço do usuário e do espaço do sistema. O espaço ao qual um processo pertence é uma função de como ele é chamado.

O espaço do sistema tende a ser o nível mais baixo e é onde os processos protegidos ou do kernel são executados. Normalmente, eles são de propriedade do próprio sistema.

O espaço do usuário tende a ser de nível superior e tem menos processos privilegiados.

Encadeamentos de espaço entre processos (usuários) podem ser considerados como encadeamentos pertencentes a processos separados.

Encadeamentos intra-processo podem ser considerados como encadeamentos pertencentes a um único processo. E esse processo pode estar sendo executado no espaço do usuário ou do sistema.

Então, quando você liga:

pthread_attr_setscope(&attr, PTHREAD_SCOPE_SYSTEM);

O que você realmente está fazendo é evitar que o segmento faça parte do resto do processo de chamada e o mova para o espaço do usuário. Efetivamente, isso faz do thread um novo processo e é equivalente a fork , mas eu não sou positivo nesse aspecto, então não me cite.

Acho que sua confusão vem da parte _SYSTEM dessa definição. No entanto, um sistema operacional não necessariamente deseja que um processo seja movido do espaço do usuário para o espaço do sistema, pois isso poderia levar a um escalonamento indesejável de privilégios para esse processo. O kernel legalmente não confia nos processos de espaço do usuário, como historicamente se provou que são lixo (do ponto de vista do kernel).

Disse outra maneira, que pthread_attr_setscope call não permite que você mude de PCS para SCS.

A página de manual é semi-útil para entender isso.

PTHREAD_SCOPE_SYSTEM
The thread competes for resources with all other threads in all processes on the system that are in the same scheduling allocation domain (a group of one or more processors). PTHREAD_SCOPE_SYSTEM threads are scheduled relative to one another according to their scheduling policy and priority.

ênfase adicionada

Observe a cláusula final na parte que enfatizei: " que estão no mesmo domínio de alocação de agendamento ". E também note que não faz menção de poder mudar para um domínio de alocação de agendamento diferente.

    
por 29.10.2015 / 16:24
fonte