Bài giảng Hệ điều hành - Chương 4: Hệ thống quản lý tập tin
Các khái niệm tập tin- thư mục
Mô hình quản lý và tổ chức tập tin
Các chức năng hệ thống tập tin
Cài đặt hệ thống tập tin
Hệ thống tập tin hệ điều hành MS-DOS
Hệ thống tập tin hệ điều hành Unix
g tin sau:0: Entry này còn trống. : Thư mục cha0E5 : Entry của tập tin này tạm thời bị xóaKý tự bất kỳ : tên của một tập tinDiễn dải byte thuộc tính:1: tập tin ẩn1: tập tin chỉ đọc1: tập tin hệ thống1: Nhãn đĩa1: Thư mục con1: lưu trữHệ thống tập tin HĐH MSDOS (tt)Diễn dải ngày tạo, giờ tạo7bit: năm 4bit : tháng 5bit: ngày5bit: Giờ 6bit : Phút 5bit: giâyHệ thống tập tin HĐH MSDOS(tt)Cấu trúc dữ liệu cài đặt:Bảng tham số đĩaTypedef struct { unsigned char JMP[3]; unsigned char Ver[8]; unsigned SecSiz; unsigned char ClustSiz; unsigned ResSec; unsigned char FatCnt; unsigned RootSiz; unsigned TotSec; unsigned char Media; unsigned FatSiz; unsigned TrkSec; unsigned HeadCnt; unsigned HidSec; }EntryBPB;Hệ thống tập tin HĐH MSDOS(tt)Bảng tham số đĩa typedef union { unsigned char Sector[512]; EntryBPB Entry; }UnionBPB JMPVerSecSizClustSiz.MSDOS6.0 512 1UnionBpBHệ thống tập tin HĐH MSDOS(tt)Cấu trúc dữ liệu cài đặt:Cấu trúc ngày thángtypedef struct { unsigned S: 5 ; unsigned M: 6 ; unsigned H:5; }Time;typedef union { unsigned intTime; Time T ; }UnionTime;Hệ thống tập tin HĐH MSDOS(tt)Cấu trúc dữ liệu cài đặt:Cấu trúc ngày thángtypedef struct { unsigned D: 5 ; unsigned M: 6 ; unsigned H:7; }Date;typedef union { unsigned intDate; Date Day ; }UnionDate;Hệ thống tập tin HĐH MSDOS(tt)Cấu trúc dữ liệu cài đặt:Cấu trúc byte thuộc tính tập tintypedef struct { unsigned char ReadOnly: 1 ; unsigned char Hidden : 1 ; unsigned char System : 1 ; unsigned char Volume : 1 ; unsigned char SubDir : 1 ; unsigned char Archive : 1 ; unsigned char DR : 2 ; }Attrib;typedef union { unsigned char charAtt; Attrib Attr ; }UnionAttrib;Hệ thống tập tin HĐH MSDOS(tt)Cấu trúc dữ liệu cài đặt:Cấu trúc một Entry tập tintypedef struct { unsigned char FileName[8] ; unsigned char Ext[3] ; UnionAttrib Attribute ; unsigned char DR[10] ; UnionTime CreateTime ; UnionDate CreateDate ; unsigned char ClustBegin ; long FileSize; }EntryDir;typedef union { unsigned char Entry[32]; EntryDir EntDir ; }UnionDir;Hệ thống tập tin HĐH MSDOS(tt)Cấu trúc dữ liệu cài đặt:Danh sách liên kếttypedef struct Node{ void *Data; Node *Next; }NodeType;typedef NodeType *PointerType;Clust1 Clust2 Clust3ListTMC1 TMC2 TMC3EntryDir1 EntryDir2 EntryDir3Hệ thống tập tin HĐH MSDOS(tt)Cấu trúc dữ liệu cài đặt:Hàm InsertLastInt InsertLast (PointerType &List, PointerType &Last, void* Item){ PointerType Temp; Temp= new NodeType; if( !Temp) return 0; Temp->Data = Item; Temp->Next = NULL; if(List==NULL) List=Temp; else Last->Next=Temp; Last = Temp; return 1;}Hệ thống tập tin HĐH MSDOS(tt)Cấu trúc dữ liệu cài đặt:Hàm đọc Sector từ đĩa vớI số hiệu theo kiểu vật lýint ReadDiskBios(char *Buff,unsigned Side, unsigned Track, unsigned Sector, unsigned SecNum){ union REGS u, v; struct SREGS s; int k, I=0; v.x.cflag=1; while((I>2; X=X & 0X00FF; X=X | Sector; Track = Track <<8; Track=Track | X; //Track ( 10), Sector(6)Hệ thống tập tin HĐH MSDOS(tt)if ( ReadDiskBios(Buff, Side, Track, Sector, SecNum)) return 1; else return 0;} Hệ thống tập tin HĐH UNIXGiới thiệu:Unix được thiết kế cho hầu hết các loại máy tính.Unix là môi trường phát triển ứng dụng tốt cho các ứng dụng đòi hỏi tính toán trên bộ xử lý 32bitUnix là hệ điều hành đa nhiệm nhiều người dùngUnix được sử dụng nhiều trong các hệ thống mạng lớn.Lịch sử phát triển:Năm 1969 Ken Thompson thiết kế một môi trường để nghiên cứu và phát triển các chương trình đó là tiền thân của HĐH Unix. Unix được viết bằng hợp ngữ và bao gồm các hệ thống tập tin, cơ chế kiểm soát tiến trình, công cụ xây dựng chương trình.Năm 1970 Unix được thiết kế quản lý 24K bộ nhớ, quản lý tập tin lớn nhất là 64KB.Hệ thống tập tin HĐH UNIXLịch sử phát triển (tt)Năm 1973 Unix được viết lại bằng ngôn ngữ C bởi Denis Ritchie giúp cho phần mềm hệ thống Unix dễ hiểu hơn.Từ năm 1973 đến 1975 mã nguồn của Unix được cung cấp cho các trường đại học và nó trở nên rất phổ biến.Năm 1979 Unix là hệ thống chia xẻ thời gian, kích thước file quản lý được là 1 tỷ byte.Năm 1980 Xenix là HĐH Unix của Microsoft cho bộ xừ lý 16 bitNăm 1982 Unix System III của AT&T ra đời cung cấp cơ chế truy xuất từ xa.Ngày nay Unix được phát triển rộng khắp thế giới bởi các công ty khác nhau và cung cấp môi trường sử dụng thân thiện hơn.Hệ thống tập tin HĐH UNIXCài đặt hệ thống tập tin I-node.Bootsector Khối đặc biệt Bảng I-node Khối dữ liệu- BootSector : chứa chương trình mồi hệ điều hànhKhối đặc biệt: lưu trữ các thông tin quan trọng về toàn bộ hệ thống tập tin, (số I-node, số khối đĩa, dãy các ô nhớ còn trống trên đĩa,) Sau khối đặc biệt là bảng I-Node được đánh số từ 1 đến tối đa. Khối dữ liệu là vùng nhớ lưu trữ nội dung tập tin, thư mục.Hệ thống tập tin HĐH UNIX(tt)Cách quản lý các ô nhớ còn trống trong khối dữ liệu: Dùng phương pháp Bitmap: Với đĩa có n ô nhớ sẽ được ánh xạ thành n bit với giá trị 1 là còn trống, giá trị 0 là đã chứa dữ liệu. Như vậy một đĩa 20MB cần 20000 bit để lưu trữ thông tin. Chiếm khoảng 3 ô nhớ.....10011100001111000011011111100000Hệ thống tập tin HĐH UNIX(tt)Tổ chức lưu trữ tập tin:Mỗi file trong unix tương ứng với một I-Node. Một I-Node có kích thước 64byte bao gồm các thông tin về file: file Node, quyền sở hữu file của người sử dụng, quyền sở hữu nhóm, kích thước file, thời điểm tạo,thời điểm truy cập sau cùng, thời điểm thay đổi sau cùng, địa các ô nhớ chứa nội dung,Phần đánh địa chỉ các ô nhớ nội dung tập tin được chia thành 2 phần: phần đầu gồm 10 pt chứa được 10 địa chỉ ô nhớ. Phần thứ 2 gồm 3 con trỏ gián tiếp: Single indirect, double indirect, triple indirect.Đối với tập tin có kích thước nhỏ hơn 10 ô nhớ dữ liệu thì các con trỏ gián tiếp không được sử dụng để ghi địa chỉ.Khi một file có kích thước lớn hơn 10 ô nhớ dữ liệu thì con trỏ single indirect được sử dụng chỉ đến một ô nhớ dành riêng, ô nhớ này lại chứa 256 địa chỉ của ô nhớ dữ liệu.Tương tự con trỏ double chỉ đến một ô nhớ chứa 256 địa chỉ ô nhớ và mỗi ô nhớ này lại chứa 256 địa chỉ ô nhớ dữ liệu.Một file lớn nhất sử dụng cả 3 con trỏ gián tiếp là 16 GB.Hệ thống tập tin HĐH UNIX(tt)File Inodesố liên kếtNgười sở hữuNhóm sở hữuKích thước fileNgày, giờ tạo ..Pt1Pt2Pt10Single indirectDouble indirectTriple indirect.Pt1Pt2.Pt256.Pt1.Pt256Pt1Pt2.Pt256Pt1Pt2.Pt256Hệ thống tập tin HĐH UNIX(tt)Cấu trúc thư mụcCấu trúc thư mục được sử dụng trong Unix vô cùng đơn giản, mỗi entry bao gồm tên tập tin, số hiệu I-Node của file. Mỗi Entry có kích thước 16 byte:I-NodeTên tập tinKhi một file được mở , hệ thống file phải xác định vị trí khối dữ liệu trên đia nhờ vào đường dẫn được cung cấp.Ví dụ; cách truy tìm file dựa vào đường dẫn được cung cấp : /usr/ast/mboxHệ thống tập tin HĐH UNIX(tt)Trước hết đọc I-Node của thư mục gốc – là I-Node đầu tiên trong bảng I-NodeĐọc từng entry trong thư mục gốc so sánh với thư mục usr từ đó tím ra I-node của thư mục usr.Từ I-node này tiếp tục xác định các entry trong thư mục và so sánh với ast khi đó tìm được I-node của /usr/ast. Tiếp tục tương tự sẽ tìm được I-node của /usr/ast/mbox1.1..4Bin7Dev14Db9Ect6Usr8tmpModeSizeTime4066.1..19Dick30Erik51Jim26Ast45Bal87Dat26.6..64Grant93Book60Mbox81Minix17SrcModeSizeTime132Root Dir I-node 6 Khối 132 là thư I-node của Khối 406 của /usr mục /usr /usr/ast thư mục /usr/astHướng dẫn giải các bài tậpBài tập 1: Viết chương trình giả lập lệnh DIR trong hệ điều hành MSDOSVD: người sử dụng cung cấp đường dẫn A:\BT\BT1Phân tích đường dẫn: void PathAnalyse(char *Path, PointerType &ListPath)BTBT1NULLListPathHướng dẫn giải các bài tậpBài tập 1: Viết chương trình giả lập lệnh DIR trong hệ điều hành MSDOSVD: người sử dụng cung cấp đường dẫn A:\BT\BT12. Đọc bảng tham số đĩa đưa vào BPB : EntryBpb ReadBpB()3. Đọc bảng Fat : unsigned char FAT[512* Bpb.FatSiz] void ReadFat ( )Fat1Fat2RootDataFATReadDisk(FAT, Bpb.ResSec, Bpb.FatSiz)Hướng dẫn giải các bài tậpBài tập 1: Viết chương trình giả lập lệnh DIR trong hệ điều hành MSDOSVD: người sử dụng cung cấp đường dẫn A:\BT\BT14. Lấy danh sách các sector của thư mục gốc : ListClust PointerType GetClusterRoot () Fat1Fat2RootDataListClustidnId1Hướng dẫn giải các bài tậpBài tập 1: Viết chương trình giả lập lệnh DIR trong hệ điều hành MSDOSVD: người sử dụng cung cấp đường dẫn A:\BT\BT15. Đọc nội dung thư mục Root vào danh sách ListEntry PointerType GetEntryDir (PointerType ListClust, char flag) flag=0: Đọc các entry thư mục gốc flag =1: Đọc các entry thư mục conFat1Fat2RootDataListEntryEntryDirEntryDirHướng dẫn giải các bài tậpBài tập 1: Viết chương trình giả lập lệnh DIR trong hệ điều hành MSDOSVD: người sử dụng cung cấp đường dẫn A:\BT\BT16. Tìm trong ListEntry có thư mục BT không nếu có lấy được số hiệu cluster của thư mục BT và các cluster còn lại bằng hàm NextEntry và lại đưa vào danh sách ListClust mới.ListEntryEntry(BT)ClustBigEntryDirClustBigClustBigListClustNextEntryNextEntryHướng dẫn giải các bài tậpBài tập 1: Viết chương trình giả lập lệnh DIR trong hệ điều hành MSDOSVD: người sử dụng cung cấp đường dẫn A:\BT\BT15. Đọc nội dung thư mục BT dựa vào danh sách ListClust mới tìm được PointerType GetEntryDir (PointerType ListClust, char flag) flag=0: Đọc các entry thư mục gốc flag =1: Đọc các entry thư mục con (đổi số hiệu cluster sang số hiệu SectorCurrSec=Bpb.ResSec+Bpb.Fatsiz*Bpb.FatCnt+(Bpb.RootSiz*32)/512 +( CurrClust-2)*Bpb.ClustSiz;Fat1Fat2RootDataListEntry(BT1)EntryDirEntryDirHướng dẫn giải các bài tậpBài tập 1: Viết chương trình giả lập lệnh DIR trong hệ điều hành MSDOSVD: người sử dụng cung cấp đường dẫn A:\BT\BT17. Duyệt danh sách ListEntry(BT1) để in ra màn hình các tập tin và thư mục con theo định dạng như sau: void PrintTo(PointerType ListEntry)Tên Kích thước Ngày tạo Giờ tạo . .. . .. . ..Hướng dẫn giải các bài tậpBài tập 2: Viết chương trình giả lập lệnh TYPE trong hệ điều hành MSDOSVD: người sử dụng cung cấp đường dẫn A:\BT\tt.txtLàm tương tự như trên cuối cùng có danh sách ListClust của tập tin tt.txt. Thực hiện xuất từng ký tự trong nội dung các ListClust với số byte là kích thước tập tin. void PrintFile (PointerType ListClust)
File đính kèm:
- He dieu hanh 4.ppt