MỤC LỤC:
I. Lịch sử của Windows .3
II. Kiến trúc tầng của Windows 2000 . 6
1. Hạt nhân của hệ điều hành .7
2. Cấu trúc của nhân (Kernel mode) hệ điều hành Windows 2000 .7
2.1 Các dịch vụ quản lý ( system sevrices): .7
2.1.1 I/O manager (quản lý vào/ra) .8
2.1.2 File system ( file hệ thống) .11
2.1.3 Object manager ( quản lý đối tượng) .11
2.1.4 Process manager ( quản lý tiến trình) .12
2.1.5 Memory manager (quản lý bộ nhớ ) .15
2.1.6 Security manager ( theo dõi bảo mật) 16
2.1.7 Cache manager ( quản lý bộ nhớ cache) 17
2.1.8 PnP manager (quản lý plug and play) 18
2.1.9 Config manager (quản lý cấu hình) .20
2.1.10 LPC manager ( quản lý LPC) .21
2.1.11 Win32 GDI .22
2.2 Kernel (nhân) 15
2.3 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
III. Tài liệu tham khảo 40
40 trang |
Chia sẻ: netpro | Lượt xem: 4116 | Lượt tải: 2
Bạn đang xem trước 20 trang 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, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
g 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 Nativ
Các file đính kèm theo tài liệu này:
- Bài tập lớn nguyên lý hệ điều hành - 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.doc