Trong chương này , chúng ta sẽ xem xét kỹ hơn vai trò của các tiến trình khác nhau trong hệ thống phân tán . Khái niệm của 1 tiến trình bắt nguồn từ các lĩnh vực của hệ điều hành , trong đó nó được định nghĩa như là 1 chương trình đang thực thi . Trong đó thì việc quản lý và lập kế hoạch của các tiến trình có lẽ là vấn đề quan trọng nhất cần phải quan tâm
38 trang |
Chia sẻ: haohao89 | Lượt xem: 2682 | Lượt tải: 1
Bạn đang xem trước 20 trang tài liệu Bài giảng Tiến trình (processes), để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Contents
CHƯƠNG 3 : TIẾN TRÌNH
(Processes)
Trong chương này , chúng ta sẽ xem xét kỹ hơn vai trò của các tiến trình khác nhau trong hệ thống phân tán . Khái niệm của 1 tiến trình bắt nguồn từ các lĩnh vực của hệ điều hành , trong đó nó được định nghĩa như là 1 chương trình đang thực thi . Trong đó thì việc quản lý và lập kế hoạch của các tiến trình có lẽ là vấn đề quan trọng nhất cần phải quan tâm .
Ví dụ , để tổ chức hiệu quả 1 hệ thống client-server , người ta thường sử dụng các kỹ thuật đa luồng . Như chúng ta đã thảo luận trong phần trước , đặc điểm quan trọng nhất của luồng trong hệ phân tán là chúng cho phép các máy trạm và máy chủ có thể được xây dựng để các kết nối và xử lý nội bộ có thể chồng lên nhau , điều này dẫn đến hiệu suất cao , Trong những năm gần đây , khái niệm về ảo hóa đã trở nên phổ biến . Ảo hóa cho phép một ứng dụng và có thể có môi trường hoàn chỉnh bao gồm hệ điều hành , để chạy đồng thời với các ứng dụng khác nhưng hoàn toàn độc lập về phần cứng và nền tảng nằm dưới . Hơn nữa , ảo hóa giúp tách được các sự cố gây ra do lỗi hay các vấn đề về bảo mật , Đây là một khái niệm quan trọng trong hệ phân tán .
Một vấn đề quan trọng , đặc biệt là ở khu vực phân tán rộng , là việc di chuyển tiến tình giữa các máy tính khác nhau . Quá trình di chuyển hay cụ thể hơn là di trú mã .
3.1 Luồng :
3.1.1 Giới thiệu về luồng
Để hiểu rõ vai trò của luồng trong hệ thống phân tán , điều quan trọng là là hiểu được xem một tiến trình là gì và tiến trình và luồng có quan hệ như thế nào .
Để thực thi 1 chương trình , hệ điều hành tạo ra một số bộ xử lý ảo , mỗi một bộ xử lý này chạy 1 chương trình khác nhau . Để theo dõi các bộ xử lý ảo này , hệ điều hành có 1 bảng tiến trình , mà mỗi mục lưu các giá trị thanh ghi , ánh xạ bộ nhở , các tập tin mở , các thông tin tính toán , quyền hạn … Một tiến trình thường được định nghĩa như là một chương trình đang thực thi . Một vấn đề quan trọng là hệ điều hành sẽ theo dõi chặt chẽ để đảm bảo rằng các tiến trình độc lập không vô tình hoặc cố ý ảnh hưởng đến các hành vi của tiến trình khác . Tuy nhiên , thực tế là nhiều quá trình có thể chia sẻ cùng một bộ xử lý và tài nguyên phân cứng khác đều trong suốt . Thông thường , hệ điều hành yêu cầu phần cứng hỗ trợ để thực hiện việc phân chia này .
Điều này làm chi phí cho các tiến trình sẽ rất lớn . Ví dụ , mỗi lần 1 tiến trình được tạo ra , hệ điều hành cần phải tạo ra một không gian địa chỉ độc lập . Phân bổ , khởi tạo phân đoạn bộ nhớ ( xóa 1 phân đoạn dữ liệu … ) . Tương tự như vậy chyển CPU giữa 2 quá trình có thể tương đối tốn kém . Ngoài việc tiết kiệm CPU ( các giá trị thanh ghi , bộ đếm chương trình , ngăn xếp con trỏ .. ) hệ điều hành cũng sẽ phải sửa đổi thanh ghi của bộ nhớ quản lý (MMU ) … Thêm vào đó , nếu hệ thống hỗ trợ nhiều tiến trình hơn , đồng thời nó cần phải giữ tiến trình trong bộ nhớ chính . Nó có thể có tiến trình nháp để trao đổi giữa bộ nhớ chính và ổ đĩa trước khi nó thực sự được thực hiện .
Giống như 1 tiến trình , một luồng thực thi các đoạn mã của nó độc lập với các luồng khác . Tuy nhiên , ngược với tiến trình nó không cố gắng để tạo ra sự độc lập với các luồng khác nếu việc này làm giảm hiệu năng . Do đó một luồng hệ thống thường chỉ duy trì các thông tin tối thiểu cho phép 1 máy CPU được chia sẻ bởi 1 vài luồng . Đặc biệt , một bối cảnh luồng thông thường chỉ gồm có bối cảnh CPU cùng với một số thông tin khác để quản lý luông . Ví dụ , một hệ thống luồng có thể đảm bảo rằng một luồng hiện tại đang bị khóa thì sẽ không thể thực thi . Thông tin đó không thực sự cần thiết để quản lý đa luồng và thường bị bỏ qua . Vì lý do này , bảo vệ dữ liệu chống lại các truy cập không thích hợp bằng luồng trong 1 tiến trình được đặt hoàn toàn vào người phát triển ứng dụng .
Có 2 ý nghĩa quan trọng của phương pháp này . Trước hết , hiệu suất của 1 ứng dụng đa luồng khó có thể kém hơn ứng dụng đơn luồng . Trong thực tế , nhiều trường hợp đa luồng làm cho hiệu suất tăng . Thứ 2 , bỏi vì các luồng không tự động bảo vệ lẫn nhau như cách của tiến trình , nên việc phát triển các ứng dụng đa luồng cần được phát triển hơn nữa . Đảm bảo thiết kế và giữ mọi thứ càng đơn giản càng tốt . Tuy nhiên , những thực nghiệm hiện nay không chứng mình rằng nguyên tắc này đều được các nhà phát triển nắm rõ .
3.1.2 Luồng trong các hệ thống phân tán .
Một tính chất quan trọng của luồng là chúng có thể cung cấp một phương tiện thuận lợi cho phép chặn các lời gọi hệ thống mà không chặn toàn bộ tiến trình mà luồng đó đang chạy . Tính chất này làm cho luồng đáng được chú ý để sử dụng trong các hệ thống phân tán bởi vì nó làm cho việc thực hiện các kết nối được dễ dàng cũng như trong việc duy trì nhiều hết nối cùng một lúc .
Máy trạm đa luồng :
Để thiết lập một mực cao của phân tán trong suốt , hệ phân tán hoạt động trong một mạng lớn cần phải che dấu số lần truyền các thông điệp nội bộ các quá trình . Vòng trễ trong mạng diện rộng có thể dễ dàng xẩy ra có thể từ hàng trăm ms đến một vài s . Thông thường để ẩn độ trễ trong kết nối là để thiết lập kết nôi và ngay lập tức thực thi 1 việc khác . Một ví dụ điển hình của điều này là ở trình duyệt web . Trong nhiều trường hợp , một tài liệu Web bao gồm một tệp HTML có chứa văn bản cùng với các hình ảnh , biểu tượng …. Để lấy từng phần tử của 1 văn bản web thì trình duyệt sẽ thiết lập 1 kết nối TCP/IP , đọc dữ liệu gửi đến và chuyển nó đến thành phần hiển thị . Thiết lập một kế nối cũng như đọc dữ liệu đến thì sẽ ngăn chặn các hoạt động khác . Khi xử lý các kết nối lâu , chúng ta có những bất lợi đó là thời gian hoàn thành tác vụ này tương đối dài .Một trình duyệt web thường bắt đầu với các trang HTML và sau đó hiển thị nó . Để ẩn trễ kết nối tới mức tốt nhất , một số trình duyệt bắt đầu hiển thị các dữ liệu trong khi vẫn nhận các thông tin tới . Trong khi văn bản được tạo cho người sử dụng , thì các thành phần khác của văn bản như ảnh cũng được thực hiện tương tự . Như vậy người dùng sẽ không phải chờ đến khi mà toàn trang được tải xong thì mới được xem nội dung của trang .
Trong thực tế , trình duyệt web thực hiện một số nhiệm vụ đồng thời , ngay khi mà trang chính HTML được tải xuống , các luồng riêng biệt được bật để quản lý các phần khác của trang . Mỗi luồng thiết lập một kết nối riêng biệt với máy chủ để lấy dữ liệu . Như vậy nếu theo ví dụ này , khi ta chỉ dùng 1 máy chủ , và ở thời điểm có rất nhiều máy cùng gửi yêu cầu đến máy chủ đó thì máy chủ này sẽ phải chịu tải rất lớn và trở nên chậm chạp . Tuy nhiên trong nhiều trường hợp , máy chủ web được nhân rộng trên nhiều máy tính nơi mà mỗi máy chủ cung cấp một cách chính xác cùng 1 bộ tài liệu . Như vậy khi 1 yêu cầu được gửi đến máy chủ thì yêu cầu này sẽ được chuyển đến 1 trong các máy chủ đó theo cơ chế cân bằng tải , hoặc round-robin . Tuy nhiên , việc này chỉ thật sự có hiệu quả khi mà trình duyệt của máy khách có thể xử lý đồng thời được các tài liệu web được gửi đến .
Máy chủ đa luồng
Mặc dù những lợi ích quan trọng của việc sử dụng đa luồng trên ứng dụng phía khách hàng nhưng ứng dụng chính của đa luồng trong hệ phân tán lại nằm bên phía máy chủ . Thực tế cho thấy rằng đa luồng không chỉ làm đơn giản mã trên máy chủ mà còn làm cho việc phát triển máy chủ khai thác xử lý song song đạt được hiệu năng cao , thậm chí ngay trên các hệ thống đơn xử lý . Tuy nhiên , bây giờ các hệ thống đa xử lý đã được sử dụng rộng rãi .
Để nắm được những lợi ích của luồng trong việc viết mã cho máy chủ , chúng ta sẽ xem xét việc tổ chức tập tin cho máy chủ mà thông thường phải đợi 1 khoảng thời gian để đọc đĩa . Máy chủ tệp tin thường đợi các yêu cầu đến cho một hoạt động của tập tin , sau đó thực hiện yêu cầu , và gửi lại trả lời . Tuy nhiên thì có thể thực hiện bằng cách khác , những yêu cầu được gửi đến 1 vị trí đặc biệt nào đó trên máy chủ , sau khi kiểm tra các yêu cầu máy chủ chọn ra 1 luông nhàn rỗi nào đó để thực hiện yêu cầu này .Như vậy có thể thực hiện nhiều yêu cầu mà vẫn đảm bảo hoạt động của hệ thống .
Tiến trình này sẽ thực hiện việc đọc các tệp tin trên hệ thống nội bộ , lúc này có thể làm cho luồng bị dừng cho đến khi dữ liệu được đọc từ đĩa . Nếu luồng bị dừng , luồng khác sữ được chọn để thực thi .
Bây giờ , ta sẽ xem xét xem làm thế nào mà các máy chủ tệp tin có thể ghi được khi thiếu các luồng . Một khả năng là nó hoạt động như 1 luồng duy nhất . Vòng lặp chính của máy chủ tệp tin lấy 1 yêu cầu , kiểm tra nó và đưa nó ra để hoàn thành trước khi thực hiện công việc kế tiếp . Trong khi chờ đợi đĩa , máy chủ trong trạng thái nhàn rỗi và không thực hiện bất kỳ yêu cầu nào khác . Do đó yêu cầu từ máy khách khác không thể xử lý . Ngoài ra , nếu máy chủ là tệp tin chạy trên một máy chuyên dụng , như CPU chỉ đơn giản là nhàn rồi trong khi máy chủ tệp tin chờ đọc đĩa . Kết quả có được là rất ít yêu cầu được xử lý mỗi giây .
Cho đến nay , chúng ta đã có 2 thiết kế : một máy chủ tệp tin đa luồng và 1 máy chủ đơn luồng . Một thiết kế thứ 3 là chạy máy chủ như 1 máy trạng thái hữu hạn . Khi 1 yêu cầu đến , chỉ 1 luồng kiểm tra nó và nếu thỏa mãn thì thực hiện nếu không thì 1 thông điệp sẽ được gửi từ đĩa .
Tuy nhiên , thay vì ngăn chặn , nó ghi lại trạng thái của yêu cầu hiện tài vào 1 bảng và tiếp tục lấy thông điệp tiếp theo . Nếu thông điệp tiếp theo là công việc mới thì thực hiện còn nếu là lời trả lời từ đĩa cho công việc trước thì nó sẽ lấy các thông tin liên quan từ bảng , lời trả lời đã được xử lý và sau đó gửi lại cho phía máy khách . Theo cách này máy chủ sẽ sử dụng đến các lời gọi không chặn để gửi và nhận các yêu cầu .
Trong thiết kế , mô hình quá trình tuần tự mà chúng tôi đã đề cập trong 2 trường hợp đầu đã dần biến mất . Trong thực tế chúng ta thực hiện theo kiểu đa luồng và ngăn xếp . Tiến trình được thực hiện như một máy hữu hạn trạng thái , nhận các sự kiện rồi phản ứng với các sự kiện này tùy thuộc vào đó là sự kiện gì .
Tóm lại ,chúng ta tổng kết những ưu và nhược điểm của cả 3 dạng trên như sau :
Với đa luồng , hệ thống thực hiện các blocking system calls và vẫn đạt được xử lý song song . Lời gọi hệ thống có thể che đươc làm cho việc lập trình dễ hơn và cải thiện hiệu suất xử lý song song .
Máy chủ đơn luông đơn giản nhưng làm giảm một phần hiệu năng .
Máy chủ theo kiểu máy hữu hạn trạng thái đạt được hiệu suất cao nhưng lại sử dụng lời gọi hệ thống không che ( nonblocking system calls ). Việc này gây khó khăn trong lập trình
*)Lời gọi hệ thống (System call): là tập lệnh mở rộng do hệ điều hành cung cấp xác định giao diện giữa hệ điều hành và các chương trình người sử dụng.
*)Blocking System call: là lời gọi hệ thống mà sau khi được gọi bởi tiến trình người sử dụng thì tiến trình này bị dừng lại cho đến khi thực hiện xong lời gọi hệ thống.
*)Non – Blocking System call: sau khi gọi, điều khiển được trả lại cho tiến trình gọi và tiến trình này tiếp tục thực hiện song song với lời gọi hệ thống.
3.2 Ảo hóa
Luồng và tiến trình có thể thực hiện nhiều tác vụ song song . Do vậy , cho phép chúng ta xây dựng (các phần) của chương trình có thể chạy đồng thời . Dĩ nhiên trong hệ thống chỉ có một bộ vi xử lý thì việc chạy đồng thời này rõ ràng là một ảo tưởng . Vì với 1 CPU riêng lẻ thì tại một thời điểm chỉ có một lệnh được thực hiện . Chính khả năng chuyển mạch với tốc độ cao giữa các luồng hay tiến trình đã tạo nên ảo tưởng về một quá trình song song hóa .
Sự phân tách giữa việc có một CPU và giả lập về khả năng mở rộng sang các tài nguyên khác đã tạo nên cái gọi là ảo hóa tài nguyên (resources virtualization) . Sự ảo hóa đã được áp dụng cách đây khỏang vài chục năm nhưng nó đã được thay đổi cho phù hợp với các hệ thống (phân tán) ngày càng phổ biến và phức tạp hơn , hướng tới khả năng họat động liên tục của các phần mềm ứng dụng chạy trong hệ thống . Trong phần này , chúng ta sẽ tập trung vào các quy tắc của ảo hóa và cách thức họat động của nó .
3.2.1 Nguyên tắc của việc ảo hóa trong các hệ phân tán
Trong thực tế , các hệ phân tán giống như một giao diện chương trình với các phần mềm ở mức cao , như hình 3-5a dưới đây . Có rất nhiều dạng giao diện khác nhau , từ những tập lệnh cơ bản của CPU tới vô số các giao diện chương trình ứng dụng (APIs) được sử dụng rộng rãi trong các hệ phân tán hiện nay . Bản chất của việc ảo hóa là khả năng mở rộng hay thay thế một giao diện đã có để mô phỏng hành vi của một hệ thống khác (hình 3-5b). Chúng ta sẽ đề cập chi tiết đến vấn đề ảo hóa , nhưng trước tiên chúng ta sẽ tập trung tìm hiểu xem tại sao ảo hóa lại quan trọng trong các hệ phân tán .
Một trong những lý do quan trọng mà người ta đưa ra vấn đề vê ảo hóa vào những năm 1970 , đó là việc cho phép những phần mềm cũ có thể chạy trên các máy mainframe đắt tiền . Các phần mềm này không những bao gồm nhiều ứng dụng và thực tế còn có cả hệ điều hành nữa . Hướng tiếp cận này sẽ giúp các phần mềm cũ có thể được dùng trên máy mainframe IBM 370 (cung cấp máy ảo mà trên đó có thể cái các hệ điều hành khác nhau ).
Khi mà phần cứng trở nên rẻ hơn , máy tính mạnh mẽ hơn , và số lượng các hệ điều hành giảm bớt thì khái niệm về máy ảo cũng ít được đưa ra hơn . Tuy nhiên vào những năm cuối chùng của thập kỷ 90 , điều này lại được thay đổi một lần nữa vì một vài nguyên nhân .
Thứ nhất trong khi phần cứng và các phần mềm hệ thống ở mức thấp thay đổi với tốc độ vừa phải thì những phần mềm ở mức trừu tượng cao hơn ngày càng ổn định . Hay nói một các khác , chúng ta phải đối mặt với tình huống là những phần mềm cũ không thể tiếp tục duy trì theo cùng với tốc độ của platform . Bằng việc xây dựng một giao diện cũ trên nền platform mới , ảo hóa đã mở ra một trang mới cho các chương trình này .
Một điều quan trọng không kém là trong thực tế , mạng máy tính đã trở nên quá phổ biến . Thật khó có thể tượng tượng được rằng một chiếc máy tính hiện đại lại không thể kết nối được vào mạng . Thực tế việc kết nối đòi hỏi người quản trị hệ thống phải duy trì các máy server với số lượng lớn và đa chủng loại , mỗi máy lại yêu cầu chạy các ứng dụng khác nhau và nhận truy cập từ các máy client . Cùng một thời điểm các ứng dụng này có thể truy cập rất nhiều tài nguyên khác nhau một cách dễ dàng . Ảo hóa làm đựoc rất nhiều điều : khó khăn về sự đa dạng của các platform và các máy khác nhau có thể được giảm bớt khi xây dựng các máy ảo riêng biệt cho từng ứng dụng đó , bao gồm các thư viện liên quan và hệ điều hành , do đó các ứng dụng sẽ chạy trên cùng một platform .
Điều cuối cùng mà ảo hóa mang lại cho chúng ta là khả năng cơ động và mềm dẻo cao . Ví dụ : các nội dung được phân phối trên mạng dễ dàn được hỗ trợ khả năng sao chép động nội dung . Awadaddah và Rosenblum cho rằng việc quản lý sẽ trở nên dễ dàng hơn nếu các máy server biên hỗ trợ ảo hóa , cho phép một site đã hoàn thành , bao gồm cả môi trường sao chép động của nó . Chúng ta sẽ thấy được rằng đây là một điểm quan trọng về khả năng cơ động của ảo hóa (điều là cho ảo hóa trở thành cơ cấu quan trọng trong các hệ phân tán ) .
3.2.2 Kiến trúc máy ảo
Ảo hóa có thể xây dựng bằng nhiều cách khác nhau . Tổng quan về các cách tiếp cận này được mổ tỏa bởi Smith và Nair (2005). Để hiểu được điều này , chúng ta cần nắm vững 4 loại giao diện tương ứng với 4 mức khác nhau trong một hệ thống máy tính :
Giao diện giữa phần cứng và phần mềm , gồm các lệnh máy , được đưa ra bởi bất kì chương trình nào
Giao diện giữa phần cứng và phần mềm , gồm các lệnh máy , chỉ được gọi bởi một số chương trình đặc biệt , ví dụ như hệ điều hành
Giao diện giữa hệ điều hành và chương trình người dùng : gồm các lời gọi hệ thống (system call) được cung cấp bới hệ điều hành
Giao diện giữa các thư viện : tập các APIs . Trong nhieefu trường hợp các lời gọi hê thống được che dấu bởi các APIs
Sự khác nhau của 4 dạng trên được chỉ ra trong hình 3-6 . Bản chất của ảo hóa là sự mô phỏng lại hành vi của các giao diện này .
Ảo hóa có thể diễn ta theo 2 cách . Thứ nhất chúng ta có thể xây dựng một hệ thống mà về bản chất chỉ cung cấp tập các lệnh trừu tượng sử dụng cho việc chạy một ứng dụng . Các lệnh có thể được thông dịch (như máy ảo Java) , nhưng cũng có thể mô phỏng một việc chạy một ứng dụng Window trên nền Unix . Dạng ảo hóa này được gọi là ảo hóa tiến trình PVM (việc ảo hóa chỉ thực thi một tiến trình)
Hướng tiếp cận thứ 2 là cung cấp một tần cho phủ phần cứng nhưng cũng có đầy đủ các tập lệnh như một giao diện thật sự . Điểm cốt yếu là giao diện này có thể được cung cấp đồng thời cho các chương trình khác nhau . Kết quả là , giờ đây các hệ điều hành khác nhau có thể chạy độc lập và đồng thời trên cùng một platform . Dạng này được gọi là các máy ảo theo dõi (VMM). Ví dụ điển hình của dạng này là VMware và Xen . Sự khác nhau giữa 2 hướng tiếp cận được chỉ ra như hình 3-7
Theo Rosenblum và Garfinkel , VMM ngày càng quan trọng trong bối cảnh yêu cầu về tính tin cậy và bảo mật của các hệ phân tán . Vì chúng cho phép cách ly một ứng dụng hoàn thiện và môi trường cúa nó , sai sót xảy ra do lỗi hay do tấn công về bảo mật sẽ không thể tác động lên toàn bộ máy . Thêm nữa , như chúng ta đã đề cập trước đó , khả năng cơ động cũa được phát triển vì VMM cung cấp sự liên kết lỏng lẻo giữa phần cứng và phần mềm , do đó có thể cho phép toàn bộ môi trường có thể chuyển từ máy này sang máy khác .
3.3 Máy khách (client)
Ở chương trước chúng ta đã đề cập đến mô hình client-server , những nguyên tắc và cách thức tương tác của chúng . Giờ chúng ta sẽ tiếp tục tìm hiểu kỹ hơn về mô hình này . Chúng ta sẽ bắt đầu trước với client , và tiếp theo là server .
3.3.1 Giao diện người dùng mạng
Tác vụ quan trọng của các máy client là cung cấp cho người dùng khả năng tương tác vơi các máy server ở xa . Có 2 cách tương tác . Thứ nhất , với mỗi dịch vụ từ xa , máy client sẽ có một bản sao riêng biệt có khả năng kết nối với dịch vụ thông qua mạng . Ví dụ điển hình là một agenda chạy trên PDA phải được đồng bộ với một agenda chia sẻ có trên mạng . Trong trường hợp này , giao thức tần ứng dụng sẽ xử lý quá trình đồng bộ này (hình 3-8a) .
Giải pháp thứ 2 là cung cấp một kết nối trực tiếp tới dịch vụ ở xa bằng việc đưa ra một giao diện người dùng . Như thế có nghĩa là máy client chỉ được sử dụng như một thiết bị đầu cuối mà không cần việc lưu trữ nội bộ trên máy client đó (hình 3-8b) . Trong trường hợp giao diện người dùng mạng , tất cả đều được xử lý và lưu trữ trên server . Hướng tiếp cận thin-client này được quan tâm nhiều hơn khi mà Internet phát triển và các thiết bị cầm tay ngày càng phức tạp hơn . Như đã nói ở chương trước , giải pháp thin-client được dùng phổ biến vì chúng ta có thể dễ dàng quản lý hệ thống .
Ví dụ : Hệ thống X Window
X Window là một trong những giao diện người dùng mạng lâu đời nhất nhưng ngày nay nó vẫn được dùng rộng rãi . Hệ thống X Window (còn được gọi đơn giản là X) dùng để điều khiển ánh xạ các bit trên các thiết bị đầu cuối , như màn hình , bàn phím và chuột . Một cách khách quan , X có thể được xem như là một phần của hệ điều hành điều khiển các thiết bị đầu cuối . X kernel là trái tim của hệ thống . Nó chứa tất cả mọi trình điều khiển của thiết bị , và nói chung là phụ thuộc rất lớn vào phần cứng .
X kernel cung cấp một giao diện mức thấp để diều khiển màn hình , bắt các sự kiện từ bàn phím và chuột . Thư viện Xlib cung cấp giao diện này cho các ứng dụng . Kiến trúc tổng quan của nó được chỉ ra trên hình 3-9
X kernel và ứng dụng X không nhất thiết phải đặt trên cùng một máy . Vì X cung cấp giao thức X , là một giao thức họat động trên tầng ứng dụng , nhờ đó mà các thành phần của Xlib có thể trao đổi dữ liệu và sự kiện với X kernel . Ví dụ , khi Xlib gửi một yêu cầu tới X kernel để tạo hay xóa một cửa sổ , xác lập màu và định nghĩa dạng con trỏ hiển thị . Tương tự thế , X kernel sẽ tương tác với các sự kiện cục bộ như đầu vào từ bàn phím hay chuột bằng việc gửi các gói sự kiện này trở về Xlib .
Một vài ứng dụng có thể cùng lúc giao tiếp với X kernel . Window manager mà một ứng dụng đặc biệt , có thể điều khiển “cảm quan” của sự hiển thị khi nó xuất hiện trước người dùng . Vì dụ như Window manager điều khiển các nút mở rộng sẽ hiển thị như thế nào , các cửa sổ sẽ được đặt ở đâu , v