Forum Programmation.autre question théorique sur l'assembleur

Posté par  . Licence CC By‑SA.
Étiquettes : aucune
1
20
août
2019

bonjour à tous,

je vous donne l'instruction qui me pose probleme, ca sera plus simple pour expliquer :

add ax, PTR BYTE [bp - 0x02]

dans le cas ou j'utilise un processeur 8086 avec un bus d'adresse de 20 bits et un bus de donnés de 16 bits.

comment en une instruction qui ne peut pas dépasser 16 bits, je peux contenir à la fois l'oppcode (ADD), le registre(ax), et l'adresse de 20 bits contenu dans PTR BYTE [bp - (…)

Forum Programmation.autre question sur le processeur 8086 et les cycles d'horloge

Posté par  . Licence CC By‑SA.
Étiquettes : aucune
2
29
juil.
2019

Bonjour,

dans les processeurs 8086, en assembleur quand je fais l'intruction sub a,b :
le compilateur va remplacer cette instruction par un not b + inc b + ADD a,b soit 3 cycles d'horloge pour réaliser la soustraction?

De nos jours avec les processeurs actuels, il y a j'imagine pour optimiser la place dans la RAM une seul instruction pour réaliser une soustraction, mais prend elle toujours 3 cycle d'horloge ?

Merci d'avance pour vos éclaircissements.

Forum Linux.général pourquoi malloc peut échouer alors que linux utilise de la mémoire virtuelle

Posté par  . Licence CC By‑SA.
Étiquettes : aucune
3
23
juil.
2019

bonjour,

voila tout est dans la question. On m'a toujours appris de vérifier si malloc() renvoyait un pointeur null ou non. Or je ne vois pas commment mon allocation mémoire peut échouer alors que linux utilise de la mémoire virtuelle. Donc même si je demande 20 GO de ram et que ma machine n'en possede que 4, malloc() ne me retournera pas un pointeur null.

Merci d'avance pour vos éclaircissements.

Forum Linux.général taille de mon ficher fait 7 octets mais il prend en mémoire 8 blocks de 4096 octets

Posté par  . Licence CC By‑SA.
Étiquettes : aucune
3
21
juin
2019

Bonjour à tous,

voila j'ai utilisé la fonction fstat et je remarque que la taille de mon fichier ou j'ai écrit "coucou" est étrange.
voici mon code :

    int main(int argc, char const *argv[])
    {

        int fd;
        struct stat statbuff;

        fd = open("coco.txt", O_RDONLY);

        fstat( fd, &statbuff) ;

        fprintf(stdout, "size of file = %i\n", (int)statbuff.
(…)

Forum Linux.général renseignement sur le server X11

Posté par  . Licence CC By‑SA.
Étiquettes : aucune
1
27
mai
2019

Bonjour à tous,

Voila j'aimerais comprendre un peu plus ce que fait le server X11.

Toutes applications qui souhaitent afficher quelque chose à l'écran doit passer par ce serveur? Il y a une API disponible en C ou C++ ou on connait le port d'écoute et le protocole pour communiquer avec le serveur et on envoie une socket TCP?

Meme si je n'ai pas de Bureau graphique, l'interpreteur bash utilise également le serveur X11 pour afficher les sorties des commandes (…)

Forum Linux.général magic number et structure de mon executable a.out

Posté par  . Licence CC By‑SA.
Étiquettes : aucune
1
21
mai
2019

Bonjour à tous,

voila j'ai compilé mon programme : gcc main.c et ensuite j'utilise la commande :
hexdump ./a.out | head

ce qui me renvoie :

0000000 457f 464c 0102 0001 0000 0000 0000 0000
0000010 0003 003e 0001 0000 0540 0000 0000 0000
0000020 0040 0000 0000 0000 1930 0000 0000 0000
0000030 0000 0000 0040 0038 0009 0040 001d 001c
0000040 0006 0000 0004 0000 0040 0000 0000 0000
0000050 0040 0000 0000 0000 0040 0000 0000 0000 (…)

Forum Linux.général question sur strace

Posté par  . Licence CC By‑SA.
Étiquettes : aucune
0
26
avr.
2019

Bonjour à tous,

voila j'ai utilisé la commande strace et j'ai beaucoup d'interrogation sur ce programme.

je vois lorsque je fais strace ./a.out énormément d'appel systeme avant d'arriver au début de mon programme. Qui a ajouté tous ces appels systemes ? le compilateur ?

ensuite je vois :
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\260\34\2\0\0\0\0\0"…, 832) = 832

je connais les appels systemes openat et read, mais c'est quoi \177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\260\34\2\0\0\0\0\0, une zone mémoire de mon programme a.out ?
et donc (…)

Forum Programmation.c difference entre mmap() et read()

Posté par  . Licence CC By‑SA.
Étiquettes : aucune
3
23
avr.
2019

Bonjour à tous,

voila si je veux lire un fichier je peux faire :

int fd = open("fichier_a_lire.txt", O_RDONLY);

et ensuite je peux faire :
read(fd, buffer, 256);

ou faire
void* addr = mmap(NULL,length_of_fichier_a_lire,…, fd, 0);
strncpy( buffer, addr, 256);

mais c'est quoi le mieux?
dans les deux cas le fichier est chargé en RAM par le noyau via l'appel systeme open, donc pourquoi s’embêter avec mmap ?

merci de vos éclaircissements

Forum Linux.noyau que ce passe t'il quand on fait des mises à jour sur un programme qui en cours d'exécution

Posté par  . Licence CC By‑SA.
Étiquettes : aucune
2
12
avr.
2019

bonjour à tous,

quand je fais sur mon terminal apt update et apt upgrade, le programme peut mettre a jour la libc. Je me pose donc des questions sur ce qui se passe sur ma machine, car le noyau verrouille les binaires ELF qui sont en running. Donc le noyau interdit de pouvoir réécrire sur ces fichiers binaires. Or si je fais un upgrade je vais devoir supprimer les versions précédentes et mettre la nouvelle version, donc qu'est ce se (…)

Forum Linux.noyau combien de temps se passe entre l'émission d'un SIGSEV et SIGKILL

Posté par  . Licence CC By‑SA.
Étiquettes : aucune
3
9
avr.
2019

Bonjour à tous,

voila si dans mon code il y a un segfault, alors mon programme attrape le signal SIGSEGV et lance ma fonction void gestionnaire(int num) grace à la fonction sigaction().
Mais au bout de combien de temps le noyau va tuer mon processus ? à la fin de ma fonction gestionnaire(int num) ?

Le SIGSEGV est émie par le noyau ou par le MMU ?

Merci d'avance pour vos réponses

Forum Programmation.c probleme de compréhension avec la socket (local)

Posté par  . Licence CC By‑SA.
Étiquettes : aucune
0
13
mar.
2019

Bonjour à tous,

j'avais testé de communiquer avec des processus via des tubes nommés et le principe de fonctionnement était tres compréhensible, si je voulais communiquer avec deux processus j'ouvrai un tube nommé sur mon programme serveur, et j'attendais que le client envoie un message sur le tube nommé du serveur. Le message qu'envoyait le client était le tube nommé du client, et je pouvais ainsi communiquer: Je fesais l'appelle systeme read sur le descriptor de fichier du tube nommé (…)

Forum Linux.noyau initrd et kernel

Posté par  . Licence CC By‑SA.
Étiquettes : aucune
1
25
fév.
2019

Bonjour à tous,

voila je me suis documenté un peu, et d'apres ce que j'ai compris mais n'hésitez pas à me corriger, le bootloader lance le programme initrd puis ensuite le noyau en lui donnant en paramètre ou se trouve initrd dans la ram. Et donc le noyau a chaque fois qu'il doit acceder à un fichier dans le disque dur il fait un saut en memoire vers le processus initrd, et c'est initrd qui lui donne les octets contenus (…)

Forum Linux.général question sur le /proc

Posté par  . Licence CC By‑SA.
Étiquettes : aucune
2
19
fév.
2019

Bonjour à tous,

voila on a sous linux un pseudo fichier /proc. Pourquoi on le nomme "pseudo fichier" ?

le noyau crée se pseudo fichier pour que l'utilisateur puisse voir l'état de la machine ou car le noyau se sert de ce pseudo fichier pour stocker des informations importante et ne pas encombrer la RAM ?

merci d'avance pour vos réponses.

Forum Linux.noyau comment marchent les mutex du point de vue du noyau

Posté par  . Licence CC By‑SA.
Étiquettes : aucune
1
13
fév.
2019

Bonjour jeunes gens,

Je m'interroge sur comment fonctionnent les mutex. D'un point de vue assembleur il s'agit d'une instruction test_and_set, mais on peut très bien imaginer que deux threads en parallèles lancent au même coup d'horloge l'instruction test_and_set et donc le verrou du mutex n'aura pas le résultat espéré car aucun des threads a été bloqué.

J'imagine donc que le noyau gère cela, mais comment ? il existe un appel système pour modifier une variable ? mais même s'il y (…)