Bài giảng về phần mềm mã nguồn mở - file Bài giảng System software.doc. Open Library - thư viện mở thông tin giáo dục

Nhiệm vụ thực tế số 9.

Chủ đề: “Làm việc với cấu trúc tập tin”

Thông tin lý thuyết

Mục tiêu của công việc: nghiên cứu cấu trúc của hệ thống tệp, đặc điểm của tệp, chức năng của hệ thống tệp, quy tắc tạo tên tệp.

File (từ file word tiếng Anh - hồ sơ, bộ tài liệu)- đây là một lượng thông tin nhất định (chương trình hoặc dữ liệu) có tên, được lưu trữ trong bộ nhớ dài hạn của máy tính.

Các tập tin có thể được đặt trực tiếp trên đĩa hoặc trong các vùng đặc biệt gọi là thư mục, danh mục sản phẩm hoặc thư mục.

Tài liệu là một vùng được đặt tên trên đĩa. Mỗi tập tin có ký hiệu sau:

Tên tệp được chia thành hai phần bằng dấu chấm: tên tệp thích hợp (tiền tố) và phần mở rộng (hậu tố), xác định loại của nó (chương trình, dữ liệu, v.v.). Tên thực của tệp do người dùng đặt và loại của nó thường được chương trình đặt tự động.

Tên tệp đầy đủ được xây dựng như sau: [tên ổ đĩa:] [path\] tên tệp. Đĩa có thể có tên A:, B: – đối với đĩa mềm (đĩa mềm); C:, D:, E: v.v. lên tới Z: – cho ổ đĩa cứng và các phân vùng logic của chúng, đĩa điện tử (ảo), cho đĩa laser CD-ROM và ổ đĩa flash.

Bảng 1. Phần mở rộng tên file

Thuộc tính

Các đặc điểm của tệp cung cấp cho tệp một số thuộc tính nhất định. Đối với các hệ thống tệp phổ biến nhất hiện nay FAT16, FAT32 và NTFS, có thể phân biệt các thuộc tính tệp sau:

"Chỉ đọc"- có nghĩa là tệp ở chế độ chỉ đọc bởi hệ điều hành, tức là không thể thực hiện chỉnh sửa nào đối với tệp đó. Trong hầu hết các trường hợp, điều này không có nghĩa là không thể sửa chữa gì cả, chỉ là khi cố gắng thay đổi một tệp có thuộc tính này, người dùng sẽ nhận được cảnh báo tương ứng.



"Ẩn giấu"- ngụ ý rằng một tệp có thuộc tính này không được hiển thị khi hiển thị danh sách tệp nhất định. Hầu hết các chương trình có thể tùy chỉnh việc xử lý thuộc tính này. Ví dụ: Windows Explorer tiêu chuẩn cho phép bạn vừa ẩn vừa hiển thị các tệp có thuộc tính “ẩn”. Trong trường hợp thứ hai, biểu tượng tập tin được hiển thị mờ.

"Hệ thống"- các tệp có thuộc tính “hệ thống” thường đề cập đến các tệp hệ điều hành quan trọng không thể xóa hoặc sửa đổi. Nói chung, thuộc tính "hệ thống" là phiên bản "có trọng số" của thuộc tính "chỉ đọc" được kết hợp với thuộc tính "ẩn". Trong Windows Explorer tiêu chuẩn, thuộc tính "hệ thống" được xử lý tương tự như thuộc tính "ẩn" - các tệp như vậy bị ẩn khỏi người dùng theo mặc định, nhưng bạn có thể cho phép chúng hiển thị.

"Lưu trữ"- hiện tại, thuộc tính tệp FAT này thực tế không được sử dụng cho mục đích đã định. Thuộc tính này ban đầu nhằm mục đích chỉ ra các chương trình lưu trữ các tệp sẽ được sao lưu. Nói cách khác, một chương trình sao lưu tệp trên ổ cứng phải đặt lại thuộc tính "lưu trữ" và các chương trình sau đó thực hiện bất kỳ thay đổi nào đối với tệp này, ngược lại, phải thiết lập lại nó. Do đó, chương trình sao lưu có thể dễ dàng xác định bằng cách kiểm tra thuộc tính tệp nhất định xem tệp nhất định trên ổ cứng có thay đổi kể từ lần sao lưu trước hay không.

Trong hệ thống tệp NTFS, được sử dụng trong các phiên bản Windows hiện đại, ngoài các thuộc tính đã được cung cấp, thuộc tính tệp còn lưu trữ tên tệp, nội dung của tệp cũng như nhiều thông tin khác. Hơn nữa, ngoài một tập hợp các thuộc tính tệp tiêu chuẩn, hệ thống tệp NTFS cho phép các nhà phát triển ứng dụng tạo các thuộc tính của riêng họ mà ứng dụng của họ có thể hoạt động sau đó.

Hệ thống tập tin- đây là một phần chức năng của hệ điều hành thực hiện các thao tác trên tệp. Hệ thống tệp cho phép bạn làm việc với các tệp và thư mục (thư mục) bất kể nội dung, kích thước, loại, v.v. của chúng.

Hệ thống tệp xác định cấu trúc chung để đặt tên, lưu trữ và sắp xếp tệp trong hệ điều hành.

Chức năng hệ thống tập tin:

1. Lưu thông tin trên phương tiện bên ngoài.

2. Đọc thông tin từ tập tin.

3. Xóa tập tin, thư mục.

4. Đổi tên tập tin.

5. Sao chép tập tin, v.v.

Mỗi đĩa được chia thành hai khu vực: khu vực lưu trữ tệp và thư mục. Thư mục chứa tên của tập tin và chỉ dẫn nơi nó bắt đầu trên đĩa.

Hệ thống tập tin đơn cấp

Bảng 2. Cấu trúc các mục trong danh mục

Hệ thống tập tin phân cấp

Các hoạt động khác nhau có thể được thực hiện trên các tập tin:

  • Sao chép (một bản sao của tập tin được đặt từ thư mục này sang thư mục khác)
  • Di chuyển (tệp được chuyển sang thư mục khác)
  • Xóa (mục nhập tệp sẽ bị xóa khỏi thư mục)
  • Đổi tên (thay đổi tên tập tin), v.v.

Quy tắc tạo tên file:

Không thể sử dụng các ký tự sau đây dành riêng cho các chức năng đặc biệt:

? : * / \ “ > < |

Phần mở rộng cho biết loại thông tin được lưu trữ trong tệp (loại tệp):

· txt, doc, rtf - tài liệu văn bản

bmp, jpg, gif - tập tin đồ họa

Ngoài tên và phần mở rộng, các thông số của file còn bao gồm: kích thước file, ngày giờ tạo, icon.

Kích thước tập tin cho biết nó chứa bao nhiêu thông tin và theo đó, nó chiếm bao nhiêu dung lượng trên đĩa. Kích thước file được biểu thị bằng đơn vị khối lượng thông tin: byte, KB, MB.

Ngày và giờ tập tin được tạo. Các tham số này cũng đặc trưng cho tệp và được viết theo các quy tắc nhất định. Ví dụ: mục 03/05/97 15:30 có nghĩa là tệp được tạo vào ngày 5 tháng 3 năm 1997 và thời gian tạo là 15 giờ 30 phút. Ngày và giờ được hệ điều hành tự động ghi lại.

Biểu tượng- một đối tượng đồ họa cơ bản. Bằng biểu tượng, bạn có thể biết tệp được tạo trong môi trường nào hoặc loại tệp đó.

Các thư mục được sử dụng để tổ chức các tập tin. Thư mục- một đối tượng môi trường Windows được thiết kế để kết hợp các thư mục và tệp khác thành các nhóm. Tên thư mục tuân theo các quy tắc giống như tên tệp nhưng chúng không có phần mở rộng.

Thao tác với tập tin và thư mục:

· đóng;

· mở;

· đổi tên;

· xóa bỏ;

· di chuyển;

· sao chép (tạo một bản sao).

Tiến triển

Bài tập 1

Chỉ định đường dẫn đầy đủ đến các tệp:

Nhiệm vụ 2

Nhiệm vụ 3

Một cây cấu trúc tệp phân cấp trên đĩa được đưa ra. Chữ in hoa chỉ tên thư mục, chữ in thường chỉ tên tệp:

Tìm lỗi trong cấu trúc tập tin.

Nhiệm vụ 4

Một cây cấu trúc tệp phân cấp trên đĩa được đưa ra. Chữ in hoa chỉ tên thư mục, chữ in thường chỉ tên tệp:

Liệt kê danh mục cấp 1, 2, 3 nếu có. Chỉ định đường dẫn từ thư mục gốc đến từng tệp.

Nhiệm vụ 5

C:\Bản vẽ\Nature\Sky.bmp

C:\Bản vẽ\Thiên nhiên\Snow.bmp

C:\Pictures\Computer\Monitor.bmp

C:\Tài liệu của tôi\Report.doc

Nhiệm vụ 6

Đường dẫn từ thư mục gốc đến một số tệp được lưu trữ trên đĩa được chỉ định.

Hiển thị cấu trúc tập tin dưới dạng cây.

C:\Tóm tắt\Vật lý\Hiện tượng quang học.doc

C:\Tóm tắt\Tin học\Internet.doc

C:\Abstracts\Informatics\Virus máy tính.doc

C:\Bản vẽ\Sunset.jpg

C:\Bản vẽ\ Winter.jpg

1. Windows sử dụng hệ thống tập tin nào?

2. Tập tin là gì?

3. Các tập tin được lưu trữ trên đĩa như thế nào?

4. Tên file được hình thành như thế nào?

5. Tại sao bạn cần phần mở rộng tên file?

6. Bạn biết những phần mở rộng tên tệp tiêu chuẩn nào và ý nghĩa của chúng?

7. Đường dẫn file là gì?

8. Bạn biết tên logic của các thiết bị đĩa là gì?

9. Giải thích các thuật ngữ: thư mục, folder, file, phím tắt, biểu tượng, menu?

10. Sao chép và di chuyển tập tin. Điều này được triển khai như thế nào trên Windows?

11. Làm cách nào để đổi tên tập tin hoặc thư mục?

12. Làm thế nào để tạo một tập tin hoặc thư mục mới?

13. Làm thế nào để xóa một tập tin hoặc thư mục khỏi đĩa?

14. Làm thế nào để xem nội dung của tập tin?

15. Chạy file để thực thi như thế nào?


^ Hệ thống tập tin phân cấp.

Tất cả các tập tin của cấu trúc tập tin được xây dựng thành một cây. Gốc của cây được gọi là gốc hệ thống tập tin. Nếu nút cây là lá thì đó là một tệp có thể chứa dữ liệu hoặc là một thư mục. Các nút khác ngoài lá là các thư mục. Theo đó, việc đặt tên trong một hệ thống như vậy có thể xảy ra theo nhiều cách khác nhau. Đầu tiên là đặt tên file tương ứng với thư mục gần nhất. Nếu chúng ta xem các tệp gần thư mục F0 nhất thì đó là tệp F1 (cũng là một thư mục) và tệp F2. Nghĩa là, nếu bằng cách nào đó chúng ta ngụ ý (một cách có hệ thống) rằng chúng ta đang làm việc trong thư mục F0, thì chúng ta chỉ có thể truy cập các tệp trong thư mục này bằng tên của chúng (F1 và F2). Theo đó, ở một cấp độ, tên phải là duy nhất (trong một thư mục). Vì chúng ta có cấu trúc cây nên chúng ta có thể nói về tên file đầy đủ, đó là đường dẫn từ gốc của cây đến tệp. Ví dụ: đường dẫn đến tệp F3 sẽ có dạng “/F0/F1/F3”. Đồng thời chúng ta có thể làm việc với cả tên file đầy đủ và ngắn gọn. Và vì theo tính chất của cây, đường dẫn đến từng lá là rõ ràng nên chúng ta giải quyết ngay được bài toán thống nhất tên.

Tổ chức đầu tiên như vậy xuất hiện trong Multics OS, được phát triển tại Đại học Berkeley vào cuối những năm 60. Đã lâu rồi, nhưng một giải pháp hay và đẹp như vậy đã bắt đầu xuất hiện trong nhiều hệ điều hành.

Theo đó, với hệ thống phân cấp, mỗi tệp có thể được gán một số thuộc tính nhất định liên quan đến quyền truy cập; cả tệp và thư mục đều có thể có các thuộc tính này. Nghĩa là, tổ chức cấu trúc của một hệ thống tệp như vậy là tốt cho hệ thống nhiều người dùng. Bởi vì một mặt không có vấn đề về đặt tên, mặt khác một hệ thống như vậy có thể được mở rộng rất nhiều và tốt.

Bảo vệ dữ liệu hệ điều hành

^ Nhận dạng là khả năng HĐH nhận ra một người dùng cụ thể và tùy theo định nghĩa, thực hiện các hành động cần thiết để bảo vệ dữ liệu, v.v. Ví dụ: MS DOS là hệ điều hành một người dùng. Có những hệ thống cho phép bạn đăng ký người dùng, nhưng những người dùng này không có liên quan gì với nhau (ví dụ là một số hệ điều hành IBM dành cho máy tính lớn), có nghĩa là họ không thể được tổ chức thành nhóm. Nhưng sẽ thuận tiện hơn nếu tách phòng thí nghiệm, khoa, nhóm nghiên cứu sinh viên, v.v. thành một nhóm riêng.

Trong một tổ chức có thứ bậc của người dùng, có khái niệm về một nhóm. Và có những người dùng thực sự trong nhóm.

Khi đăng ký một người dùng cụ thể, anh ta phải được chỉ định vào một nhóm.

Vì người dùng được chia thành một nhóm, do đó, tương tự như việc phân chia giữa những người dùng cụ thể, có thể chia sẻ tài nguyên với nhóm (nghĩa là người dùng có thể cung cấp các tệp của mình cho tất cả các thành viên trong nhóm.

Và sự phân chia thành các nhóm như vậy cũng có thể mang tính đa cấp với sự phân bổ quyền và cơ hội tương ứng.

Một lưu ý nhỏ - hiện nay có các hệ điều hành trong đó quyền truy cập không chỉ có thể phân cấp mà còn phức tạp hơn - ví dụ: phá vỡ hệ thống phân cấp (một người dùng cụ thể có thể truy cập được một tệp từ một nhóm trên một nhánh khác của cây) .

Đó có lẽ là tất cả những gì cần nói về đặc tính và chức năng của HĐH. Đương nhiên, chúng tôi chưa xem xét tất cả các chức năng của HĐH. Một cái gì đó đã được cố tình bỏ qua vì chúng ta đang xem xét hệ điều hành trong một mô hình đơn giản hóa. Bởi vì mục tiêu của chúng tôi không phải là nghiên cứu một hệ điều hành cụ thể mà là tìm hiểu cách phân loại một hệ điều hành, chúng ta nên xem xét nó và so sánh các loại hệ điều hành khác nhau từ quan điểm nào.

Bài giảng 7

Hệ điều hành Unix

Hôm nay chúng ta chuyển sang phần bắt đầu xem xét Hệ điều hành Unix, vì chúng ta sẽ xem xét nhiều quyết định được đưa ra trong Hệ điều hành bằng cách sử dụng ví dụ về Hệ điều hành này.

Vào giữa những năm 60, Phòng thí nghiệm Bell của AT&T đã tiến hành nghiên cứu và phát triển một trong những hệ điều hành đầu tiên theo nghĩa hiện đại - Multics OS. Đây là hệ điều hành chia sẻ thời gian, nhiều người dùng và trong hệ thống này, các giải pháp thực tế để tổ chức hệ thống tệp đã được đề xuất. Đặc biệt, một hệ thống tập tin cây phân cấp đã được đề xuất. Đây là khoảng năm 1965. Sau một thời gian, sự phát triển này đã tạo ra hệ điều hành Unix. Một trong những câu chuyện phía sau nói rằng công ty có một chiếc máy tính PDP8 không cần thiết với phần mềm rất kém phát triển. Điều cần thiết là một chiếc máy có thể tổ chức công việc thuận tiện cho người dùng, đặc biệt là việc nhập thông tin thuận tiện. Và một nhóm người nổi tiếng - Thompson và Ritchie - đã bắt đầu phát triển hệ điều hành mới trên chiếc máy này. Một lựa chọn khác là họ đang triển khai một trò chơi mới và các công cụ có sẵn không thể truy cập được hoặc bất tiện, và họ quyết định chơi bằng chiếc máy này. Kết quả là sự xuất hiện của hệ điều hành Unix. Điểm đặc biệt của hệ thống này là nó là chương trình hệ thống đầu tiên được viết bằng ngôn ngữ không phải hợp ngữ. Với mục đích viết phần mềm hệ thống này, đặc biệt là hệ điều hành Unix, công việc cũng được tiến hành song song, bắt đầu bằng ngôn ngữ BCPL, từ đó hình thành nên ngôn ngữ B, hoạt động với các từ máy, sau đó là trừu tượng hóa các từ máy. - BN và cuối cùng là ngôn ngữ “C” " Và sau năm 1973, hệ điều hành Unix cuối cùng đã được viết lại sang ngôn ngữ C. Kết quả là, một hệ điều hành đã xuất hiện, 90% mã được viết bằng ngôn ngữ cấp cao, ngôn ngữ độc lập với kiến ​​trúc máy và hệ thống hướng dẫn, và 10% được viết bằng hợp ngữ, 10% này bao gồm hầu hết các ngôn ngữ lập trình. các phần quan trọng về thời gian của nhân hệ điều hành.

Nhiều lập trình viên vào thời điểm đó hơi sốc; ít người tin rằng một hệ điều hành như vậy có thể tồn tại, vì ngôn ngữ cấp cao luôn gắn liền với sự kém hiệu quả lớn. Tuy nhiên, ngôn ngữ C vẫn được thiết kế theo cách có thể viết các chương trình hiệu quả và dịch chúng thành mã máy khá hiệu quả.

Trong số các thuộc tính thiết kế này, cần lưu ý rằng “C” được xây dựng chủ yếu dựa vào hoạt động với con trỏ. Khi viết một chương trình bằng hợp ngữ, chúng ta thường cần thao tác với các địa chỉ để đạt được kết quả mong muốn. Khả năng hoạt động với con trỏ là thuộc tính đầu tiên của “C”, cho phép bạn dịch chương trình bằng ngôn ngữ này sang mã máy một cách hiệu quả.

Nếu nhìn vào một chương trình bình thường trong trình biên dịch chương trình, chúng ta sẽ nhận thấy điều sau - khi lập trình một số khối, chúng ta thường sử dụng một tác dụng phụ (ví dụ: khi tính toán một biểu thức, chúng ta có thể nhận và trì hoãn các kết quả trung gian ở đâu đó), điều tương tự có thể xảy ra được thực hiện bằng ngôn ngữ “ WITH”. Do đó, khái niệm diễn đạt trong “C” rộng hơn nhiều so với các ngôn ngữ khác vào thời điểm đó. Và trong các biểu thức, ngoài các thao tác mới, chẳng hạn như làm việc với con trỏ, offset, dịch chuyển, v.v., một thao tác mới về cơ bản đã xuất hiện - thao tác gán. Tại sao nó mới? Bởi vì trong nhiều ngôn ngữ trước “C”, cũng như sau nó, không có thao tác gán - có toán tử gán. Sự khác biệt là một điều - nếu chúng ta có toán tử gán, trước tiên, yêu cầu không có thao tác nào như vậy ở phía bên phải (chúng ta không thể sử dụng tác dụng phụ), và thứ hai, phía bên trái của toán tử gán là một số tham chiếu vào một vùng nhớ duy nhất. Việc giới thiệu toán tử gán bên trong một biểu thức cho phép chúng tôi giải quyết vấn đề về tác dụng phụ (giá trị của các biểu thức con có thể được sử dụng bên ngoài - và đến lượt chúng, chúng làm giảm số lượng trao đổi với RAM) và đây là một phương tiện hiệu quả .

Những đặc tính này và có lẽ chỉ những đặc tính này của ngôn ngữ mới xác định khả năng tồn tại của nó, tính phù hợp cho các thành phần hệ thống lập trình và khả năng dịch mã tối ưu của các máy khác nhau. Từ quan điểm chuyên môn, C là một ngôn ngữ khủng khiếp. Yêu cầu chính đối với các ngôn ngữ lập trình hiện nay là tính bảo mật trong lập trình. Nghĩa là, các công cụ ngôn ngữ nên giảm thiểu số lỗi có thể xảy ra.

Và các thuộc tính của các ngôn ngữ đó bao gồm:


    1. Kiểm tra loại nghiêm ngặt. Nghĩa là, nếu chúng ta cố gắng nhân một biến số nguyên với một biến số thực, ngôn ngữ sẽ đưa ra lỗi. Theo mặc định, tất cả các chuyển đổi loại đều không hợp lệ.

    2. Cung cấp quyền kiểm soát quyền truy cập vào bộ nhớ chương trình. Điều này có nghĩa là nếu một số được ghi vào bộ nhớ của chúng ta dưới dạng số nguyên thì chúng ta chỉ có thể đọc số đó từ đó dưới dạng số nguyên chứ không phải dưới dạng dấu phẩy động hoặc ký hiệu. Trong “C” và các ngôn ngữ khác, quyền truy cập không kiểm soát vào bộ nhớ được cung cấp bởi một con trỏ; hơn nữa, thông qua một con trỏ, một mặt, chúng ta mất bất kỳ thông tin nào về loại và mặt khác, chúng ta có thể đánh lừa các hàm về mặt các thông số thực tế và hình thức.

    3. Kiểm soát sự tương tác của các mô-đun. Bản chất của thuộc tính này là nhiều lỗi xuất hiện nếu một hàm đã khai báo một bộ tham số và nó được truy cập bằng một bộ tham số khác và sự khác biệt có thể là cả về số lượng và loại. Ngôn ngữ “C”, mặc dù phiên bản ANSI C đã cố gắng giải quyết một phần vấn đề này - luôn có khả năng đánh lừa một hàm và truyền cho nó một tham số thuộc loại khác, thay vì sáu tham số, bạn có thể truyền một tham số.
Vì ba lý do này, ngôn ngữ “C” là ngôn ngữ xấu. Nhưng tuy nhiên, đây là “tâm lý” của các lập trình viên, nằm ở chỗ vì lý do nào đó, những ngôn ngữ tồn tại lâu dài nhất lại là những ngôn ngữ xấu về mặt khái niệm; đối với những ngôn ngữ như vậy, ngoài “C”, bạn cũng có thể thêm Fortran.

Vì vậy, năm 1973. Sự xuất hiện của hệ điều hành Unix và nó đã được viết bằng ngôn ngữ C. Hệ điều hành này đã có những thuộc tính cơ bản nào? Thuộc tính đầu tiên là khái niệm về tệp, đối tượng chính mà HĐH vận hành là tệp. Tệp là một tập hợp dữ liệu, tệp theo quan điểm Unix là một thiết bị bên ngoài, tệp là thư mục chứa thông tin về các tệp mà nó thuộc về, v.v. Ngày nay, chiến lược tập tin đã được mở rộng cho hầu hết mọi thứ trong Unix. Thuộc tính thứ hai, là sự tiếp nối hoặc là hệ quả của thuộc tính thứ nhất, đó là hệ điều hành được xây dựng theo một cách rất thú vị. Không giống như các hệ điều hành trước đây, trong đó mỗi lệnh được gắn cứng bên trong và lệnh này không thể sửa đổi, xóa khỏi hệ thống hoặc tạo lệnh mới - trong Unix, các vấn đề về lệnh người dùng đã được giải quyết rất dễ dàng nhờ hai điểm. Đầu tiên là Unix khai báo một giao diện chuẩn để truyền tham số từ bên ngoài vào bên trong tiến trình. Thứ hai, tất cả các lệnh đều được triển khai dưới dạng tệp, có nghĩa là bạn có thể thoải mái thêm các lệnh mới vào hệ thống, các lệnh này sẽ có sẵn cho tôi, một nhóm người dùng hoặc tất cả mọi người và bạn có thể xóa các lệnh.

Hãy bắt đầu xem xét các tính năng cụ thể của hệ điều hành Unix. Điều đầu tiên chúng ta sẽ xem xét là hệ thống tệp, cách tổ chức làm việc với tệp.

Hệ thống tập tin Unix

Hệ thống tệp Unix là một hệ thống tệp phân cấp, nhiều người dùng. Nó có thể được biểu diễn dưới dạng cây:

Ở gốc của cây có một “thư mục gốc”; các nút khác ngoài lá của cây là các thư mục. Các lá có thể là: tệp (theo nghĩa truyền thống - tập hợp dữ liệu được đặt tên), thư mục trống (thư mục không có tệp nào được liên kết). Hệ thống xác định khái niệm về tên tệp - đây là tên được liên kết với một tập hợp dữ liệu trong thư mục chứa tệp này. Ví dụ thư mục D1 chứa các file: N1, N2, N3; thư mục D0 chứa: N4, N5 và D1, D1 cũng là một tệp nhưng là một tệp đặc biệt. Vì vậy, tên là tên được liên kết với tập dữ liệu trong bối cảnh thành viên thư mục. Ngoài ra còn có khái niệm về tên đầy đủ. Tên đầy đủ là một đường dẫn duy nhất từ ​​thư mục gốc của hệ thống tệp đến một tệp cụ thể. Ký tự đầu tiên của tên là thư mục gốc “/”, sau đó tất cả các thư mục được liệt kê bằng dấu gạch chéo cho đến khi đạt được tệp mong muốn. Ví dụ file N3 có tên đầy đủ là “/D0/D1/N3”. Do đường dẫn cho mỗi tệp trong bất kỳ thư mục nào là duy nhất nên chúng ta có thể đặt tên các tệp trong các thư mục khác nhau có cùng tên. Ví dụ: tên N4 có trong thư mục D0 và D4, nhưng đây là các tệp khác nhau vì đường dẫn đầy đủ đến chúng khác nhau (/D4/N4, /D0/N4).

Bình luận. Trên thực tế, hệ thống tệp Unix không dựa trên cây. Mọi điều đã nói ở trên đều đúng, nhưng hệ thống có khả năng vi phạm hệ thống phân cấp đẹp và tiện lợi ở dạng cây, vì có thể liên kết nhiều tên với cùng một nội dung tệp. Và các tình huống có thể phát sinh, chẳng hạn như khi “/D4/N3” và “/D0/D1/N1” trên thực tế là một tệp có hai tên.

Một lưu ý nữa. Hệ điều hành Unix sử dụng hệ thống phân cấp người dùng ba cấp:

Cấp độ đầu tiên là tất cả người dùng. Họ được chia thành các nhóm và theo đó, các nhóm bao gồm những người dùng thực sự. Do tổ chức người dùng ba cấp này, mỗi tệp có ba thuộc tính:

1) Chủ sở hữu tập tin. Thuộc tính này được liên kết với một người dùng cụ thể, người này được hệ thống tự động chỉ định làm chủ sở hữu tệp. Bạn có thể trở thành chủ sở hữu mặc định bằng cách tạo một tệp và cũng có một lệnh cho phép bạn thay đổi chủ sở hữu của tệp.

2) Bảo vệ truy cập tập tin. Quyền truy cập vào từng tệp (từ tệp nhân hệ thống đến tệp văn bản thông thường) bị giới hạn ở ba loại:

Quyền của chủ sở hữu (nói chung, chủ sở hữu có thể làm gì với tệp này -  không nhất thiết là tất cả mọi thứ);

Quyền của nhóm sở hữu tập tin. Chủ sở hữu không được đưa vào đây (ví dụ: một tệp có thể bị đóng để chủ sở hữu đọc và tất cả các thành viên khác trong nhóm có thể tự do đọc từ tệp này;

Tất cả người dùng khác của hệ thống; 

Đối với ba loại này, ba hành động được quy định: đọc từ tệp, ghi vào tệp và thực thi tệp (theo cách ghi nhớ của hệ thống R, W, X tương ứng). Mỗi tệp trong ba danh mục này xác định người dùng nào có thể đọc, người dùng nào có thể viết và ai có thể chạy nó như một quy trình.

Đây là một số dữ liệu sơ bộ về hệ thống tập tin. Bây giờ chúng ta hãy xem cấu trúc của hệ thống tập tin trên đĩa.

Trước tiên hãy xác định một số khái niệm:

Đối với bất kỳ hệ thống máy tính nào, khái niệm về thiết bị lưu trữ bên ngoài hệ thống (SSD) đều được xác định. Đây là thiết bị được bộ tải khởi động phần cứng của hệ thống truy cập nhằm mục đích khởi động HĐH.. Điểm mấu chốt là thế này - hầu hết mọi hệ thống máy tính đều có một dải không gian địa chỉ RAM nằm trong ROM. ROM chứa một chương trình nhỏ (mặc dù khái niệm về kích thước chỉ mang tính tương đối nhưng nó thực sự nhỏ), khi máy tính được bật, chương trình này sẽ truy cập vào một khối cố định của ROM, đọc nó vào bộ nhớ và chuyển quyền điều khiển đến một địa chỉ cố định có liên quan. vào khối đọc dữ liệu.

Người ta tin rằng khối đọc dữ liệu là bộ tải khởi động phần mềm và bộ tải khởi động phần mềm sẽ khởi động hệ điều hành. Cần lưu ý rằng nếu bộ tải khởi động phần cứng trong đại đa số các máy là độc lập với hệ thống (nghĩa là nó không biết hệ điều hành nào sẽ được tải), thì bộ tải khởi động phần mềm đã là một thành phần của hệ điều hành, nó biết rằng một phần cụ thể Hệ điều hành sẽ được tải, nó biết nơi cần tải dữ liệu.

Trong bất kỳ hệ thống nào, thông thường người ta chia không gian bộ nhớ thành các vùng dữ liệu nhất định, được gọi là khối. Kích thước khối (khối logic trong HĐH) là một thuộc tính cố định. Trong hệ điều hành Unix với nhiều biến thể khác nhau, kích thước khối là một tham số thay đổi tùy thuộc vào phiên bản hệ điều hành. Để đơn giản và thống nhất, chúng ta giả sử khối logic của VRAM là 512 byte.

Vì vậy, chúng ta hãy xem cấu trúc của hệ thống tập tin. Hãy tưởng tượng không gian địa chỉ của VRAM hệ thống dưới dạng một chuỗi các khối.

Chúng ta sẽ giả định rằng có N+M-1 các khối này.

Khối đầu tiên là khối bootstrap. Vị trí của khối này trong khối 0 của thiết bị hệ thống được xác định bởi phần cứng, vì bộ tải khởi động phần cứng luôn truy cập vào một khối cụ thể của thiết bị hệ thống (khối 0). Đây là thành phần cuối cùng của hệ thống tập tin phụ thuộc vào phần cứng.

Khối tiếp theo là siêu khối của hệ thống tập tin. Nó chứa thông tin vận hành về trạng thái của hệ thống tệp, cũng như dữ liệu về cài đặt hệ thống tệp. Đặc biệt, siêu khối có thông tin về


    • số lượng nút (ID) trong hệ thống tệp;

    • kích thước hệ thống tập tin;

    • khối tập tin miễn phí;

    • ID miễn phí;

    • Ngoài ra còn có một số dữ liệu mà chúng tôi sẽ không liệt kê do mục đích riêng của chúng.
Khối thứ ba là khu vực inode. ID là một cấu trúc dữ liệu hệ thống tệp đặc biệt tương ứng từng cái một với một tệp. Mỗi nội dung tệp có một và chỉ một ID được liên kết với nó. Các ID được sắp xếp không phải theo một khối mà theo một khoảng trống của các khối, kích thước của khối này được xác định bởi tham số tạo hệ thống tệp (được xác định bởi số lượng ID được chỉ định trong siêu khối). Theo đó, mỗi thanh ghi chỉ mục chứa các thông tin sau:


    • mã đặc quyền/bảo mật;


    • độ dài tập tin;


Tiếp theo là các khối tập tin. Đây là không gian của VZU, nơi chứa tất cả thông tin có trong các tệp và về các tệp không phù hợp với các khối đã được liệt kê.

Vùng dữ liệu cuối cùng (nó nằm ở vị trí khác nhau trong các hệ thống khác nhau), nhưng để đơn giản trong cách trình bày, chúng tôi sẽ giả sử rằng vùng này nằm ngay sau các khối tệp - đây là vùng lưu.

Đây là sơ đồ khái niệm về cấu trúc hệ thống tập tin. Bây giờ chúng ta hãy quay lại và xem xét một số phần của nó chi tiết hơn.

Trước hết, các lĩnh vực khối tệp miễn phí và ID miễn phí được quan tâm. Trong Unix, có thể thấy rõ ảnh hưởng của hai yếu tố: thứ nhất là hệ thống tệp được phát triển khi VSD 5-10 MB được coi là rất lớn và nỗ lực của tác giả nhằm tối ưu hóa quy trình này có thể thấy rõ trong việc triển khai các thuật toán để làm việc với hệ thống; và thứ hai là các thuộc tính của hệ thống tệp để tối ưu hóa quyền truy cập, tiêu chí của nó là số lượng trao đổi mà hệ thống tệp thực hiện cho nhu cầu của nó, không liên quan đến việc đọc hoặc ghi thông tin tệp.

Siêu khối chứa một danh sách các khối tệp miễn phí; nó bao gồm 50 phần tử. Bản chất của việc làm việc với danh sách này như sau - trong một bộ đệm bao gồm 50 phần tử (với điều kiện một khối là 512 byte, 1 khối là một từ 16 bit), chúng chứa số khối không gian khối tệp trống từ 2 đến 49. Trong Phần tử thứ 0 chứa con trỏ tới phần tiếp theo của mảng và phần tử cuối cùng chứa con trỏ tới phần tử tự do trong mảng.

Nếu một số quy trình cần một khối trống để mở rộng tệp thì hệ thống sẽ chọn một phần tử mảng bằng cách sử dụng con trỏ N/B (số khối) và khối này được cung cấp cho tệp. Nếu một tập tin bị thu nhỏ, các số giải phóng sẽ được thêm vào mảng các khối trống và con trỏ N/B được điều chỉnh.

Vì kích thước mảng là 50 phần tử nên có thể xảy ra hai tình huống quan trọng:


    1. Khi chúng tôi giải phóng các khối tệp nhưng chúng không thể vừa với mảng này. Trong trường hợp này, một khối trống được chọn từ hệ thống tệp và mảng khối trống đã được điền đầy đủ sẽ được sao chép vào khối này, sau đó giá trị của con trỏ N/B được đặt lại và số khối mà chúng ta đã chọn cho sao chép được ghi vào phần tử 0 của mảng, phần tử này nằm trong nội dung mảng siêu khối. Do đó, nếu chúng ta liên tục giải phóng các khối, một danh sách sẽ được hình thành trong đó tất cả các khối miễn phí của hệ thống tệp sẽ được đặt.

    2. Khi chúng ta đã chọn tất cả các khối miễn phí và nội dung của các thành phần mảng khối miễn phí đã cạn kiệt. Nếu phần tử 0 của mảng bằng 0 thì điều này có nghĩa là tất cả không gian hệ thống tệp đã hết. Nếu phần tử này không bằng 0 thì điều này có nghĩa là mảng vẫn tiếp tục. Phần tiếp theo này được đọc thành bản sao của siêu khối trong RAM.
Trong hầu hết các trường hợp, không cần trao đổi bổ sung để có được khối miễn phí và giải phóng nó. Cần phải trao đổi bổ sung khi hết nội dung của 49 khối. Chúng tôi nhận được khả năng đệm tốt, giúp giảm chi phí hoạt động của hệ điều hành.

Danh sách ID miễn phí. Đây là một bộ đệm bao gồm 100 phần tử. Nó chứa thông tin về 100 số ID hiện miễn phí. Theo đó, khi cần ID mới, số của nó sẽ được lấy từ danh sách ID miễn phí; nếu số đó được giải phóng thì sẽ được nhập vào mảng này. Nếu mảng đầy và 101 phần tử được giải phóng, thì điều này không được ghi ở bất cứ đâu. Nếu danh sách ID đầy, hệ thống sẽ “chạy qua” danh sách và tạo lại nội dung của bộ đệm này.

Trong trường hợp bạn cần tạo một tệp và cần ID mới, nhưng không có một phần tử nào trong mảng, quá trình tìm kiếm ID mới sẽ được khởi chạy và không tìm thấy gì. Khi đó có hai tình huống có thể xảy ra:


    1. Không còn khối trống nào cho các tập tin;

    2. Không có thêm ID mới.
Đây là thông tin về siêu khối. Có thể đưa ra kết luận và nhận xét gì?

    • siêu khối luôn ở trong RAM;

    • tất cả các hoạt động để giải phóng các khối, chiếm giữ các khối tệp cũng như chiếm giữ và ID trống đều diễn ra trong RAM (giảm thiểu trao đổi với đĩa). Nếu nội dung của siêu khối không được ghi vào đĩa và nguồn bị tắt thì sẽ phát sinh vấn đề (sự khác biệt giữa trạng thái thực của hệ thống tệp và nội dung của siêu khối). Nhưng đây đã là một yêu cầu về độ tin cậy của thiết bị hệ thống.

Bài giảng 8

Bộ mô tả chỉ mục

Chúng ta hãy xem xét kỹ hơn về Bộ mô tả chỉ mục. ^ ID là một đối tượng Unix được đưa vào tương ứng một-một với nội dung của tệp. Nghĩa là, đối với mỗi ID chỉ có một nội dung và ngược lại, ngoại trừ trường hợp tệp được liên kết với một số thiết bị bên ngoài. Chúng ta hãy nhớ lại nội dung của ID:


    • một trường xác định loại tệp (thư mục và tất cả các tệp khác);

    • mã đặc quyền/bảo mật;

    • số lượng liên kết đến một ID nhất định từ các thư mục khác nhau trong hệ thống tệp;

    • (giá trị 0 có nghĩa là tự do ID)

    • độ dài tệp tính bằng byte;

    • ngày và giờ (thời gian nhập cuối cùng, ngày tạo, v.v.);

    • trường địa chỉ khối tập tin.
Như bạn có thể thấy, không có tên tệp nào trong ID. Chúng ta hãy xem cách tổ chức địa chỉ của các khối chứa tệp.

Trường địa chỉ chứa các số của mười khối đầu tiên của tệp, nghĩa là nếu tệp nhỏ thì tất cả thông tin về vị trí của dữ liệu tệp sẽ nằm trực tiếp trong ID. Nếu tệp vượt quá mười khối, thì một cấu trúc danh sách nhất định sẽ bắt đầu hoạt động, cụ thể là phần tử thứ 11 của trường địa chỉ chứa số khối từ khoảng trống của các khối tệp chứa 128 liên kết đến các khối của tệp này. Nếu tệp thậm chí còn lớn hơn thì phần tử thứ 12 của trường địa chỉ sẽ được sử dụng. Điểm mấu chốt là thế này - nó chứa một số khối, chứa 128 bản ghi số khối, trong đó mỗi khối chứa 128 số khối hệ thống tệp. Và nếu tệp thậm chí còn lớn hơn thì phần tử thứ 13 sẽ được sử dụng - trong đó độ sâu lồng của danh sách sẽ tăng thêm một phần tử khác.

Bằng cách này, chúng ta có thể nhận được một tệp có kích thước (10+128+128 2 +128 3)*512.

Nếu chúng ta đặt câu hỏi - tại sao lại cần tất cả những thứ này (bảng khối miễn phí, ID, v.v.), thì chúng ta nhớ rằng chúng ta đang xem xét mối quan hệ giữa phần cứng và phần mềm của hệ thống máy tính và trong trường hợp này là một tệp như vậy. thiết bị hệ thống cho phép chúng tôi giảm đáng kể số lượng trao đổi thực tế với VRAM và bộ đệm theo lớp trong Hệ điều hành Unix khiến số lượng trao đổi này thậm chí còn nhỏ hơn.

Hãy xem xét khu vực tiếp theo - khu vực tiết kiệm. Trong sơ đồ, nó được hiển thị ngay sau các khối tập tin. Trên thực tế, nó có thể được đặt theo nhiều cách khác nhau: trước các khối tệp, trong một số tệp hoặc ở một nơi khác, chẳng hạn như trên bộ nhớ khác. Tất cả điều này phụ thuộc vào việc triển khai cụ thể của hệ thống.

Các quy trình được bơm vào khu vực lưu trữ và nó cũng được sử dụng để tối ưu hóa việc khởi chạy các quy trình được khởi chạy thường xuyên nhất (sử dụng cái gọi là T-bit của tệp).

Chúng tôi đã xem xét cấu trúc của hệ thống tệp và tổ chức của nó trên thiết bị hệ thống. Cấu trúc này và các thuật toán để làm việc với nó khá đơn giản; điều này được thực hiện sao cho chi phí chung liên quan đến hoạt động của hệ thống không vượt quá giới hạn hợp lý.

Các phần tử hệ thống tập tin:

Danh mục

Chúng tôi đã nói rằng tất cả thông tin trong Unix đều nằm trong các tệp. Không có bảng đặc biệt nào nằm bên ngoài hệ thống tệp và được hệ thống sử dụng, ngoại trừ các bảng mà HĐH tạo khi làm việc trong không gian RAM.

^ Theo quan điểm của hệ điều hành, thư mục là một tệp, một tệp thông thường chứa dữ liệu về tất cả các tệp thuộc về thư mục đó.

Chúng ta nói rằng thư mục “A” chứa các tập tin “B”, “C” và “D” - trong đó “B” và “C” có thể vừa là tập tin vừa là thư mục, và “D” chắc chắn là một thư mục.

Thư mục có cấu trúc như sau. Nó bao gồm các phần tử kết hợp hai trường - số ID và tên tệp:

Thư mục = ( (ID, Tên), (ID, Tên), ..., (ID, Tên))

Số ID là gì? là số thứ tự của phần tử trong danh sách các inode. Vì vậy, phần tử đầu tiên của danh sách này - ID#1 thuộc về thư mục gốc “.”.

Nói chung, có thể có nhiều mục trong một thư mục tham chiếu đến cùng một ID, nhưng không thể có các mục có cùng tên trong một thư mục. Nghĩa là, một số lượng tên tùy ý có thể được liên kết với nội dung của tệp. Khi bạn tạo một thư mục, hai mục luôn được tạo trong đó:

(thư mục_ID, “.”) và (thư mục gốc_ID, “..”)

Vì vậy, trong hình, tệp “A” có ID#7, “D” có ID#5, “F” có ID#10, “G” có ID#101. Trong trường hợp này, file thư mục D sẽ có nội dung như sau:

{{ 5, “.” },

(Đối với thư mục gốc, thư mục gốc đề cập đến cùng một thư mục.)

Sự khác biệt giữa tệp thư mục và tệp thông thường là gì? Nó được phân biệt bởi trường loại trong inode.

Chúng ta hãy xem làm thế nào có thể sử dụng các tên và liên kết thư mục đủ điều kiện theo sơ đồ. Trong hệ thống, thư mục hiện tại được xác định cho người dùng tại bất kỳ thời điểm nào. Nghĩa là, một thư mục có tên đầy đủ được thay thế cho tất cả các tệp có tên không bắt đầu bằng ký tự “/”. Nếu thư mục hiện tại là “D”, thì chúng ta có thể nói đơn giản về tệp “F” hoặc tệp “G”, nhưng nếu thư mục hiện tại là “D” và bạn cần truy cập vào tệp “B”, thì bạn không thể đơn giản hoạt động với tên “B”, do đó, vì nó không thuộc thư mục “D”, nên có thể lấy được tệp “B” bằng cách chỉ định tên đầy đủ của nó từ thư mục gốc hoặc bạn có thể sử dụng một tệp đặc biệt “..”, trong hồ sơ vụ án nào “B” sẽ có tên: “../B”. Nếu khi mở đầu chúng ta đề cập đến “..”

Để mở tệp “B” trong trường hợp này, bạn sẽ phải thực hiện một số thao tác gián tiếp - lấy ID gốc và sử dụng nó để chọn nội dung của tệp thư mục “A”; dòng có tên “B” và xác định ID. Thủ tục này khá tốn công, nhưng vì việc mở và đóng tập tin xảy ra khá hiếm nên không có “tội phạm” nào trong việc này.

Do cách tổ chức các thư mục này, nội dung của tệp được tách biệt khỏi tên của nó. Tên có thể mơ hồ.

Vì một số tên có thể được liên kết với một tệp, chúng tôi có thể nói rằng tệp này có thể được mở đồng thời bởi một số quy trình (nói chung, có một tên, chúng tôi cũng có thể mở tệp này từ một số quy trình, bản chất của vấn đề không thay đổi so với việc làm rõ này). Đồng bộ hóa được tổ chức như thế nào trong trường hợp này? Như chúng ta sẽ thấy sau, mọi thứ đều được giải quyết chính xác ở đây.

Tệp thiết bị

Loại tệp này được đặc trưng bởi loại của nó và được hiểu như sau. Về nguyên tắc, các tệp thiết bị không có nội dung, tức là chúng chỉ có ID và tên được liên kết với nó. ID cho biết thông tin về loại thiết bị được liên kết với tệp này, theo đó, hệ thống Unix chia tất cả các thiết bị thành hai loại: hướng byte và hướng khối. Thiết bị hướng byte là những thiết bị mà việc trao đổi diễn ra theo byte (ví dụ: bàn phím), thiết bị hướng khối là những thiết bị mà việc trao đổi diễn ra theo khối. ID có một trường biểu thị đặc điểm này và cũng có một trường xác định số lượng trình điều khiển được liên kết với thiết bị này. Trong hệ thống, mỗi trình điều khiển được liên kết với một thiết bị cụ thể nhưng một thiết bị có thể có nhiều trình điều khiển. Trường này xác định số trình điều khiển, thực tế là số trong bảng trình điều khiển cho lớp thiết bị tương ứng (có hai bảng - dành cho thiết bị khối và byte). Ngoài ra trong ID còn có một tham số kỹ thuật số nhất định có thể được chuyển đến trình điều khiển dưới dạng tham số chỉ định thông tin về hoạt động.

Đây là những gì có thể nói về các tập tin đặc biệt được liên kết với các thiết bị bên ngoài.

Chia sẻ dữ liệu với các tập tin

Việc tiếp theo trong việc tổ chức hệ thống của hệ thống tập tin là tổ chức trao đổi dữ liệu với tập tin. Hãy xác định các khái niệm liên quan đến đầu vào/đầu ra cấp thấp. Unix định nghĩa các chức năng đặc biệt gọi là lời gọi hệ thống. Các cuộc gọi này truy cập trực tiếp vào hệ điều hành và thực hiện một số chức năng hệ thống. Về mặt sử dụng, thực tế chúng không khác biệt với việc sử dụng các chức năng thư viện, trong khi về mặt triển khai và vận hành, sự khác biệt của chúng là khá đáng kể. Hàm thư viện sẽ được tải vào phần thân quy trình và lệnh gọi hệ thống sẽ ngay lập tức chuyển quyền điều khiển sang HĐH và hệ điều hành sau sẽ thực hiện hành động đã ra lệnh. Unix cung cấp một tập hợp các chức năng này để cung cấp I/O cấp thấp (thông qua các lệnh gọi hệ thống):

open(...) - để làm việc với nội dung của một file, tiến trình phải đăng ký thực tế này vào hệ thống; các tham số của hàm này là một chuỗi chứa tên file và các thuộc tính cho chế độ làm việc với file (đọc -only, đọc-ghi, v.v.) và hàm này trả về một số nhất định, được gọi là bộ mô tả tệp (FD). Phần thân của quy trình người dùng, cũng như dữ liệu liên quan đến quy trình này, chứa một số thông tin dịch vụ. Đặc biệt, có một bảng mô tả tập tin. Nó, giống như tất cả các bảng trong Unix, có tính vị trí, nghĩa là số hàng trong bảng tương ứng với FD có số này. Tên tệp và các thuộc tính khác được liên kết với FD. Đánh số FD là đặc quyền của quy trình, nghĩa là các FD là duy nhất trong một quy trình.

Số lượng tệp được mở đồng thời (chính xác hơn là số lượng FD tối đa được liên kết với tệp) cho một quy trình được hệ thống quy định.

Vì vậy, hàm open(...) là để mở một tệp hiện có.

create(...) là một hàm để mở một tập tin mới; các tham số của nó là tên tập tin và một số tham số mở, giống như open.

read(...)/write(...) - tham số của chúng là số FD và một số tham số truy cập. Các hàm này được sử dụng để đọc/ghi từ hoặc tới một tập tin.

close(...) - kết thúc thao tác với tệp. Sau khi thực hiện chức năng này, DF của tệp này sẽ được giải phóng.

Đây là tất cả các cuộc gọi hệ thống. Ngoài ra trong Unix bạn có thể thực hiện I/O thông qua các hàm thư viện (ví dụ: fopen, fread, fwrite, fclose, ...).

Hãy xem xét việc tổ chức trao đổi từ quan điểm hệ thống trong Unix.

Khi tổ chức trao đổi, hệ thống chia tất cả dữ liệu thành hai loại - thứ nhất là dữ liệu liên kết với quy trình người dùng và dữ liệu liên kết với HĐH.

Bảng đầu tiên chứa dữ liệu liên quan đến hệ điều hành là bảng Open File Inode (OID), bảng này chứa các mục, mỗi mục chứa một bản sao ID cho mỗi tệp được mở trên hệ thống. Thông qua bản sao ID, chúng tôi truy cập các khối của tệp. Mỗi bản ghi này chứa một trường mô tả số lượng tệp đang mở trong hệ thống sử dụng dữ liệu ID. Nghĩa là, nếu chúng ta mở cùng một tệp thay mặt cho hai quy trình thì một mục nhập sẽ được tạo trong TIDOF, nhưng mỗi lần mở ID này sẽ tăng bộ đếm lên một.

Tiếp theo. Bảng tệp - bảng này chứa thông tin về tên của tệp đang mở và có liên kết đến ID của tệp này trong TIDOF.

Kế hoạch này sẽ được thảo luận chi tiết hơn vào lần tới.

Loại tập tin. Cấu trúc hệ thống tập tin phân cấp

Hệ thống tệp hỗ trợ một số loại tệp khác nhau về chức năng, thường bao gồm tệp thông thường, tệp thư mục, tệp đặc biệt, đường ống được đặt tên và tệp ánh xạ bộ nhớ.

Tệp thông thường hoặc đơn giản các tập tin, chứa thông tin có tính chất tùy ý được người dùng nhập vào hoặc được tạo ra do hoạt động của hệ thống và chương trình người dùng. Hầu hết các hệ điều hành hiện đại (ví dụ: UNIX, Windows, OS/2) không hạn chế hoặc kiểm soát nội dung và cấu trúc của một tệp thông thường theo bất kỳ cách nào. Nội dung của một tệp thông thường được xác định bởi ứng dụng hoạt động với nó.

Danh mục- đây là loại tệp đặc biệt chứa thông tin tham chiếu hệ thống về một tập hợp tệp được người dùng nhóm theo tiêu chí không chính thức nào đó (ví dụ: tệp chứa tài liệu của cùng một hợp đồng hoặc các tệp tạo nên một gói phần mềm được kết hợp thành một nhóm). Trên nhiều hệ điều hành, một thư mục có thể chứa bất kỳ loại tệp nào, kể cả các thư mục khác, tạo thành cấu trúc cây dễ tìm kiếm. Các thư mục thiết lập ánh xạ giữa tên tệp và đặc điểm tệp được hệ thống tệp sử dụng để quản lý tệp. Đặc biệt, các đặc điểm đó bao gồm thông tin (hoặc con trỏ tới cấu trúc khác chứa dữ liệu này) về loại tệp và vị trí của tệp trên đĩa, quyền truy cập vào tệp cũng như ngày tạo và sửa đổi tệp. Trong tất cả các khía cạnh khác, các thư mục được hệ thống tệp xử lý như các tệp thông thường.

Các tập tin đặc biệt- Đây là các file giả được liên kết với các thiết bị I/O, dùng để thống nhất cơ chế truy cập file và các thiết bị bên ngoài. Các tệp đặc biệt cho phép người dùng thực hiện các thao tác I/O bằng các lệnh thông thường để ghi vào tệp hoặc đọc từ tệp. Các lệnh này trước tiên được xử lý bởi các chương trình hệ thống tệp, sau đó ở một số giai đoạn thực hiện yêu cầu, chúng được hệ điều hành chuyển đổi thành các lệnh điều khiển cho thiết bị tương ứng.

Người dùng truy cập tập tin bằng tên tượng trưng. Tuy nhiên, bộ nhớ của con người giới hạn số lượng tên đối tượng mà người dùng có thể gọi theo tên. Tổ chức phân cấp của không gian tên cho phép chúng tôi mở rộng đáng kể các ranh giới này. Đây là lý do tại sao hầu hết các hệ thống tệp đều có cấu trúc phân cấp, trong đó các cấp được tạo do thực tế là thư mục cấp thấp hơn có thể được bao gồm trong thư mục cấp cao hơn (Hình 6.1).

Cơm. 6. 1. Phân cấp hệ thống tập tin

Biểu đồ mô tả hệ thống phân cấp thư mục có thể là cây hoặc mạng. Các thư mục tạo thành một cây nếu một tập tin chỉ được phép nằm trong một thư mục (Hình 6.1, b), và mạng - nếu tệp có thể được đưa vào nhiều thư mục cùng một lúc (Hình 6. 1, V). Ví dụ, trong MS-DOS và Windows, các thư mục tạo thành cấu trúc cây, trong khi ở UNIX, chúng tạo thành cấu trúc mạng. Trong cấu trúc cây, mỗi tập tin được lá cây. Thư mục cấp cao nhất được gọi là thư mục gốc hoặc nguồn gốc.

Hệ thống tệp cho phép bạn tổ chức các chương trình và dữ liệu cũng như tổ chức quản lý có trật tự các đối tượng này.

Khái niệm hệ thống tập tin nằm bên dưới hệ điều hành Unix đã để lại dấu ấn sâu sắc trong hệ điều hành máy tính cá nhân. Trong Unix, hệ thống con I/O thống nhất cách truy cập cả tệp và thiết bị ngoại vi. Một tập tin được hiểu là một tập hợp dữ liệu trên đĩa, thiết bị đầu cuối hoặc một số thiết bị khác.

Hệ thống tập tin là một phần chức năng của hệ điều hành thực hiện các thao tác trên tệp. Hệ thống tệp cho phép bạn làm việc với các tệp và thư mục (thư mục) bất kể nội dung, kích thước, loại, v.v. của chúng.

Hệ thống tập tin là một hệ thống quản lý dữ liệu.

Hệ thống quản lý dữ liệu là một hệ thống trong đó người dùng được giải phóng khỏi hầu hết các thao tác trên tệp vật lý và có thể tập trung chủ yếu vào các thuộc tính logic của dữ liệu.

Hệ thống tệp hệ điều hành tạo cho người dùng một số loại biểu diễn ảo của các thiết bị lưu trữ bên ngoài, cho phép chúng hoạt động không phải ở mức độ thấp của các lệnh điều khiển thiết bị vật lý mà ở mức độ cao của tập hợp dữ liệu và cấu trúc.

Hệ thống tập tin (mục đích):

  • ẩn hình ảnh vị trí thực của thông tin trong bộ nhớ ngoài;
  • đảm bảo tính độc lập của các chương trình với cấu hình cụ thể của máy tính (mức độ logic khi làm việc với các tệp);
  • cung cấp các phản hồi tiêu chuẩn cho các lỗi xảy ra trong quá trình trao đổi dữ liệu.

Cấu trúc tập tin

Toàn bộ tập hợp các tập tin trên đĩa và mối quan hệ giữa chúng được gọi là cấu trúc tập tin. Các hệ điều hành phát triển có cấu trúc file phân cấp - đa cấp, được tổ chức dưới dạng cây.

Cấu trúc thư mục cây được sử dụng - cây thư mục. Được mượn từ Unix. Cấu trúc phân cấp - cấu trúc của một hệ thống, các bộ phận (thành phần) của nó được kết nối bằng các mối quan hệ bao hàm hoặc phụ thuộc.

Cấu trúc phân cấp được biểu diễn bằng cây định hướng, trong đó các đỉnh tương ứng với các thành phần và các cung tương ứng với các kết nối.

Cây thư mục ổ G

Cây có hướng là một đồ thị có một đỉnh (gốc) được chọn, trong đó có một đường đi duy nhất giữa gốc và bất kỳ đỉnh nào. Trong trường hợp này, có thể có hai tùy chọn định hướng: hoặc tất cả các đường dẫn được định hướng từ gốc đến các lá hoặc tất cả các đường dẫn được định hướng từ các lá đến gốc.

Cây được sử dụng để mô tả và thiết kế các cấu trúc phân cấp.

Rễ là vị trí bắt đầu, lá là vị trí cuối cùng.

Phần

Trong quá trình định dạng, bất kỳ đĩa cứng hoặc đĩa quang từ nào cũng có thể được chia thành nhiều phần và được coi là các đĩa (độc lập) riêng biệt. Những phần này được gọi là phần hoặc ổ đĩa logic. Việc phân vùng đĩa thành nhiều ổ đĩa logic có thể cần thiết vì hệ điều hành không thể xử lý các đĩa lớn hơn một kích thước nhất định. Sẽ rất thuận tiện khi lưu trữ dữ liệu và chương trình người dùng tách biệt với các chương trình hệ thống (HĐH), vì HĐH có thể “bay khỏi máy tính”.

chương– vùng đĩa. Dưới đĩa logic (phân vùng) Trong máy tính, chúng tôi muốn nói đến bất kỳ phương tiện lưu trữ nào mà hệ điều hành hoạt động như một đối tượng duy nhất.

Tên ổ đĩa– chỉ định ổ đĩa logic; mục trong thư mục gốc.

Ổ đĩa logic (phân vùng) được ký hiệu bằng chữ cái Latinh A, B, C, D, E, ... (32 chữ cái từ A đến Z).

Các chữ cái A, B được dành riêng cho đĩa mềm.

C là ổ cứng mà hệ điều hành thường được tải từ đó.

Các chữ cái còn lại là ổ đĩa logic, CD, v.v. Số lượng ổ đĩa logic tối đa cho hệ điều hành Windows là vô hạn.

TRONG bảng phân vùng cho biết vị trí bắt đầu và kết thúc của phần này và số lượng các lĩnh vực trong phần này (vị trí và kích thước).

Cấu trúc tệp của ổ đĩa logic

Để truy cập thông tin trên đĩa chứa trong một tệp, bạn cần biết địa chỉ vật lý của khu vực đầu tiên (số bề mặt + số rãnh + số khu vực), tổng số cụm mà tệp này chiếm giữ, địa chỉ của cụm tiếp theo nếu kích thước tệp lớn hơn kích thước của một cụm

Các phần tử cấu trúc tập tin:

    khu vực bắt đầu (khởi động ban đầu, Khu vực khởi động);

    bàn vị trícác tập tin (FAT – Bảng phân bổ tệp);

    thư mục gốc (Thư mục gốc);

    vùng dữ liệu (dung lượng đĩa trống còn lại).

Khởi động-ngành

Khởi động-ngành – khu vực đầu tiên (ban đầu) của đĩa. Nằm ở mặt 0, 0 rãnh.

Khu vực khởi động chứa thông tin dịch vụ:

    kích thước cụm đĩa (cụm là một khối kết hợp một số lĩnh vực thành một nhóm để giảm kích thước của bảng FAT);

    vị trí của bảng FAT (trong khu vực khởi động có một con trỏ tới vị trí của bảng FAT);

    kích thước bảng FAT;

    số lượng bảng FAT (luôn có ít nhất 2 bản sao của bảng để đảm bảo độ tin cậy và bảo mật, vì việc phá hủy FAT dẫn đến mất thông tin và khó phục hồi);

    địa chỉ đầu thư mục gốc và kích thước tối đa của nó.

Khu vực khởi động chứa khối khởi động (bootloader) - Bản ghi khởi động.

Trình tải là một chương trình dịch vụ đặt chương trình thực thi vào RAM và làm cho nó sẵn sàng để thực thi.

FAT (Bảng phân bổ tệp)

FAT (Bảng phân bổ tệp) – bảng phân bổ tệp. Nó xác định vùng nào của đĩa thuộc về mỗi tệp. Vùng dữ liệu của đĩa được biểu diễn trong HĐH dưới dạng một chuỗi các cụm được đánh số.

MẬP là một mảng các phần tử đánh địa chỉ các cụm của vùng dữ liệu đĩa. Mỗi cụm vùng dữ liệu tương ứng với một phần tử FAT. Các phần tử FAT đóng vai trò như một chuỗi tham chiếu đến các cụm tệp trong vùng dữ liệu.

Cấu trúc bảng phân bổ tệp:

FAT bao gồm các phần tử 16/32/64 bit. Tổng cộng, bảng có thể chứa tới 65520 phần tử như vậy, mỗi phần tử trong số chúng (ngoại trừ hai phần tử đầu tiên) tương ứng với một cụm đĩa. Cụm là đơn vị phân bổ không gian trong vùng dữ liệu trên đĩa cho các tệp và thư mục. Hai thành phần bảng đầu tiên (được đánh số 0 và 1) được dành riêng và mỗi thành phần bảng còn lại mô tả trạng thái của cụm đĩa có cùng số. Phần tử có thể chỉ ra rằng cụm đó là miễn phí, cụm đó bị lỗi, cụm đó thuộc về tệp và là cụm cuối cùng trong tệp. Nếu một cụm thuộc về một tệp và không phải là cụm cuối cùng của nó thì phần tử bảng chứa số của cụm tiếp theo trong tệp này.

MẬP– một yếu tố cực kỳ quan trọng của cấu trúc tập tin. Vi phạm FAT có thể dẫn đến mất toàn bộ hoặc một phần thông tin trên toàn bộ ổ đĩa logic. Đó là lý do tại sao hai bản sao FAT được lưu trữ trên đĩa. Có các chương trình đặc biệt theo dõi trạng thái của FAT và khắc phục các vi phạm.

Các hệ điều hành khác nhau yêu cầu các phiên bản FAT khác nhau

Windows 95 FAT 16, FAT 32

Windows NT (XP) NTFS

Phần mềm mạng Novell TurboFAT

UNIX NFS,ReiserFS

Cấu trúc logic của phương tiện lưu trữ

Hệ thống tệp hỗ trợ một số loại tệp khác nhau về mặt chức năng, thường bao gồm tệp thông thường, tệp thư mục, tệp đặc biệt, đường ống được đặt tên, tệp ánh xạ bộ nhớ và các loại khác.

Các tệp thông thường, hoặc đơn giản là các tệp, chứa thông tin có tính chất tùy ý, được người dùng nhập vào chúng hoặc được tạo ra do hoạt động của hệ thống và chương trình người dùng. Hầu hết các hệ điều hành hiện đại (ví dụ: UNIX, Windows, OS/2) không hạn chế hoặc kiểm soát nội dung và cấu trúc của một tệp thông thường theo bất kỳ cách nào. Nội dung của một tệp thông thường được xác định bởi ứng dụng hoạt động với nó. Ví dụ: trình soạn thảo văn bản tạo các tệp văn bản bao gồm các chuỗi ký tự được biểu thị bằng một số mã. Đây có thể là tài liệu, mã nguồn chương trình, v.v. Tệp văn bản có thể được đọc trên màn hình và in trên máy in. Tệp nhị phân không sử dụng mã ký tự và thường có cấu trúc bên trong phức tạp, chẳng hạn như mã chương trình thực thi hoặc tệp lưu trữ. Tất cả các hệ điều hành phải có khả năng nhận dạng ít nhất một loại tệp - tệp thực thi của riêng chúng.

Thư mục là một loại tệp đặc biệt chứa thông tin tham chiếu hệ thống về một tập hợp tệp được người dùng nhóm theo một số tiêu chí không chính thức (ví dụ: tệp chứa tài liệu của cùng một hợp đồng hoặc các tệp tạo nên một gói phần mềm được kết hợp thành một nhóm). ). Trên nhiều hệ điều hành, một thư mục có thể chứa bất kỳ loại tệp nào, kể cả các thư mục khác, tạo thành cấu trúc cây dễ tìm kiếm. Các thư mục thiết lập ánh xạ giữa tên tệp và đặc điểm tệp được hệ thống tệp sử dụng để quản lý tệp. Đặc biệt, các đặc điểm đó bao gồm thông tin (hoặc con trỏ tới cấu trúc khác chứa dữ liệu này) về loại tệp và vị trí của tệp trên đĩa, quyền truy cập vào tệp cũng như ngày tạo và sửa đổi tệp. Trong tất cả các khía cạnh khác, các thư mục được hệ thống tệp xử lý như các tệp thông thường.

Các tệp đặc biệt là các tệp giả được liên kết với các thiết bị I/O được sử dụng để thống nhất cơ chế truy cập tệp và thiết bị bên ngoài. Các tệp đặc biệt cho phép người dùng thực hiện các thao tác I/O bằng các lệnh thông thường để ghi vào tệp hoặc đọc từ tệp. Các lệnh này trước tiên được xử lý bởi các chương trình hệ thống tệp, sau đó ở một số giai đoạn thực hiện yêu cầu, chúng được hệ điều hành chuyển đổi thành các lệnh điều khiển cho thiết bị tương ứng.

Các hệ thống tệp hiện đại hỗ trợ các loại tệp khác, chẳng hạn như liên kết tượng trưng, ​​​​ống dẫn được đặt tên và tệp ánh xạ bộ nhớ. Những điều này sẽ được thảo luận sau.

Cấu trúc hệ thống tập tin phân cấp

Người dùng truy cập tập tin bằng tên tượng trưng. Tuy nhiên, bộ nhớ của con người giới hạn số lượng tên đối tượng mà người dùng có thể gọi theo tên. Tổ chức phân cấp của không gian tên cho phép chúng tôi mở rộng đáng kể các ranh giới này. Đây là lý do tại sao hầu hết các hệ thống tệp đều có cấu trúc phân cấp, trong đó các cấp được tạo bằng cách cho phép chứa một thư mục cấp thấp hơn trong một thư mục cấp cao hơn (Hình 1).

Cơm. 1. Hệ thống phân cấp tập tin

Biểu đồ mô tả hệ thống phân cấp thư mục có thể là cây hoặc mạng. Các thư mục tạo thành một cây nếu một tệp chỉ được phép đưa vào một thư mục (Hình 1, b) và một mạng - nếu tệp có thể được đưa vào một số thư mục cùng một lúc (Hình 1, c). Ví dụ, trong MS-DOS và Windows, các thư mục tạo thành cấu trúc cây, trong khi ở UNIX, chúng tạo thành cấu trúc mạng. Trong cấu trúc cây, mỗi file là một lá. Thư mục cấp cao nhất được gọi là thư mục gốc hoặc root.

Với cách tổ chức này, người dùng không cần phải nhớ tên của tất cả các tệp; anh ta chỉ cần biết sơ bộ về việc một tệp cụ thể có thể được gán vào nhóm nào để tìm thấy nó bằng cách duyệt tuần tự các thư mục. Cấu trúc phân cấp thuận tiện cho công việc của nhiều người dùng: mỗi người dùng với các tệp của họ được bản địa hóa trong thư mục hoặc cây con của thư mục riêng, đồng thời, tất cả các tệp trong hệ thống được kết nối hợp lý.

Trường hợp đặc biệt của cấu trúc phân cấp là tổ chức một cấp, khi tất cả các tệp được bao gồm trong một thư mục (Hình 1, a).