1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Giáo trình lý thuyết hệ điều hành phần 2 nguyễn kim tuấn

139 1 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

một tiến trình, khơng tự động tạo tiểu trình Do đó, hệ điều hành này, hệ thống gọi trình quản lý tiến trình windows NT lần để tạo tiểu trình cho tiến trình mới, mà nhận handle tiểu trình từ windows NT Thơng tin tiểu trình tiến trình thích hợp sau trả lại cho ứng dụng Trong Windows 16-bit POSIX, tiểu trình khơng hỗ trợ Do đó, hệ điều hành này, hệ thống có tiểu trình cho tiến trình từ windows NT, tiến trình kích hoạt, chi trả lại thơng tin tiến trình cho ứng dụng Trong thực tế, tiến trình ứng dụng cài đặt cách sử dụng tiểu trình khơng thấy cho ứng dụng Khi tiến trình tạo Win32 hay OS/2, tiến trình thừa kế nhiều đặc tính từ tiến trình tạo Tuy nhiên, môi trường hệ điều hành windows NT, việc tạo tiến trình khơng thực trực tiếp Một tiến trình client ứng dụng phát yêu cầu tạo tiến trình đến cho hệ thống hệ điều hành; sau tiến trình hệ thống đến lượt phát u cầu tiến trình cho thành phần Executive windows NT Vì tác dụng mong đợi tiến trình thừa kế đặc tính tiến trình client khơng thừa kế từ tiến trình server, nên windows NT cho phép hệ thống định cha tiến trình Sau tiến trình thừa kế token truy xuất, thời gian quota, độ ưu tiên sở, mối quan hệ processor mặc định tiến trình cha Trong windows NT, khơng có quan hệ định nghĩa trước tiến trình Tuy nhiên, hệ điều hành POSIX hệ điều hành OS/2 áp đặt mối quan hệ phân cấp Mỗi tiến trình mở rộng tiến trình ban đầu tạo tiến trình khác xem cấp tiến trình tạo Bằng cách sử dụng handle đối tượng, hệ thống hệ điều hành trì mối quan hệ tiến trình Chương III QUẢN LÝ BỘ NHỚ Quản lý nhớ nhiệm vụ quan trọng phức tạp hệ điều hành Bộ phận quản lý nhớ xem nhớ tài nguyên hệ thống dùng để cấp phát chia sẻ cho nhiều tiến trình trạng thái active Các hệ điều hành mong muốn có nhiều tiến trình nhớ Cơng cụ quản lý nhớ phân trang (paging) phân đoạn (segmentation) Với phân trang tiến trình chia thành nhiều phần nhỏ có quan hệ với nhau, với kích thước trang cố định Sự phân đoạn cung cấp cho chươngtrình người sử dụng khối nhớ có kích thước khác Hệ điều hành kết hợp phân trang phân đoạn để có chiến lược quản lý nhớ linh hoạt III.9 Nhiệm vụ quản lý nhớ Trong hệ thống đơn chương trình (uniprogramming), nhớ ngồi hệ điều hành, có chương trình thực Trong hệ thống đa chương (multiprogramming) nhớ ngồi hệ điều hành, có nhiều tiến trình hoạt động Do nhiệm vụ quản lý nhớ hệ điều hành hệ thống đa chương trình phức tạp nhiều so với hệ thống đơn chương trình Trong hệ thống đa chương phận quản lý nhớ phải có nhiệm vụ đưa tiến trình vào nhớ có yêu cầu, kể nhớ khơng cịn khơng gian trống, ngồi phải bảo vệ hệ điều hành tiến trình nhớ tránh trường hợp truy xuất bất hợp lệ xảy Như việc quản lý nhớ hệ thống đa chương quan trọng cần thiết Bộ phận quản lý nhớ phải thực nhiệm vụ sau đây:  Sự tái định vị (Relocation): Trong hệ thống đa chương, không gian nhớ thường chia sẻ cho nhiều tiến trình khác yêu cầu nhớ tiến trình ln lớn khơng gian nhớ vật lý mà hệ thống có Do dó, chương trình hoạt động nhớ bị đưa đĩa (swapout) đưa vào lại (swap-in) nhớ thời điểm thích hợp sau Vấn đề đặt đưa chương trình vào lại nhớ hệ điều hành phải định vị vào vị trí mà nạp trước Để thực điều hệ điều hành phải có chế để ghi lại tất thông tin liên quan đến chương trình bị swap-out, thơng tin sở để hệ điều hành swap-in chương trình vào lại nhớ cho tiếp tục hoạt động Hệ điều hành buộc phải swap-out chương trình cịn khơng gian nhớ để nạp tiến trình khác, dó sau swap-out chương trình hệ điều hành phải tổ chức lại nhớ để chuẩn bị nạp tiến trình vừa có yêu cầu Các nhiệm vụ phần quản lý nhớ hệ điều hành thực Ngoài nhiệm vụ hệ điều hành phải có khả chuyển đổi địa nhớ ghi code chương trình thành địa vật lý thực tế nhớ chương trình thực thao tác truy xuất nhớ, người lập trình khơng biết trước trạng nhớ vị trí mà chương trình nạp chương trình họ hoạt động Trong số trường hợp khác chương trình bị swapout swap-in vào lại nhớ vị trí khác với vị trí mà nạp trước  Bảo vệ nhớ (Protection): Mỗi tiến trình phải bảo vệ để chống lại truy xuất bất hợp lệ vơ tình hay có chủ ý tiến trình khác Vì tiến trình chương trình khác khơng thể tham chiếu đến vùng nhớ dành cho tiến trình khác để thực thao tác đọc/ghi mà khơng phép (permission), mà truy xuất đến không gian địa nhớ mà hệ điều hành cấp cho tiến trình Để thực điều hệ thống quản lý nhớ phải biết khơng gian địa tiến trình khác nhớ phải kiểm tra tất yêu cầu truy xuất nhớ tiến trình tiến trình đưa địa truy xuất Điều khó thực khơng thể xác định địa chương trình nhớ trình biên dịch mà phải thực việc tính tốn địa thời điểm chạy chương trình Hệ điều hành có nhiều chiến lược khác để thực điều Điều quan trọng mà hệ thống quản lý nhớ phải thực không cho phép tiến trình người sử dụng truy cập đến vị trí hệ điều hành, ngoại trừ vùng liệu rountine mà hệ điều hành cung cấp cho chương trình người sử dụng  Chia sẻ nhớ (Sharing): Bất kỳ chiến lược cài đặt phải có tính mềm dẻo phép nhiều tiến trình truy cập đến địa nhớ Ví dụ, có nhiều tiến trình thực chương trình việc cho phép tiến trình truy cập đến copy chương trình thuận lợi cho phép tiến trình truy cập đến copy sở hữu riêng Các tiến trình đồng thực (co-operating) vài tác vụ cần để chia sẻ truy cập đến cấu trúc liệu Hệ thống quản lý nhớ phải điều khiển việc truy cập đến không gian nhớ chia sẻ mà không vi phạm đến yêu cầu bảo vệ nhớ Ngồi ra, mơi trường hệ điều hành đa nhiệm hệ điều hành phải chia sẻ không gian nhớ cho tiến trình để hệ điều hành nạp nhiều tiến trình vào nhớ để tiến trình hoạt động đồng thời với  Tổ chức nhớ logic (Logical organization): Bộ nhớ hệ thống máy tính tổ chức dịng mảng, khơng gian địa bao gồm dãy có thứ tự byte word Bộ nhớ phụ tổ chức tương tự Mặc dù việc tổ chức có kết hợp chặt chẽ với phần cứng thực tế máy khơng phù hợp với chương trình Đa số chương trình chia thành modun, vài số khơng thể thay đổi (read only, execute only) vài số chứa liệu thay đổi Nếu hệ điều hành phần cứng máy tính giao dịch cách hiệu với chương trình người sử dụng liệu modun số thuận lợi thấy rõ sau đây:  Các modun viết biên dịch độc lập, với tất tham chiếu từ modun đến modun khác giải hệ thống thời điểm chạy  Các mức độ khác bảo vệ, read-only, execute-only, cho modun khác  Nó đưa chế để modun chia sẻ tiến trình Cơng cụ đáp ứng cho yêu cầu phân đoạn (segmentation), kỹ thuật quản lý nhớ trình bày chương  Tổ chức nhớ vật lý (Physical organization): Như biết nhớ máy tính tổ chức theo cấp: nhớ nhớ phụ Bộ nhớ cung cấp tốc độ truy cập liệu cao, liệu phải làm tươi thường xun khơng thể tồn lâu dài Bộ nhớ phụ có tốc độ truy xuất chậm rẻ tiền so với nhớ khơng cần làm tươi thường xun Vì nhớ phụ có khả lưu trữ lớn cho phép lưu trữ liệu chương trình khoảng thời gian dài, nhớ để giữ (hold) khối lượng nhỏ chương trình liệu sử dụng thời điểm Trong giản đồ cấp này, việc tổ chức luồng thơng tin nhớ nhớ phụ nhiệm vụ quan trọng hệ thống Sự chịu trách nhiệm cho luồng gán cho người lập trình riêng, điều khơng hợp lý gây rắc rối, hai nguyên nhân:  Không gian nhớ dành cho chương trình với liệu thường khơng đủ, trường hợp này, người lập trình phải tiến hành thao tác hiểu Overlaying, theo chương trình liệu tổ chức thành modun khác gán vùng nhớ, có chương trình chịu trách nhiệm chuyển modun vào cần  Trong mơi trường đa chương trình, người lập trình khơng thể biết thời điểm xác định có khơng gian nhớ cịn trống không gian nhớ trống Như nhiệm vụ di chuyển thông tin cấp nhớ phải hệ thống thực Đây nhiệm vụ mà thành phần quản lý nhớ phải thực III.10 Kỹ thuật cấp phát nhớ (nạp chương trình vào nhớ chính) III.2.5 Kỹ thuật phân vùng cố định (Fixed Partitioning) Trong kỹ thuật không gian địa nhớ chia thành phần cố định, phần nằm vùng địa thấp dùng để chứa hệ điều hành, phần cịn lại, tạm gọi phần user program, sẵn sàng cho việc sử dụng tiến trình tiến trình nạp vào nhớ Trong hệ thống đơn chương, phần user program dùng để cấp cho chương trình nhất, nhiệm vụ quản lý nhớ hệ điều hành trường hợp đơn giản hơn, hệ điều hành kiểm sốt truy xuất nhớ chương trình người sử dụng, khơng cho truy xuất lên vùng nhớ hệ điều hành Để thực việc hệ điều hành sử dụng ghi giới hạn để ghi địa ranh giới hệ điều hành chương trình người sử dụng, theo chương trình người sử dụng cần truy xuất địa hệ điều hành so sánh địa với giá trị địa ghi thành ghi giới hạn, nhỏ từ chối khơng cho truy xuất, ngược lại cho phép truy xuất Việc so sánh địa cần phải có hỗ trợ phần cứng làm giảm tốc độ truy xuất nhớ hệ thống bảo vệ hệ điều hành tránh việc chương trình người sử dụng làm hỏng hệ điều hành dẫn đến làm hỏng hệ thống Trong hệ thống đa chương, phần user program lại phân thành nhiều phân vùng (partition) với biên vùng cố định có kích thước hay khơng Trong trường hợp tiến trình nạp vào partition kích thước nhỏ kích thước partition partition cịn trống Khi có tiến trình cần nạp vào nhớ tất partition chứa tiến trình khác hệ điều hành chuyển tiến trình đó, mà hệ điều hành cho hợp lệ (kích thước vừa đủ, không trạng thái ready running, quan hệ với tiến trình running khác, ), ngồi (swap out), để lấy partition trống nạp tiến trình vừa có u cầu Đây nhiệm vụ phức tạp hệ điều hành, hệ điều hành phí cao cho cơng việc Có hai trở ngại việc sử dụng phân vùng cố định với kích thước nhau:  Thứ nhất, kích thước chương trình lớn so với kích thước partition người lập trình phải thiết kế chương trình theo cấu trúc overlay, theo phần chia cần thiết chương trình nạp vào nhớ khởi tạo chương trình, sau người lập trình phải nạp tiếp modun cần thiết khác vào partition chương trình ghi đè lên chương trình liệu Cấu trúc chương trình overlay tiết kiệm nhớ yêu cầu cao người lập trình  Thứ hai, kích thước chương trình nhỏ kích thước partition lớn so với kích thước partition khơng phải bội số kích thước partition dễ xảy tượng phân mảnh bên (internal fragmentation) nhớ, gây lãng phí nhớ Ví dụ, có khơng gian trống kích thước 30K nằm rãi rác nhớ, khơng nạp modun chương trình có kích thước 12K, tượng gọi tượng phân mảnh bên Cả hai vấn đề khắc phục cách sử dụng phân vùng có kích thước khơng Việc đưa tiến trình vào partition hệ thống đa chương với phân vùng cố định kích thước khơng phức tạp nhiều so với trường hợp phân vùng có kích thước Với partition có kích thước khơng có hai cách để lựa chọn đưa tiến trình vào partition:  Mỗi phân vùng có hàng đợi tương ứng, theo tiến trình cần nạp vào nhớ đưa đến hành đợi phân vùng có kích thước vừa đủ để chứa nó, để vào/để đợi vào phân vùng Cách tiếp cận đơn giản việc đưa tiến trình từ hàng đợi vào phân vùng khơng có lựa chọn khác đây, phân vùng mà tiến trình đợi trống đưa vào phân vùng Tuy nhiên tiếp cận linh động có phân vùng trống, có nhiều tiến trình phải phải đợi để nạp vào phân vùng khác, điều gây lãng phí việc sử dụng nhớ  Hệ thống dùng hàng đợi chung cho tất phân vùng, theo tất tiến trình muốn nạp vào phân vùng chưa vào đưa vào hàng đợi chung Sau có phân vùng trống hệ thống xem xét để đưa tiến trình có kích thước vừa đủ vào phân vùng trống Cách tiếp cận linh động so với việc sử dụng nhiều hàng đợi trên, việc chọn tiến trình hàng đợi để đưa vào phân vùng việc làm phức tạp hệ điều hành phải dựa vào nhiều yếu tố khác như: độ ưu tiên tiến trình, trạng thái tiến trình, mối quan hệ tiến trình, New Process New Process Hình 3.1a: Mỗi partition có hàng đợi riêng Hệ điều hành Hình 3.1b: Một hàng đợi chung cho tất partition Hệ điều hành Mặc dầu phân vùng cố định với kích thước không cung cấp mềm dẻo so với phân vùng cố định với kích thước nhau, hai loại số hạn chế sau đây:  Số lượng tiến trình hoạt động hệ thống thời điểm phụ thuộc vào số lượng phân vùng cố định nhớ  Tương tự trên, nêu kích thước tiến trình nhỏ kích thước phân vùng dẫn đến tượng phân mảnh nội vi gây lãng phí việc sử dụng nhớ Sự phân vùng cố định sử dụng hệ điều hành III.2.6 Kỹ thuật phân vùng động (Dynamic Partitioning) Để khắc phục vài hạn chế kỹ thuật phân vùng cố định, kỹ thuật phân vùng động đời Kỹ thuật thường sử dụng hệ điều hành gần hệ điều hành mainframe IBM, hệ điều hành OS/MVT, Trong kỹ thuật phân vùng động, số lượng phân vùng nhớ kích thước phân vùng thay đổi Tức phần user program nhớ không phân chia trước mà ấn định sau có tiến trình nạp vào nhớ Khi có tiến trình nạp vào nhớ hệ điều hành cấp cho khơng gian vừa đủ để chứa tiến trình, phần cịn lại để sẵn sàng cấp cho tiến trình khác sau Khi tiến trình kết thúc đưa ngồi phần khơng gian nhớ mà tiến trình trả lại cho hệ điều hành hệ điều hành cấp cho tiến trình khác, tiến trình có kích thước nhỏ kích thước khơng gian nhớ trống Pro cess3 360 k Pro cess2 Pro cess2 280 k 280 k Pro cess1 Pro cess1 320 Hệ điều hành Pro cess1 320 320 k k k Hệ điều hành Hệ điều hành Hệ điều hµnh (a) (b) (c) (d) Pro Pro Pro Pro cess3 cess3 360 k Pro cess4 cess3 360 k Pro cess4 cess3 360 k 360 k Pro cess4 Pro cess1 Pro cess2 Hệ điều hành Pro cess1 320 Hệ điều hành 320 k k Hệ điều hành Hệ điều hành (e) (h) (g) (f) Hình 3.2: Kết phân trang động với thứ tự nạp tiến trình Hình vẽ 3.2 minh họa cho trình nạp/kết thúc tiến trình theo thứ tự: nạp process1, nạp process2, nạp process3, kết thúc process2, nạp process4, kết thúc process1, nạp process2 vào lại, hệ thống phân vùng động Như nhớ hình thành nhiều khơng gian nhớ có kích thước nhỏ khơng đủ chứa tiến trình nằm rải rác nhớ chính, tượng gọi thượng phân mảnh bên (external fragmentation) Để chống lại lãng phí nhớ phân mảnh, hệ điều hành phải thực việc xếp lại nhớ, để không gian nhớ nhỏ rời rác nằm liền kề lại với tạo thành khối nhớ có kích thước đủ lớn để chứa tiến trình Việc làm làm chậm tốc độ hệ thống, hệ điều hành phí cao cho việc này, đặc biệt việc tái định vị tiến trình tiến trình bị đưa khỏi nhớ nạp vào lại nhớ để tiếp tục hoạt động Trong kỹ thuật phân vùng động hệ điều hành phải đưa chế thích hợp để quản lý khối nhớ cấp phát hay trống nhớ Hệ điều hành sử dụng chế: Bản đồ bít Danh sách liên kết Trong chế hệ điều hành chia không gian nhớ thành đơn vị cấp phát có kích thước nhau, đơn vị cấp phát liên tiếp tạo thành khối nhớ (block), hệ điều hành cấp phát block cho tiến trình nạp tiến trình vào nhớ A 0 B C 0 1 D Hình 3.3a: Một đoạn nhớ bao gồm 22 đơn vị cấp phát, tạo thành block, có block cấp phát (tơ đậm, kí hiệu P) cho tiến trình: A, B, C, D block chưa cấp phát (để trắng, kí hiệu H)  Trong chế đồ bít: đơn vị cấp phát đại diện bít đồ bít Đơn vị cấp phát cịn trống đại diện bít 0, ngược lại đơn vị cấp phát đại diện bít Hình 3.3b đồ bít khối nhớ 00111000 11000011 H P P H H 10 P 14 H 17 P 18 20 101100 Hình 3.3b: quản lý đơn vị cấp phát đồ bít  Hình 3.3c: quản lý đơn vị cấp phát danh sách liên kết Trong chế danh sách liên kết: Mỗi block nhớ đại diện phần tử danh sách liên kết, phần tử gồm có trường chính: trường thứ cho biết khối nhớ cấp phát (P: process) hay trống (H: Hole), trường thứ hai cho biết thứ tự đơn vị cấp phát block, trường thứ ba cho biết block gồm đơn vị cấp phát Hình 3.3c danh sách liên kết khối nhớ Như cần nạp tiến trình vào nhớ hệ điều hành phải dựa vào đồ bit danh sách liên kết để tìm block có kích thước đủ để nạp tiến trình Sau thực thao tác cấp phát sau đưa tiến trình khỏi nhớ hệ điều hành phải cập nhật lại đồ bít danh sách liên kết, điều làm giảm tốc độ thực hệ thống Chọn kích thước đơn vị cấp phát vấn đề quan trọng thiết kế, kích thước đơn vị cấp phát nhỏ đồ bít lớn, hệ thống phải tốn nhớ để chứa Nếu kích thước đơn vị cấp phát lớn đồ bít nhỏ, lãng phí nhớ đơn vị cấp phát cuối tiến trình lớn kích thước tiến trình khơng phải bội số đơn vị cấp phát Điều vừa trình bày trường hợp danh sách liên kết Danh sách liên kết xếp theo thứ tự tăng dần giảm dần kích thước địa chỉ, điều giúp cho việc tìm khối nhớ trống có kích thước vừa đủ để nạp tiến trình theo thuật tốn đạt tốc độ nhanh hiệu cao Một số hệ điều hành tổ chức danh sách liên kết riêng để theo dõi đơn vị cấp phát nhớ, danh sách để theo dõi block cấp phát danh dách để theo dõi block cịn trống Cách giúp việc tìm khối nhớ trống nhanh hơn, tìm danh sách khối nhớ trống, tốn thời gian nhiều cho việc cấp nhật danh sách sau thao tác cấp phát, phải thực hai danh sách Khi có tiến trình cần nạp vào nhớ mà nhớ có nhiều khối nhớ trống (Free Block) có kích thước lớn kích thước tiến trình đó, hệ điều hành phải định chọn khối nhớ trống phù hợp để nạp tiến trình cho việc lựa chọn dẫn đến việc sử dụng nhớ hiệu Có thuật tốn mà hệ điều hành sử dụng trường hợp này, là: Bestfit, First-fit, Next-fit Cả thuật toán phải chọn khối nhớ trống có kích thước lớn kích thước tiến trình cần nạp vào, có điểm khác sau đây:  Best-fit: chọn khối nhớ có kích thước vừa kích thước tiến trình cần nạp vào nhớ  First-fit: trường hợp hệ điều hành bắt đầu quét qua khối nhớ trống khối nhớ trống nhớ, chọn khối nhớ trống có kích thước đủ lớn để nạp tiến trình file, bắt đầu tìm kiếm file thư mục gốc Sau trình mở file, NTFS lưu trữ tham chiếu MFT file để truy cập trực tiếp record MFT file đọc ghi file sau  Không gian trống volume theo dõi bitmap Bitmap file Địa đĩa file bipmap ghi record (tên $bitmap) MFT  Record đến file Bootstrap (có tên $Boot): File chứa mã bootstrap windows 2000 Để hệ thống boot được, mã bootstrap phải nạp vào vị trí đặc biệt đĩa Trong trình format đĩa hệ điều hành định nghĩa vùng byte cách tạo file record cho File boot file metadata NTFS, bảo vệ riêng công cụ mô tả bảo mật mà áp dụng cho tất đối tượng windows 2000  Record (có tên $BadClus) đến file, file dùng để lưu trữ danh sách liên kết block (cluster) bị bad volume  Record (tên file $Secure): đến file chứa thông tin bảo mật, file lưu trữ sở liệu mô tả bảo mật toàn volume Các file thư mục NTFS có thiết lập mơ tả bảo mật riêng, NTFS lưu trữ thiết lập file chung, cho phép file thư mục có thiết lập bảo mật tham chiếu đến mô tả bảo mật Trong nhiều mơi trường, tồn thư mục có thiết lập bảo mật, nên chế mang lại nhiều thuận lợi việc tiết kiệm không gian lưu trữ mô tả bảo mật  Record 10 (tên $Upcase): đến file case mapping, file chứa bảng chuyển đổi kí tự thường kí tự hoa  Cuối cùng, record 11 (tên $Extend) đến thư mục, thư mục chứa file hỗn hợp như: hạn ngạch đĩa (Quotas), định danh đối tượng (Object identifier),  record MFT cuối dự trữ cho việc sử dụng sau Khi lần truy cập volume, NTFS phải Mount nó, tức đọc metadata từ đĩa xây dựng cấu trúc liệu bên để xử lý truy cập từ ứng dụng Để mount volume, NTFS tìm boot sector địa vật lý MFT Theo trên, record file riêng MFT entry MFT, record file thứ hai trỏ đến file định vị vùng đĩa, MFT mirror (tên $MftMir) Khi NTFS tìm thấy record file MFT, lấy thơng tin ánh xạ từ VNC-to-LCN thuộc tính data lưu vào nhớ để chuẩn bị cho trình ghi/đọc file sau Các Record File Hệ thống file NTFS lưu trữ file tập cặp thuộc tính/giá trị (attribute/value), số liệu chứa (được gọi thuộc tính liệu khơng tên) Các thuộc tính file bao gồm tên file, thơng tin time stamp thuộc tính có tên thêm vào Hình 4.19.a sau cho thấy record MFT cho file nhỏ: có thuộc tính: Standard Information (thơng tin chuẩn), Filename (tên file) Data (dữ liệu) Mỗi thuộc tính file lưu trữ dịng tách biệt byte phạm vi file Nói cách khác NTFS khơng đọc ghi file mà đọc ghi dịng thuộc tính NTFS cung cấp thao tác thuộc tính như: create, delete, read (byte range), write (byte range) Các dịch vụ ghi đọc thường thao tác thuộc tính liệu khơng đặt tên Tuy nhiên, lời gọi thuộc tính liệu khác cách sử dụng cú pháp dòng liệu đặt tên Standard Information Filena me D ata Hình 4.19.a: Một record MFT cho file nhỏ, có thuộc tính Cả NTFS FAT cho phép tên file đường dẫn dài đến 255 kí tự, có kí tự unicode dấu phân cách khác Để tương thích với ứng dụng 16 bít DOS, có file với tên file dài tạo windows 2000 tự động sinh tên file theo kiểu DOS (tên file 8.3) Tên theo kiểu DOS lưu trữ record MFT với tên file NTFS (tên file dài), tham chiếu đến file Hình 4.19.b: Một record MFT có chứa tên MS_DOS Windows 2000 tạo tên file theo kiểu DOS từ tên file dài tương tự cách mà hệ điều hành windows98 làm Tên MS_DOS dùng để ghi, đọc, copy file Thuộc tính thường trú thuộc tính khơng thường trú Với file có kích thước nhỏ tất thuộc tính giá trị chứa record MFT Khi giá trị thuộc tính lưu trực tiếp MFT thuộc tính gọi thuộc tính thường trú Thuộc tính thơng tin chuẩn thuộc tính mục gốc thường định nghĩa thuộc tính thường trú Hình 4.20.a: Header value thuộc tính thường trú Mỗi thuộc tính bắt đầu với header, header chứa thơng tin thuộc tính, thơng tin mà NTFS dùng để quản lý thuộc tính Header cho biết thông tin liên quan đến giá trị có phải thường trú (RESIDENT) hay khơng, offset từ header đến giá trị thuộc tính, độ dài (length) giá trị thuộc tính, vv Hình 4.20.b sau cho thấy thuộc tính filemane gồm có header “RESIDENT” + Offset:8h + Length:14h value MYFILE.DAT Khi giá trị thuộc tính lưu trữ record MFT thời gian đọc nội dung file NTFS giảm xuống, khơng phải tìm danh sách cluster chứa nội dung file dựa vào việc phân tích bảng FAT hệ thống file FAT, mà cần đọc giá trị cluster đĩa chứa nội dung file, danh sách cluster ghi phần giá trị thuộc tính Thuộc tính cho thư mục nhỏ giống thuộc tính file nhỏ, thường trú MFT Hình sau record MFT cho thư mục nhỏ: Hình 4.20.b: Một record MFT cho thư mục nhỏ Trong thuộc tính Index root chứa mục tham chiếu đến file thư mục thư mục Trong thực tế nội dung thư mục, gồm file thư mục nó, khơng thể nén thành record MFT có kích thước cố định 1MB Nếu thuộc tính đặc biệt, thuộc tính liệu file chẳng hạn, lớn để chứa hết record MFT NTFS cấp phát cluster riêng cho liệu thuộc tính từ MFT Vùng gọi Run (hay phạm vi) Nếu giá trị thuộc tính sau phát triển, nội dung file tăng lên chẳng hạn, NTFS định vị Run khác cho liệu thêm vào Các thuộc tính mà giá trị lưu trữ Run record MFT gọi thuộc tính khơng thường trú Hệ thống file định có hay khơng thuộc tính cụ thể thường trú hay khơng thường trú Khi thuộc tính khơng thường trú header chứa thơng tin mà NTFS cần để tìm đến giá trị thuộc tính đĩa Hình sau cho thấy thuộc tính liệu khơng thường trú lưu trữ Run Hình 4.20.c: Record cho file lớn với Run Trong số thuộc tính chuẩn (standard attribute), có thuộc tính tăng lên trở thành khơng thường trú Các thuộc tính thơng tin chuẩn tên file ln ln thường trú Hình 4.20.d: Record MFT cho thư mục lớn với mục filename không thường trú Một thư mục lớn có thuộc tính khơng thường trú Chúng ta xem hình say đây, ta thấy record MFT không đủ chỗ để lưu trữ hết Index file chứa thư mục lớn Một phần Index lưu trũ thuộc tính Index Root, phần cịn lại lưu Run không thường trú gọi vùng đệm mục (Index Buffer) NTFS theo dõi Run cặp ánh xạ VCN-to-LCN Các LCN đánh số thứ tự cluster toàn volume từ đến n Các VCN đánh số cluster riêng cho file từ đến m Xem hình 4.20.e sau đây: Hình 4.20.e: Các VCN cho thuộc tính liệu khơng thường trú Nếu file có nhiều Run Run thứ bắt đầu với VCN Xem hình sau đây, header thuộc tính liệu chứa ánh xạ VCN-to-LCN cho Run đây, cho phép NTFS dễ dàng tìm đến định vị cấp phát đĩa Hình 4.20.f: Các ánh xạ VCN-to-LCN cho thuộc tính liệu khơng thường trú Hình 4.20.f Run liệu, thuộc tính khác lưu trữ Run record MFT không đủ chỗ để chứa chúng file có q nhiều thuộc tính dẫn đến khơng chứa đủ record record thứ MFT sử dụng để chứa thuộc tính thêm vào Trong trường hợp thuộc tính gọi danh sách thuộc tính (attribute list) thêm vào Thuộc tính attribute list chứa tên mã loại cho thuộc tính file file tham chiếu record MFT, nơi thuộc tính nạp Thuộc tính attribute list cung cấp cho trường hợp: kích thước file tăng lên file bị phân mảnh, dẫn đến record MFT đơn chứa hết ánh xạ VCN-to-LCN cần thiết để tìm tất Run Tóm lại record MFT có trường sau:  Trường record MFT record header, theo sau cặp header value thuộc tính Record header chứa mã số sử dụng để kiểm tra tính hợp lệ, số cập nhật record sử dụng lại cho file mới, tham chiếu đến file, số byte record sử dụng, nhận dạng (chỉ số, dãy số liên tiếp) record sở (chỉ sử dụng cho record mở rộng), số trường khác Sau record header header thuộc tính thứ giá trị thuộc tính thứ nhất, header thuộc tính thứ hai giá trị thuộc tính thứ hai,  NTFS định nghĩa 13 thuộc tính xuất record MFT Chúng liệt kê bảng sau Mỗi record MFT bao gồm dãy header thuộc tính, chúng đồng với phần đầu thuộc tính cho biết độ dài vị trí trường giá trị với trạng thái cờ số thông tin khác Thơng thường, giá trị thuộc tính nằm sau header chúng, giá trị dài để đặt record MFT, chúng đặt vào block đĩa tách rời Thuộc tính gọi thuộc tính khơng thường trú Một vài thuộc tính tên, lặp lại, tất thuộc tính phải đặt hàng cố định recorrd MFT Các header cho thuộc tính thường trú có độ dài 24 byte; thuộc tính khơng lưu trú dài chúng lưu thêm thơng tin để tìm thuộc tính đĩa Thuộ c tính Standard information File name Mơ tả Các bítcờ, timestamp, Tên file Unicode: lặp lại tên DOS Security descriptor Đã lỗi thời Thông tin bảo mật $extend$Secure Attribute list Vị trí MFT record thêm vào cần Object ID 64-bit, file nhận biết volume Reparse point Dùng cho liên kết tăng dần tượng trưng Volume name Tên volume (chỉ sử dụng $Volume) Volume information Phiên Volume (chỉ sử dụng $Volume) Index root Được sử dụng cho thư mục Index allocation Được sử dụng cho thư mục lớn Bitmap Được sử dụng cho thư mục lớn Logged utility Điều khiển kết nối đến $LogFile stream Data Dữ liệu luồng; lặp lại nhiều lần Bảng 4.7: Các thuộc tính sử dụng record MFT  Trường thông tin chuẩn (Standard Information) file bao gồm: thông tin bảo mật, timestamp, liên kết cố định, bít đọc bítlưu trữ, vv Nó trường có kích thước cố định ln hữu  Trường tên file (File Name) chuỗi mã Unicode có độ dài thay đổi Để tạo file với tên tên MS-DOS gần với ứng dụng 16-bítcũ, file có tên 8+3 MS-DOS Nếu tên file thực tuân theo quy tắc đặt tên 8+3 MS-DOS, tên file MS_DOS phụ không sử dụng  Trong NT 4.0, thơng tin bảo mật (Security) đưa vào thuộc tính Windows 2000 tất đưa vào file riêng, nhiều file chia sẻ phần bảo mật  Danh sách thuộc tính (Attribute List) cần thiết thuộc tính khơng đặt record MFT Thuộc tính để tìm record mở rộng Mỗi mục vào dãy thuộc tính chứa số 48-bíttrong MFT gọi record mở rộng dãy số 16-bítcho phép kiểm tra phù hợp record mở rộng record sở  Thuộc tính định danh đối tượng ID (Object Identifer) đối tượng làm cho tên file  Trường peparse point gọi thủ tục phân tách tên file để thực thao tác đặc biệt Kỹ thuật sử dụng cài đặt liên kết biểu tượng  Hai thuộc tính volume (Volume Name Volume Information) sử dụng để xác định volume  Ba thuộc tính (Index Root, Index Allocation Bitmap) sử dụng cho việc cài đặt thư mục  Thuộc tính Logged utility stream sử dụng hệ thống file mã hoá  Cuối cùng, thuộc tính liệu Một dãy tên file nằm thuộc tính heard Tiếp theo header danh sách địa đĩa mà chúng gọi block chứa file, hay cho file vài trăm byte riêng Trong thực tế, đặt liệu file vào record MFT gọi file trực tiếp Phần lớn liệu khơng đặt MFT record, thuộc tính thường khơng thường trú IV.9.3 Quản lý danh sách block chứa File đĩa Trong Windows 2000 với NTFS nội dung File cần lưu trữ volume chia thành block (tương ứng với block hay cluster đĩa), block file gọi block logic Các block file lưu nhiều đoạn block không liên tiếp đĩa, đoạn block bao gồm n block liên tiếp (n = 2, 3, 4, ), đoạn block trường hợp gọi Run Ví dụ file A lưu trữ block liên tiếp: từ block 10 đến block 16 file B lưu trữ 35 block: từ block 30 đến block 44 từ block 41 đến block 60 Như file A lưu trữ đoạn block (Run #1) file B lưu trữ hai đoạn block (Run #1 Run #2) Thông thường, block logic file ghi block 20 đĩa block logic ghi vào block 21 đĩa block logic thứ ghi vào block 22 đĩa, vv Với cách lưu trữ hệ điều hành ghi nhiều blok logic vào block đĩa lúc Đây ưu điểm Windows 2000 Danh sách block đĩa chứa nội dụng file mô tả record MFT (đối với file nhỏ) dãy record MFT, không liên tiếp (đối với file lớn) Mỗi record MFT dùng để mô tả dãy block logic kề Mỗi record MFT trường hợp bắt đầu với header lưu địa offset block file Tiếp đến địa offset block mà không nằm record Ví dụ có file lưu đoạn block là: – 49 60 – 79 record có header (0, 50) cung cấp địa đĩa cho 50 block record có header (60, 80) cung cấp địa đĩa cho 20 block Tiếp sau record header hay nhiều cặp, cặp lưu địa block đĩa bắt đầu đoạn block số block có đoạn (độ dài Run) Hình sau record MFT chứa thông tin file Infor about data blocks File Name Stand ard Header Infor Header Standa rd Infor Record Header (thông tin block liệu) Data Header Header Run #1 Run#2 Run#3 File Name 20 64 80 Unused Các block đĩa 20-23 64-65 80-82 Hình 4.21: Một record MFT cho file có run, gồm block Hình 4.21 record MFT cho file ngắn (ngắn có nghĩa tất thông tin block file chứa vừa record MFT) File gồm block, chứa Run: Run #1 gồm block từ 20 đến 23, Run #2 gồm block từ 64 đến 65 Run #3 gồm block từ 80 đến 82 Mỗi Run ghi vào record MFT theo cặp (địa block đĩa, tổng số block) Cần ý khơng có giới hạn cho kích thước file trình bày theo cách Trong trường hợp thiếu địa nén, cặp cần có số 64-bít tổng số 16 byte Tuy nhiên cặp tượng trưng cho triệu block đĩa liên tiếp Trên thực tế, file 20 Mb bao gồm 20 Run triệu block Kb, Run đặt record MFT Khi lưu trữ file có kích thước lớn (số lượng block lớn) thông tin file có phân mảnh lớn lưu trữ block MFT trình bày hình sau: Trong hình sau ta thấy record sở file nằm record MFT 102 Nó có nhiều Run record MFT, hệ thống cần phải có nhiều record mở rộng, thêm record mở rộng, đặt chúng vào record sở Phần lại record sở sử dụng cho k Run Khi tất byte record 102 dùng hết, run tích lũy tiếp tục với record MFT 105 Khi nhiều run xếp vào hết record hay record đầy phần run cịn lại vào record MFT 108 Theo cách này, nhiều record MFT dùng để quản lý file lớn khác 10 10 10 10 10 10 10 10 … Run n+1 Run #k+1 MFT 105 Record mở rộng Run# m Run #n Record mở rộng Run #k Record sở MFT10 Run#1 10 Hình 4.22: Các record MFT file lớn Một vấn đề nảy sinh cần q nhiều record MFT khơng đủ chổ MFT sở để liệt kê tất mục chúng Có giải pháp cho vấn đề thực hiên không lưu danh sách phần đuôi mở rộng record MFT (chẳng hạn, lưu trử đĩa thay ghi MFT sở) Lúc đó, kích thước file phát triển lớn đến mức cần thiết Một số kỹ thuật hỗ trợ hệ thống file NTFS Lập bảng mục Trong hệ thống file NTFS, danh mục file mục đơn tên file, tập tên file (cùng với tham chiếu file chúng) tổ chức theo cách đặc biệt để tăng tốc độ truy xuất file Để tạo danh mục, NTFS lập mục cho thuộc tính filename file thư mục Một record cho thư mục gốc volume đưa hình 4.23 sau Hình 4.23: Chỉ mục tên file cho thư mục gốc volume Một emtry MFT cho thư mục chứa thuộc tính index root danh sách xếp file thư mục Đối với thư mục lớn, tên file thực tế lưu trữ vùng đệm mục (index buffer) có kích thước cố định 4Kb, index buffer chứa tổ chức tên file Index buffer cài đặt cấu trúc liệu b+, nhờ mà cực tiểu số lần truy cập trực tiếp đĩa cần thiết để tìm đến file, đặc biệt thư mục lớn Thuộc tính Index root chứa cấp b+ trỏ đến Index buffer chứa cấp Hình 4.23 trình bày tên file thuộc tính index root index buffer (file5), entry index chứa tham chiếu file MFT, nơi chứa thông tin mô tả, kích thước, timestamp file NTFS nhân đơi thơng tin timestamp kích thước file từ record MFT file Kỹ thuật sử dụng FAT NFTS, yêu cầu cập nhật thông tin để ghi vào hai nơi Do đó, tăng tốc độ đáng kể cho thao tác duyệt thư mục cho phép hệ thống file hiển thị timestamp kích thước file file mà khơng cần mở file thư mục Thuộc tính index allocation ánh xạ VCN Run index buffer mà báo nơi index buffer thường trú đĩa Thuộc tính bitmap theo dõi VCN index buffer sử dụng hay rỗi Hình cho thấy entry file VCN, entry filename thực tế đóng gói cluster Một index buffer 4Kb chứa từ 20 đến 30 entry filename Cấu trúc liệu b+ kiểu cân bằng, ý tưởng cho việc tổ chức xếp liệu lưu trữ đĩa cực tiểu số lần truy cập đĩa cần thiết để tìm đến entry Trong MFT, thuộc tính index root thư mục chứa nhiều filename mà đóng vai trị mục vào cấp thư hai b+ Mỗi filename thuộc tính index root có trỏ tùy chọn kết hợp với để đến index buffer Index buffer mà đến chứa filename với giá trị (về mặt tự điển) sở hữu Trong hình trên, file4 entry cấp b+, đến index buffer chứa filename mà nó, cá filename file0, file1, file3 Lưu trữ tên file b+ mang lại nhiều thuận lợi Việc tìm kiếm thư mục nhanh filename lưu trữ theo thứ tự xếp Và phần mềm cấp cao đếm file thư mục, NTFS trả lại tên file vừa xếp NTFS cung cấp hỗ trợ cho mục liệu bên cạnh filename Một file có đối tượng ID gán cho nó, ID file lưu trữ thuộc tính $OBJECT_ID file NTFS cung cấp API cho phép ứng dụng mở file đối tượng ID file thay dùng tên file Do đó, NTFS phải tạo tiến trình để chuyển đổi đối tượng ID thành số file file cách hiệu Để thực điều NTFS lưu trữ ánh xạ tất đối tượng ID volume thành số tham chiếu file chúng file metadata \$Extend\$ObjID NTFS xếp đối tượng ID file nói mục filename mà ta dề cập Chỉ mục đối tượng ID lưu trữ b+ Ánh xạ bad-cluster Các thành phần lý đĩa logic windows 2000 FDISK (đối với basic disk) LDM (đối với dynamics disk), khơi phục liệu badsector đĩa có khả chịu lỗi (fault tolearant disk), với điều kiện đĩa phải sử dụng chuẩn SCSI sector trống đĩa Các volume chịu lỗi volume thuộc loại Mirrored RAD-5 Hệ thống file FAT thành phần quản lý đĩa logic khơng thể đọc liệu từ bad-sector phát sinh thông báo ứng dụng đọc liệu bad-sector NTFS thay cách tự động cluster chứa bad-sector theo dõi bad- cluster khơng sử dụng lại sau Khi phận quản lý volume trả cảnh báo bad-sector điều khiển đĩa cứng trả lỗi bad-sector, NTFS tìm cluster để thay cluster chứa bad-sector NTFS copy liệu mà phận quản lý volume khôi phục vào cluster để thiết lập lại dư thừa liệu Hình 4.24.a cho thấy record MFT cho file người sử dụng với bad-cluster trong Run liệu Khi nhận lỗi badsector, NTFS gán lại cluster chứa bad-sector vào tập bad-cluster Điều ngăn cản hệ thóng cấp bad-cluster cho file khác Sau NTFS tìm cluster cho file thay đổi ánh xạ VCN-to-LCN để đến cluster Hình 4.24.a: Record MFT cho File có bad-cluster Ánh xạ lại bad-cluster hình sau Cluster 1357 có chứa bad-sector, thay cluster 1049 Nếu bad-sector volume redundant, phận quản lý volume khơi phục liệu thay sector Nếu khơng thể thay sector trả cảnh báo cho NTFS NTFS thay cluster chứa bad-sector Hình 4.24.b1: Ánh xạ lại bad-cluster Nếu volume khơng cấu hình volume redundant liệu bad-sector khơng thể khơi phục Khi volume định dạng volume FAT phận quản lý volume khơi phục liệu việc đọc liệu từ bad-sector không thành công không nhận kết trả lời Nếu thành phần quan trọng hệ điều hành chứa bad cluster tồn file thư mục volume bị Giống hệ thống file khác, NTFS khôi phục liệu từ badsector mà khơng có hỗ trợ từ phận quản lý volume Tuy nhiên, NTFS chứa nhiều hư hại mà bad-sector gây Nếu NTFS phát bad-sector q trình đọc ánh xạ lại cluster chứa bad-sector nó, trình bày hình 4.24.b2 sau đây: Hình 4.24.b2: Ánh xạ lại bad-cluster Nếu volume khơng cấu hình volume redundant, NTFS trả lại thông báo lỗi “đọc liệu” cho chương trình người sử dụng yêu cầu đọc liệu Nếu NTFS phát bad-cluster thao tác ghi, NTFS ánh xạ lại cluster trước ghi, nên không bị liệu không phát sinh lỗi Tổ chức lưu trữ file đĩa CD_ROM Về nguyên tắc hệ thống file CD_ROM đơn giản so với hệ thống file khác, đĩa CD_ROM ghi lần (write-once media), file ghi khơng thể xóa bỏ hay thay đổi sau đĩa chế tạo, thành phần quản lý File/đĩa hệ điều hành không lo đến việc quản lý Block tự đĩa việc cấp phát thu hồi Block cho file, trường hợp file lưu trữ đĩa CD_ROM Sau xem xét hệ thống file CD_ROM hệ thống mở rộng chúng: Hệ thống file ISO 9660: Đây chuẩn phổ biến hệ thống file CD_ROM chấp nhận chuẩn quốc tế vào năm 1988 với tên ISO 9660 Một mục đích chuẩn làm cho tất CD_ROM đọc máy tính khác nhau, khơng phụ thuộc vào thứ tự byte hệ điều hành sử dụng, kể hệ điều hành yếu MS_DOS Trên CD_ROM khơng có track, cylinder đĩa từ, có đường xoắn ốc từ tâm đĩa bên ngoài, đường xoắn ốc chia thành khối (block) logic có kích thước 2352 byte, gọi sector logic Một vài byte khối dành cho phần mở đầu, sửa chữa lỗi, việc khác Phần khối logic cịn lại khoảng 2048 byte ISO 9660 hỗ trợ cho tập đĩa CD_ROM với tập gồm 216-1 đĩa, CD_ROM riêng lẽ chia thành nhiều partition Trong phần tìm hiểu chuẩn ISO 9660 với CD_ROM không chia thành Partition  Mỗi CD_ROM có phần đầu đĩa, dài 16 block, chức phần không định nghĩa chuẩn ISO 9600 Các nhà sản xuất CD_ROM sử dụng phần đầu để ghi vào chương trình BootStrap cho phép máy tính khởi động từ đĩa CD_ROM, dùng cho mục đích khác  Phần block chứa mô tả Volume chính, mơ tả chứa số thông tin chung CD_ROM, bao gồm: định danh hệ thống (32byte), định danh volume (32byte), định danh nhà sản xuất (128byte) định danh liệu (128byte) Khi chế tạo lấp đầy trường theo ý muốn Trong phần chứa phần giới thiệu, quyền tác giả, thơng tin thư mục, kích thước khối logic (2048, 4096, 8192, ), số block CD_ROM, thời gian tạo kết thúc CD_ROM Cuối cùng, mơ tả Volume cịn chứa tập mục vào (directory entry) cho thư mục gốc, chứa địa block bắt đầu thư mục gốc CD_ROM Trên CD_ROM có mơ tả volume chính, có nội dung hồn toàn giống nhau, sử dụng để dự phòng  Sau phần phần bắt đầu CD_ROM dùng để chứa file ghi đĩa  Thư mục gốc tất thư mục khác, gồm số mục vào, phần cuối chúng chứa bít đánh dấu (mark) Mỗi mục vào chứa từ 10 đến 12 trường, có số thuộc ASCII số khác trường số thuộc số nhị phân Mở rộng Rock Ridge: Các chuyên viên thiết kế UNIX nhận thấy ISO 9660 cịn vài hạn chế, họ mở rộng ISO 9660 với mục đích cho thay cho hệ thống file UNIX đĩa CD_ROM file tạo từ UNIX chép sang CD_ROM ngược lại, chuẩn mở rộng gọi Rock Ridge Rock Ridge giữ lại tất trường ISO 9660, sử dụng trường System để đưa thêm vào trường mới, hệ thống file khác không nhận biết trường xem CD_ROM đĩa CD_ROM thông thường Rock Ridge bổ sung thêm trường, theo thứ tự là: PX: Posix Attributes, PN: Major and miror device number, SL: Symbolic link, NM: Alternative name, CL: Child location, PL: Parent location, RE: Relocaltion, TF: Times stamps, trường quan trọng NM, trường cho phép sử dụng tên file cho file, tên file mục vào thư mục tên file kết hợp, tên không phụ vào tập kí tự giới hạn chiều dài chuẩn ISO 9660 Mở rộng Joliet: Cũng chuyên viên thiết kế UNIX, chuyên viên thiết kế Microsoft muốn mở rộng ISO 9660 cho file tạo từ Windows chép sang CD_ROM ngược lại họ thành công với mở rộng Joliet Mở rộng Joliet cho phép: Tên file dài đến 64 kí tự; Sử dụng tập kí tự Unicode nên tên file dài đến 128 kí tự; Có nhiều cấp thư mục lồng nhau; Sử dụng tên thư mục với phần mở rộng TÀI LIỆU THAM KHẢO Nguyễn Thanh Tùng Bài giảng Hệ điều hành Đại học Bách khoa Hà Nội, 1996 Trần Hạnh Nhi Giáo trình Hệ điều hành Nâng Cao Đại học Khoa học Tự nhiên, TP Hồ Chí Minh, 1998 Dương Quang Thiện Hệ điều hành MSDOS 6.22 Văn phịng SAMIS, TP Hồ Chí Minh, 1995 Lê Mạnh Thạnh - Nguyễn Kim Tuấn Hướng dẫn lập trình với Assembly Nhà xuất Khoa học Kỹ thuật Hà Nội, 2001 Michael Tischer Cẩm nang Lập trình Hệ thống (tập I tập II) Nguyễn Mạnh Hùng Phạm Tiến Dũng dich Nhà xuất Thống Kê, 1995 William Stalting Operating Systems Prentice Hall, 1995 Andrew S Tanenbum Modern Operating Systems Prentice Hall, 1995 David A Solomon – Mark E Russinovich Inside Microsoft Windows 2000 Microsoft Press, 2000

Ngày đăng: 23/08/2023, 15:05

Xem thêm: