Tổng quan kiến thức về lập trình hệ thống
Bài viết này tổng hợp lại một số kiến thức cơ bản quan trọng về lập trình hệ thống và các thành phần của nó. Phần 1 – Hệ điều hành Windows Trong bài này, chúng ta sẽ tập trung giới thiệu tổng quan về các thành phần chính của hệ điều hành Windows và các khái niệm liên quan đến Driver – mỗi ...
Bài viết này tổng hợp lại một số kiến thức cơ bản quan trọng về lập trình hệ thống và các thành phần của nó.
Phần 1 – Hệ điều hành Windows
Trong bài này, chúng ta sẽ tập trung giới thiệu tổng quan về các thành phần chính của hệ điều hành Windows và các khái niệm liên quan đến Driver – mỗi thành phần sẽ được tôi trình bày chi tiết ở các bài sau.
Các thành phần chính bên trong của Windows OS
Hình minh họa phía bên dưới cho ta thấy các thành phần chính bên trong hệ điều hành Window.
System Processes
System Processes là những chương trình của hệ thống. Ở đây ta lấy Service Control Manager (SCM) làm ví dụ.
Service Control Manager (SCM) được khởi động vào lúc nạp hệ thống (system boot). Nó là một Remote Procedure Call Server hay còn gọi là RPC Server, cho phép các service configuration và service control program có thể điều khiển các services trên một remote machine.
Services
Mỗi service cũng giống như những chương trình bình thường khác. Điểm khác biệt ở đây giữa service so với những chương trình bình thường khác ở chỗ chúng hoạt động ở mức nền (background), mà thường không có giao diện dành cho người sử dụng. Chúng thường được viết để cung cấp các tính năng lõi cho hệ điều hành. Ví dụ như: Web serving, File serving, ghi log hay thông báo lỗi.
Không phải tất cả service đều được phát triển bởi Microsoft. Nhiều ứng dụng và driver đều có service riêng của mình. Ở đây chúng ta sẽ lấy tập các chương trình liên quan đến security làm ví dụ. Những chương trình này sẽ sử dụng những lợi thế do hệ điều hành cung cấp nếu chúng được hoạt động ở dạng service. Một trong những lợi thế là việc chúng được khởi tạo lúc khởi động hệ thống (system boot), trước những chương trình khác và tất nhiên là trước cả lúc bạn đăng nhập vào hệ điều hành Windows của mình. Nhưng quan trọng hơn cả là những chương trình ở dạng này có thể theo dõi tất cả những gì đang hoạt động trên máy tính của bạn bằng cách tương tác với Windows Core. Ví dụ như: hoạt động của firewall, Network …
Để tương tác với các Windows Service, bạn vào Control Panel -> System and Security and double click vào Administrative Tools. Sau đó chọn Services.
Đây là nơi bạn có thể xem miêu tả cụ thể một service dùng để làm chức năng gì, tắt hoặc là bật một service, cho khởi động tự động cùng hệ thống hay là không.
System Service Dispatcher
System Service Dispatcher là một hệ thống các con trỏ hàm trỏ tới mỗi service. Nếu bạn có nghiên cứu về lập trình hệ thống từ trước, bạn sẽ thấy ở đây liên quan đến khái niệm về bảng các các con trỏ hàm SSDT.
Về phần này, tôi sẽ trình bày một bài chi tiết về hook SSDT – một kỹ thuật mà cả Windows Rootkit hay các chương trình AntiVirus hiện nay đang sử dụng ở bài sau.
Hardware Abstraction Layer
Hardware Abstraction Layer ( HAL ) là một lớp trừu tượng thực thi bởi phần mềm. Chúng nằm ở giữa Physical Hardware của máy tính và những phần mềm chạy trên máy tính. Chức năng của nó là che giấu đi sự khác biệt về phần cứng trong hầu hết các OS kernel. Như vậy, các mã viết ở kernel mode không cần phải thay đổi để chạy được trên hệ thống với những thiết bị phần cứng khác.
Chúng cho phép những lập trình viên viết những chương trình Device Driver mà không phụ vào chi tiết của phần cứng. Nói cách khác, ở đây chúng cung cấp những lời gọi hàm tới phần cứng để thực hiện những công việc nhất định.
Rất nhiều hệ thống máy tính đời đầu không cung cấp HAL. Điều này có nghĩa là khi bất cứ một ai muốn viết một chương trình cho một hệ thống nào đó thì cần phải biết mỗi hardware device liên kết với phần còn lại của hệ thống như thế nào. Điều này thực sự gây ra sự khó khăn lớn cho các nhà phát triển bởi vì họ cần phải biết tất cả hardware device hoạt động như thế nào trên hệ thống và phải đảm bảo về sự tương thích. Với HAL, sự khó khăn này gần như đã được loại bỏ.
Ở phần này tôi xin phép được nói về một số thành phần cơ bản, có thể các bạn đã biết, nhưng theo tôi nó vẫn quan trọng. Chúng ta nên có một chút khái niệm trước khi bước vào lập trình hệ thống. Trong những bài tiếp theo, tôi sẽ đi vào trình bày chi tiết các thành phần quan trọng hơn.