Đồ án cơ sở ngành mạng Quản lý file theo định dạng FAT32 và NTFS view thông tin ổ cứng Khoa công nghệ thông tin ĐHBK Đà Nẵng Trần Hồ Thủy Tiên Đồ án cơ sở ngành mạng Quản lý file theo định dạng FAT32 và NTFS view thông tin ổ cứng Khoa công nghệ thông tin ĐHBK Đà Nẵng Trần Hồ Thủy Tiên
ĐẠI HỌC ĐÀ NẴNG TRƯỜNG ĐẠI HỌC BÁCH KHOA KHOA CÔNG NGHỆ THÔNG TIN BÁO CÁO ĐỒ ÁN NGUYÊN LÝ HỆ ĐIỀU HÀNH Đề tài 5: Xây dựng chương trình đọc thông tin đĩa cứng với định dạng NTFS FAT32 Giảng viên hướng dẫn: Nhóm: Sinh viên thực hiện: Lớp: Đà Nẵng, 12/2011 Trần Hồ Thủy Tiên 05A Trịnh Duy Nhân Lê Sữa 08T1 Mục lục GVHD: Trần Hồ Thủy Tiên MỤC LỤC DANH MỤC HÌNH ẢNH .2 TỔNG QUAN VỀ ĐỀ TÀI Chương 1.CƠ SỞ LÝ THUYẾT Chương 2.Tìm hiểu cấu tạo phần cứng cấu trúc logic Đĩa cứng .5 Chương 3.Cấu tạo vật lý Đĩa cứng Chương 15.Cấu trúc logic Đĩa cứng (hệ thống FAT32) .10 Chương 16.Cấu trúc logic Đĩa cứng (hệ thống NTFS) 12 Chương 17.Tìm hiểu hệ thống File hệ điều hành Windows 13 Chương 18.Khái niệm 13 Chương 19.Thuộc tính file 14 Chương 20.Thao tác tập tin 15 Chương 21.Các kiểu tập tin 16 Chương 22.Cấu trúc tập tin 16 Chương 23.Hệ thống file Windows: 16 Chương 24.Hệ thống FAT32 18 Chương 25.Giới thiệu 18 Chương 26.Cấu trúc FAT32 18 Chương 27.Master Boot Record (MBR) .20 Chương 28.Hệ thống NTFS 21 Chương 29.Giới thiệu 21 Chương 30.Cấu trúc phân vùng NTFS 22 Chương 31.So sánh hệ thống FAT32 NTFS 26 Chương 32.THIẾT KẾ VÀ XÂY DỰNG CHƯƠNG TRÌNH .29 Chương 33.Phân tích yêu cầu 29 Chương 34 Phân tích chức 29 Chương 35.Xây dựng chức 30 Chương 36.Hàm ReadHardisksInfo() 31 Chương 37.Hàm ReadLogicalPartitionsInfo() 32 Chương 38.Hàm getString() 33 Chương 39.ListAllLogicalPartitions() 33 Chương 40.ListAllHardisks() 33 Chương 41.TRIỂN KHAI VÀ ĐÁNH GIÁ KẾT QUẢ 34 Chương 42.Môi trường triển khai lựa chọn ngôn ngữ 34 Chương 43 Kết chức chương trình .34 Chương 44.Giải thích chức chương trình 34 Chương 45 Demo giao diện chương trình 35 Chương 46.Kết chương trình 36 KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 37 TÀI LIỆU THAM KHẢO 39 PHỤ LỤC .40 Báo cáo đồ án Nguyên lý hệ điều hành Trang Danh mục hình ảnh GVHD: Trần Hồ Thủy Tiên DANH MỤC HÌNH ẢNH Hình 1:Cấu trúc ổ đĩa cứng Hình 2:Cấu tạo đĩa từ Hình 3:Cấu trúc đĩa từ Hình 4:Trục quay Hình 5:Đầu đọc (head) Hình 6:Cấu trúc logic Đĩa cứng 10 Hình 7:Master Boot Record 11 Hình 8:Cấu trúc MBR 11 Hình 9:Cấu trúc Partition table .12 Hình 10:Cấu trúc NTFS 13 Hình 11:Master File Table (MFT) .13 Hình 12:Cấu trúc FAT32 18 Hình 13:Nội dung boot sector 19 Hình 14:Master Boot Record 20 Hình 15:Cấu trúc NTFS 22 Hình 16:Cấu trúc MFT 23 Hình 17:Thông tin chung đồ án .35 Hình 18:Thông tin phân vùng 35 Hình 19:Thông tin ổ cứng .36 Báo cáo đồ án Nguyên lý hệ điều hành Trang Chương 1: Cơ sở lý thuyết GVHD: Trần Hồ Thủy Tiên TỔNG QUAN VỀ ĐỀ TÀI Bối cảnh lý thực đề tài Đồ án môn học Khoa Công nghệ thông tin nói chung môn học Nguyên lý hệ điều hành Máy tính điện tử nói riêng nhằm tạo điều kiện giúp cho sinh viên: Đi sâu nắm vững cách có hệ thống kiến thức thu nhận trình học lý thuyết, làm tập thực hành Từng bước làm quen với công tác khoa học có định hướng giáo viên hướng dẫn hình thành hành vi nghiên cứu độc lập có trợ giúp tài liệu tham khảo Gắn trình học lý thuyết với công tác nghiên cứu thực tế Trình bày rõ ràng khoa học vấn đề thuộc lĩnh vực nghiên cứu Chính lẽ mà người làm đồ án môn học phải thực hiện, hoàn thành với kết chấp nhận khối lượng công việc thuộc lĩnh vực chuyên sâu Kết công việc phản ánh công sức, tài năng, trí tuệ người làm đồ án phải trình bày văn đồ án môn học theo chuẩn mực yêu cầu giáo viên hướng dẫn Thời gian cần thiết cho đồ án khác nhau, thời hạn phải hoàn thành yêu cầu quan trọng đặc biệt Đồ án môn học phản ánh công sức nghiên cứu nên cần phải trình bày trước môn đánh giá điểm số Kết cấu đồ án a Tìm hiểu cấu tạo phần cứng cấu trúc logic Đĩa cứng b Tìm hiểu hệ thống File hệ điều hành Windows c Giới thiệu hệ thống FAT32, cấu trúc FAT32, partion Boot Sector, directory tbale d Giới thiệu hệ thống NTFS, cấu trúc phân vùng NTFS, Master File Table Báo cáo đồ án Nguyên lý hệ điều hành Trang Chương 1: Cơ sở lý thuyết GVHD: Trần Hồ Thủy Tiên e So sánh hệ thống FAT32 NTFS f Xây dựng chương trình thực chức năng: Đưa hình Ổ đĩa, tên ổ đĩa, số serial, trạng thái, định dạng, dung lượng, trống, số byte/sector, số sector/cluster Báo cáo đồ án Nguyên lý hệ điều hành Trang Chương 1: Cơ sở lý thuyết GVHD: Trần Hồ Thủy Tiên Chương CƠ SỞ LÝ THUYẾT Chương Tìm hiểu cấu tạo phần cứng cấu trúc logic Đĩa cứng Chương Cấu tạo vật lý Đĩa cứng Ổ đĩa cứng thiết bị lưu trữ đọc ghi liệu nhanh chóng tập hợp phân tử từ hóa đĩa quay Ổ đĩa cứng gồm thành phần, phận sau: Hình 1: Cấu trúc ổ đĩa cứng 3.1.1.1 Cụm đĩa Bao gồm toàn đĩa (gọi đĩa từ), trục quay động Chương Đĩa từ (platter) Đĩa thường cấu tạo nhôm thủy tinh, bề mặt phủ lớp vật liệu từ tính nơi chứa liệu Tùy theo hãng sản xuất mà đĩa sử dụng hai mặt Số lượng đĩa nhiều một, phụ thuộc vào dung lượng công nghệ hãng sản xuất khác Mỗi đĩa từ sử dụng hai mặt, đĩa cứng có nhiều đĩa từ, chúng gắn song song, quay đồng trục, tốc độ với hoạt động Báo cáo đồ án Nguyên lý hệ điều hành Trang Chương 1: Cơ sở lý thuyết GVHD: Trần Hồ Thủy Tiên Hình 2: Cấu tạo đĩa từ Track: mặt làm việc đĩa từ chia nhiều vòng tròn đồng tâm gọi track Track hiểu đơn giản giống rãnh ghi liệu đĩa nhựa (ghi nhạc trước đây) cách biệt rãnh ghi gờ phân biệt chúng vòng tròn đồng tâm không nối tiếp thành dạng xoắn trôn ốc đĩa nhựa Track ổ đĩa cứng không cố định từ sản xuất, chúng thay đổi vị trí định dạng cấp thấp ổ đĩa (low format) Thông thường đĩa từ có từ 312 đến 2048 track Sector: Trên track chia thành phần nhỏ đoạn hướng tâm gọi sector Các sector phần nhỏ cuối chia để chứa liệu Theo chuẩn thông thường sector chứa dung lượng 512 byte Mỗi track chia thành lượng sector định Tuy nhiên, track bên lớn track phía (gần trục) nên vào sâu track phía dung lượng mà sector chứa thấp Cylinder: Tập hợp track bán kính (cùng số hiệu trên) mặt đĩa khác gọi cylinder Nói xác hơn: đầu đọc/ghi làm việc track tập hợp toàn track bề mặt đĩa lại mà đầu đọc lại làm việc gọi cylinder Trên ổ đĩa cứng có nhiều cylinder có nhiều track mặt đĩa từ Báo cáo đồ án Nguyên lý hệ điều hành Trang Chương 1: Cơ sở lý thuyết GVHD: Trần Hồ Thủy Tiên Hình 3: Cấu trúc đĩa từ Chương Trục quay Truyền chuyển động đĩa từ Trục quay trục để gắn đĩa từ lên nó, chúng nối trực tiếp với động quay đĩa cứng Trục quay có nhiệm vụ truyền chuyển động quay từ động đến đĩa từ Hình 4: Báo cáo đồ án Nguyên lý hệ điều hành Trục quay Trang Chương 1: Cơ sở lý thuyết GVHD: Trần Hồ Thủy Tiên Trục quay thường chế tạo vật liệu nhẹ (như hợp kim nhôm) chế tạo tuyệt đối xác để đảm bảo trọng tâm chúng không sai lệch - sai lệch nhỏ gây nên rung lắc toàn đĩa cứng làm việc tốc độ cao, dẫn đến trình đọc/ghi không xác Chương Động Được gắn đồng trục với trục quay đĩa Chúng gọi động bước - động điện có nguyên lý ứng dụng khác biệt với đa số động điện thông thường Chúng làm việc nhờ chuyển mạch điện tử đưa tín hiệu điều khiển vào stato theo thứ tự tần số định Chúng thực chất động đồng dùng để biến đổi tín hiệu điều khiển dạng xung điện rời rạc thành chuyển động góc quay chuyển động rotour có khả cố định rotour vào vị trí cần thiết 6.1.1.1 Cụm đầu đọc Chương Đầu đọc (Head) Trên mặt đĩa từ ổ cứng có đầu đọc (head) riêng biệt, đầu đọc có vai trò đọc/ghi liệu lên bề mặt đĩa từ Đầu đọc đơn giản cấu tạo gồm lõi ferit (trước lõi sắt) cuộn dây (giống nam châm điện) Gần công nghệ giúp cho ổ đĩa cứng hoạt động với mật độ xít chặt như: chuyển hạt từ xếp theo phương vuông góc với bề mặt đĩa nên đầu đọc thiết kế nhỏ gọn phát triển theo ứng dụng công nghệ Hình 5: Báo cáo đồ án Nguyên lý hệ điều hành Đầu đọc (head) Trang Chương 1: Cơ sở lý thuyết GVHD: Trần Hồ Thủy Tiên Đầu đọc đĩa cứng có công dụng đọc liệu dạng từ hóa bề mặt đĩa từ từ hóa lên bề mặt đĩa ghi liệu Số đàu đọc ghi với số mặt hoạt động đĩa cứng, có nghĩa chúng nhỏ hai lần số đĩa (nhỏ trường hợp ví dụ hai đĩa sử dụng ba mặt) Ta có công thức: Dung lượng đĩa cứng = số head*số cylinder*số sector/track*số mặt*512byte Chương Cần di chuyển đầu đọc (head arm actuator arm): Cần di chuyển đầu đọc/ghi thiết bị mà đầu đọc/ghi gắn vào Cần có nhiệm vụ di chuyển theo phương song song với đĩa từ khoảng cách định, dịch chuyển định vị xác đầu đọc vị trí từ mép đĩa đến vùng phía đĩa (phía trục quay) Các cần di chuyển đầu đọc di chuyển đồng thời với chúng gắn chung trục quay (đồng trục), có nghĩa việc đọc/ghi liệu bề mặt (trên loại hai mặt) vị trí chúng hoạt động vị trí tương ứng bề mặt đĩa lại Sự di chuyển cần thực theo hai phương thức: -Sử dụng động bước để truyền chuyển động -Sử dụng cuộn cảm để di chuyển cân lực từ 8.1.1.1 Cụm mạch điện Chương Mạch điều khiển: Có nhiệm vụ điều khiển động đồng trục, điều khiển di chuyển cần di chuyển đầu đọc để đảm bảo đến vị trí bề mặt đĩa Chương 10 Mạch xử lý liệu: Mạch xử lý liệu dùng để xử lý liệu đọc/ghi ổ đĩa cứng Chương 11 Bộ nhớ đệm (cache buffer): Bộ nhớ đệm nơi tạm lưu liệu trình đọc/ghi liệu Dữ liệu nhớ đệm ổ đĩa cứng ngừng cấp điện Báo cáo đồ án Nguyên lý hệ điều hành Trang Chương 2: Thiết kế xây dựng chương trình GVHD: Trần Hồ Thủy Tiên Chương 36 Hàm ReadHardisksInfo() Hàm thực chức đọc thông tin HardDisk Với thông tin ổ cứng đọc tiến hành thêm vào danh sách ổ cứng Ta sử dụng API WIN để hỗ trợ hàm Bao gồm: -Hàm CreateFile(): tạo mở file hay thiết bị IO HANDLE WINAPI CreateFile( in LPCTSTR lpFileName, in DWORD dwDesiredAccess, in DWORD dwShareMode, in_opt LPSECURITY_ATTRIBUTES lpSecurityAttributes, in DWORD dwCreationDisposition, in DWORD dwFlagsAndAttributes, in_opt HANDLE hTemplateFile ); -Hàm DeviceIoControl(): Gửi mã thiết bị tương ứng để xác định thao tác thực tương ứng với thiết bị BOOL WINAPI DeviceIoControl( in HANDLE hDevice, in DWORD dwIoControlCode, in_opt LPVOID lpInBuffer, in DWORD nInBufferSize, out_opt LPVOID lpOutBuffer, in DWORD nOutBufferSize, out_opt LPDWORD lpBytesReturned, inout_opt LPOVERLAPPED lpOverlapped ); -Struct STORAGE_PROPERTY_QUERY: Truy vấn thông tin lưu trữ typedef struct _STORAGE_PROPERTY_QUERY { STORAGE_PROPERTY_ID PropertyId; STORAGE_QUERY_TYPE QueryType; BYTE AdditionalParameters[1]; } STORAGE_PROPERTY_QUERY, *PSTORAGE_PROPERTY_QUERY; -Struct STORAGE_DEVICE_DESCRIPTOR: Truy vấn thông tin mô tả thiết bị typedef struct _STORAGE_DEVICE_DESCRIPTOR { DWORD Version; DWORD Size; BYTE DeviceType; BYTE DeviceTypeModifier; BOOLEAN RemovableMedia; BOOLEAN CommandQueueing; DWORD VendorIdOffset; DWORD ProductIdOffset; DWORD ProductRevisionOffset; DWORD SerialNumberOffset; STORAGE_BUS_TYPE BusType; DWORD RawPropertiesLength; BYTE RawDeviceProperties[1]; } STORAGE_DEVICE_DESCRIPTOR, *PSTORAGE_DEVICE_DESCRIPTOR; Báo cáo đồ án Nguyên lý hệ điều hành Trang 31 Chương 2: Thiết kế xây dựng chương trình GVHD: Trần Hồ Thủy Tiên -Struct DISK_GEOMETRY_EX: Mô tả mặt hình học cho thiết bị typedef struct _DISK_GEOMETRY_EX { DISK_GEOMETRY Geometry; LARGE_INTEGER DiskSize; BYTE Data[1]; } DISK_GEOMETRY_EX, *PDISK_GEOMETRY_EX; Chương 37 Hàm ReadLogicalPartitionsInfo() Hàm thực chức đọc thông tin Logical Partition Với thông tin phân vùng đọc tiến hành thêm vào danh sách phân vùng Ta sử dụng API WIN để hỗ trợ hàm Bao gồm: -Hàm GetLogicalDriveStrings(): Trả buffer cho chuỗi giá trị drive hợp lệ hệ thống DWORD WINAPI GetLogicalDriveStrings( in DWORD nBufferLength, out LPTSTR lpBuffer ); -Hàm GetDriveType(): Lấy thông tin kiểu thiết bị tháo được, cố định, CD-ROM, RAM disk,… UINT WINAPI GetDriveType( in_opt LPCTSTR lpRootPathName ); -Hàm GetDiskFreeSpace(): Trả thông tin xác định Disk, bao gồm dung lượng trống, tổng dụng lượng, số Sectors,… BOOL WINAPI GetDiskFreeSpace( in LPCTSTR lpRootPathName, out LPDWORD lpSectorsPerCluster, out LPDWORD lpBytesPerSector, out LPDWORD lpNumberOfFreeClusters, out LPDWORD lpTotalNumberOfClusters ); -Hàm GetVolumeInformation(): Truy vấn thông tin file hệ thống thông tin liên quan đến thư mục root Để xác định xử lý thông tin ta dùng hàm GetVolumeInformationByHandleW() BOOL WINAPI GetVolumeInformation( in_opt LPCTSTR lpRootPathName, out LPTSTR lpVolumeNameBuffer, in DWORD nVolumeNameSize, out_opt LPDWORD lpVolumeSerialNumber, out_opt LPDWORD lpMaximumComponentLength, out_opt LPDWORD lpFileSystemFlags, out LPTSTR lpFileSystemNameBuffer, in DWORD nFileSystemNameSize ); Báo cáo đồ án Nguyên lý hệ điều hành Trang 32 Chương 2: Thiết kế xây dựng chương trình GVHD: Trần Hồ Thủy Tiên Chương 38 Hàm getString() Hàm thực chức phân tích thông tin lấy buffer thành thông tin cần thiết tên nhà sản xuất, mã sản phẩm, số hiệu Chương 39 ListAllLogicalPartitions() Hiểm thị tất phân vùng thông tin tất phân vùng hình console Chương 40 ListAllHardisks() Hiểm thị tất ổ cứng thông tin tất ổ cứng hình console Báo cáo đồ án Nguyên lý hệ điều hành Trang 33 Chương 3: Triển khai đánh giá kết GVHD: Trần Hồ Thủy Tiên Chương 41 TRIỂN KHAI VÀ ĐÁNH GIÁ KẾT QUẢ Chương 42 Môi trường triển khai lựa chọn ngôn ngữ Sử dụng môi trường Visual C++ 2010 Express để triển khai xây dựng chương trình Nó phần dòng sản phẩm Visual Studio 2010 Express với chức cung cấp công cụ cho người sử dụng Windows để tạo ứng dụng tùy chỉnh thiết lập nâng cao Ngôn ngữ lựa chọn: Visual C++ Visual C++ ngôn ngữ lập trình mạnh mẽ thiết kế để hỗ trợ kiểm soát chi tiết xây dựng ứng dụng Windows (COM+) ứng dụng Windows quản lý NET Framwork Hỗ trợ mạnh cho lập trình, cung cấp đầy đủ thư viện cho lập trình ứng dụng Windows, trình debug dễ dàng trực quan,… Chương 43 Kết chức chương trình Chương 44 Giải thích chức chương trình Chương trình chia làm mục chính: Mục Thông tin chung: Giới thiệu thông tin chung đồ án, đề tài, sinh viên thực đề tài giáo viên hướng dẫn đề tài Mục thông tin phân vùng: Hiển thị danh sách phân vùng có máy tính, người dùng chọn phân vùng cần xem thông tin hiển thị Mục thông tin ổ cứng: Hiển thị danh sách ổ cứng thời, người sử dụng chọn ổ cứng cần xem thông tin hiển thị bên để dễ dàng xem Báo cáo đồ án Nguyên lý hệ điều hành Trang 34 Chương 3: Triển khai đánh giá kết GVHD: Trần Hồ Thủy Tiên Chương 45 Demo giao diện chương trình Hình 17: Hình 18: Báo cáo đồ án Nguyên lý hệ điều hành Thông tin chung đồ án Thông tin phân vùng Trang 35 Chương 3: Triển khai đánh giá kết Hình 19: GVHD: Trần Hồ Thủy Tiên Thông tin ổ cứng Chương 46 Kết chương trình Chương trình cho phép xem số thông tin ổ cứng, phân vùng logic định dang theo NTFS FAT32 máy tính Kết chương trình thể qua giao diện demo (các hình ảnh phần trên) Báo cáo đồ án Nguyên lý hệ điều hành Trang 36 Kết luận hướng phát triển GVHD: Trần Hồ Thủy Tiên KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN Những kết đạt Đồ án tìm hiểu hệ thống quản lý tệp hệ điều hành MS Windows, chức cách thức hoạt động quản lý hệ thống tệp, cấu trúc đĩa cứng định dạng NTFS, FAT32… hệ điều hành MS Windows Đồng thời, đồ án xây dựng thành công chương trình demo đọc hiển thị thông tin ổ đĩa, phân vùng, cho phép người sử dụng biết thông tin chi tiết nhãn đĩa, số hiệu, nhà sản xuất, dung lượng trống, dung lượng sử dụng… hiển thị cách trực quan giao diện người dùng thân thiện Bên cạnh mặc đạt trên, trình làm đồ án chúng em học thêm nhiều kiến thức bổ ích, kinh nghiệm quý giá lý thuyết hệ thống tệp, cấu trúc ổ đĩa…, ngôn ngữ để thực mà cụ thể ngôn ngữ lập trình Visual C++ với hỗ trợ mạnh vẽ môi trường phát triển Visual Studio 2010 Những vấn đề tồn Bên cạnh số vấn đề mà chúng em đạt được, tồn số vấn đề mà chúng em gặp khó khăn chưa giải tiêu biểu như: - Phần giao diện đơn giản, chưa xây dựng phần đồ thị để biểu diễn trực quan thông tin chi tiết ổ đĩa phân vùng - Chưa phân biệt phân phân vùng cho ổ đĩa khác nhau,và ổ đĩa thị danh sách thông tin phân vùng, chưa cho thấy điểm bắt đầu kết thúc phân vùng ổ đĩa … Và số vấn đề tồn khác trình xây dựng, tìm hiểu trình bày báo cáo, xây dựng chương trình mà chúng em chưa thể hoàn chỉnh Báo cáo đồ án Nguyên lý hệ điều hành Trang 37 Kết luận hướng phát triển GVHD: Trần Hồ Thủy Tiên Hướng phát triển Về phần tìm hiểu sở lý thuyết, chúng em tiếp tục tìm hiểu nghiên cứu sâu đề tài để phục vụ tốt cho môn học sau Về phần chương trình, tiếp tục xây dựng, khắc phục hoàn thiện số vấn đề bất cập, bổ sung thên số tính như: dùng đồ thị để biểu diễn trực quan cho thông tin chi tiết ổ cứng phân vùng dung lượng trống, dung lượng sử dụng, tổng dung lượng… Và có thời gian chúng em hoàn chỉnh thêm số chức năng, thông tin cần thiết như: điểm bắt đầu kết thúc phân vùng, số lượng phân vùng ổ đĩa, phân vùng thuộc ổ đĩa nào… Cuối chúng em xin chân thành cám ơn hướng dẫn chu đáo, nhiệt tình cô Trần Hồ Thủy Tiên hướng dẫn nhiệt tình giúp đỡ cho chúng em trình làm đồ án để chúng em hoàn thành đồ án cách tốt Báo cáo đồ án Nguyên lý hệ điều hành Trang 38 Tài liệu tham khảo GVHD: Trần Hồ Thủy Tiên TÀI LIỆU THAM KHẢO Giáo trình Cấu Trúc Máy Tính Principles Of Computer Architecture - Class test edition-Augst 1999 Giáo trình Nguyên lý hệ điều hành - Đặng Vũ Tùng Trần Hồ Thủy Tiên, Bài giảng Nguyên lý hệ điều hành, khoa CNTT, trường Đại học Bách khoa, Đại học Đà Nẵng http://www.ntfs.com http://vi.wikipedia.org/wiki/Microsoft_Windows http://vi.wikipedia.org/wiki/NTFS Báo cáo đồ án Nguyên lý hệ điều hành Trang 39 Phụ lục GVHD: Trần Hồ Thủy Tiên PHỤ LỤC Lớp DiskInfo xây dựng để lấy thông tin ổ cứng cấu trúc liệu sử dụng: //DiskInfo.h #ifndef Disk_Info_h_ #define Disk_Info_h_ #include #include using std::vector; using std::string; struct LogicalPartitionInfo { string rootPathName, volumeName, fileSystemName; unsigned long sectorsPerCluster, numberOfFreeClusters, totalNumberOfClusters; unsigned long volumeSerialNumber; long long size; int type; }; struct HardiskInfo { string vendorId, productId, serialNumber; unsigned long bytePerSector, sectorsPerTrack, tracksPerCylinder; long long diskSize, cylinders; int driverType; }; typedef vector ListLogicalPartitionInfo; typedef vector ListHardiskInfo; class DiskInfo { private: ListLogicalPartitionInfo listLogicalPartitionInfo; ListHardiskInfo listHardiskInfo; char* getString (const char * str, int pos, char * buf); void DestroyListLogicalPartitions(); void DestroyListHardisks(); public: int ReadHardisksInfo(); int ReadLogicalPartitionsInfo(); void DestroyAll(); ListHardiskInfo getHDisks(); ListLogicalPartitionInfo getPartitions(); DiskInfo(); virtual ~DiskInfo(); }; #endif Báo cáo đồ án Nguyên lý hệ điều hành Trang 40 Phụ lục GVHD: Trần Hồ Thủy Tiên //DiskInfo.cpp #include "stdafx.h" #include #include #include "DiskInfo.h" using namespace std; #define MAX_IDE_DRIVES 16 #define IOCTL_DISK_GET_DRIVE_GEOMETRY_EX CTL_CODE(IOCTL_DISK_BASE, 0x0028, METHOD_BUFFERED, FILE_ANY_ACCESS) DiskInfo diskInfo; DiskInfo::DiskInfo(void) { this->ReadLogicalPartitionsInfo(); this->ReadHardisksInfo(); } int DiskInfo::ReadHardisksInfo () { this->DestroyListHardisks(); int drive = 0; HardiskInfo *hardiskInfo; for (drive = 0; drive < MAX_IDE_DRIVES; drive++) { HANDLE hPhysicalDrive = 0; char driveName [256]; sprintf_s(driveName, "\\\\.\\PhysicalDrive%d", drive); //Google xem CreateFile WCHAR name[256]; MultiByteToWideChar( 0,0, driveName, 255, name, 256); hPhysicalDrive = CreateFile ((LPCWSTR)name, 0, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL); if (hPhysicalDrive != INVALID_HANDLE_VALUE) { ////google xem struct STORAGE_PROPERTY_QUERY STORAGE_PROPERTY_QUERY query; DWORD cbBytesReturned = 0; char buffer[10000]; memset ((void *) &query, 0, sizeof(query)); query.PropertyId = StorageDeviceProperty; query.QueryType = PropertyStandardQuery; memset (buffer, 0, sizeof (buffer)); //Google xem DeviceIoControl if ( DeviceIoControl (hPhysicalDrive, IOCTL_STORAGE_QUERY_PROPERTY, &query, sizeof(query), &buffer, sizeof(buffer), &cbBytesReturned, NULL) ) { //google xem struct STORAGE_DEVICE_DESCRIPTOR STORAGE_DEVICE_DESCRIPTOR * descrip = (STORAGE_DEVICE_DESCRIPTOR *) & buffer; char serialNumber[1000]; char modelNumber[1000]; char vendorId[1000]; //Lay cac thong tin mo ta cua o cung getString (buffer, descrip -> VendorIdOffset, vendorId ); Báo cáo đồ án Nguyên lý hệ điều hành Trang 41 Phụ lục modelNumber ); serialNumber ); mo ta GVHD: Trần Hồ Thủy Tiên getString (buffer, descrip -> ProductIdOffset, getString (buffer, descrip -> SerialNumberOffset, //Them mot doi tuong o cung vao danh sach voi cac thong tin hardiskInfo = new HardiskInfo; hardiskInfo->vendorId = string(vendorId); hardiskInfo->productId = string(modelNumber); hardiskInfo->serialNumber = string(serialNumber); hardiskInfo->bytePerSector = 0; hardiskInfo->cylinders = 0; hardiskInfo->diskSize = 0; hardiskInfo->tracksPerCylinder = 0; hardiskInfo->sectorsPerTrack = 0; hardiskInfo->driverType = -1; listHardiskInfo.push_back(hardiskInfo); &buffer; // Lay thong tin chi tiet cua o cung memset (buffer, 0, sizeof(buffer)); if ( DeviceIoControl (hPhysicalDrive, IOCTL_DISK_GET_DRIVE_GEOMETRY_EX, NULL, 0, &buffer, sizeof(buffer), &cbBytesReturned, NULL)) { //google xem struct DISK_GEOMETRY_EX DISK_GEOMETRY_EX* geom = (DISK_GEOMETRY_EX*) FixedMedia); int fixed = (geom->Geometry.MediaType == int64 size = geom->DiskSize.QuadPart; //Cap nhap thong tin chi tiet hardiskInfo->bytePerSector = geom- >Geometry.BytesPerSector; >Geometry.TracksPerCylinder; >Geometry.SectorsPerTrack; hardiskInfo->diskSize = geom->DiskSize.QuadPart; hardiskInfo->tracksPerCylinder = geomhardiskInfo->sectorsPerTrack = geomhardiskInfo->driverType = geom->Geometry.MediaType; hardiskInfo->cylinders = geom- >Geometry.Cylinders.QuadPart; } } CloseHandle (hPhysicalDrive); } } return drive; } int DiskInfo::ReadLogicalPartitionsInfo() { this->DestroyListLogicalPartitions(); const int lenght = 255; char buffer[lenght + 1]; WCHAR names[256]; //Lay danh sach cac o dia logical ::GetLogicalDriveStrings(lenght, names); //Convert WCHAR* to char* for (int i = 0; i < 256; i++){ Báo cáo đồ án Nguyên lý hệ điều hành Trang 42 Phụ lục GVHD: Trần Hồ Thủy Tiên buffer[i] = names[i]; } char *s = buffer; //Khoi tao danh sach cac o dia logical while (*s) { LogicalPartitionInfo *volumeInfo = new LogicalPartitionInfo; volumeInfo->rootPathName = s; listLogicalPartitionInfo.push_back(volumeInfo); s += strlen(s) + 1; } //Lay thong tin chi tiet cua moi o dia logical WCHAR VolumeNameBuffer[256], FileSystemBuffer[256]; for (unsigned int i = 0; i < listLogicalPartitionInfo.size(); i++) { memset( VolumeNameBuffer, 0, 256*sizeof(WCHAR)); memset( FileSystemBuffer, 0, 256*sizeof(WCHAR)); unsigned long bytesPerSector = 0; unsigned long sectorsPerCluster = 0; unsigned long numberOfFreeClusters = 0; unsigned long totalNumberOfClusters = 0; unsigned long volumeSerialNumber = 0; unsigned long maximumComponentLength = 0; unsigned long fileSystemFlags = 0; int driverType; WCHAR rootPath[5]; MultiByteToWideChar( 0,0, listLogicalPartitionInfo[i]>rootPathName.data(), 5, rootPath, 5); driverType =::GetDriveType((LPCWSTR)rootPath); //Google xem GetDiskFreeSpace ::GetDiskFreeSpace( (LPCWSTR)rootPath, §orsPerCluster, &bytesPerSector, &numberOfFreeClusters, &totalNumberOfClusters ); //Google xem VolumeInfomation ::GetVolumeInformation( (LPCWSTR)rootPath, (LPWSTR)VolumeNameBuffer, 256, &volumeSerialNumber, &maximumComponentLength, &fileSystemFlags, (LPWSTR)FileSystemBuffer, 256 ); //Convert WCHAR * to char * char volumName[256], fileSystem[256]; for(int i = 0; i < 256; i++){ volumName[i] = VolumeNameBuffer[i]; fileSystem[i] = FileSystemBuffer[i]; } listLogicalPartitionInfo[i]->type = driverType; listLogicalPartitionInfo[i]->numberOfFreeClusters = numberOfFreeClusters; listLogicalPartitionInfo[i]->sectorsPerCluster = sectorsPerCluster; listLogicalPartitionInfo[i]->totalNumberOfClusters = totalNumberOfClusters; listLogicalPartitionInfo[i]->volumeSerialNumber = volumeSerialNumber; listLogicalPartitionInfo[i]->volumeName = string(volumName); listLogicalPartitionInfo[i]->fileSystemName = string(fileSystem); Báo cáo đồ án Nguyên lý hệ điều hành Trang 43 Phụ lục GVHD: Trần Hồ Thủy Tiên listLogicalPartitionInfo[i]->size = bytesPerSector * sectorsPerCluster * (long long) totalNumberOfClusters; } } return this->listLogicalPartitionInfo.size(); char * DiskInfo::getString (const char * str, int pos, char * buf) { buf [0] = 0; if (pos 1) while (isspace(buf[strlen(buf) - 1])) { buf[strlen(buf) - 1] = 0; } return buf; } void DiskInfo::DestroyListLogicalPartitions() { while (!listLogicalPartitionInfo.empty()) { delete listLogicalPartitionInfo.back(); listLogicalPartitionInfo.pop_back(); } } Báo cáo đồ án Nguyên lý hệ điều hành Trang 44 Phụ lục GVHD: Trần Hồ Thủy Tiên void DiskInfo::DestroyListHardisks() { while (!listHardiskInfo.empty()) { delete listHardiskInfo.back(); listHardiskInfo.pop_back(); } } void DiskInfo::DestroyAll() { this->DestroyListHardisks(); this->DestroyListLogicalPartitions(); } DiskInfo::~DiskInfo() { this->DestroyAll(); } ListHardiskInfo DiskInfo::getHDisks() { return this->listHardiskInfo; } ListLogicalPartitionInfo DiskInfo::getPartitions() { return this->listLogicalPartitionInfo; } Báo cáo đồ án Nguyên lý hệ điều hành Trang 45 [...]... chọn ổ cứng cần xem và các thông tin sẽ được hiển thị ngay bên dưới để dễ dàng xem được Báo cáo đồ án Nguyên lý hệ điều hành Trang 34 Chương 3: Triển khai và đánh giá kết quả GVHD: Trần Hồ Thủy Tiên Chương 45 Demo giao diện chương trình Hình 17: Hình 18: Báo cáo đồ án Nguyên lý hệ điều hành Thông tin chung về đồ án Thông tin phân vùng Trang 35 ... MBR: Hình 14: Báo cáo đồ án Nguyên lý hệ điều hành Master Boot Record Trang 20 Chương 1: Cơ sở lý thuyết GVHD: Trần Hồ Thủy Tiên MBR là một mảng dữ liệu về các partition trong máy Nó được tạo do hệ điều hành và dĩ nhiên mỗi hệ điều hành đều có cách tạo riêng biệt Ví dụ, WinNT4 và Win2k sẽ có file boot.ini dùng như MBR Mỗi khi khởi động máy, một chương trình chuyên làm việc loading hệ điều hành của WinNT... Table Báo cáo đồ án Nguyên lý hệ điều hành Trang 24 Chương 1: Cơ sở lý thuyết GVHD: Trần Hồ Thủy Tiên 30.1.1.5 Master File Table Copy Bao gồm việc copy những thông tin cần thiết cho việc phục hồi dữ liệu, nếu file hệ thống có vấn đề gì thì nó sẽ đưa ra bản đã copy này để phục hồi lại dữ liệu Báo cáo đồ án Nguyên lý hệ điều hành Trang 25 Chương 1: Cơ sở lý thuyết GVHD: Trần Hồ Thủy Tiên Chương 31 So sánh... khóa giúp việc tìm kiếm nhanh hơn Chương 23 Hệ thống file trong Windows: Các hệ thống file trong windows gồm 2 hệ thống chính là FAT và NTFS, trong đó NTFS là hệ thốn file với nhiều đặc tính hiện đại mà hệ thống FAT không có Báo cáo đồ án Nguyên lý hệ điều hành Trang 16 Chương 1: Cơ sở lý thuyết GVHD: Trần Hồ Thủy Tiên 23.1.1.1 FAT16 Với hệ điều hành MS-DOS, hệ thống tập tin FAT (FAT16 - để phân biệt... (dưới 400 MB) và không sử dụng được trên đĩa mềm Chương 17 Tìm hiểu hệ thống File của hệ điều hành Windows Chương 18 Khái niệm Để hệ thống máy tính tiện dụng, hệ điều hành cung cấp một tầm nhìn luận lý không đổi của việc lưu trữ thông tin Hệ điều hành định nghĩa một đơn vị lưu trữ thông tin là tập tin (File) File được ánh xạ bởi hệ điều hành trên các thiết bị vật lý Các thiết bị lưu trữ được dùng thường... trỏ hiện hành được đặt tới giá trị được cho -Lấy thuộc tính: lấy thuộc tính tập tin cho quá trình -Đổi tên: thay đổi tên tập tin đã tồn tại Báo cáo đồ án Nguyên lý hệ điều hành Trang 15 Chương 1: Cơ sở lý thuyết GVHD: Trần Hồ Thủy Tiên Chương 21 Các kiểu tập tin Khi thiết kế một hệ thống tập tin, chúng ta luôn luôn xem xét hệ điều hành nên tổ chức và hỗ trợ các kiểu tập tin nào Nếu hệ điều hành nhận... file hệ thống, boot sector được load vào memory và dùng Báo cáo đồ án Nguyên lý hệ điều hành Trang 19 Chương 1: Cơ sở lý thuyết GVHD: Trần Hồ Thủy Tiên executable code để giao quyền thực thi cho file lo.sys - là một file hệ thống chính của MS-DOS -Sau khi nạp OS vào memory, lúc này OS sẽ điều khiển hệ thống 26.1.1.2 Bảng FAT FAT1, FAT2 là các bảng cấp phát và định vị file, thông tin chỉ mục giúp hệ điều. .. bên trong của một tập tin Ngoài ra, các tập tin cụ thể phải phù hợp cấu trúc được yêu cầu để hệ điều hành có thể hiểu Một số hệ điều hành mở rộng ý tưởng này thành tập hợp các cấu trúc tập tin được hỗ trợ hệ thống, với những tập hợp thao tác đặc biệt cho việc thao tác các tập tin với các cấu trúc đó Các hệ điều hành thường hỗ trợ ba cấu trúc tập tin thông dụng là: -Không có cấu trúc: tập tin là một dãy... máy tính chạy Windows sang máy chạy hệ điều hành khác như MAC chẳng hạn Hầu hết các máy Macintosh hiện nay đều không thể nhận dạng các thẻ nhớ USB được định dạng bằng FAT32 Báo cáo đồ án Nguyên lý hệ điều hành Trang 28 Chương 2: Thiết kế và xây dựng chương trình GVHD: Trần Hồ Thủy Tiên Chương 32 THIẾT KẾ VÀ XÂY DỰNG CHƯƠNG TRÌNH Chương 33 Phân tích yêu cầu Bài toán đặt ra: Xây dựng chương trình thực... từng phần (xuất hiện các khối hư hỏng (bad block))…Thành phần bên trong của ổ đĩa cứng là không khí có độ sạch cao, để đảm bảo áp suất cân bằng giữa môi trường bên trong và bên ngoài, trên vỏ bảo vệ có các hệ lỗ thoáng đảm bảo cản bụi và cân bằng áp suất Chương 15 Cấu trúc logic của Đĩa cứng (hệ thống FAT32) Hình 6: Báo cáo đồ án Nguyên lý hệ điều hành Cấu trúc logic Đĩa cứng Trang 10 Chương 1: Cơ sở