itprofes
Bạn có muốn phản ứng với tin nhắn này? Vui lòng đăng ký diễn đàn trong một vài cú nhấp chuột hoặc đăng nhập để tiếp tục.

Threads và Driver Code

Go down

Threads và Driver Code Empty Threads và Driver Code

Bài gửi  admin 29/4/2010, 2:50 pm

1. Khái niệm về driver và device:

Driver được phiên dịch là một trình điều khiển. Vậy nó điều khiển cái gì?. Nó điều khiển device (thiết bị).
Driver làm việc khác với một chương trình bình thường. Muốn tìm hiểu về driver, đầu tiên chúng ta nói sơ qua về cách làm việc của một chương trình bình thường. Một chương trình bình thường mà chúng ta thường thấy là một file thực thi (exe,...). Khi chúng thực thi chúng có thể có nhiều module được load vào trong memory. Mỗi module là một file ví dụ như file exe, dll,.... Ngoài ra chúng ta còn phải biết trong quá trình thực thi của một chương trình thì chúng có thể tạo ra nhiều processes và threads. Hệ điều hành có cơ chế phân thời gian thực thi cho mỗi thread.
Nhưng driver thì ko làm việc như vậy. Chúng được load vào trong memory ko như cách thực thi của một chương trình thông thường. Phải có một chương trình nào đó load nó vào trong memory. Khi được load vào memory rồi thì khi khởi động lại máy nó cũng sẽ tự động được HĐH load lên memory mà ko cần chương trình nào load nữa. Muốn vậy OS đăng ký key cho driver trong registry. Đồng thời, muốn driver điều khiển một thiết bị (device) nào đó thi chúng ta cũng phải cài đặt một device để nó điều khiển. Khi driver được load vào trong memory cũng như device đã được cài đặt, muốn driver điều khiển thiết bị thì ta phải buộc hệ điều hành truyền lệnh cho nó (driver) thông qua một dạng giống như thông điệp có tên là request I/O (yêu cầu xuất nhập). HĐH sẽ có một I/O Manager gọi là trình quản lý I/O để quản lý các request I/O. Chú ý rằng driver khi load vào memory chỉ có 1 module chứ ko như program bình thường khi thực thi có thể load nhiều module vào memory. Một chú ý nữa, driver ko thể giao tiếp với user bằng cách qua giao diện như một chương trình bình thường. User chỉ có thể giao tiếp với driver thông qua 1 chương trình gọi là client. Chương trình này sẽ cài đặt một request I/O và trình I/O Manager của OS sẽ xử lý request I/O phù hợp với driver nào.
Một điều quan trọng nữa, driver khi load vào memory thì chỉ có một module thực thi là file sys chứ ko như file exe khi thực thi thì nó còn load các dlls đính kèm.
Một điều cần biết nữa là OS quản lý và định thể driver và device bằng một Object.

2.Threads và Driver code:



Với những kiến thức ở trên chúng ta thấy hai processes khác nhau có thể request (yêu cầu) 1 dịch vụ của một driver nào đó. Trong user mode, Windows đã ko thể thực thi cùng 1 lúc 2 thread , nó thực thi tuần tự các threads.

Vậy code driver chỉ thực thi khi OS thông qua I/O Manager phát ra một yêu cầu ngắt (request I/O) tương ứng để thực thi code driver đó. Khi đó, toàn bộ hoạt động của hệ thống sẽ tạm dừng, và trong ngữ cảnh thread hiện hành, code driver sẽ thực thi chỉ lệnh. Và như bạn thấy, OS sẽ ko thể thực thi 2 ngắt một lượt.

Từ đó ta thấy, trong Kernel, code driver chạy trong ngữ cảnh thread (thread context) hiện hành bất kỳ khi ngắt gọi code driver xảy ra. Thread hiện hành mà lúc code driver thực thi chứ ko phải là thread chương trình client của bạn. Hệ thống ko tự động tạo thread riêng thực thi code driver.

Còn thread system là một đề tài khác. Muốn cài đặt thread system ta dùng hàm PsCreateSystemThread. Thường là cài đặt loại IRP để đồng bộ (synchronous IRP) trong một thread system để send đến một driver khác . I/O Manager sẽ trói buộc synchronous IRP trong thread cài đặt. Cần nhiều giấy mực để thông suốt. Chúng ta tìm hiểu đề tài này ở tut khác.
admin
admin
Thiếu Úy III
Thiếu Úy III

Tổng số bài gửi : 627
Diem : 6539
Thank : 4
Join date : 24/03/2010
Đến từ : Bỉm Sơn - Thanh hóa

https://itprofes.forumvi.com

Về Đầu Trang Go down

Về Đầu Trang

- Similar topics

 
Permissions in this forum:
Bạn không có quyền trả lời bài viết