1. TP 1
matériel, paquets, éditeurs

Le première étape des travaux pratiques consiste à :

Vous pouvez retrouver une vidéo de ce TP sur youtube.

1.1. L'environnement de travail et le matériel

1.1.1. Système d'exploitation

richer@zentopia:\$ lsb_release -a && uname -a
No LSB modules are available.
Distributor ID:	Ubuntu
Description:	Ubuntu 20.04 LTS
Release:	20.04
Codename:	focal
Linux zentopia 5.4.0-37-generic #41-Ubuntu SMP Wed Jun 3 18:57:02 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

La commande lsb_release (sous Linux/Ubuntu) donne des informations relatives au système d'exploitation, en l'occurrence il s'agit d'Ubuntu 20.04 (Focal Fossa), qui est de type LTS (Long Time Support)

La commande uname donne des informations sur le la version du noyau Linux ainsi que sur l'architecture qui est ici 64 bits (x86_64). Pour un système 32 bits on verra le sigle i386 apparaitre.

1.1.2. Le microprocesseur

Pour obtenir des informations relatives au microprocesseur, une première commande à utiliser est lscpu. Elle donne un résumé des caractéristiques :

richer@zentopia:\$ lscpu
Architecture :                          x86_64
Mode(s) opératoire(s) des processeurs : 32-bit, 64-bit
Boutisme :                              Little Endian
Address sizes:                          43 bits physical, 48 bits virtual
Processeur(s) :                         12
Liste de processeur(s) en ligne :       0-11
Thread(s) par cœur :                    2
Cœur(s) par socket :                    6
Socket(s) :                             1
Nœud(s) NUMA :                          1
Identifiant constructeur :              AuthenticAMD
Famille de processeur :                 23
Modèle :                                113
Nom de modèle :                         AMD Ryzen 5 3600 6-Core Processor
Révision :                              0
Frequency boost:                        enabled
Vitesse du processeur en MHz :          2199.900
Vitesse maximale du processeur en MHz : 3600,0000
Vitesse minimale du processeur en MHz : 2200,0000
BogoMIPS :                              7199.86
Virtualisation :                        AMD-V
Cache L1d :                             192 KiB
Cache L1i :                             192 KiB
Cache L2 :                              3 MiB
Cache L3 :                              32 MiB
Nœud NUMA 0 de processeur(s) :          0-11
Vulnerability Itlb multihit:            Not affected
Vulnerability L1tf:                     Not affected
Vulnerability Mds:                      Not affected
Vulnerability Meltdown:                 Not affected
Vulnerability Spec store bypass:        Mitigation; Speculative Store Bypass disabled via prctl 
                                        and seccomp
Vulnerability Spectre v1:               Mitigation; usercopy/swapgs barriers and __user pointer 
                                        sanitization
Vulnerability Spectre v2:               Mitigation; Full AMD retpoline, IBPB conditional, STIBP 
                                        conditional, RSB filling
Vulnerability Srbds:                    Not affected
Vulnerability Tsx async abort:          Not affected
Drapaux :                               fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca
                                         cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx 
                                        mmxext fxsr_opt pdpe1gb rdtscp lm constant_tsc rep_good 
                                        nopl nonstop_tsc cpuid extd_apicid aperfmperf pni pclmul
                                        qdq monitor ssse3 fma cx16 sse4_1 sse4_2 movbe popcnt ae
                                        s xsave avx f16c rdrand lahf_lm cmp_legacy svm extapic c
                                        r8_legacy abm sse4a misalignsse 3dnowprefetch osvw ibs s
                                        kinit wdt tce topoext perfctr_core perfctr_nb bpext perf
                                        ctr_llc mwaitx cpb cat_l3 cdp_l3 hw_pstate sme ssbd mba 
                                        sev ibpb stibp vmmcall fsgsbase bmi1 avx2 smep bmi2 cqm 
                                        rdt_a rdseed adx smap clflushopt clwb sha_ni xsaveopt xs
                                        avec xgetbv1 xsaves cqm_llc cqm_occup_llc cqm_mbm_total 
                                        cqm_mbm_local clzero irperf xsaveerptr wbnoinvd arat npt
                                         lbrv svm_lock nrip_save tsc_scale vmcb_clean flushbyasi
                                        d decodeassists pausefilter pfthreshold avic v_vmsave_vm
                                        load vgif umip rdpid overflow_recov succor smca



Parfois la commande lscpu ne parvient pas à donner le nom du processeur si celui-ci est assez ancien, dans ce cas on peut utiliser la commande :

richer@zentopia:\$ cat /proc/cpuinfo
processor	: 0
vendor_id	: AuthenticAMD
cpu family	: 23
model		: 113
model name	: AMD Ryzen 5 3600 6-Core Processor
stepping	: 0
microcode	: 0x8701013
cpu MHz		: 2193.204
cache size	: 512 KB
physical id	: 0
siblings	: 12
core id		: 0
cpu cores	: 6
apicid		: 0
initial apicid	: 0
fpu		: yes
fpu_exception	: yes
cpuid level	: 16
wp		: yes
flags		: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm constant_tsc rep_good nopl nonstop_tsc cpuid extd_apicid aperfmperf pni pclmulqdq monitor ssse3 fma cx16 sse4_1 sse4_2 movbe popcnt aes xsave avx f16c rdrand lahf_lm cmp_legacy svm extapic cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw ibs skinit wdt tce topoext perfctr_core perfctr_nb bpext perfctr_llc mwaitx cpb cat_l3 cdp_l3 hw_pstate sme ssbd mba sev ibpb stibp vmmcall fsgsbase bmi1 avx2 smep bmi2 cqm rdt_a rdseed adx smap clflushopt clwb sha_ni xsaveopt xsavec xgetbv1 xsaves cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local clzero irperf xsaveerptr wbnoinvd arat npt lbrv svm_lock nrip_save tsc_scale vmcb_clean flushbyasid decodeassists pausefilter pfthreshold avic v_vmsave_vmload vgif umip rdpid overflow_recov succor smca
bugs		: sysret_ss_attrs spectre_v1 spectre_v2 spec_store_bypass
bogomips	: 7199.86
TLB size	: 3072 4K pages
clflush size	: 64
cache_alignment	: 64
address sizes	: 43 bits physical, 48 bits virtual
power management: ts ttp tm hwpstate cpb eff_freq_ro [13] [14]
......

Grâce à la commande lstopo du paquet hwloc on peut obtenir une vision graphique de l'organisation du microprocesseur en fonction du nombre de coeurs / threads.

richer@zentopia:\$ cpu=`cat /proc/cpuinfo | grep "model name" | uniq | cut -d':' -f2 | sed -E "s/^[ ]+|[ ]+\$//g" | sed -E "s/[ ]/_/g"
ou alors
richer@zentopia:\$ cpu=`lscpu | grep "Nom de modèle" | cut -d':' -f2 | sed -E "s/^[ ]+|[ ]+$//" | sed -E "s/[ ]+/_/g"`
puis
richer@zentopia:\$ sudo apt install hwloc
richer@zentopia:\$ lstopo --no-io --of png >\$cpu.png
richer@zentopia:\$ eog \$cpu.png


Cas d'un Ryzen 5 3600

1.1.3. La carte mère

Pour obtenir des informations sur la carte mère, il faut utiliser dmidecode. Le DMI (Desktop Management Interface) est un framework logiciel standardisé qui permet de suivre les modifications de composants sur un ordinateur.

richer@zentopia:\$ sudo dmidecode --type baseboard
# dmidecode 3.2
Getting SMBIOS data from sysfs.
SMBIOS 2.8 present.

Handle 0x0002, DMI type 2, 15 bytes
Base Board Information
	Manufacturer: Micro-Star International Co., Ltd.
	Product Name: MPG X570 GAMING EDGE WIFI (MS-7C37)
	Version: 1.0
	Serial Number: J816453611
	Asset Tag: To be filled by O.E.M.
	Features:
		Board is a hosting board
		Board is replaceable
	Location In Chassis: To be filled by O.E.M.
	Chassis Handle: 0x0003
	Type: Motherboard
	Contained Object Handles: 0

Handle 0x0039, DMI type 41, 11 bytes
Onboard Device
	Reference Designation: RTL8111EPV
	Type: Ethernet
	Status: Disabled
	Type Instance: 1
	Bus Address: 0000:03:00.0

Il s'agit d'une carte mère (Motherboard) MSI MPG X570 GAMING EDGE WIFI.

1.1.4. La mémoire

Plusieurs possibilités vous sont offertes pour trouver la taille de la mémoire ainsi que l'espace mémoire occupé. Le problème sous Linux est que la mémoire totale affichée ne correspond pas à la taille de la mémoire physique. On le voit en utilisant le logiciel inxi :

richer@zentopia:\$ sudo apt install inxi
richer@zentopia:\$ sudo inxi -m
Memory:    RAM: total: 31.31 GiB used: 3.47 GiB (11.1%) 
           Array-1: capacity: 128 GiB slots: 4 EC: None 
           Device-1: DIMM 0 size: 8 GiB speed: 2133 MT/s 
           Device-2: DIMM 1 size: 8 GiB speed: 2133 MT/s 
           Device-3: DIMM 0 size: 8 GiB speed: 2133 MT/s 
           Device-4: DIMM 1 size: 8 GiB speed: 2133 MT/s

Ici, on nous indique 31,31 Go de RAM alors qu'il y a $4 × 8 = 32$ Go de RAM Physique.

inxi, tout comme la commande cat /proc/meminfo reporte la RAM totale moins l'espace alloué pour le GPU.

La mémoire est composée de barrettes G.SKILL. L'utilisation de dmidecode ne permet cependant pas de trouver le constructeur (Manufacturer : Unknown) :

richer@zentopia:$ sudo dmidecode --type memory
# dmidecode 3.2
Getting SMBIOS data from sysfs.
SMBIOS 2.8 present.

Handle 0x000F, DMI type 16, 23 bytes
Physical Memory Array
	Location: System Board Or Motherboard
	Use: System Memory
	Error Correction Type: None
	Maximum Capacity: 128 GB
	Error Information Handle: 0x000E
	Number Of Devices: 4

Handle 0x0017, DMI type 17, 40 bytes
Memory Device
	Array Handle: 0x000F
	Error Information Handle: 0x0016
	Total Width: 64 bits
	Data Width: 64 bits
	Size: 8192 MB
	Form Factor: DIMM
	Set: None
	Locator: DIMM 0
	Bank Locator: P0 CHANNEL A
	Type: DDR4
	Type Detail: Synchronous Unbuffered (Unregistered)
	Speed: 3200 MT/s
	Manufacturer: Unknown
	Serial Number: 00000000
	Asset Tag: Not Specified
	Part Number: F4-3200C16-8GVKB
	Rank: 1
	Configured Memory Speed: 3200 MT/s
	Minimum Voltage: 1.2 V
	Maximum Voltage: 1.2 V
	Configured Voltage: 1.2 V
....

1.1.5. inxi

Il s'agit d'un utilitaire en ligne de commande qui donne accès aux informations matérielles.

richer@zentopia:\$ sudo apt install inxi
richer@zentopia:\$ inxi -F
System:    Host: zentopia Kernel: 5.4.0-42-generic x86_64 bits: 64 Desktop: Gnome 3.36.4 
           Distro: Ubuntu 20.04.1 LTS (Focal Fossa) 
Machine:   Type: Desktop Mobo: Micro-Star model: MPG X570 GAMING EDGE WIFI (MS-7C37) v: 1.0 
           serial:  UEFI: American Megatrends v: 1.50 date: 10/29/2019 
CPU:       Topology: 6-Core model: AMD Ryzen 5 3600 bits: 64 type: MT MCP L2 cache: 3072 KiB 
           Speed: 4173 MHz min/max: N/A Core speeds (MHz): 1: 4173 2: 3956 3: 3863 4: 4071 5: 3777 6: 4198 
           7: 4198 8: 4196 9: 3430 10: 3832 11: 4142 12: 4141 
Graphics:  Device-1: NVIDIA GP104 [GeForce GTX 1070] driver: nvidia v: 440.100 
           Display: x11 server: X.Org 1.20.8 driver: nvidia unloaded: fbdev,modesetting,nouveau,vesa 
           resolution: 1920x1080~60Hz 
           OpenGL: renderer: GeForce GTX 1070/PCIe/SSE2 v: 4.6.0 NVIDIA 440.100 
Audio:     Device-1: NVIDIA GP104 High Definition Audio driver: snd_hda_intel 
           Device-2: Advanced Micro Devices [AMD] Starship/Matisse HD Audio driver: snd_hda_intel 
           Sound Server: ALSA v: k5.4.0-42-generic 
Network:   Device-1: Realtek RTL8111/8168/8411 PCI Express Gigabit Ethernet driver: r8169 
           IF: enp39s0 state: up speed: 1000 Mbps duplex: full mac: 00:d8:61:a3:bc:e4 
           Device-2: Intel Dual Band Wireless-AC 3168NGW [Stone Peak] driver: iwlwifi 
           IF: wlp41s0 state: up mac: 5c:87:9c:dd:8c:f4 
           IF-ID-1: br-1265e82a8241 state: up speed: N/A duplex: N/A mac: 02:42:a3:0d:2c:77 
           IF-ID-2: br-40ca5f7225b0 state: down mac: 02:42:d9:89:cc:d5 
           IF-ID-3: docker0 state: down mac: 02:42:67:28:8e:9b 
           IF-ID-4: veth393a5c6 state: up speed: 10000 Mbps duplex: full mac: a6:b6:53:3f:9e:ed 
           IF-ID-5: vethc6497ca state: up speed: 10000 Mbps duplex: full mac: ea:53:50:43:f3:a6 
Drives:    Local Storage: total: 931.51 GiB used: 192.89 GiB (20.7%) 
           ID-1: /dev/sda vendor: Western Digital model: WD10EZEX-75WN4A0 size: 931.51 GiB 
Partition: ID-1: / size: 915.40 GiB used: 192.88 GiB (21.1%) fs: ext4 dev: /dev/sda2 
Sensors:   System Temperatures: cpu: 56.6 C mobo: N/A gpu: nvidia temp: 42 C 
           Fan Speeds (RPM): N/A gpu: nvidia fan: 0% 
Info:      Processes: 400 Uptime: 1h 08m Memory: 31.31 GiB used: 2.80 GiB (8.9%) Shell: bash inxi: 3.0.38 

Etrangement on n'a aucune information concernant la mémoire, il faut lancer la commande avec :

richer@zentopia:\$ sudo inxi -m
Memory:    RAM: total: 31.31 GiB used: 2.83 GiB (9.0%) 
           Array-1: capacity: 128 GiB slots: 4 EC: None 
           Device-1: DIMM 0 size: 8 GiB speed: 2133 MT/s 
           Device-2: DIMM 1 size: 8 GiB speed: 2133 MT/s 
           Device-3: DIMM 0 size: 8 GiB speed: 2133 MT/s 
           Device-4: DIMM 1 size: 8 GiB speed: 2133 MT/s

1.1.6. CPU-X

Le logiciel CPU-X est l'équivalent de CPU-Z un utilitaire Windows qui regroupe les informations sur le microprocesseur (fréquence, coeurs, mémoire cache), la carte mère, la mémoire et la carte graphique. Pour installer CPU-X, il suffit de télécharger l'archive correspondant à Ubuntu sur le site du logiciel, puis de lancer les commandes suivantes :

richer@zentopia:\$ mkdir install
richer@zentopia:\$ cd install
richer@zentopia:\$ mv ~/Téléchargements/CPU-X_v4.0.1_Ubuntu.tar.gz .
richer@zentopia:\$ tar -xzf CPU-X_v4.0.1_Ubuntu.tar.gz
richer@zentopia:\$ cd xUbuntu_20.04
richer@zentopia:\$ sudo dpkg -i libcpuid15_0.5.0_amd64.deb cpuidtool_0.5.0_amd64.deb cpu-x_4.0.1_amd64.deb

ou à partir de Ubuntu 20.40 :

richer@zentopia:\$ sudo apt install cpu-x
richer@zentopia:\$ cpu-x &

CPU-X
CPU-X pour un AMD Ryzen 5 3600

On peut également obtenir l'information dans le terminal en utilisant l'option en ligne de commande --ncurses :

richer@zentopia:$ 
richer@zentopia:\$ cpu-x --ncurses

CPU-X
CPU-X pour un AMD Ryzen 5 3600 au format ncurses dans le terminal

1.2. Les logiciels

Pour programmer en assembleur, il vous faut disposer des logiciels suivants :

Sous Linux Ubuntu, je fais le choix d'utiliser les logiciels suivants :

  • éditeur : jedit, mais vous pouvez également utiliser gedit, vi, vim, emacs
  • assembleur : nasm (The Netwide Assembler), car il me semble le plus pratique et le moins contraignant
  • compilateur C/C++ : gcc/g++, le compilateur GNU
  • débogueur : ddd (Data Display Debugger) en raison de son interface graphique plus ergonomique que xxgdb
  • générateur : le traditionnel make

Se reporter à cette page pour installer les logiciels.