Đề tài Phân tích tất cả các đặc điểm về cấu trúc và chức năng của kernel mode trong windows 2000

Tài liệu Đề tài Phân tích tất cả các đặc điểm về cấu trúc và chức năng của kernel mode trong windows 2000: TRƯỜNG ĐẠI HỌC SƯ PHẠM HUẾ KHOA TIN HỌC ----------------------------- BÀI TẬP LỚN NGUYÊN LÝ HỆ ĐIỀU HÀNH ĐỀ TÀI PHÂN TÍCH TẤT CẢ CÁC ĐẶC ĐIỂM VỀ CẤU TRÚC VÀ CHỨC NĂNG CỦA KERNEL MODE TRONG WINDOWS 2000 Giáo viên hướng dẫn: Th.s.GV: Phù Đôn Hậu Sinh viên thực hiện Trần Văn Chương Huế, ngày 22 tháng 11 năm 2010 MỤC LỤC: Lịch sử của Windows……………………………………………..3 Kiến trúc tầng của Windows 2000………………………………. 6 Hạt nhân của hệ điều hành………………………………………...7 Cấu trúc của nhân (Kernel mode) hệ điều hành Windows 2000….7 Các dịch vụ quản lý ( system sevrices):…………………....7 I/O manager (quản lý vào/ra)……………......8 File system ( file hệ thống)………………......11 Object manager ( quản lý đối tượng)…….....11 Process manager ( quản lý tiến trình)……....12 Memory manager (quản lý bộ nhớ )………..15 Security manager ( theo dõi bảo mật)………16 Cache manager ( quản lý bộ nhớ cache)……17 PnP manager (quản lý plug and play)………18 Config manager (quản lý cấu hình)………....20 LPC manager ( quản l...

doc40 trang | Chia sẻ: hunglv | Lượt xem: 1212 | Lượt tải: 0download
Bạn đang xem trước 20 trang mẫu tài liệu Đề tài Phân tích tất cả các đặc điểm về cấu trúc và chức năng của kernel mode trong windows 2000, để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
TRƯỜNG ĐẠI HỌC SƯ PHẠM HUẾ KHOA TIN HỌC ----------------------------- BÀI TẬP LỚN NGUYÊN LÝ HỆ ĐIỀU HÀNH ĐỀ TÀI PHÂN TÍCH TẤT CẢ CÁC ĐẶC ĐIỂM VỀ CẤU TRÚC VÀ CHỨC NĂNG CỦA KERNEL MODE TRONG WINDOWS 2000 Giáo viên hướng dẫn: Th.s.GV: Phù Đôn Hậu Sinh viên thực hiện Trần Văn Chương Huế, ngày 22 tháng 11 năm 2010 MỤC LỤC: Lịch sử của Windows……………………………………………..3 Kiến trúc tầng của Windows 2000………………………………. 6 Hạt nhân của hệ điều hành………………………………………...7 Cấu trúc của nhân (Kernel mode) hệ điều hành Windows 2000….7 Các dịch vụ quản lý ( system sevrices):…………………....7 I/O manager (quản lý vào/ra)……………......8 File system ( file hệ thống)………………......11 Object manager ( quản lý đối tượng)…….....11 Process manager ( quản lý tiến trình)……....12 Memory manager (quản lý bộ nhớ )………..15 Security manager ( theo dõi bảo mật)………16 Cache manager ( quản lý bộ nhớ cache)……17 PnP manager (quản lý plug and play)………18 Config manager (quản lý cấu hình)………....20 LPC manager ( quản lý LPC)…………….....21 Win32 GDI……………………………….....22 Kernel (nhân)………………………………………………15 Lớp phần cứng trừu tượng (HAL-Hardware Abstruction Layer)………………………………………………………20 3. Các chức năng chính của kernel trong Windows 2000…………29 3.1 Giao tiếp với bộ đếm chương trình……………………30 3.2 Quản lý bộ nhớ………………………………………..30 3.3 Đồng bộ hoá các đa xử lý…………………………….31 3.4 Lập lịch cho các thread……………………………….32 3.5 Điều khiển các exception của phần cứng……………..39 Tài liệu tham khảo………………………………………………40 ĐẶT VẤN ĐỀ Máy tính càng ngày càng trở thành một công cụ, một phương tiện không thể thiếu của con người, máy tính ngày càng được sử dụng phổ biến đặc biệt là máy tính cá nhân (pc). Một máy tính hoạt động phải dựa trên hệ điều hành nhất định. Có rất nhiều hệ điều hành khác nhau, nhưng hệ điều hành mà đa số tất cả mọi người trên thế giới thường dùng là hệ điều hành Windows của hãng Microsoft. Hệ điều hành là một phần mềm nhằm giúp người sử dụng giao tiếp với máy tính một cách đơn giản và hiệu quả hơn. Chính vì thế hệ điều hành có hai phần chính, phần chế độ dành cho người dùng hay được gọi là use mode và chế độ nhân hay còn gọi là kernel mode để giao tiếp với phần cứng và sử lý một số chức năng quan trọng của hệ thống. Vậy phần cốt yếu trong mỗi hệ điều hành đó chính là kernel mode. Để giúp các bạn hiểu rõ cấu trúc, thành phần và những chức năng của kernel mode mà cụ thể là kernel mode trong Windows 2000 tôi đã quyết định chọn đề tài: “PHÂN TÍCH CÁC ĐẶC ĐIỂM VỀ CẤU TRÚC VÀ CHỨC NĂNG CỦA KERNEL MODE TRONG WINDOWS 2000” Windows 2000 ra đời năm 1999 là một hệ điều hành được nhiều người ưa chuộng. Nó được sử dụng rộng rãi trên các máy desktop lẫn trong việc điều hành và quản trị mạng máy tính, mở ra cánh cửa hoàn toàn mới dẫn vào môi trường máy phục vụ và trạm làm việc, đồng thời giới thiệu những khái niệm quản trị và quản lý hệ thống mang tính cách mạng. I. Lịch sử của Windows: Sự ra đời của công ty Microsoft năm 1975 gắn liền với tên tuổi của Bill Gates, người đứng đầu và sáng lập chính công ty này. Phiên bản DOS đầu tiên ra đời vào tháng 8 năm 1981, với tên chính thức là PC DOS 1.0. Tên gọi MS-DOS chỉ được biết đến kể từ tháng 5 năm 1982 (MS-DOS 1.25). Sau đó, Microsoft lần lượt cho ra đời các phiên bản tiếp theo của MS-DOS song song cùng với PC-DOS. MS-DOS 5.0 ra đời vào tháng 6 năm 1991 bao gồm nhiều tính năng mới như quản lý bộ nhớ (MEMMAKER.EXE), trình soạn thảo văn bản (MS-DOS Editor), ngôn ngữ lập trình QBASIC đã trở nên phổ biển một thời trước khi MS-DOS 6.22 ra đời vào tháng 6 năm 1994. MS-DOS 6.22 cũng là phiên bản DOS cuối cùng được chạy như một hệ điều hành độc lập (standalone version). Sau khi Windows 95 ra đời vào năm 1995, các phiên bản MS-DOS tiếp theo đều được phát hành đi kèm với Windows, chẳng hạn như MS-DOS 7.0 (8/1995) là nền để cho Windows 95 khởi động, và MS-DOS 8.0 đi kèm với Windows ME. Đây cũng là phiên bản cuối cùng của hệ điều hành này. MS-DOS thật sự là một hệ điều hành phổ biến trong suốt thập niên 80, và đầu thập niên 90, cho đến khi Windows 95 ra đời. Cho đến nay, trên các máy chạy Windows, MS-DOS vẫn được tích hợp vào hệ thống bởi một số tính năng ưu việt của nó. Tháng 11/1985, Windows 1.0 ra đời với các chương trình tích hợp như: MS-DOS, Executive, Calender, Cardfile, Notepad, Terminal, Calculator, Clock, Control Panel, PIF (Program Information File) Editer, Clipboard, RAMDrive, Windows Write, Window Paint…. Windows 1.0 khởi đầu cho dòng Windows có giao diện cửa sổ đơn giản. Mùa thu năm 1987, Windows 2.0 ra đời với những khả năng mới, hỗ trợ được nhiều ứng dụng mới (Excel, Word for Windows, Corel Draw, Page Maker,...). Tháng 5/1990, Windows 3.0 ra đời với khả năng đồ hoạ cao hơn. Năm 1992, các phiên bản nâng cấp Windows 3.1 và Windows 3.11 của Windows, Windows for Workgroup 3.1 ra đời với các chức năng của mạng ngang hàng và khả năng chia sẻ tài nguyên trong mạng. Microsoft Windows là một môi trường cửa sổ và giao diện người – máy theo ứng dụng (API), nhằm bổ sung thêm các thao tác đa nhiệm cho DOS, và đưa vào quá trình điện toán theo quy cách IBM một số tính năng giao diện người - máy theo đồ hoạ của Macintosh. Windows 9x và Windows NT: Năm 1994, công nghệ NT( New Technology) xuất hiện. Các phiên bản đầu tiên (Windows NT 3.1, 3.5, 4.0) thích hợp cho các máy chủ và các trạm làm việc trên mạng. Windows NT 3.1, 3.5 có giao diện giống như Windows for Workgroup 3.1 nhưng dựa trên hệ thống tập tin mới NTFS mang tính bảo mật cao hơn. Năm 1995, Windows 95 là hệ điều hành 32 bit đầu tiên của dòng Windows 9x ra đời. Dòng Windows 9x và Windows NT 4x có các đặc điểm nổi bật như: tính đa người dùng , cho phép mỗi người sử dụng có một tài khoản (accout) sử dụng riêng độc lập; màn hình desktop…. Chương trình quản lý tập tin và thư mục Window Explorer mạnh mẽ. Tích hợp bộ phần mềm Microsoft Office thống lĩnh thị trường phần mềm văn phòng. Khả năng hỗ trợ phần cứng và phần mềm mạnh mẽ. Khả năng hỗ trợ mạng cục bộ và Internet mang tính cách mạng cùng với duyệt trình Web Internet Explorer hiệu quả... Với Windows NT, phiên bản 32 bit giao diện đồ họa người - máy thông dụng của Microsoft, nó tạo khả năng đa nhiệm thực sự cho những máy tính cá nhân có cơ sở Intel và các trạm công tác chuyên dụng. Phiên bản này của Windows có thể bỏ qua DOS và có khả năng thâm nhập tốt hơn vào bộ nhớ hệ thống so với Windows 3.1. Microsoft dựa vào Windows 8x và Windows NT làm nền tảng cho các phiên bản Windows sau này như: Windows CE, Windows Me, Windows 2000, Windows 2002, Windows XP Windows Server 2003,...Kể từ Windows 95, các phiên bản của Windows 32 bit liên tục được thay thế và Windows trở thành hệ điều hành thống trị với giao diện người dùng thân thiện, dễ sử dụng. Windows 2000 và các cải tiến kỹ thuật- công nghệ mới: Được xây dựng trên nền tảng bảo mật, tính ổn định của Windows NT, có thêm các đặc điểm dễ sử dụng và tính tương thích cao của Windows 98, Windows 2000 ra đời năm 1999 là hệ điều hành được nhiều người ưa chuộng. Nó được sử dụng rộng rãi trên các máy đơn desktop lẫn trong việc điều hành và quản trị mạng máy tính. Cải tiến kỹ thuật và công nghệ mới so với phiên bản Windows NT: Việc kết hợp Windows 98 và Windows NT5 để tạo nên Windows 2000 làm cho Windows 2000 mạnh mẽ hơn rất nhiều trong toàn bộ lĩnh vực như : Các phương thức xác thực tài khoản và bảo mật dữ liệu . Khả năng tích hợp phần cứng và phần mềm rộng rãi. Khả năng liên kết mạng máy tính mạnh mẽ. Windows 2000 là hệ điều hành phục vụ nhiều mục đích khác nhau với sự hỗ trợ tích hợp hệ thống khách/ chủ (client/server) và mạng ngang hàng (pear-to-pear ). Nó kết hợp chặt chẽ các công nghệ giúp hạ thấp chi phí cho người sử dụng và cung cấp khả năng nâng cấp từ một mạng nhỏ lên thành một mạng lớn. Windows 2000 hỗ trợ nhiều loại ứng dụng chạy trên các môi trường khác như MS-DOS, POSIX 1.x, OS/2 1.x, Windows 95,98 thông qua kiến trúc phân tầng của mình. II. Kiến trúc tầng của Windows 2000: Kiến trúc tầng của Windows 2000 bao gồm tầng người sử dụng (User mode), tầng hạt nhân (kernel mode) và mô hình bộ nhớ ảo. Các ứng dụng ở User mode không thể truy cập trực tiếp tới phần cứng, ngược lại, toàn bộ mã chạy dưới tầng kernel mode có thể truy cập trực tiếp tới phần cứng và bộ nhớ. User mode là môi trường các hệ thống con, trong đó các ứng dụng khác thông qua các hệ thống con này để tích hợp vào kernel mode. Hình sau thể hiện một cách toàn diện cấu trúc bên trong của Windows 2000. Windows 2000 được chia thành 2 thành phần riêng biệt: phần của người sử dụng (user) và phần nhân (kernel). Hai lớp phần mềm ở mức thấp nhất , HAL và kernel được viết trong C và trong ngôn ngữ máy và có một phần là phụ thuộc vào phần cứng. Những phần trên được viết trọn vẹn trong C và gần như là độc lập hoàn toàn với phần cứng. Những chương trình điều khiển được viết trong C, hay trong C ++. Hạt nhân của hệ điều hành: Tất cả các thao tác liên quan đến process, thực hiện bởi một phần của hệ điều hành gọi là hạt nhân – kernel. Kernel chỉ là một phần không lớn (về kích thước code) của hệ điều hành nhưng nó là một trong số những thành phần được sử dụng nhiều nhất trong hệ điều hành. Đây là các phần cốt lõi của chương trình thường trú trong bộ nhớ, và thực hiện hầu hết các nhiệm vụ điều hành chính. Do đó kernel thường luôn được nạp vào bộ nhớ, trong khi các thành phần khác có thể nằm ở bộ nhớ ngoài và chỉ được nạp vào khi cần. Cấu trúc của nhân(kernel-mode) hệ điều hành Windows 2000 gồm có: Các dịch vụ quản lý ( system sevrices): Quản lý vào/ra (I/O manager) Quản lí vào/ra cung cấp một khung để quản lý những thiết bị vào ra và cung cấp các dịch vụ chung cho các thiết bị vào ra. Nó cung cấp phần còn lại của hệ thống với các thiết bị vào ra độc lập, gọi là trình điều khiển thích hợp để thực hiện vào ra vật lý. Nó cũng chứa tất cả các trình điều khiển vào ra. File hệ thống (file systems) chính xác là các trình điểu khiển thiết bị dưới sự điều khiển của chương trình quản lý vào ra. Mục đích của hệ thống vào/ra Windows 2000 là để cung cấp một cơ cấu có tổ chức các kênh truy nhập một cách có hiệu quả các thiết bị vào/ra. Windows 2000 đã được thiết kế với một khung tổng quát giúp các thiết bị mới có thể tích hợp vào máy một cách dễ dàng. 2.1.1.1 Lời gọi hệ giao tiếp lập trình ứng dụng vào/ra .(input/output API Calls) Windows 2000 có hơn 100 lời gọi tách rời, phục vụ cho sự đa dạng của các thiết bị vào/ra, bao gồm cả chuột, phím, card âm thanh, điện thoại, bộ phận điều khiển ổ đĩa v.v…. Có lẽ quan trọng nhất là hệ thống đồ họa, vì ở đó có hàng nghìn lời gọi Win32. Ở đây chúng ta sẽ tiếp tục, đề cập đến phạm trù của một vài lời gọi Win32, mỗi cái có nhiều lời gọi. Một tóm lược ngắn gọn những phạm trù được cho Trong hình 11-29. Tồn tại lời gọi Win32 để tạo ra, làm mất hiệu lực, và quản lý trong Windows. Windows có một số rộng lớn những kiểu và những tùy chọn mà có thể được chỉ rõ. Có hàng trăm chức năng sẵn có để vẽ và tô, hạn chế từ việc cài đặt một điểm đơn đến việc làm cho sự hoạt động của các vùng phức tạp bị chia nhỏ ra. Nhiều lời gọi được cung cấp để vẽ các dòng và những hình hình học cơ bản khác nhau. API GROUP DESCRIPTION Window management Create, destroy, and manage windows Menus Create, destroy, and append to menus and menus bars Dialog boxes Pop up a dialog box and collect infomation Painting and drawing Display points, lines, and geometric tigures Text Display text in some font, size, and color Bitmaps and icons Placoment of bitmaps and icons on the screen Colors and palettes Manage the set of colors available The clipboard Pass information from one application to another Input Get information from the mouse and keyboard Figure 11-29. Some categories of Win32 API calls. 2.1.1.2 Sự thực thi của I/O Chức năng chính của quản lý vào/ra là sẽ tạo ra một khung mà trong đó thiết bị vào/ra khác có thể hoạt động. Cấu trúc cơ bản của khung là thiết lập một thủ tục dùng thiết bị độc lập cho những khía cạnh nhất định của thiết bị vào/ra cộng với sự thiết lập những thiết bị điều khiển đã được nạp vào để giao tiếp với những thiết bị. 2.1.1.3 Những bộ điều khiển thiết bị. Để chắc chắn rằng những bộ điều khiển thiết bị làm việc tốt với phần còn lại của Windows 2000, Microsoft đã định nghĩa một mô hình trình điều khiển Window mà người ta hy vọng những bộ điều khiển thiết bị đó sẽ có tính tương thích cao. Hơn nữa, nó cũng đã cung cấp một bộ công cụ, được thiết kế để giúp đỡ những người viết thủ tục trình điều khiển, bộ phận điều khiển Conformant. Trong mục này chúng ta sẽ tóm tắt khảo sát mô hình này. Trình điều khiển Conformant phải phù hợp với tất cả các yêu cầu sau đây cũng như một vài thứ khác: 1. Kênh truy nhập những yêu cầu vào/ra, mà trong đó là một định dạng chuẩn. 2. Cho phép các thiết bị plug-and-play có thể được tự động được thêm vào hay di chuyển. 3. Cho phép quản lý nguồn điện thích hợp. 4. Là reentrant để sử dụng trên những bộ đa xử lý.. 5. Linh động di chuyển giữa Windows 98 và Windows 2000. Những Yêu cầu vào/ra được chuyển cho những trình điều khiển trong các dạng mẫu của một gói đã được chuẩn hóa gọi là một IRP (Gói Yêu cầu vào/ra). Trình điều khiển phải có khả năng để xử lý các yêu cầu vào ra. Một trình điều khiển trong Windows 2000 có thể làm mọi công việc liên quan đến những gì nó quản lý, như trình điều khiển máy in trong hình 11-30. Mặt khác, trình điều khiển có thể cũng được xếp chồng lên, nghĩa là một yêu cầu có thể xuyên qua một cách có trình tự của trình điều khiển, mỗi phần của công việc. Hai stack cũng đuợc minh hoạ hình 11-30. Một sử dụng phổ biến của trình điều khiển ngăn xếp là ngăn cách ngoài quản lý bus từ chức năng làm việc của các thiết bị điều khiển thực tế. Quản lý bus trên các bus PCI khá phức tạp vì có nhiều loại của nhiều chế độ và các cách thực hiện của các bus và bằng việc phân chia công việc này từ phần chuyên biệt về thiết bị, những người viết trình điều khiển được giải phóng từ việc kiểm soát bus như thế nào. Họ có thể chỉ sử dụng các bộ điều khiển chuẩn trong ngăn xếp của chúng. Trình điều khiển ngăn xếp có khả năng chèn những trình điều khiển lọc vào trong ngăn xếp. Một trình điều khiển lọc thực hiện sự biến đổi nào đó trên dữ liệu đang trên kênh truyền. Chẳng hạn, Một trình điều khiển lọc có thể nén dữ liệu đang trên đường tới đĩa hay mã hóa dữ liệu đang trên đường tới mạng. File hệ thống: Ngoài hệ thống tập tin chủ yếu NTFS (New Technology File System) của mình cùng với các hệ thống tập tin khác được Windows NT hỗ trợ, Windows 2000 còn hỗ trợ thêm hai hệ thống tập tin FAT32 của windows 9x và hệ thống tập tin mã hoá EFS (Encrypting File System). FAT ( File Allocation Table) là một bảng mà hệ thống lưu giữ các thông tin cơ bản nhất của mỗi tập tin. Con số 16 và 32 trong FAT16, FAT32 chỉ số lượng các bit sử dụng để tạo địa chỉ lưu trữ dữ liệu, trong khi NTFS sử dụng đến 64 bits. FAT16 chỉ sử dụng trong DOS, Win 3.1, Win 95 (phiên bản đầu tiên)Win 9x/ME. Các hệ điều hành này không thể đọc hay ghi các tập tin FAT32 hay NTFS. FAT16 chỉ có thể tạo ra 65535 địa chỉ.Kích thước lớn nhất của phân vùng partition có thể được là 2GB đối với hệ thống FAT16. FAT32 được dùng trong Win95 SE, Win 98, Win Me, Win 2000 và Win XP. Các hệ điều hành này có thể đọc và ghi các file FAT16 nếu còn có một partition định dạng FAT16 khác. Với FAT32, kích thước tối đa của một partition có thể lên tới 2Terabytes, còn NTFS là 16 Exabytes! 2.1.3 Quản lý đối tượng: Trình quản lý đối tượng quản lý tất cả các đối tượng được biết đến trong hệ điều hành. Các đối tượng bao gồm các tiến trình, các tuyến đoạn (luồng), tập tin, các thư mục, các tín hiệu, thiết bị vào ra, thời gian, và nhiều thứ khác. Quản lý đối tượng phân chia 1 khối của bộ nhớ ảo từ nhân địa chỉ rỗng khi 1 đối tượng đã được tạo ra và đưa nó về danh sách cây khi đối tượng không được phân chia. Công việc của nó là theo dõi kiểm tra tất cả các đối tượng. Mỗi đối tượng được quản lý bởi trình quản lý đối tượng gồm có 2 phần: Phần tiêu đề và phần nội dung. Tiêu đề chứa thông tin trạng thái của đối tượng được quản lý, trong khi phần nội dung chứa dữ liệu đối tượng và các dịch vị cụ thể. An object header contains certain data, exposed as Properties, such as Object Name (which identifies the object), Object Directory (the category the object belongs to), Security Descriptors (the access rights for an object), Quota Charges (the resource usage information for the object), Open handle count (the number of times a handle, an identifier to the object, has been opened), Open handle list (the list of processes which has a live reference to the object), its Reference count (the number of live references to the object), and the Type (an object that identifies the structure of the object body) of the object.Tiêu đề đối tượng chứa dữ liệu nhất định, thể hiện các tiết, chẳng hạn như Object Name (giúp xác định các đối tượng), Object Directory (thư mục đối tượng), Security Descriptors (quy định quyền truy cập cho một đối tượng), Quota Charges (tài nguyên được đối tượng sử dụng), Open handle count (số lần một sử lý, bộ nhận diện đối tượng đã được mở), Open handle list (danh sách các đối tượng và các tài liệu tham khảo), Reference count ( số lượng các tài liệu tham khảo trực tiếp cho đối tượng), và các Type (xác đinh cấu trúc nội dung một đối tượng) của đối tượng. A Type object contains properties unique to the type of the object as well as static methods that implements the services offered by the object. Một Type đối tượng chứa các thuộc tính duy nhất cho các loại đối tượng cũng như phương pháp thực hiện và các dịch vụ được cung cấp bởi đối tượng. Objects managed by Object Manager must at least provide a predefined set of services: Close (which closes a handle to an object), Duplicate (create another handle to the object with which another process can gain shared access to the object), Query object (gather information about its attributes and properties), Query security (get the security descriptor of the object), Set security (change the security access), and Wait (to synchronize with one or more objects via certain events). Đối tượng quản lý bởi trình quản lý đối tượng ít nhất phải ở cung cấp một bộ dịch vụ được xác định trước: Close (đóng một đối tượng đang được xử lý), Duplicate (tạo và chia sẻ quyền truy cập đến đối tượng), Query object ( thu thập thông tin về các thuộc tính của đối tượng), Query security (mô tả bảo mật của đối tượng), Set security (thay đổi các truy cập bảo mật), và Wait (để đồng bộ hóa với một hoặc nhiều đối tượng thông qua các sự kiện nhất định). Type objects also have some common attributes, including the type name, whether they are to be allocated in non-paged memory, access rights, and synchronization information.Loại đối tượng cũng có một số thuộc tính thông thường, bao gồm tên kiểu, quyền truy cập, và thông tin đồng bộ hóa. Object name is used to give a descriptive identity to an object, to aid in object lookup. được sử dụng để đưa ra một định danh để mô tả một đối tượng, để hỗ trợ tra cứu đối tượng. Object Manager maintains the list of names already assigned to objects being managed, and maps the names to the instances.Đối tượng quản lý duy trì danh sách các tên đã giao cho các đối tượng đang được quản lý.Since most object accesses occur via handles, it is not always necessary to lookup the name to resolve into the object reference. Object directories được sử dụng để phân loại đối tượng theo từng loại.Predefined directories include \?? (device names), \BaseNamedObjects (Mutexes, events, semaphores, waitable timers, and section objects), \Callback (callback functions), \Device , \Drivers , \FileSystem , \KnownDlls , \Nls (language tables), \ObjectTypes (type objects), \RPC Controls ( RPC ports), \Security (security subsystem objects), and \Window (windowing subsystem objects). 2.1.4 Quản lý tiến trình: Windows 2000 hỗ trợ những tiến trình truyền thống, có thể liên lạc và đồng bộ với một cái khác, mỗi tiến trình chứa ít nhất một luồng, mỗi luồng chứa ít nhất một cấu trúc, hơn nữa những tiến trình có thể làm chủ những công việc cho mục đích quản lý những tài nguyên chính xác. Đồng thời những tiến trình, luồng và cấu trúc cung cấp một công cụ thiết lập tổng quát cho quản lý song song và chia sẻ tài nguyên, cùng trên đơn vị tiến trình( thiết bị CPU đơn) và trên những tiến trình đa nhiệm (thiết bị CPU đa nhiệm). Một công việc trong Windows 2000 tập hợp của một hoặc nhiều hơn một tiến trình mà được quản lý như một đơn vị, với mỗi tiến trình sẽ có chỉ tiêu và giới hạn tài nguyên nhất định, chỉ tiêu bao gồm những mục như số lớn nhất của những tiến trình, và cách sử dụng bộ nhớ lớn nhất, ngoài ra trước khi xử lý toàn bộ những công việc có thể cũng chịu sự hạn chế bảo mật trên những tiến trình. Vì thế hệ điều hành hiện hữu trong mỗi địa chỉ tiến trình, nhưng bảo vệ từ sự can thiệp vào của bộ nhớ quản lý đơn vị phần cứng. Một tiến trình có một ID, một hoặc nhiều hơn một luồng, một danh sách điều khiển (quản lý trong kernel mode), và một truy cập phần mã thông báo nó được bảo mật thông tin. Đây là những nội dung định nghĩa ban đầu của không gian địa chỉ và những tạo lập đầu tiên cho luồng. Một luồng tạo thành cơ sở cho việc lập lịch của CPU nhưng hệ điều hành luôn chọn một luồng để thực thi, không phải là một tiến trình. Do đó, mọi luồng đều có một trong những trạng thái(sẵn sàng, thực thi, bị khóa,…). Một tiến trình có thể được tự động tạo ra bởi một lời gọi trong Win32 mà chỉ rõ địa chỉ trong khoảng thời gian gửi kèm theo không gian địa chỉ của tiến trình tại thời điểm này nó bắt đầu được thực thi. Mỗi luồng có một ID của luồng, chúng được cấp từ các không gian tương tự nhau như các ID của tiến trình, vì vậy một ID có thể không bao giờ được sử dụng cho cả tiến trình và luồng tại cùng một thời điểm. Các ID của tiến trình và luồng là bội của bốn vì vậy chúng có thể được sử dụng như danh mục byte vào trong bảng kernel, giống như những đối tượng khác. Trong thời gian bắt đầu được thành lập hay trong quá trình hoạt động, tiến trình cần có một số các tài nguyên như: CPU, bộ nhớ, các thiết bị nhập/xuất để hoạt động. Sau khi kết thúc tiến trình, các tài nguyên này sẽ được trả lại cho hệ điều hành để sử dụng cho các tiến trình tiếp theo. Ngoài ra hệ điều hành còn phải đảm bảo được việc phân phối thời gian sử dụng CPU cho mỗi tiến trình trong môi trường đa nhiệm, giúp các tiến trình trao đổi thông tin và đồng bộ hoá hoạt động của chúng. Các hệ thống quản lý các tiến trình phải có khả năng thực hiện các tác vụ bất kỳ cần thiết cho các tiến trình hoặc phục vụ cho các tiến trình. Các tác vụ này bao gồm: Tạo lập một tiến trình. Huỷ bỏ một tiến trình. Trì hoãn một tiến trình. Tái kích hoạt một tiến trình. Thay đổi mức độ ưu tiên của một tiến trình. Khoá một tiến trình. Đánh thức một tiến trình. Gửi một tiến trình đi. Giúp một tiến trình có khả năng liên lạc với một tiến trình khác. Tạo lập một tiến trình bao gồm các việc sau: Đặt tên cho một tiến trình. Chèn thêm một tiến trình vào danh sách các tiến trình đã được biết của hệ thống. Xác định mức độ ưu tiên ban đầu của tiến trình. Tạo lập khối điều khiển tiến trình. Phân phát các tài nguyên ban đầu cho tiến trình. Mỗi tiến trình có thể tạo ra một tiến trình mới. Nếu như vậy, tiến trình sản sinh ra tiến trình khác được gọi là tiến trình cha, còn tiến trình được sản sinh ra được gọi là tiến trình con. Một tiến trình con được sinh ra từ một tiến trình cha, một tiến trình cha có thể có nhiều tiến trình con, tiến trình cha kết thúc khi tiến trình con đã kết thúc. Huỷ bỏ một tiến trình có nghĩa là huỷ bỏ nó hoàn toàn ra khỏi hệ thống. Các tài nguyên của tiến trình này được trả lại cho hệ thống. Việc huỷ bỏ tiến trình sẽ phức tạp hơn nếu tiến trình đó đã sản sinh ra các tiến trình con khác. Trong Windows 2000 các tiến trình con sẽ bị tự động huỷ bỏ nếu tiến trình cha của chúng bị huỷ, còn một số hệ thống khác thì các tiến trình con được tiến hành độc lập với tiến trình cha và việc huỷ bỏ tiến trình cha không ảnh hưởng gì đến việc huỷ bỏ tiến trình con. Một tiến trình bị trì hoãn sẽ tiếp tục tiến hành khi chúng được tái kích hoạt. Việc trì hoãn là một tác vụ quan trọng và được thi hành bằng nhiều cách tuỳ theo từng hệ thống. Việc trì hoãn thường tồn tại trong một khoảng thời gian ngắn. Chúng thường được hệ thống thực hiện để tạm thời xoá đi các tiến trình nào đó nhằm giảm tải trong các quá trình nạp. Đối với việc trì hoãn lâu dài, nguồn tài nguyên tiến trình đang “chiếm giữ” sẽ được giải phóng. Vấn đề quyết định giải phóng tài nguyên này phụ thuộc rất nhiều vào tình trạng của mỗi tài nguyên. Còn riêng bộ nhớ sơ cấp sẽ được giải phóng ngay khi một tiến trình được trì hoãn. Tái kích hoạt một tiến trình là làm cho tiến trình đó bắt đầu hoạt động lại từ thời điểm nó bị trì hoãn. Khi được tái kích hoạt, tiến trình sẽ được nạp lại ngữ cảnh của nó khi nó bị trì hoãn. Nó sẽ được cấp đầy đủ tài nguyên và tiếp tục thực hiện. Thay đổi mức độ ưu tiên của một tiến trình thường là bổ xung giá trị mức ưu tiên trong khối điều khiển của tiến trình. Thay đổi mức ưu tiên của tiến trình làm cho mức độ sử dụng CPU của các tiến trình được công bằng hơn. Mức ưu tiên của tiến trình sẽ quyết định nó được thực hiện trước hay sau một tiến trình khác. Quản lý tiến trình xây dựng một bản thông tin tiến trình trong đó có chứa thông tin về độ ưu tiên của tiến trình. Trình quản lý tiến trình cung cấp một cơ chế dựa vào độ ưu tiên của tiến trình để quản lý chúng, và nạp địa chỉ của chúng vào các thanh ghi của CPU để CPU xử lý. Đó là chìa khoá để tối đa chương trình ở trong windows 2000. 2.1.5 Quản lý bộ nhớ: Quản lý bộ nhớ là một trong những nhiệm vụ quan trọng nhất của hệ điều hành. Để tăng hiệu suất sử dụng của CPU, các hệ điều hành hiện nay đều hỗ trợ chế độ đa nhiệm cho nên nhu cầu chia sẻ bộ nhớ giữa các tiến trình khác nhau nảy sinh. Khi có yêu cầu, hệ điều hành phải phân phối vùng nhớ cho các tiến trình. Muốn được như vậy hệ điều hành phải đảm bảo được các yếu tố sau: Phương pháp chuyển đổi một địa chỉ tượng trưng trong chương trình thành một địa chỉ thực trong bộ nhớ chính. Phương pháp mở rộng bộ nhớ có sẵn để lưu trữ được nhiều tiến trình đồng thời. Phương pháp để hai tiến trình chia sẻ thông tin trong bộ nhớ. Phương pháp ngăn chặn các tiến trình xâm nhập đến vùng nhớ được cấp phát cho các tiến trình khác. Bộ nhớ quản lý bởi Windows 2000 sử dụng kỹ thuật phân trang theo kiến trúc bộ nhớ vật lý ảo, Win này quản lý tương ứng các trang nhớ ảo với các trang nhớ vật lý do đó nó xây dựng được cơ chế quản lý các tiến trình của các trang nhớ khác nhau dựa vào không gian địa chỉ đồng thời nó cũng điều khiển tương tác giữa lời gọi hệ thống với bộ nhớ ảo. Window 2000 có một hệ thống bộ nhớ ảo vô cùng phức tạp. Nó có một số hàm của Win 32 để sử dụng và một phần thi hành cộng với 6 thành phần của kernel để quản lý nó. Ở trong đoạn tiếp theo chúng ta có thể thấy những quy tắc cơ sở, những dạng thức giao tiếp của Win 32, và việc thực thi. 2.1.6 Quản lý bảo mật: Khi máy tính càng trở nên gần gũi và tiện dụng với chúng ta hơn thì vấn đề bảo mật càng phải được quan tâm hơn. Mục đích của bảo mật trong Widows 2000 là quản lý, theo dõi, bảo mật và giám sát việc thi hành kỹ thuật bảo mật phức tạp của windows 2000. Vấn đề bảo vệ máy tính là yếu tố cần thiết. Bảo vệ bên ngoài liên quan đến việc bảo vệ máy tính không bị xâm nhập và phá hoại, bảo vệ giao diện của người sử dụng. Nhận dạng người sử dụng bằng use name và password trước khi người sử dụng đó được cho phép truy nhập vào hệ thống. Bảo vệ bên trong liên quan đến sự đảm bảo các thao tác, các tiến trình, các thành phần quan trọng của hệ thống, đảm bảo chắc chắn hệ thống máy tính không bị xâm phạm và bảo đảm tính toàn vẹn của các chương trình và dữ liệu. Việc bảo vệ các hoạt động của hệ thống có thể sử dụng nhiều phương pháp, thủ tục khác nhau, có thể thực hiện bằng sự quản lý ngay ở quá trình cài đặt máy tính, phân quyền truy nhập cho từng đối tượng cụ thể, thực hiện việc phân cấp hệ thống, dữ liệu và ứng với từng cấp thì quy định quyền truy cập khác nhau. Hệ điều hành Windows 2000 có hai chế đọ chính, đó là chế độ người dùng use mode và chế độ nhân kernel mode. Ứng với mỗi chế độ thì có các quyền truy cập nhất định, các ứng dụng chạy trong chế độ use mode sẽ không được truy cập một số hàm trong chế độ kernel mode. Ví dụ như ứng dụng ntoskrnl.exe không thể chạy được ở chế độ Win32 mode. Quản lý bộ nhớ cache: Cache thực chất là một thiết bị lưu trữ, cũng giống như các thiết bị lưu trữ khác trong một máy tính. Tuy nhiên, thiết kế và tính năng của nó có một số đặc tính khác đáng chú ý, cache được các thanh ghi của CPU truy xuất trực tiếp nên sẽ giảm được thời gian truy xuất dữ liệu một cách đáng kể, nhanh hơn cả bộ nhớ vật lý(RAM). Công việc của trình quản lý cache là lưu lại các khối file hệ thống mà đã được sử dụng gần đây trong bộ nhớ để giảm bớt thời gian truy nhập cho bất kỳ sự truy nhập nào sau này. Tuy nhiên không phải các file hệ thống sẽ được lưu lại toàn bộ. Chính vì vậy việc xác định dữ liệu nào cần được lưu lại trong cache là một công việc rất quan trọng. Windows 2000 có thể làm việc với tất cả các file hệ thống đang sử dụng bao gồm NTFS, FAT32…,và thậm chí cả các file CD-ROM. Cache của Windows 2000 được tổ chức bởi khối bộ nhớ ảo, không phải là bộ nhớ vật lý, nhưng chúng có những phương pháp truy xuất như bộ nhớ vật lý. Trình quản lý cache giữ các khối file hệ thống được sử dụng gần đây vào trong bộ nhớ để tăng tốc độ truy cập chúng trong trường hợp chúng cần được gọi lại. Công việc của nó là định hình khối nào hầu như là chắc chắn sẽ được gọi lại và khối nào không. Nó có thể thực hiện được để định cấu hình trong Windows 2000 với nhiều hệ thống tập tin. Trong trường hợp nào quản lý bộ nhớ cache làm việc cho tất cả chúng.Khi một khối cần quản lý bộ nhớ gọi hệ thống tập tin thích hợp với nó, tập tin lúc đó có thể được lưu vào trong địa chỉ của các tiến trình. Quản lý bộ nhớ cache phải tương tác với quản lý bộ nhớ ảo để cung cấp các tính chắc chắn cần thiết. Số lượng các trang lưu trữ trong cache là động và chúng có thể thêm một dữ liệu mới vào cache hay loại bỏ nó đi nếu không cần thiết. 2.1.8 Quản lý plug and play: Plug and play là một kỹ thuật mới, xuất hiện lần đầu tiên trong Windows NT. Kỹ thuật này cho phép một thiết bị ngoại vi vào được kết nối với hệ thống sẽ tự động cấu hình mà không yêu cầu khởi động lại hay chạy các chương trình setup. Bộ điều khiển các thiết bị (thường do hệ điều hành cung cấp) sẽ xác định thiết bị được cắm vào cổng nào từ đó cung cấp tài nguyên và trình điều khiển theo yêu cầu của thiết bị đó. Kỹ thuật plug and play là một tiêu chuẩn về phần cứng mới nổi lên trong công nghệ đối với các bộ phận phần cứng bổ sung thêm trong máy tính, yêu cầu các bộ phận đó có khả năng tự đồng nhất hoá, và đáp ứng yêu cầu trong một loại tiêu chuẩn. Tiêu chuẩn plug and play đòi hỏi phần cứng lẫn phần mềm đều phải thực hiện nhiệm vụ của mình. Phần cứng đó là BIOS loại plug and play có khả năng nhận biết được các bộ phận máy của hệ thống ngay khi khởi động máy tính. Sau đó BIOS sẽ duy trì tác động về bất kỳ những thay đổi về cấu hình quan trọng nào mà bạn có thể gây ra, nên nó có thể chuyển những thông tin này cho hệ điều hành, phần mềm này là một hệ điều hành phù hợp với plug and play. Với chuẩn plug and play bạn không cần phải cài đặt các thiết bị hay quan tâm đến các cầu nối và các mạch chuyển dip, hoặc các driver tương thích với phần mềm đối với các loại máy in mới nhất. Kiến trúc tiên tiến của windows 98 này được windows 2000 hỗ trợ đầy đủ, trong khi tiền nhiệm windows NT không hỗ trợ. Một khi có một thiết bị được cắm vào máy tính, windows 2000 sẽ thông báo và tự động tìm driver thích hợp để cài đặt thiết bị đó vào máy. Như USB cắm vào là sử dụng được ngay. Chúng ta tiến hành đi vào tìm hiểu Windows 2000 phát hiện “plug and play” thiết bị mới như thế nào. Plug and play là một sự kết hợp của BIOS, các thiết bị phần cứng, hệ điều hành, trình điều khiển thiết bị và tài nguyên hệ thống. Trong phần này, bạn sẽ thấy Plug and Play phát hiện phần cứng trên ACPI và hệ thống phi ACPI. Ví dụ các bước mà Windows 2000 thực hiện khi phát hiện một thiết bị USB mới đã được thêm vào hệ thống ACPI – compliant. Như vậy khi sử dụng một hệ thống máy tính ACPI, Windows 2000 sẽ quản lý Plug and Play không phụ thuộc vào hệ thống BIOS. Khi bạn them một thiết bị USB mới vào hệ thống máy tính của bạn, các bus USB phát hiện các thành phần mới và thông báo cho các trình điều khiển chức năng thay đổi. Trình điều khiển chức năng thông báo cho Plug and Play Manager có một thiết bị mới đã được them vào hệ thống. Các Plug and Play Manager truy vấn các bus USB để xác đinh vị trí các trình điều khiển cho cây thiết bị hiện tại. Một ngắt yêu cầu gói (IRP) được gửi từ các Plug and Play Manager để xác định các thiết bị hiện có trên bus USB. Khi bus USB hoàn thành IRP, nó được gửi trở lại thông qua thiết bi ngăn xếp cho Plug and Play Manager, trong đó xác định xem một thiết bị đã được them vào hoặc gỡ bỏ. Quản lý Plug and Play có được trông tin về thành phần và sau đó bắt đầu cấu hình nó. Quản lý Plug and Play tìm kiếm thông qua registry để xác định xem thiết bị đã từng cài đặt trên hệ thống. Nếu thiết bị chưa từng cài đặt trên hệ thống thì Plug and Play Manager cập nhật các registry với trông tin về thiết bị. Quản lý Plug and Play tìm và tải các trình điều khiển cho thiết bị nếu có. Quản trị Plug and Play chỉ định tài nguyên hệ thống cần thiết cho thiết bị. Quản trị Plug and Play sẽ gửi một IRP để kích hoạt thiết bị. If your system is not ACPI-compliant, you must disable Plug and Play operating system support in the system's BIOS before installing Windows 2000. Nếu hệ thống của bạn không hỗ trợ ACPI-compliant, bạn phải vô hiệu hóa Plug and Play hỗ trợ hệ điều hành trong hệ thống của BIOS trước khi cài đặt Windows 2000. This will allow the BIOS to manage Plug and Play configuration. Điều này sẽ cho phép các BIOS quản lý cấu hình Plug and Play. The following steps outline how Plug and Play is configured by the system BIOS.Các bước sau đây phác thảo cách Plug and Play được cấu hình bởi hệ thống BIOS. BIOS Plug and Play được cô lập với các thiết bị ISA. Card PCI sẽ tự động cô lập và không cần sự giúp đỡ từ BIOS. Một bản đồ được xây dựng để xác định các tài nguyên thiết bị không sử dụng Plug and Play. BIOS xác định các thiết bị đầu vào và đầu ra cần thiết trong quá trình khởi động. Nếu hệ thống xác định rẳng các thiết bị khởi động có một ROM, thì nó sẽ khởi tạo nó. Các cấu hình còn lại BIOS sử dụng các tài nguyên hệ thống có sẵn. Tất cả các thiết bị được kích hoạt. Các Rom thêm vào được khởi động. Bắt đầu nạp bộ khởi động. 2.1.9 Quản lý cấu hình (Config Manager) Config Manager chứa thông tin khởi động về mỗi thiết bị được cài đặt trong Windows. nó lấy danh sách từ HKEY_CURRENT_CONFIG và kiểm tra mỗi thiết bị khi khởi dộng. Nếu một thiết bị được tìm thấy không có trong danh sách này, nó sẽ thông báo thông tin đó cho hệ thông để cài đặt. Nếu một thiết bị trong danh sách không còn trong hệ thống, nó sẽ được đánh dấu. 2.1.10 Quản lý LPC (LPC manager): LPC (giao tiếp liên tiến trình và không phải lời gọi thủ tục cục bộ) là một thông báo tốc độ cao đặt cơ sở cho cơ chế giao tiếp được thực hiện trong nhân của NT. LPC có thể được sử dụng cho giao tiếp giữa hai kiểu tiến trình người sử dụng, giữa một tiến trình kiểu người sử dụng và một kiểu trình điều khiển kiểu nhân hay giữa hai trình điều khiển kiểu nhân. Một ví dụ là hai tiến trình kiểu người sử dụng liên lạc qua LPC. Giống như CSRSS.exe đang nói chuyện với SMSS.exe thông qua SmssWinStationApiPort trong khi việc tạo ra một phiên đăng nhập hay bất kỳ tiến trình nào nói tới LSASS.exe thông qua LsaAuthenticationPort thay cho lý do bảo mật ví dụ khác của một kiểu tiến trình người sử dụng giao tiếp với một trình điều khiển kiểu nhân có thể là Build KSecDD.sys nói chuyện với LSASS.exe cho sự mật mã khoá EFS và giải mã trong suốt thời gian đọc/ghi của một tập tin được viết lại thành mật mã. LPC sử dụng hai cơ chế khác cho dữ liệu chuyển qua giữa tiến trình client và tiến trình server. Nó sử dụng bộ đệm thông báo LPC (cho dữ liệu cỡ nhỏ hơn 304 byte) hay nó sử dụng một phần bộ nhớ dùng chung được ánh xạ tới cả client không gian địa chỉ server (với kích thước dữ liệu hơn 304 byte). Ngoài được dùng như giao thức lựa chọn của những lời gọi thủ tục từ xa giữa những tiến trình chạy trên cùng hệ thống, LPC thì cũng được sử dụng ở khắp nơi trong hệ thống ví dụ như cho giao tiếp của ứng dụng Win32 Với CSRSS.exe, sự an toàn trong giao tiếp của màn hình với SASS, giao tiếp của WinLogon với LSASS v.v... LPC giám sát việc thi hành mô hình giao tiếp đồng bộ giữa những tiến trình client và tiến trình server. Vista phản đối việc sử dụng LPC đang sử dụng một cơ chế mới gọi là giao tiếp không đồng bộ các liên tiến trình cục bộ (ALPC). ALPC có một lợi thế cố hữu thông qua LPC trong đó tất cả lời gọi đó từ client đến server là không đồng bộ, client không cần tới block/wait cho trình phục vụ để trả lời tới một message. Trong Vista, những lời gọi ứng dụng kế thừa tới LPC APIs thì tự động được gửi một lần nữa tới ALPC APIs mới hơn. Với Windows 2000: - Khả năng message-passing trong Windows 2000 được gọi là LPC (local procedure call). LPC trong Windows 2000 cho phép giao tiếp giữa 2 tiến trình trên cùng máy. - Mọi client gọi 1 subsystem cần có 1 kênh giao tiếp (connection port hay communication port) được cung cấp bởi port object. - Sử dụng 3 kỹ thuật chuyển message qua cổng: - dùng message queue của cổng: message ≤ 256 byte - dùng bộ nhớ chia sẻ: dung lượng message lớn hơn - dùng kỹ thuật callback: khi client/server không thể đáp ứng lập tức 2.1.11 Win32 GDI (giao diện thiết bị đồ hoạ): Giao diện thiết bị đồ họa Win32 thực hiện xử lý các mô đun chứa đựng lời gọi hệ thống (nhưng không phải là tất cả). Nó bắt đầu với không gian người sử dụng nhưng lại được di chuyển đến không gian nhân trong NT 4.0 để hoàn thiện sự thực thi. Giao diện thiết bị đồ họa điều khiển hình ảnh cho màn hình và máy in. Nó cung cấp lời gọi hệ thống tới chương trình người sử dụng cho phép được viết trên màn hình và máy in trong một phạm vi thiết bị độc lập.Nó cũng gồm việc quản lý window và các bộ phận điều khiển hiển thị. Trước khi tới NT 4.0, nó cũng là không gian người sử dụng nhưng sự thực thi đó đã thất bại, cho nên Microsoft chuyển nó vào trong nhân (kernel) và làm tăng tốc độ của nó lên. Chúng được đề cập đến và đánh giá như trong hình 11-7 nhưng đó không phải là tất cả. Ví dụ như, Win32 và mô đun thiết bị giao diện đồ họa là rộng hơn phần còn lại của việc phối hợp thực hiện. Kernel - Nhân: Phía trên lớp phần cứng là lớp chứa cái mà Microsoft gọi là "kernel"cũng như các trình điều khiển thiết bị, microkernel là một thành phần trong kernel mode. Microkernel có nhiệm vụ hàng đầu là cung cấp đồng bộ hóa giữa nhiều bộ vi sử lý, điều phối, phân phối luồng và ngắt, lấy thông tin từ Registry khi hệ thống khởi động…các trình quản lý bộ nhớ, file hệ thống, và các thành phần quan trọng khác được tập trung trong không gian kernel và được chạy trong kernel mode từ ngay khi khởi động. Trong phần này chúng ta sẽ tìm hiểu thuật ngữ " kernel " và gọi toàn bộ các mã chạy trong nhân hệ điều hành là “hệ điều hành”. Một phần của nhân là thường xuyên cư trú trong bộ nhớ chính. Bằng việc điều chỉnh quyền ưu tiên của nó, nó có thể tránh khỏi các ngắt vào/ra. Mặc dù nhân là một phần đặc biệt quan trọng nhưng nó chủ yếu được viết bằng ngôn ngữ lập trình C. Mục đích của nhân là làm cho phần còn lại của hệ điều hành hoàn toàn độc lập với phần cứng, và theo cách đó hệ điều hành sẽ mang tính linh động cao (khả năng làm việc với nhiều phần cứng khác nhau). Nó truy nhập phần cứng qua HAL và xây dựng dựa vào các dịch vụ mức thấp của HAL để xây dựng những quan điểm trừu tượng hóa mức cao. Chẳng hạn, HAL được gọi để kết hợp các dịch vụ thủ tục ngắt với các ngắt, và đặt những quyền ưu tiên của chúng, nhưng không quan trọng ngoài phạm vi này. Nhân, trong sự tương phản, cung cấp một cơ chế hoàn chỉnh cho bảng trang. Vì vậy khi nó được làm, luồng trước đó đang chạy đã được lưu trữ trong các bảng của bộ nhớ. Sau đó một luồng mới được thiết lập có thể bắt đầu chạy. Nhân dùng luồng và làm các khoá chuyển đổi cần thiết để chạy nó. Từ cái nhìn tổng quan về phần còn lại của hệ điều hành, chuyển đổi luồng là tự động được xử lý bởi các tầng thấp hơn mà không có bất kỳ phần công việc nào của chúng và trong một phương thức ling động. Bản thân thuật toán lập lịch sẽ được mô tả sau đó trong chương này khi chúng ta đến những tiến trình và những luồng. Ngoài việc cung cấp một cách nhìn trừu tượng mức cao của phần cứng và xử lý những sự chuyển đổi luồng, nhân cũng có chức năng như khóa cung cấp những hỗ trợ hai mức của những đối tượng: những đối tượng điều khiển và những đối tượng gửi đi. Những đối tượng này không phải là những đối tượng mà các tiến trình người sử dụng có quyền truy nhập tới, nhưng là những đối tượng bên trong ở trên mà việc xây dựng và thực thi những đối tượng người sử dụng. Những đối tượng điều khiển là những đối tượng kiểm soát hệ thống, bao gồm những đối tượng tiến trình sơ khai, ngắt các đối tượng, và hai đối tượng có phần hơi lạ được gọi là DPC Và APC. Một DPC (trì hoãn sự gọi thủ tục) đối tượng được sử dụng để tách ra khỏi từng phần thời gian then chốt trống của một dịch vụ thủ tục ngắt từ phần then chốt, được kết hợp với thiết bị ngắt vào/ra vì vậy chúng không được ghi đè lên và cho ghép vào phần cứng, nhưng lưu trữ một khối lớn của sự xử lý về sau này. Đối tượng điều khiển nhân khác là APC (lời gọi thủ tục không đồng bộ). APCs cũng giống như sự loại trừ DPCs mà chúng thực hiện trong ngữ cảnh của một tiến trình đặc biệt. Khi xử lý nhấn khóa, nó không quan trọng những ngữ cảnh DPC được chạy bên trong bởi vì tất cả sẽ xảy ra là mã khóa đó sẽ được kiểm tra và chắc chắn đặt vào một bộ đệm nhân. Tuy nhiên, nếu một ngắt yêu cầu sao chép một bộ đệm từ không gian nhân đến một bộ đệm trong vùng địa chỉ của quá trình người sử dụng nào đó ( e.g., Như nó có thể hoàn thành một việc đọc từ hiện đại), chúng sao chép các thủ tục cần thiết để chạy ngữ cảnh của thiết bị thu. Văn cảnh của thiết bị thu đã được yêu cầu vì vậy bảng trang sẽ chứa đựng cả hai bộ đệm nhân và bộ đệm người sử dụng (mọi tiến trình chứa đựng toàn bộ nhân trong vùng địa chỉ của chúng). Các loại khác của nhân là các trình điều phối các đối tượng . Bao gồm những cờ hiệu, mutcxes, những sự kiện, thời gian chờ, và các đối tượng khác mà những luồng có thể tiếp tục đợi. Lý do mà chúng phải được xử lý trong nhân là chúng được liên hệ mật thiết với nhau với lập lịch luồng, mà là một thao tác trong nhân. Giống như một phần dự trữ nhỏ, mutexes được gọi cho những " mutants " ở trong mã bởi vì chúng được đòi hỏi để thực thi OS/ 2 ngữ nghĩa của việc không tự động mở khóa khi một luồng đang giữ bị biến mất, những thứ mà người thiết kế Windows 2000 được xem xét một cách kỹ lưỡng. (OS/ 2 hệ điều hành được cung cấp trên PC/2 của IBM). Bất cứ khi nào 1 chương trình chạy ở user-mode thực hiện I/O, cấp phát hay hủy bỏ bộ nhớ, khởi tạo tiến trình/luồng hay tương tác với tài nguyên toàn cục... nó phải gọi 1 hay nhiều các dịch vụ nằm trong kernel-mode. Trong Windows 2000, các dịch vụ này bị che dấu khỏi lập trình viên qua API của các hệ thống con môi trường, chỉ được thể hiện từ module kernel-mode ntoskrnl.exe tới các ứng dụng user-mode qua 1 thành phần hệ thống duy nhất, đó là ntdll.dll. Trong các Hệ thống con môi trường được Windows 2000 hỗ trợ (Win32, OS/2 ), Win32 được coi là “ngôn ngữ quốc gia”. Hệ thống con môi trường hệ điều hành Win32 được chia thành các tiến trình server (CSRSS.EXE - Client/Server Runtime SubSystem) và các client-side DLL, được kết nối tới các ứng dụng sử dụng Win32 API. Nòng cốt của Win32 API được chia thành 3 loại: “cửa sổ và thông điệp”, “đồ họa”, và “các dịch vụ cơ sở”. Các API “cửa sổ và thông điệp“, bao gồm CreateWindow() và SendMessage(), được xuất tới ứng dụng Win32 qua thư viện USER32.DLL. BitBlt() và LineTo() là các hàm “đồ họa” Win32 và được cung cấp trong GDI32.DLL. Cuối cùng, các dịch vụ cơ sở bao gồm các hàm API thực hiện I/O, quản lí tiến trình và luồng, quản lí bộ nhớ, đồng bộ hóa được thực hiện qua KERNEL32.DLL.Khi ứng dụng Win32 gọi 1 hàm API, điều khiển được truyền bên trong không gian địa chỉ của nó tới 1 trong những client-side DLL. DLL này, sau khi kiểm tra các thông tin trên tiến trình gọi sẽ thực hiện 1 trong các lựa chọn sau đây: Trả về ngay lập tức. Gửi 1 thông điệp tới Win32 server yêu cầu giúp đỡ. Kích hoạt Native API để thực hiện nhiệm vụ. Lựa chọn đầu tiên hiếm khi xảy ra, chỉ khi DLL có thể thực hiện nhiệm vụ mà không cần tới các dịch vụ hệ thống của hệ điều hành, 1 ví dụ là hàm GetCurrentProcess(). Lựa chọn thứ 2 cũng hiếm khi xảy ra. Chỉ khi nào server có thể nhận biết và cùng tham gia thực thi nhiệm vụ. Ví dụ như trong trường hợp CreateProcess(), được xuất bởi KERNEL32, Win32 server sẽ gọi các hàm Native API để tạo 1 tiến trình thực sự và chuẩn bị không gian địa chỉ cho client. Lựa chọn cuối cùng thường xuyên xảy ra nhất. Trước tiên ta hãy xem xét trường hợp các API USER32 và GDI32, sau đó mới tới tới việc sử dụng Native API của KERNEL32. Trong các phiên bản trước Windows NT 4.0, các hàm “cửa sổ” và “đồ họa” nằm trong Win32 server (CSRSS.EXE). Điều này có nghĩa rằng bất cứ khi nào 1 ứng dụng sử dụng các hàm này, sẽ xuất hiện thông điệp gửi tới server. Từ Windows 2000, các hàm “cửa sổ” và “đồ họa” đã được chuyển vào 1 thành phần kernel-mode là WIN32K.SYS. Thay vì gửi thông điệp tới server, các client-side DLL sẽ gọi trực tiếp tới kernel, tiết kiệm được chi phí gửi thông điệp và chuyển đổi ngữ cảnh tiến trình. Điều này cải thiện đáng kể hiệu suất đồ họa của Windows 2000 (1 bằng chứng là trò chơi Pinball). Như vậy, có thể nói các hàm GDI và USER là Native API thứ hai của Windows 2000. Mô hình trên mô tả dòng điều khiển từ ứng dụng Win32 gọi 1 hàm Win32 API (CreateFile()), qua KERNEL32.dll, qua NTDLL.dll và vào kernel-mode, tại đó điều khiển được chuyển tới dịch vụ hệ thống CreateFile. Các Ntdll.dll cung cấp cho kernel32.dll rất nhiều các hàm tiện ích, cơ bản có thể chia ra làm 2 tập hợp: Các hàm runtime được chạy hoàn toàn tại user-mode. Tập hợp này bao gồm cả 1 số phần của C runtime library chuẩn. Các kernel function wrapper thực hiện chuyển đổi từ user-mode tới kernel-mode và ngược lại. Các hàm ở tập thứ 2 cho phép các ứng dụng user-mode gọi các dịch vụ hệ thống tại kernel-mode. Thật thú vị, vậy việc này được thực hiện như thế nào? Nếu bạn disassemble các hàm bắt đầu bằng Nt hay Zw trong ntdll.dll, VD NtQuerySystemInformation() như ở Mã dẫn 1, bạn sẽ thấy nó rất ngắn gọn. Chỉ đơn giản là 1 lời gọi ngắt. Thực ra cũng không hẳn như vậy. Với những ai đã từng quen thuộc với lập trình DOS, hầu hết các dịch vụ hệ thống của DOS được gọi bằng cách gán mã dịch vụ cho thanh ghi AH, và tham số dữ liệu bổ sung (nếu có) cho thanh ghi DX, theo sau là chỉ thị gọi ngắt INT 21h. Mã thực hiện trong NtQuerySystemInformation() hay các hàm họ Nt*() cũng tương tự như vậy: thanh ghi EAX chứa mã dịch vụ, EDX trỏ tới tham số đầu tiên trong stack của hàm. Mã dẫn 1 Mã thực thi của ntdll.NtQuerySystemInformation() NtQuerySystemInformation:  mov eax, 97h lea edx, [esp+4] int 2Eh ret 10h Chỉ thị đầu tiên nạp cho thanh ghi EAX chỉ số của hàm Native API - mỗi hàm Native API có 1 chỉ số duy nhất. Chỉ thị thứ hai nạp cho thanh ghi EDX con trỏ tới danh sách tham số của hàm. Tiếp theo là 1 chỉ thị gọi ngắt mềm - trên họ x86, ngắt này là 2Eh. Chỉ thị cuối cùng đẩy tất cả tham số ra khỏi stack của hàm gọi. Chúng ta hãy xem xét kĩ chỉ thị gọi ngắt 2Eh. Nếu như trong DOS, ngắt 21h chỉ đơn giản bắt CPU nhảy tới 1 địa chỉ trong Bảng Vector ngắt (IVT) thì trong hệ điều hành được bảo vệ như Windows 2000, các ngắt được thực hiện có hơi khác 1 chút. IVT được thay bằng Bảng Bộ mô tả ngắt (IDT) chứa các bộ mô tả bộ nhớ của các địa chỉ đích chứ không đơn thuần là các con trỏ. Trong trường hợp ngắt 2Eh, IDT cung cấp 1 cổng chuyển đổi CPU từ user-mode tới kernel-mode trước khi nhảy tới địa chỉ đích, và chuyển về user-mode khi lời gọi kết thúc. Địa chỉ đích của cổng INT 2Eh nằm trong module ntoskrnl.exe có tên là KiSystemService(). Nhiệm vụ của KiSystemService() là kiểm tra chỉ số của hàm Native API, nếu hợp lệ, nó sẽ chuyển điều khiển tới 1 dịch vụ hệ thống tương ứng trong kernel-mode bằng cách: convert chỉ số hàm Native API thành chỉ số của 1 mảng bên trong kernel - gọi là KiSystemServiceTable. Mỗi chỉ mục trong mảng này lại bao gồm 1 con trỏ tới hàm kernel tương ứng và số tham số của hàm đó (với các hàm Win32 Native API, chỉ số lại trỏ tới 1 mảng thứ 2 của dịch vụ hệ thống. Các con trỏ trong mảng thứ hai này tham chiếu tới các hàm nằm trong WIN32K.SYS). KiSystemService() sau đó sẽ lấy các tham số trong user-mode stack (trỏ tới bởi thanh ghi EDX trong x86) đẩy vào kernel-mode stack, rồi kích hoạt hàm kernel tương ứng (các hàm này thường được cung cấp bởi các hệ thống con Executive, nằm hoàn toàn trong kernel-mode, như Process Manager, Virtual Memory Manager hay I/O Manager). Thực ra, cơ chế này có phức tạp hơn 1 chút. Khi trở về, điều khiển sẽ được trả lại hàm user-mode bằng hàm KiServiceExit() - cũng nằm trong ntoskrnl.exe. Một điều cần lưu ‎ý là các tham số của họ hàm Nt*() cũng giống như của họ Zw*() – mà một số được công bố rõ trong Windows 2000 DDK. Theo Bảng chú giải Kernel Mode của Windows 2000 (Windows 2000’s Kernel Mode Glossary), họ hàm Nt*() sẽ thẩm tra các tham số rồi thiết lập tường minh hệ truy nhập trước đó thành USER mode, còn họ hàm Zw*() thì không. Vì thế NT Drivers sẽ gọi các hàm Zw*(), còn các Hệ thống con môi trường hệ điều hành sẽ gọi các hàm Nt*(), do chúng được gọi từ user-mode. Lớp phần cứng trừu tượng (HAL) Là phần thấp nhất của hệ điều hành,nó che đậy phần cứng của máy tính, ở đó nhân của hệ điều hành (Kernel) có thể đươc ghi vào giao diện phần cứng ảo, thay vì vào phần cứng máy tính thực sự. Phần lớn nhân của hệ điều hành sử dụng HAL để truy cập các tài nguyên máy tính. Điều này có nghĩa là nhân của hệ điều hành và tất cả các thành phần khác phụ thuộc vào nhân có thể dễ dàng xuất (Ported) thông qua Microsoft đến các nền ( Platform ) phần cứng khác. Trong hệ điều hành chỉ có HAL là phụ thuộc vào phần cứng vì nó trực tiếp “làm viêc” với phần cứng. khi có một sự thay đổi nào đó thì chỉ có các mã phụ thuộc phần cứng trong HAL thay đổi nên sẽ đơn giản hơn nhiều cho việc nâng cấp, cải tiến tính tương thích của hệ điều hành với nhiều máy tính khác nhau. Dịch vụ trong HAL liên quan tới chipset, bảng mạch chính và những biến đổi từ máy tính này tới máy tính khác. Dịch vụ HAL bao gồm các hàm truy cập tới thiết bị, kênh độc lập địa chỉ thiết bị, điều khiển ngắt và thiết lập cấu hình thiết bị, truy cập bộ nhớ trực tiếp, kiểm soát thời gian thực, đồng bộ mạch ghép nối với hệ vào/ra cơ sở, cấu hình bộ nhớ CMOS.HAL cung cấp lớp trừu tượng hóa. Lớp trừu tượng hóa phần cứng cung cấp ba thủ tục cho bộ phận điều khiển ghi vào những thanh ghi và ba thủ tục khác để đọc chúng ra uc =READ_PORT _UCHAR(port); WRITE_PORT_UCHAR(port, uc); us =READ_PORT_USHORT(port); WRITE_PORT_USHORT(port. ul =READ_PORT_ULONG(port); WRITE_PORT_ULONG(port, ul); Bộ điều khiển thường cần tới truy xuất rõ ràng thiết bị vào ra cho những mục đích khác nhau. Tại mức phần cứng, một thiết bị có một địa chỉ trên một tuyến nào đó. Từ đó máy tính hiện đại thường có nhiều tuyến (ISA, PCI, SCSI, USB, 1394,..) nó có thể xảy ra mà hai hoặc nhiều hơn hai thiết bị có địa chỉ bus giống nhau, chỉ một vài đường là cần phân biệt chúng. Lớp trừu tượng hóa phần cứng cung cấp một dịch vụ cho thiết bị nhận ra bởi ánh xạ bus liên quan tới bộ điều khiển địa chỉ lên hệ thống lớn địa chỉ logic. Địa chỉ logic này giúp hệ điều hành điều khiển cho chương trình người sử dụng truy cập tới tập tin và hệ thống tài nguyên một cách chính xác. Thành phần của nhân đôi khi cần đồng bộ tại một mức rất thấp,đặc biệt sự ngăn ngừa tình trạng tranh chấp trong hệ thống đa chương. HAL cung cấp một vài phương pháp để quản lý sự đồng bộ hóa này, như Round robin. Cuối cùng, sau khi hệ thống được khởi động, HAL bàn về BIOS và kiểm tra bộ nhớ cấu hình CMOS, nếu thông thường, tìm ra các tuyến và thiết bị I/O hệ thống chứa và định cấu hình của chúng như thế nào thông tin này là sau khi đặt vào trong thanh ghi thành phần hệ thống khác có thể nhìn nó ở trên trừ phi có thể hiểu BIOS hoặc bộ nhớ cấu hình làm việc như thế nào Tại thời điểm cài đặt hệ thống, một tập tin thích hợp trong Windows 2000 CD_ROM được lựa chọn và sao chép tới thư mục hệ thống\ winnt\system32 trên ổ đĩa cứng như hal.dll. Tất cả những khởi động tiếp theo đều sử dụng tập tin này của HAL để khởi động. Gỡ bỏ tập tin này sẽ làm hệ thống không có khả năng khởi động. Mặc dù HAL có hiệu quả phù hợp cho đa truyền thông ứng dụng, nhưng nó vẫn chưa phục vụ nhanh. Với lý do này, Microsoft đã đưa ra một gói phần mềm hướng tới DirectX các yếu tố thêm vào HAL là những thủ tục cho phép một số tiến trình trong kernel mode có thể trực tiếp truy cập phần cứng, nhằm tăng tốc độ của các tiến trinh kernel. 3) Các chức năng chính của kernel trong Windows 2000 3.1 Giao tiếp với bộ đếm chương trình: 3.2 Quản lý bộ nhớ: 3.2.1 Dịch vụ quản lý và cấp phát bộ nhớ The memory manager provides a set of system services to allocate and free virtual memory, share memory between processes, map files into memory, flush virtual pages to disk, retrieve information about a range of virtual pages, change the protection of virtual pages, and lock the virtual pages into memory. Trình quản lý bộ nhớ cung cấp một bộ các dịch vụ hệ thống như phân phối bộ nhớ ảo, chia sẻ bộ nhớ giữa các quá trình, các tập tin hệ thống vào bộ nhớ, và khóa các trang ảo trong bộ nhớ. Like other Windows 2000 executive services, the memory management services allow their caller to supply a process handle, indicating the particular process whose virtual memory is to be manipMost of these services are exposed through the Win32 API.Hầu hết các dịch vụ này được thực hiện thông qua các hàm API Win32.The Win32 API has three groups of functions for managing memory in applications: page granularity virtual memory functions ( Virtualxxx ), memory-mapped file functions ( CreateFileMapping , MapViewOfFile ), and heap functions ( Heapxxx and the older interfaces Localxxx and Globalxxx ).(We'll describe the heap manager later in this section.) The memory manager also provides a number of services, such as allocating and deallocating physical memory and locking pages in physical memory for direct memory access (DMA) transfers, to other kernel-mode components inside the executive as well as to device drivers. Trình quản lý bộ nhớ cũng cung cấp một số dịch vụ, chẳng hạn như cấp phát và thu hồi bộ nhớ vật lý, khóa các trang trong bộ nhớ vật lý phục vụ cho việc truy cập bộ nhớ trực tiếp (DMA) ở chế độ kernel mode cũng như để điều khiển thiết bị.These functions begin with the prefix Mm .In addition, though not strictly part of the memory manager, the executive support routines that begin with Ex that are used to allocate and deallocate from the system heaps (paged and nonpaged pool) as well as to manipulate look-aside lists.We'll touch on these topics later in this chapter, in the section " System Memory Pools ." 3.2.2 Pages are written to disk through normal modified page writing as pages are moved from the process working set to the modified list and ultimately to disk.Locking MemoryKhóa bộ nhớ Pages can be locked in memory in two ways:Các trang trong bộ nhớ có thể bị khóa theo hai cách: Device drivers can call the kernel-mode functions MmProbeAndLockPages , MmLockPagableCodeSection , MmLockPagableDataSection , or MmLockPagableSectionByHandle . Pages locked using this mechanism remain in memory until explicitly unlocked.Trình điều khiển thiết bị có thể gọi các hàm trong kernel mode. MmProbeAndLockPages,MmLockPagableCodeSection, MmLockPagableDataSection, hoặc MmLockPagableSectionByHandle. Các trang bị khóa bằng cách sử dụng cơ chế này vẫn còn trong bộ nhớ cho đến khi nó được mở thực sự. Win32 applications can call the VirtualLock function to lock pages in their process workingỨng dụng Win32 có thể gọi hàm VirtualLock để khóa các trang trong quá trình làm việc của mình. Note that such pages are not immune from paging—if all the threads in the process are in a wait state, the memory manager is free to remove such pages from the working set (which, for modified pages, ultimately would result in writing the pages to disk) if memory demands dictate. Khóa các trang trong quá trình làm việc có thể làm suy giảm hiệu suất bởi vì phải mất thời gian nạp lại khi chạy, trình quản lý bộ nhớ đầu tiên phải đọc trong tất cả các trang bị khóa trước khi các tiến trình thực hiện có sử dụng chúng.Therefore, in general, it's better to let the memory manager decide which pages remain in physical memory. Trình quản lý bộ nhớ có thể quyết định trang nào được lưu lại trong bộ nhớ vật lý. The number of pages a process can lock can't exceed its minimum working set size minus eight pages.Số trang một tiến trình có thể khóa không thể vượt quá kích thước tối thiểu của nó làm việc, khoảng tám trang. 3.2.3 Chia sẻ bộ nhớAllocation GranularityChiCCCCCC Windows 2000 aligns each region of reserved process address space to begin on an integral boundary defined by the value of the system allocation granularity, which can be retrieved from the Win32 GetSystemInfo function. As is true with most modern operating systems, Windows 2000 provides a mechanism to share memory among processes and the operating system. Shared memory can be defined as memory that is visible to more than one process or that is present in more than one process virtual address spaceĐúng với yêu cầu của một hệ điều hành hiện đại, Windows 2000 cung cấp một cơ chế để chia sẻ bộ nhớ giữa các tiến trình và các trình điều khiển hệ thống. Bộ nhớ chia sẻ có thể được hiểu là bộ nhớ được hiển thị với nhiều hơn một tiến.For example, if two processes use the same DLL, it would make sense to load the referenced code pages for that DLL into physical memory only once and share those pages between all processes that map the DLL, as illustrated in Figure 7-1. Ví dụ, nếu hai quá trình sử dụng cùng một DLL, nó sẽ tải các trang cần tham khảo của DLL vào bộ nhớ vật lý chỉ một lần và chia sẻ những trang đó với các tiến trình cần tham khảo DLL, như minh họa trong Hình 7-1. Mỗi tiến trình duy trì riêng cho mình một bộ nhớ của nó, các phần được lưu trong bộ nhớ này sẽ không bị sửa đổi, vì các tiến trình này có thể được dung làm tài nguyên để chia sẽ với các tiến trình khác, các tiến trình này thường là các tiến trình trong kernel mode, một số ít ở WIN 32. Figure 7-1 Sharing memory between processes Hình 7-1 Chia sẻ bộ nhớ giữa các quá trình Protecting Memory 3.2.4 Bảo vệ bộ nhớ As explained in , Windows 2000 provides memory protection so that no user process can inadvertently or deliberately corrupt the address space of another process or the operating system itself. Windows 2000 provides this protection in four primary ways.Windows 2000 cung cấp chức năng bảo vệ bộ nhớ để quy định quyền truy cập tránh tình trạng truy cập bất hợp lệ làm ảnh hưởng đến sự hoạt động của hệ thống. Windows 2000 cung cấp chức năng bảo vệ bằng ba cách chính. First, all systemwide data structures and memory pools used by kernel-mode system components can be accessed only while in kernel mode—user-mode threads can't access these pages.Đầu tiên, tất cả các cấu trúc dữ liệu toàn hệ thống và bộ nhớ có thể được truy cập bởi chế độ kernel mode còn chế độ use mode thì không.If they attempt to do so, the hardware generates a fault, which in turn the memory manager reports to the thread as an access violation. Nếu chúng ta cố gắng truy cập thì hệ điều hành sẽ tạo ra một thông báo lỗi vi phạm truy cập. NOTEIn contrast, Microsoft Windows 95, Microsoft Windows 98, and Microsoft Windows Millennium Edition have some pages in system address space that are writable from user mode, thus allowing an errant application to corrupt key system data structures and crash the system. Ngược lại, Microsoft Windows 95, Microsoft Windows 98, và Microsoft Windows Millennium Edition có một số trang trong không gian địa chỉ hệ thống được ghi từ chế độ người dùng, do đó cho phép một số ứng dụng chạy trên đó, điều này rất nguy hiểm vì có thể gây ra lỗi cho hệ thống. Second, each process has a separate, private address space, protected from being accessed by any thread belonging to another process. Thứ hai, từng tiến trình có một không gian địa chỉ private, bảo vệ khỏi sự truy cập bởi các tiến trình khác. Ngoại lệ, nếu không gian địa chỉ của tiến trình chứa các trang chia sẻ với các tiến trình khác thì các trang này có thể được truy cập. Windows 2000 có thể đảm bảo rằng các thread đang chạy trong một tiến trình nếu không phù hợp thì không được truy cập một trang thuộc một tiến trình khác. Third, in addition to the implicit protection virtual-to-physical address translation offers, all processors supported by Windows 2000 provide some form of hardware-controlled memory protection (such as read/write, read-only, and so on); the exact details of such protection vary according to the processor. Thứ ba, ngoài việc ảo hóa để bảo vệ địa chỉ vật lý trình quản lý bộ nhớ còn cho phép dịch-ẩn, tất cả các bộ vi xử lý được hỗ trợ bởi Windows 2000 cung cấp một số hình thức kiểm soát bộ nhớ bảo vệ phần cứng (như đọc / ghi, chỉ đọc, vv), sự chính xác chi tiết về bảo vệ như vậy thay đổi tùy theo bộ xử lý. For example, code pages in the address space of a process are marked read-only and are thus protected from modification by user threads.Ví dụ, các trang mã trong không gian địa chỉ của một tiến trình được đánh dấu chỉ đọc và do đó được bảo vệ từ thay đổi của các dịch vụ người sử dụng. 3.3 Lập lịch cho các luồng (theard): 3.3.1 Luồng trong Windows 2000: Windows 2000 cài đặt Win32 API. Win32 API là một API chủ yếu cho họ hệ điều hành Windows (Windows 95/98/NT và Windows 2000). Ứng dụng Windows chạy như một tiến trình riêng rẽ và mỗi tiến trình có thể chứa một hay nhiều luồng, Windows 2000 dùng ánh xạ một - một từ luồng cấp người dùng đến luồng nhân. Tuy nhiên, Windows 2000 cũng cung cấp một thư viện (fiber library) hỗ trợ ánh xạ nhiều – nhiều. Mỗi luồng thuộc về một tiến trình có thể truy xuất một không gian địa chỉ ảo của tiến trình. Những thành phần thông thường của một luồng gồm: ID của luồng là định danh duy nhất luồng Tập thanh ghi biểu diễn trạng thái của bộ xử lý Ngăn xếp người dùng khi luồng đang chạy ở chế độ người dùng. Tương tự, mỗi luồng cũng có một ngăn xếp nhân được dùng khi luồng đang chạy trong chế độ nhân Một vùng lưu trữ riêng được dùng bởi nhiều thư viện thời gian thực và thự viện liên kết động (DLLs). Tập thanh ghi, ngăn xếp và vùng lưu trữ riêng được xem như ngữ cảnh của luồng và được đặc tả kiến trúc tới phần cứng mà hệ điều hành chạy trên đó. Cấu trúc dữ liệu chủ yếu của luồng gồm: RTHREAD (executive thread block-khối luồng thực thi). KTHREAD (kernel thread-khối luồng nhân) TEB (thread environment block-khối môi trường luồng) Lập lịch cho các luồng: Windows 2000 không có một luồng lập lịch trung tâm. Thay vào đó, khi một luồng không thể chạy được bất kì một chương trình nào, luồng sẽ đi vào trong chế độ nhân-kernel mode và tự chạy chính chương trình lập lịch để thấy được sự chuyển đổi các luồng. Tiếp theo, những điều kiện sau đây là nguyên nhân chính để chạy luồng để thực hiện mã bộ lập lịch. 1. Những khối luồng trên cùng một cờ hiệu, mutex event 110 v.v. 2. Nó báo hiệu một đối tượng ( E.g., làm nó trên một cờ hiệu). 3. Phần kết thúc của luồng đang chạy. Trong trường hợp một, luồng đã sẵn sàng và đang chạy trong chế độ nhân, nó chứa đựng các thao tác của ứng dụng đang thực thi, trong quá trình chạy nó phải tiến hành lưu lại ngữ cảnh của mình, và đến thời điểm thích hợp thì nó nạp ngữ cảnh chủa luồng kế tiếp và bắt đầu chạy chúng. Trong trường hợp hai, luồng cũng đang chạy trong nhân. Tuy nhiên, sau khi báo hiệu cho một vài đối tượng nào đó, nó được yêu cầu chạy bộ lập lịch của nó để giải phóng các luồng có độ ưu tiên cao hơn. Khi có một luồng có độ ưu tiên cao hơn luồng đang chạy thì xảy ra sự chuyển đổi luồng, luồng đang chạy lưu lại ngữ cảnh của nó và nạp ngữ cảnh của luông có độ ưu tiên cao hơn vào và bắt đầu chạy nó. Trong trường hợp 3, đặt ra yêu cầu cho kernel mode, tại thời điểm nào thì luồng cần chạy mã lập lịch luồng. Yêu cầu này còn phụ thuộc vào các luồng đang đợi trong ngăn xếp của kernel và độ ưu tiên của mỗi luồng. Bây giờ chúng ta xét đến thuật toán lập lịch thực tế. Win32 Có khuynh hướng cung cấp hai móc nối cho những tiến trình mà gây ảnh hưởng tới việc lập lịch cho luồng. Các móc nối này phần lớn quyết định giải thuật, đầu tiên, có một lời gọi thiết lập quyền ưu tiên mà đặt quyền ưu tiên của tất cả các luồng trong các tiến trình của đối tượng được gọi. Các giá trị được cho phép là: thời gian thực cao, thời gian trên mức bình thường, thời gian bình thường, thời gian dưới bình thường, và thời gian không nhàn rỗi. Thứ hai, có một lời gọi thiết lập quyền ưu tiên tương đối mà quyền ưu tiên đó có liên quan đến một vài luồng nào đó đã được so sánh với các luồng khác trong tiến trình của nó, các giá trị được cho phép là : Thời gian quyết định, thời gian lớn nhất, thời gian trên mức thông thường, thời gian thông thường, thời gian dưới mức thông thường, thời gian thấp nhất và thời gian nhàn rỗi. Với sáu lớp tiến trình và bảy lớp luồng, một luồng có thể có bất kỳ một trong 42 sự kết hợp trên. Đây là đầu vào cho thuật toán lập lịch. Sử dụng các quyền ưu tiên trong lập lịch, hệ thống duy trì một mảng có 32 mục , được đánh số từ 0 đến 31. Số trong bảng 11.18 xác định quyền ưu tiên cơ sở của luồng. Ngoài ra, mỗi luồng có một quyền ưu tiên hiện thời, mà có thể cao hơn quyền ưu tiên cơ sở Hình 11.18 Mỗi mảng ghi vào đầu của một danh sách các luồng đã sẵn sàng tại mỗi quyền ưu tiên tương ứng. Thuật toán lập lịch cơ bản gồm có tìm kiếm mảng từ quyền ưu tiên thứ 31 về tới quyền ưu tiên 0. Các mức ưu tiên được chia ra làm nhiều khoảng. Như trên hình 11.19 ta có thể thấy các mức ưu tiên được phân ra làm hai lớp. Khi có nhiều luồng sẵn sàng tại mức ưu tiên cao nhất, chúng sử dụng giải thuật Round robin. Bộ lập lịch không lựa chọn tiến trình đầu tiên và sau đó lựa chọn một luồng trong tiến trình đó. Nó chỉ làm việc với các luồng. Thậm chí nó không biết luồng nào thuộc về tiến trình nào. Trên bản thân một bộ đa xử lý, mỗi CPU chương trình sử dụng mảng quyền ưu tiên. Một khóa quay tròn được sử dụng để đảm bảo rằng quyền ưu tiên trong mảng được thay đổi thường xuyên, tránh hiện tượng độc quyền. 3.4 Điều khiển các exception của phần cứng (xử lý ngắt): Một trong những chức năng quan trọng nhất trong kernel là xử lý ngắt. Trong các hệ điều hành đa nhiệm thường xuyên phải sử dụng các lời gọi xử lí ngắt. Do đó xử lý ngắt đóng vai trò quan trọng trong việc chia sẻ tài nguyên hệ thống và đáp ứng kịp thời các yêu cầu của người dùng. Khi kernel xử lý ngắt, nó cấm tất cả các ngắt khác và chỉ cho phép tiếp tục xử lý ngắt sau khi xử lý xong ngắt hiện thời. Trong trường hợp có liên tục nhiều ngắt cùng được gọi thì có thể xuất hiện tình huống các ngắt bị chặn trong thời gian tương đối lớn, có nghĩa là hệ thống không phản ứng kịp thời với nhiều sự kiện cùng một lúc. Do đó kernel thường được thiết kế sao cho nó có thể thực hiện việc tiền xử lý các công việc đến mức tối thiểu sau đó mới chuyển việc xử lý tiếp theo cho process hệ thống tương ứng và có thể cho phép xử lý các ngắt tiếp theo. Theo đó các ngắt bị cấm trong khoảng thời gian nhỏ hơn do đó tốc độ phản ứng của hệ thống tăng đáng kể Cho phép (enable) và cấm (diasable) ngắt Xâm nhập kernel thường được thực hiện thông qua ngắt, khi kernel phản ứng với ngắt nào đó thì nó cấm các ngắt khác. Sau khi phân tích nó chuyển việc xử lý cho một system process chuyên làm việc với loại ngắt đó. Trong một số hệ thống mỗi ngắt đều đươc xử lý bởi cả hệ điều hành cồng kềnh, do đó các ngắt thường bị cấm trong một thời gian tương đối dài nhưng về nguyên tắc HĐH lại đơn giản hơn. Cách này thường áp dụng cho các máy nhỏ, làm việc với ít process. Còn với các hệ thống phức tạp, thường có một phần nhỏ của hệ điều hành (kernel) chuyên xử lý ngắt cho phép nâng cao các chỉ số của cả hệ thống. III. KẾT LUẬN Qua quá trình nghiên cứu, tôi đã tìm hiểu được cấu trúc, thành phần và chức năng của kernel mode. Biết được cấu trúc của hệ điều hành gồm hai phần chính, Kernel mode và Use mode. Windows 2000 là một bước cải tiến về công nghệ, trong Windows 2000 sử dụng ứng dụng Plug and Play, một bước cải tiến trong công nghệ của Microsoft. Các hàm API của Windows 2000 vẫn còn nhiều bí mật chưa được Microsoft công bố. Các ứng dụng trong chế độ Use mode liên hệ với các hàm trong Kernel mode thông qua hàm ntdll.dll. Lớp phần cứng trừu tượng HAL là trung gian của nhân và phần cứng máy tính, chính lớp HAL này làm cho hệ điều hành có thể tương thích trên nhiều máy có cấu hình phần cứng khác nhau. Hướng phát triển của đề tài là nghiên cứu các phương pháp viết các Driver kernel mode ứng dụng trong hệ điều hành. IV. Tài liệu tham khảo: Modern Operating Systems (2Nd) – Prentice Hall. Windows 2000 cài đặt và quản trị - Phạm Thế Bảo và Phương Lan Giáo trình hệ điều hành nâng cao – Trần Hạnh Nhi, Hoàng Kiếm – Đại học khoa học tự nhiên ,1999 Programming the Microsoft Windows Driver Model - Copyright© 1999 by Walter Oney Inside Microsoft Windows 2000, third edition – David A.Solomon, and Mark E.Russinovich.

Các file đính kèm theo tài liệu này:

  • docbai tap lon hdh kernel mode.doc