2015-12-11 5 views
0

Je faisais une expérience dans VirtualBox. C'est ma configuration.OS invité dans VirtualBox utilisant plus de cœurs que ceux alloués

Experiment Setup

J'ai couru un code simple dans l'OS invité

# include <stdio.h> 
# include <stdlib.h> 

int main() 
{ 
    while(1) 
    { 
     int * p = (int *)malloc(sizeof(int)); 
    } 

    return 0; 
} 

j'ai vu qu'il y avait des pointes simultanées dans tous les 4 cœurs du système d'exploitation hôte.

CPU Usage spikes in 4 cores instead of 1

Je pensais que le système d'exploitation invité est censé utiliser un seul noyau. Qu'est-ce que je fais de mal ou ce comportement est-il normal (Si oui, alors pourquoi)?

PS: Ma configuration de base enter image description here

Répondre

0

Je pense que si votre code ne prend un noyau, votre programme lorsqu'il est exécuté peut être mis en et hors contexte sur différents noyaux lors de l'exécution par le système d'exploitation . C'est pourquoi vous voyez tous les noyaux utilisés, mais les pointes se produisent à des moments différents. (Mais ce faire prendre une mesure plus précise que de regarder le moniteur de ressources).

+0

Je pensais à cette logique mais ne sera-t-elle pas extrêmement inefficace? – xavier666

+0

@ xavier666, je ne sais pas. Je pense qu'il pourrait être nécessaire car un programme avec une boucle infinie (comme votre exemple) peut empêcher le processus d'OS nécessaire d'être effectué. De plus, le système d'exploitation hôte ne devrait pas passer trop de temps à passer par rapport au temps de calcul s'il est bien conçu. – tinlyx