This is an old revision of the document!


Tema de casă 4 - Master Boot Record


Responsabili: Darius Neațu, Radu Vișan

Deadline: TODO

Ultima modificare: 7.12.2015

Obiective


În urma realizării acestei teme, studentul va fi capabil să:

  • lucreze cu operații pe fișiere binare / text
  • lucreze cu șiruri de caractere
  • lucreze cu structuri
  • lucreze modularizat, implementand funcții ajutătoare
  • promoveze examenul cu notă mare

Enunțul temei


Primul sector fizic de pe un hard-disk poartă numele de Master Boot Record (MBR). Acest sectore are 512 octeți și conține informații foarte importante despre modul cum este partiționat hard-disk-ul. Dacă acest sector este suprascris sau șters toate informațiile de pe hard-disk se șterg.

În cadrul MBR se găsesc informații despre fiecare partiție de pe hard-disk. Aceste informații sunt stocate într-o tabelă de partiții primare care are doar patru intrări. Prin urmare MBR-ul poate reține informații doar pentru 4 partiții primare. Una dintre aceste patru partiții primare va fi marcată ca activă și de pe ea se va încerca pornirea sistemului de operare. MBR-ul mai contine și bootloader-ul – un mic program care pornește un sistem de operare prezent pe computer. În figura următoare se poate vedea configurația unui MBR:

TODO

Pentru mai multe informații puteți consulta Wikipedia.


Mbrel, student la Facultatea de Automatică și Calculatoare, seria CA, s-a mutat recent în Codeland. După ce a implementat un alocator de memorie, s-a dus să i-l arate lui Algorel, prietenul său. Algorel nu a fost impresionat și a venit cu o nouă provocare pentru el: să îi repare tabela de partiții de pe laptop. Mbrel consideră că tema este prea ușoara pentru el și pentru că lucrează la un nou sistem de operare, după ce a rescris kernelul Linux, așa că s-a gândit să vă propună această temă spre rezolvare. Pe lângă nota 10 și mulțumiri, Mbrel vă oferă, în cazul unei reușite, un pupic sau o strângere de mână (după preferințe).

Implementare


În implementarea temei vom considera un model simplificat al MBR, întrucat unele informații nu sunt relevante pentru noi în acest moment. Vom simula un sistem de fișiere de pe un hard-disk, considerat un fișier binar din motive de simplitate. Partițiile existente sunt toate primare, iar numărul lor poate fi mai mare decât patru.

Definim următoarele elemente:

  1. MBR (Master Boot Record)
    Păstrează funcționalitatea unui MBR real, dar va fi particularizat pentru această temă. El va conține doar următoarele informații:
    1. un int reprezentând numărul de partiții existente
    2. o listă cu adresele de început pentru fiecare partiție existentă. În continuare ne vom referi la o adresă ca fiind o poziție din fișierul binar pe care se lucrează. Prima poziție din fișier este 0x00.
  2. Partiție
    O partiție înglobează un sistem de fișiere și directoare, având o dimensiune specificată.
    Conține în ordine următoarele informații:
    1. header = o succesiune de 12 bytes cu următoarea semnificație:
      1. un int reprezentând lungimea numelui partiției
      2. 8 bytes reprezentând numele partiției; prin convenție, numele partiției este de forma “/dev/sd?”, unde ? este un character alfanumeric
      3. un int reprezentând numărul maxim de directoare de pe partiție. Notăm acest număr cu MAXD.
      4. un int reprezentând numărul maxim de fișiere de pe partiție. Notăm acest număr cu MAXF.
    2. exact MAXD directoare, fiecare având exact MAXF fișiere alocate (după regulile care vor fi prezentate în continuare)
    3. MAXF fișiere specifice partiției
  3. Director
    Conține în ordine următoarele informații:
    1. header = o succesiune de 12 bytes cu următoarea semnificație:
      1. un int reprezentând lungimea numelui directorului
      2. 8 bytes reprezentând numele directorului
    2. MAXF fișiere aparținând directorului curent. MAXF este cel specificat în header-ul partiției curente
  4. Fișier
    1. Conține doar un header definit ca o succesiune de 12 bytes cu următoarea semnificație: un int reprezentând lungimea numelui fișierului și 8 bytes reprezentând numele fișierului.

Observații

  • Header-ul se regăsește în componența fiecărui element. Pentru simplitate se consideră că header-ul începe cu 12 bytes, din care 4 bytes reprezintă lungimea numelui. Următorii 8 bytes sunt rezervați numelui. Dacă valoarea primului int este mai mică decât 8, atunci se rezervă tot 8 bytes, completându-se cu zerouri (spre dreapta).
  • Un director inexistent este reprezentat pe hard-disk ca un director existent, având toată informația setată pe 0.
  • Un fișier inexistent este reprezentat pe hard-disk ca un fișier existent, având toată informația setată pe 0.

Pentru a ilustra cele spuse anterior vom considera exemplul din Figura 1: TODO

In figură am folosit următoarele convenții:

  • MBR = roșu
  • Descrierea unei partiții = verde
  • Descrierea unui director = albastru
  • Descrierea unui fișier = mov
  • Indexul de start al liniilor, respective indicii coloanelor = negru (acesta este doar pentru exemple, fișierele de intrare nu vor conține aceste valori)

În exemplu, MBR conține două partiții: prima începe la poziția 0x0C în fișier, iar cea de-a doua partiție începe la poziția 0x44 (0x semnifică baza 16; 44 în baza 16 inseamnă 68 în baza 10).

Prima partiție are numele “/dev/sda”, MAXD = 1, MAXF = 1 și conține:

  • directorul “/dev/sda/acs”
  • fișierele “/dev/sda/acs/pl”, “/dev/sda/cmos4000”

Analog se definește și a doua partiție.

Cerințe

programare/teme_2015/tema4_2015_ca.1449442409.txt.gz · Last modified: 2015/12/07 00:53 by radu_silviu.visan
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0