onde o Kernel reside em um sistema multi-core

6

Suponha que eu tenha um sistema multi-core, digamos 4 núcleos, e neste processo eu atribuo 3 usuários a 3 CPUs.

Nesse caso, onde residirá o kernel?

Suponha que um dos processos do usuário faça uma chamada ao sistema, ou diga um IOCTl, para o kernel. O IOCTL será executado em uma 4ª CPU onde o kernel reside?

    
por Varun Kulkarni 12.03.2013 / 14:05

3 respostas

3

O kernel per-se não reside em nenhum lugar, ou melhor dito, residia em todos os lugares. O processo que faz o syscall continuará na CPU fazendo a chamada e copiará o código da imagem do kernel para o cache. Como o código é somente leitura, todo processador terá uma cópia dele em seus caches. As linhas de cache serão despejadas da mesma maneira que qualquer outro código do seu sistema. Isto significa que as partes que são frequentemente chamadas estarão frequentemente em cache, aquelas que não são, não serão e serão trazidas de linhas de cache, ram, disco, etc.

    
por 12.03.2013 / 14:17
3

O kernel reside na memória e é executado em todos os processadores e núcleos simultaneamente.

ioctl (2) ou read (2) retornará imediatamente (como uma chamada de função em seu próprio programa) ou bloqueará um thread. 'Block a thread' significa que o kernel scheduler irá suspender seu thread e executar outro thread nessa CPU / core. Seu segmento permanecerá bloqueado até que o manipulador de interrupção o desbloqueie (marca como executável). O manipulador de interrupção é executado no modo kernel, geralmente na primeira CPU física, é chamado pelo hardware após a conclusão da E / S. Depois de ser marcado como executável, o seu thread terá a chance de continuar sua execução quando o agendador do kernel for executado da próxima vez, possivelmente em outra CPU / núcleo.

    
por 13.03.2013 / 10:42
3

O kernel vive na memória principal do sistema. Ele é carregado lá (RAM) quando o sistema é inicializado. Algumas partes do kernel serão executadas pela CPU em vários momentos. Durante a execução, o código (instruções da CPU) estará na memória interna de uma CPU ou núcleo específico.

Exatamente qual núcleo em uma CPU multi-core, ou cujo núcleo em um sistema multi-CPU é impossível responder sem algum conhecimento sobre o design do kernel e as abstrações usadas pelos sistemas operacionais para se comunicar com uma CPU ou CPUs.

Tudo o que sei é que o kernel seguirá um conjunto de regras para acessar um ou vários CPUS. Até que alguém mais experiente receba uma explicação melhor, você pode entrar no design do SMP .

Os capítulos 5 e 6 de Organização estruturada de computadores arranham a superfície dos aspectos técnicos envolvidos no comando de uma CPU para executar alguma ação e como essa ação é gerenciada. Talvez isso seja uma leitura interessante?

    
por 13.03.2013 / 10:30