os processos acessam cpu e memória por chamadas de sistema para o kernel?

0

Se eu estiver correto, processará os dispositivos de acesso pelas chamadas do sistema para o kernel.

CPU e memória também são dispositivos.

  1. quando um processo começa a ser executado, ele obtém cpu e memória por chamadas do sistema para o kernel?
  2. Quando um processo é executado simultaneamente com outros processos, o kernel programa sua execução de maneira intercalada. O processo também chamam chamadas do sistema para o kernel, quando ele desiste de cpu e memória para um processo diferente e quando recuperá-los de volta?
  3. quando um processo termina de ser executado, ele libera cpu e memória também por chamadas do sistema para o kernel?
por Tim 11.01.2015 / 18:44

2 respostas

2

Ele não recebe tanto CPU, como é executado. O kernel decide em qual núcleo e quando e por quanto tempo o processo é executado. Ele agenda as tarefas para que cada processo obtenha suas fatias de tempo na CPU: ele é executado por um tempo, depois que a fatia de tempo expira ou quando ocorre uma chamada de sistema, o contexto é alternado para outro processo. O estado do programa é armazenado antes do switch e restaurado quando o kernel decide que merece outra fatia de tempo, de modo que nem perceba o intervalo de tempo. O agendamento pode variar - pode ter um temporizador fixo (milissegundos geralmente), ou pode ser sem ticking ... o kernel também gerencia o agendamento de acordo com a prioridade do processo ( nice ). O processo pode ser bloqueado em núcleos específicos ( taskset ). Para um programa multithread, os threads obtêm suas fatias independentemente e podem ser executados simultaneamente. O kernel pode suspender completamente o programa e reiniciá-lo mais tarde (acionado pelo SIGSTOP e pelo SIGCONT).

A memória é virtualizada. Os ponteiros que você vê em suas linguagens de programação não são blocos físicos de memória, mas os endereços virtuais são remapeados para a camada física. O kernel serve RAM em páginas (por exemplo, 4kB), e até mesmo embaralha um pouco (uma página pode ser trocada para o disco rígido e restaurada apenas na RAM quando você a acessa). mmap é uma maneira de mapear uma nova página para algum endereço (onde as páginas podem se referir a um arquivo do disco rígido, mapeado para a memória). No entanto, quando você aloca dinamicamente a memória ( malloc e outros alocadores), cabe ao alocador o que fazer. Geralmente chama sbrk syscall para solicitar mais espaço para seu pool de memória ou mmap para partes maiores - as implementações podem variar.

Então, para resumir: a prioridade do processo e as afinidades da CPU podem ser definidas, mas o planejador cuida de como e quando o programa é executado, sem necessidade de interagir com o kernel de forma alguma. A memória é veiculada em páginas e solicitada por meio de chamadas do sistema. Uma vez que você alocou a memória, você a acessa sem a intervenção do kernel, simplesmente através do espaço de endereço virtual.

    
por 12.01.2015 / 11:25
1

CPU

Um processo pode diminuir sua prioridade de CPU (mas não diminuí-la, man 2 setpriority ). Além disso, ele pode se colocar para dormir por um certo tempo. Mas ele não pode decidir como o tempo de CPU que ele salva é dado a outros processos.

Para a situação com tópicos, veja o comentário de psusi.

memória Um novo processo recebe uma quantidade inicial de RAM (não sei, no entanto, se esse é um valor padrão do kernel ou dado nos dados de cabeçalho do binário). Se mais RAM for necessária, o processo pede mais ao kernel (veja man 2 mmap ).

Assim como o tempo de CPU, um processo não pode decidir qual processo recebe mais memória se ele liberar algum.

saída do processo

Se um processo sair (por decisão própria ou por morte), o kernel libera seus recursos automaticamente. Um processo pode liberar "todas" suas RAM antes de sair, mas não há razão para isso. Em vez disso, são apenas chamadas _exit ou exit_group .

    
por 11.01.2015 / 22:37