26.07.2013 Views

File Systems and Disk Layout I/O: The Big Picture

File Systems and Disk Layout I/O: The Big Picture

File Systems and Disk Layout I/O: The Big Picture

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Representing a <strong>File</strong> On-<strong>Disk</strong> in Nachos<br />

An Open<strong>File</strong> represents a file in<br />

active use, with a seek pointer <strong>and</strong><br />

read/write primitives for arbitrary<br />

byte ranges.<br />

logical<br />

block 0<br />

logical<br />

block 1<br />

logical<br />

block 2<br />

once upo<br />

n a time<br />

/nin a l<br />

<strong>and</strong> far<br />

far away<br />

,/nlived t<br />

he wise<br />

<strong>and</strong> sage<br />

wizard.<br />

Open<strong>File</strong>* ofd = filesys->Open(“tale”);<br />

ofd->Read(data, 10) gives ‘once upon ‘<br />

ofd->Read(data, 10) gives ‘a time/nin ‘<br />

<strong>File</strong>Hdr<br />

Open<strong>File</strong><br />

bytes<br />

sectors<br />

<strong>File</strong> Metadata<br />

Open<strong>File</strong>(sector)<br />

Seek(offset)<br />

Read(char* data, bytes)<br />

Write(char* data, bytes)<br />

A file header describes an on-disk<br />

file as an ordered sequence of<br />

sectors with a length, mapped by<br />

a logical-to-physical block map.<br />

Allocate(...,filesize)<br />

length = <strong>File</strong>Length()<br />

sector = ByteToSector(offset)<br />

On disk, each file is represented by a <strong>File</strong>Hdr structure.<br />

<strong>The</strong> <strong>File</strong>Hdr object is an in-memory copy of this structure.<br />

file attributes: may include owner,<br />

access control, time of<br />

create/modify/access, etc.<br />

logical-physical block map<br />

(like a translation table)<br />

physical block pointers in the<br />

block map are sector IDs<br />

<strong>The</strong> <strong>File</strong>Hdr is a file system “bookeeping” structure<br />

that supplements the file data itself: these kinds of<br />

structures are called filesystem metadata.<br />

bytes<br />

sectors<br />

etc.<br />

<strong>File</strong>Hdr* hdr = new <strong>File</strong>Hdr();<br />

hdr->FetchFrom(sector)<br />

hdr->WriteBack(sector)<br />

ANachos<strong>File</strong>Hdr occupies<br />

exactly one disk sector.<br />

To operate on the file (e.g.,<br />

to open it), the <strong>File</strong>Hdr must<br />

be read into memory.<br />

Any changes to the attributes<br />

or block map must be written<br />

back to the disk to make them<br />

permanent.<br />

5

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!