Lucrul cu aplicațiile freebsd scrise pentru linux

Lucrul cu aplicațiile pe FreeBSD. scris pentru Linux

14.5.1. Cum este aranjat acest lucru?
FreeBSD acceptă o abstractizare numită "încărcător de clasă executabil", care este de fapt prima etapă a apelului de sistem execve (2).







De fapt, FreeBSD are mai multe încărcătoare decât unul, care, în caz de eșec, execută programul ca script (script).

Punct de vedere istoric, singurul încărcător pe sistemele UNIX, verificați „numărul magic“ (de obicei primele 4 sau 8 octeți din fișier) pentru a determina dacă un format de fișier executabil sistem este cunoscut, și dacă da, apelați bootloader corespunzătoare.

Dacă fișierul nu a fost recunoscut de sistem ca executabil, execve (2) a returnat o eroare, iar shell-ul curent a început executarea fișierului ca script.

Mai târziu, sh (1) a fost modificat, pentru a verifica primele două caractere din fișier și dacă s-au dovedit. apoi fișierul a fost executat ca un script pentru csh (1) (se susține că SCO au fost primii care au făcut această modificare).

FreeBSD se comportă diferit: rulează prin lista de încărcătoare, inclusiv un # special! încărcătorul care apelează interpretul sau / bin / sh, dacă nu găsește cel potrivit.

Formatul fișierului executabil FreeBSD este determinat de "numărul magic". În acest stadiu, nu a fost încă pe scară largă, pentru care sistemul de operare este un fișier (Linux, Solaris, sau orice alta, folosind executabilele ELF-format).







În consecință, programele Linux ar trebui să fie "marcate" pentru Linux (de exemplu, folosind brandul utilitar (1)):

# brandelf -t fișierul Linux

Când încărcătorul ELF găsește "marca" Linuxului, înlocuiește pointerul corespunzător în structura proc. Toate apelurile de sistem sunt indexate prin acest pointer (într-un sistem tradițional UNIX, este o serie de sysent [] care conține apeluri sistem). Unele situații speciale și apeluri de sistem sunt gestionate de un modul special de suport pentru kernel-ul Linux.

În plus, Linux emulator dinamic „schimbare rădăcină“ a sistemului de fișiere atunci când se caută fișiere (de fapt, fac același lucru ca și opțiunea de unire atunci când montarea sistemelor de fișiere (a nu se confunda cu unionfs!)). În primul rând, fișierul este căutat în directorul / compat / linux / originale-cale, și numai atunci, în cazul în care nu reușește, la original /-cale. Acest lucru permite programelor Linux să execute comenzi FreeBSD dacă nu există comenzi Linux corespunzătoare. De exemplu, copierea FreeBSD uname (1) la directorul / compat / Linux / bin /, puteți "obține" programe Linux raport pe care le rula sub FreeBSD.

Care este diferența dintre apelurile de sistem Linux și FreeBSD? Practic nu. Singura diferență (pentru moment, în viitor, orice se poate și, probabil, se va schimba), probabil în faptul că funcțiile de protecție a sistemului FreeBSD apeluri la kernel-ul, și pentru Linux, acestea pot fi fie în miez sau într-un modul dinamic de încărcare.

Este posibil să o numiți emulație? Nu, nu este. Ca atare, nu există niciun emulator (sau simulator). În acest caz, de ce spun "emularea Linux"? Pentru a "deranja" FreeBSD. 8-). De fapt, aceasta este o problemă de terminologie: nu a existat niciun cuvânt care să descrie mai exact acest proces. Nu se poate spune că FreeBSD rulează aplicații Linux (fără a recompila sau încărca modulul kernel corespunzător). Apoi au venit cu termenul "emulare Linux".







Articole similare

Trimiteți-le prietenilor: