Program FilesDacă aţi utilizat orice versiune de Windows pe arhitectura de 64 biţi, probabil aţi observat două foldere  „Program Files”; unul destinat aplicaţiilor ce rulează pe 64 biţi (intitulat simplu „Program Files”), altul pentru aplicaţiile de 32 de biţi („Program Files (x86)”).

 

 

 

Care este scopul acestor două foldere?

Unii dintre utilizatorii sistemului de operare Windows s-au întrebat ce se întâmplă dacă, de exemplu, atunci când instalăm o aplicaţie ce rulează pe 32 de biţi îi schimbăm forţat destinaţia (sau rădăcina) în  folderul aplicaţiilor pentru 64 biţi (C:\Program Files(x86) -> C:\Program Files\). Deşi s-a schimbat rădăcina, aparent, nu au apărut probleme. Asta deoarece există un organizator în interiorul aplicaţiei numit WOW64 şi ajutoarele lui numite variabile de mediu (despre acestea vom discuta mai jos).

Este posibil ca cei de la Microsoft să introducă foldere în plus fără motive tehnice?

Vom explica, în mare, utilitatea celor două foldere “Program Files” în structura sistemului de operare Windows 64.

 

Să facem o analogie. Folderul (directorul, dosarul) în general ajută la organizarea fişierelor (filelor, fişelor) pe categorii în funcţie de anumiţi parametri. Altfel, gestionarea şi accesarea arhivelor, ar fi fost mai complicate. Ordonarea ne-a permis să lucrăm mai eficient şi a mai redus din stresul generat de viciul dezordinii.

Când mergem să consultăm arhive trebuie să interogăm arhivistul pentru a găsi dosarul de care avem nevoie. În cazul nostru arhivistul reprezintă aplicaţia iar dosarele constituie folderele ce conţin date. Când aceste dosare sunt organizate, arhivistul va răspunde la cererea noastră mai rapid fără a greşi dosarul (dacă arhivistul are un algoritm corespunzător).

Ordonarea uşurează munca!


Pe scurt, cele două foldere sunt folosite pentru a separa aplicaţiile ce rulează pe 32 biţi (“Program Files (x86)”) de celelalte aplicaţii destinate platformei de 64 biţi (“Program Files”)

Aplicaţiile şi jocurile au în alcătuirea lor biblioteci dinamice numite pe scurt dll-uri (Dinamic Link Library) care organizează în memorie funcţii de prelucrare de care aplicaţia are nevoie când o accesăm noi sau sistemul de operare.

Această subîmpărţire a folderului “Program Files” este cea mai avantajoasă soluţie pentru ca aplicaţiile să apeleze dll-urile corespunzătoare platformei pe care au fost  construite, mai uşor, fără bătăi de cap. Folderul “Program Files (x86)” va reţine .executabilele şi .dll-urile separat de celelalte aplicaţii pentru 64 biţi (aflate în \Program Files\).

O aplicaţie de 32 biţi nu poate apela un dll de 64 biţi. S-a folosit metoda separării pentru a evita apelarea unui dll pe platformă 64 biţi de către o aplicaţie de 32 biţi, situaţie ce ar fi generat un mesaj de eroare.

Astfel putem spune că am separat logica de date.

Logica
%WINDIR%
%PROGRAMFILES%
%PROGRAMFILES (x86)%

Date
%PROGRAMDATA%
%HOMEDRIVE%
%HOMEPATH%

Elementele de felul %NAME% se numesc variabile de mediu şi se găsesc în fişierele aplicaţiilor (regiştri şi fişiere de tip .dll şi .exe).

Veţi întâlni cazuri când distribuitorii oferă două kituri de instalare pentru fiecare dintre cele două arhitecturi (32 şi respectiv 64 biţi) sau doar un kit care va alege automat destinaţia pentru instalare.

În cazul schimbării forţate a destinaţiei instalării unei aplicaţii, ne salvează  mecanismul WOW64 – un sistem de redirecţionare – care va efectua câteva verificări şi va asigura organizarea structurilor vitale pentru o funcţionare normală a aplicaţiei.

De ce nu au creat un folder “(x86)” în interiorul folderului Program Files (de tipul C:\Program Files\x86\)? Pentru evita problemele cauzate de neatenţia programatorilor. Da, şi programatorii pot greşi.

Am făcut referire mai sus la variabile de mediu. Aceste variabile de mediu asigură locaţii predefinite resurselor unei aplicaţii.

O aplicaţie cu variabila %PROGRAMFILES% îşi va căuta resursele, predefinit, în C:\Program Files (dacă sistemul de operare a fost instalat pe o partiţie cu litera “C”). Astfel, dacă un programator care construieşte o aplicaţie de 32 de biţi unde va introduce variabila de mediu %PROGRAMFILES%, există riscul ca acea aplicaţie să încarce resursele pentru platforma de 64 de biţi ducând la un eventual eşec de rulare (dll-ul de 32 de biţi aflându-se în rădăcina C:\Program Files\(x86) ).

O să spuneţi că problema se va rezolva simplu prin introducerea variabilei %x86%. Nu va funcţiona pentru că sistemul de operare nu are în structura podului (cunoscut drept kernel) această variabilă, nu o cunoaşte. Se numeşte pod deoarece el este mediatorul dintre programe şi componentele hardware iar dacă nu există căi în kernel ca %x86%, aplicaţia nu va obţine viza pentru accesul memoriei, procesorului de calcul ş.a.m.d.

Ca un sfat, pentru o funcţionare corectă a aplicaţiilor, se recomandă să vă instalaţi aplicațiile fără a forţa destinaţia predefinită sau, în caz că o faceţi, asumaţi-vă riscurile.

Deşi o maşină cu motor ce funcţionează cu benzină poate funcţiona, în puţine cazuri, cu motorină, s-ar putea să nu aibă aceleaşi performanţe, eventual s-ar putea să se strice motorul în timp şi va fi necesară o cheltuială pe măsură la reparare. “Daţi Cezarului ce este al Cezarului.”





Articolul este adaptare de Bogdan Mihalcea după why-does-64-bit-windows-need-a-separate-program-files-x86-folder. Alte surse folosite:
en.wikipedia.org/wiki/Kernel_%28computing%29
en.wikipedia.org/wiki/Dynamic-link_library
www.itcsolutions.eu/2010/11/29/setare-variabile-de-mediu-environment-variables-in-windows-7-pentru-java/
en.wikipedia.org/wiki/Environment_variable
best-windows.vlaurie.com/environment-variables.html