6.1 – Cấu trúc đơn lớp và đa lớp
Ở các hệ thống một người sử dụng tất cả tài nguyên, mặc dù có thể được phân phối cho nhiều tiến trình nhưng đều thuộc sở hữu của một người. Chính vì vậy chỉ
có một môi trường hệ thống tồn tại. Các tham số có thể để một số nơi cố định. Các
cơ sở dữ liệu và hệ quản trị những cơ sở dữ liệu này tương tác với nhau thông qua các mối liên hệ tiền định tương tự như các chương trình con của một chương trình tác động qua lại với nhau thông qua các biến chung của chương trình. Những hệ thống như vậy thuộc loại đơn lớp.
Khi hệ thống có nhiều người dùng hoặc có mối quan hệ phối hợp với hệ thống khác cấu trúc đơn mức không còn đáp ứng được việc dung hòa hai điều kiện:
Đảm bảo sự độc lập, cục bộ hóa của mỗi người dùng hoặc mỗi hệ thống, Duy trì môi trường chung cho các người dùng trong phạm vi một hệ thống hoặc giữa các hệ thống.
Một trong những cách giải quyết là xây dựng quan hệ kiểu Client – Server cho hoạt động cục bộ trong phạm vi một hệ thống cũng như giữa các hệ thống. Mỗi quan hệ Client – Server sẽ tạo ra một môi trường riêng với từng nhóm tài nguyên, tương tự như một hệ điều hành đơn lớp cho nhóm tài nguyên đó. Một vi nhân
(Microkernel) sẽ quản lý các servers, xác lập quan hệ giữa tiến trình với tài nguyên vật lý cụ thể. Loại hệ điều hành được gọi là có cấu trúc đa lớp.
Hệ điều hành đầu tiên của Microsoft thiết kế theo mô hình này là WINDOWS
NT.
Những thay đổi về chất lượng của thiết bị kỹ thuật, môi trường làm việc và nhiệm vụ giải quyết dẫn đến sự thay đổi trong tổ chức hệ thống tính toán nói chung và hệ điều hành nói riêng. Nội dung của chương này là xét các vấn đề liên quan tới cách tổ chức hệ thống, đặc biệt là các hệ thống nhiều processors
để phù hợp với thực tế hiện tại và tương lai.
Phát triển xa hơn nữa, hệ thống tạo một môi trường làm việc cho từng người
sử dụng, như mỗi người có một hệ điều hành con, hoạt động độc lập theo mô hình Client – Server. Các hệ điều hành con nằm trong hệ thống ban đầu và chịu sự quản
lý của Server hệ thống. Microkernel sẽ làm việc với server hệ thống để đảm bảo mỗi client – Server hoạt động như một hệ thống độc lập. Như vậy mỗi người sử dụng sẽ có một hệ điều hành riêng, nhưng dùng chung phần lớn vốn tài nguyên cứng và mềm. Những hệ điều hành này được gọi là đa lớp.
Hình 6.1. Mô hình Client – Server của WINDOWS
NT.
6.2 – Hệ thống nhiều processors
Ngày nay một máy tính có nhiều processors đã trở thành phổ biến. Các processors có khả năng sử dụng chung bộ nhớ trong của máy tính. Một chương trình, thậm chí một tiến trình có thể được thực hiện trên nhiều processors. Siêu máy tính Deep Blue có 512 processors. Các máy Ultrabook của IBM phổ biến có 4 processors.
6.2.1 – Cấu hình hệ thống nhiều processors
Hệ thống nhiều processors hết sức đa dạng về cấu hình tổ chức. Ngoài vùng
bộ nhớ chung cho các processors, mỗi processor có thể có bộ nhớ riêng và một số tài nguyên riêng khác. Cấu hình có thể là đối xứng, tức là tài nguyên riêng của mỗi processor là như nhau hoặc phản đối xứng – có sự khác biệt trong vốn tài nguyên riêng. Mối quan hệ giữa các processors cũng tạo thành những hệ thống khác nhau phụ thuộc vào cách tổ chức các mối quan hệ này.
Tồn tại ba cách tổ chức quan hệ chính:
Quan hệ phân cấp,
Quan hệ liên kết linh hoạt,
Quan hệ bình quyền.
Hình 6.2. Hệ điều hành đa lớp.
Ở quan hệ phân cấp một processor đóng vai trò chủ đạo (processor chính), chịu trách nhiệm quản lý bộ nhớ, điều phối nhiệm vụ và thực hiện tất cả các chức năng điều khiển khác. Các processors còn lại (processor thứ cấp) đảm nhiệm thực hiện tiến trình do processor chính phân phối. Như vậy mọi ngắt sẽ được processor chính xử lý.
Cấu hình này dễ tổ chức và nó đơn thuần là sự mở rộng của hệ thống một processor. Các chương trình điều khiển do một processor quản lý vì vậy không cần phải sao chép tổ chức hoặc sao chép, lưu trữ nhiều phiên bản chương trình hoặc dữ liệu cho các processors sử dụng.
Ở cách tổ chức liên kết linh hoạt mỗi processor tổ chức quản lý và thực hiện tiến trình của mình độc lập với các processors khác. Mối quan hệ giữa các processors là phân chia nhiệm vụ. Một tiến trình được bắt đầu ở processor nào thì
sẽ kết thúc ở processor đó. Các ngắt nảy sinh cũng do processor này xử lý. Như vậy chương trình điều khiển phải thuộc loại vào lại được (Reentable) và mỗi processor phải có vùng riêng lưu các phiên bản dữ liệu cho các chương trình điều khiển mà mình sử dụng. Việc sử dụng chung tài nguyên sẽ làm nảy sinh nhiều loại tài nguyên găng mới và phức tạp hóa giải thuật điều độ tiến trình qua đoạn găng. Ở cấu hình này rất khó xác định một processor còn hoạt động bình thường hay không
và nếu phát hiện được – rất khó kích hoạt nó lại làm việc. Tuy vậy, với giải thuật điều phối tốt năng suất toàn hệ thống sẽ tăng lên rất cao.
Năng suất và độ an toàn chức năng của hệ thống còn được nâng cao hơn nữa khi các processors được coi như một tập tài nguyên cùng loại. Tất cả các chương trình điều khiển và các bảng thông tin điều khiển đều được dùng chung. Các processors sẽ được phân phối tham gia điều khiển cũng như thực hiện tiến trình. Đây là cấu hình quan hệ bình quyền. Ở cấu hình này, một tiến trình có thể được bắt đầu ở một processor nào đó, sau khi bị ngắt, nó có thể tiếp tục bởi processor khác. Tải trọng công việc sẽ được dàn đều trên các processors. Sự cố kỹ thuật ở một processor nào đó chỉ đơn thuần là làm giảm năng suất của hệ thống.
6.2.2 – Quản lý tiến trình trong hệ thống nhiều processors
Ngoài các ngắt đã nói trước đây trong hệ thống nhiều processors phải có ngắt processor để processor gửi tín hiệu sự kiện cho hệ thống. Ngắt này cũng thường được sử dụng trong một số giải thuật điều độ tiến trình qua đoạn găng.
Việc điều độ tiến trình qua đoạn găng trở nên phức tạp hơn vì hai hay nhiều processors có thể đồng thời truy nhập tới biến phục vụ điều độ. Ở kỹ thuật đèn báo
Việc điều độ sử dụng S không thể thực hiện bằng kỹ thuật đèn báo vì như vậy
ta sẽ rơi vào tình trạng đệ quy vô hạn: phát sinh semaphore mới và lại có tài nguyên găng mới cần điều độ. Để tránh đệ quy phải áp dụng hai phương pháp điều
độ khác nhau, thông thường là dùng phương pháp kiểm tra và xác lập (Test and Set) để xếp hàng sử dụng S, sau đó, khi đã được quyền sử dụng S – dùng kỹ thuật đèn báo để điều độ tiến trình qua đoạn găng.
Việc sử dụng phương pháp kiểm tra và xác lập sẽ dẫn tới hiện tượng chờ đợi tích cực. Nhưng đây là tình huống chấp nhận được vì khoảng thời gian mà một processor chiếm giữ S là không lớn. S bây giờ là một bản ghi, tối thiểu có hai trường: trường số lượng S.q và trường đánh dấu S.flg.
Thủ tục P(S) có nội dung:
Cấm ngắt,
Kiểm tra quyền sử dụng Semaphore: while(S.flg) TS(S.flg);
S.p--;
if(S.q<0) {Đưa tiến trình đi xếp hàng;S.flg=true;Giải phóng ngắt;}
else {s.flg=true; Giải phóng ngắt;}
Thủ tục V(S) có nội dung:
Cấm ngắt,
Kiểm tra quyền sử dụng Semaphore: while(S.flg) TS(S.flg);
S.p++;
if(S.q<=0){Kích hoạt TT chờ đợi; S.flg=true;Giải phóng ngắt;}
6.2.3 – Xử lý lỗi
Việc phát hiện và khắc phục lỗi trong quá trình hoạt động của hệ thống là để đảm bảo hai tính chất:
Tính sẵn sàng,
Tính toàn vẹn.
Tính sẵn sàng là khả năng tiếp nhận và thực hiện các yêu cầu xử lý. Tính toàn
vẹn là duy trì mọi thành phần có trong danh mục quản lý hoạt động bình thường.
Từ các tính chất chung của hệ điều hành có thể thấy rằng tính sẵn sàng tương đối
dễ đảm bảo. Việc đảm bảo tính toàn vẹn phức tạp hơn nhiều, nhất là trong hệ thống nhiều processors. Với các thiết bị khác, để kiểm tra tình trạng của nó hệ thống chỉ cần gửi tín hiệu kết nối (“Tín hiệu bắt tay”). Kết quả phản hồi sẽ cho phép đánh giá đúng tình trạng thiết bị. Với processor cơ chế “tín hiệu bắt tay” không thích hợp.
Tín hiệu trả lời có thể không nhận được vì lý do phocessor được hỏi bị hỏng, nhưng cũng có thể vì nó đang bận xử lý tiến trình của mình. Để nhận biết thực trạng processors người ta thường dùng cơ chế “Báo cáo”. Một vùng bộ nhớ được
sử dụng làm bản đồ đánh dấu, mỗi byte tương ứng với một processor. Định kỳ, sau một khoảng thời gian cố định processor phải gửi 1 về byte tương ứng của mình. Hệ thống sẽ kiểm tra và xóa 0 bản đồ. Nếu khi kiểm tra thấy một byte nào đó vẫn bằng
0 thì có nghĩa là processor tương ứng đang có sự cố kỹ thuật. Hệ thống sẽ áp dụng các biện pháp để kích hoạt lại processor hoặc tạm thời loại bỏ nó, tái cấu trúc hệ thống.
6.3 – Các vấn đề của hệ thống trong môi trường mạng
Việc sử dụng Intenet ngày càng phổ biến và đã trở thành một tiêu chí đánh giá mức phát triển của xã hội. Các hệ thống ngày nay không còn hoạt động đơn lẻ mà trở thành một bộ phận của mạng rộng WAN (Wide Area Network). Việc khai thác
hệ thống trong môi trường phân tán làm nảy sinh một số vấn đề mới cần phải giải quyết. Một số vấn đề lớn là:
– Mức độ phân tán: hiện nay nhiều hệ thống đã cho phép người dùng lưu trữ
dữ liệu riêng của mình dưới dạng bản sao dự phòng để có thể khôi phục hoặc truy cập sử dụng ở bất cứ nơi nào có thể kết nối Intenet. Điều này tạo thuận tiện lớn cho người dùng nhưng chưa làm nảy sinh các vấn đề về lý thuyết và cũng chưa mang lại thay đổi về chất lượng trong xử lý thông tin. Người ta đang tiến dần tới môi trường hệ điều hành phân tán: các thành phần của hệ điều hành được lưu trữ chủ yếu ở các server mạnh. Chế độ khai thác online cho phép chỉ cần lưu trữ phần nhân trên máy của người dùng. Vấn đề đặt ra là thành phần nào và tỷ lệ bao nhiêu cần giữ lại để đảm bảo hệ thống vẫn hoạt động hiệu quả;
– Gọi thủ tục từ xa: Việc khai thác online các phần mềm làm xuất hiện một thành phần bắt buộc mới trong hệ thống: phần mềm đảm bảo đồng bộ dữ liệu để thực hiện RPC và RI. Việc xử lý lỗi vẫn là một vấn đề cản trở hiệu quả và tính an toàn trong việc khai thác phần mềm online;
– Đồng bộ thời gian: Khi làm việc trên mạng rộng, việc đảm tính lô gic thời gian đối với công tác điều khiển không còn đơn giản như việc trao đổi thông báo hay tải hoặc nạp file. Tính lô gic là điều không thể bỏ qua trong các suy diễn lô gic của hệ thống trí tuệ nhân tạo;
– Hệ thống quản lý file không đồng nhất: mỗi thành phần của hệ thống quản
lý file và đặc biệt là các phương pháp truy nhập AM phải có khả năng nhận dạng,
thích nghi đồng thời với nhiều loại cơ sở dữ liệu và hệ quản trị cơ sở dữ liệu kiểu
tổ chức khác nhau cả về mặt tổ chức lô gic lẫn thiết bị vật lý khác nhau;
– Truyền thông giữa các hệ thống: các vấn đề mã hóa, giải mã, xử lý lỗi đối với các hệ thống điều khiển hoạt động trong chế độ thời gian thực đòi hỏi phải có các giải thuật riêng có tính hiệu quả cao;
– Tương tác giữa các hệ thống: Hệ điều hành là hệ thống tự động hóa, đòi hỏi
có sự đối thoại. Việc đối thoại không còn đơn giản giữa người dùng và hệ thống
mà phải đảm bảo cả khả năng đối thoại giữa các hệ thống với nhau.
6.4 - WINDOWS API
Những nét cơ bản về Windows API
a – Khái niệm API
API viết đầy đủ là Application Programming Interface - giao diện lập trình
ứng dụng. Một API thông thường chứa một hay nhiều thư viện liên kết động cung cấp các hàm cụ thể. Thư viện liên kết động là các file chứa các hàm mà có thể được gọi từ bất kỳ một ứng dụng nào chạy trên Microsoft Windows. Trong khi
chạy, một hàm trong thư viện liên kết động được liên kết động đến một ứng dụng gọi nó. Khi nhiều ứng dụng gọi cùng một thư viện liên kết động thì nó chỉ được tạo
ra đúng một lần trong bộ nhớ.
Có thể hình dung cơ chế điều khiển của các API như sau:
Thông thường, API được viết bởi các ngôn ngữ C/C+ + hoặc trong thư viện động có thể được gọi bởi các ngôn ngữ khác như Visual Basic.
API được biết đến nhiều nhất là trong Windows API . Bắt đầu được sử dụng từ Windows 95 trên nền tảng 32 bit cho đến nay là 64 bit với Windows Vista, API đã
thực sự mang đến một sức sống mới cho các ứng dụng. Thành công trong việc sử dụng Windows API ở chỗ chúng ta có thể phát triển các ứng dụng chạy thành công trên mọi phiên bản Windows. Mỗi ứng dụng Windows tương tác với Windows API
trực tiếp hay gián tiếp. Windows API làm cho mọi ứng dụng chạy trên Windows
đều được “đối xử” bình đẳng.
b – Quá trình phát triển của Windows API
Có nhiều phiên bản khác nhau của API mà Microsoft đã công bố. Hiện nay có
5 loại khác nhau của Microsoft Windows API. Đó là :
Thứ nhất là Win16 API
Thứ hai là Win32 API được sử dụng trên Windows 9x, Windows NT, Windows CE.
Hình 6.3. Cơ chế điều khiển API.
Thứ ba là Windows 3.1 API cho phép các ứng dụng chạy trên môi trường
Windows 3.1. Những API này được gọi là Win32s (“s” thay thế cho subset)
Thứ tư là một bộ phận của Win32 API được thiết kế cho Windows CE. Cuối cùng là API gốc của Windows NT (Windows NT’s native API).
c – Win32 API
Win32 API có lẽ là phổ biến nhất trong số các Windows API. Đơn giản là vì
nó được sử dụng trong các hệ điều hành quan trọng của Microsoft: Windows 95/98/2000/XP… Trong đó, có trên 1000 lời gọi API trong bản đầy đủ của Win32 API. Hai tập con là Win32s và Win32 API cho Windows CE đều được lấy ra từ một
phần của bản đầy đủ. Mỗi lời gọi API đều có hai phiên bản khác nhau làm cho bản đầy đủ trở nên rất lớn. Hai loại đó là:
Loại hỗ trợ kiểu ký tự ANSI là kiểu mà mỗi ký tự được biểu diễn bởi 1 byte. Loại hỗ trợ Unicode mà mỗi ký tự được biểu diễn bằng 2 byte.
Chuỗi ANSI kết thúc bằng ký tự NULL, còn chuỗi Unicode thay vì kết thúc
bằng NULL, nó lại có phần đầu chứa độ dài của chuỗi.
d – Ưu điểm của việc sử dụng Windows API
Có rất nhiều ưu điểm khi sử dụng API trong Windows. Có lẽ, ưu điểm đáng chú ý nhất là hầu hết các ứng dụng Windows có giao diện rất giống nhau. Cửa sổ
ứng dụng chạy có thể tạo ra bằng cách sử dụng một lời gọi API, cũng như các
menu, nút bấm, các điều khiển biên tập… Thiếu API, mỗi ứng dụng đều phải tự tạo
ra tất cả những cái này. Điều này dẫn đến ứng dụng trở nên lớn hơn. Khi một ứng dụng sử dụng API để tạo giao diện người dùng đồ họa nó sẽ tích hợp với hệ điều
hành, nghĩa là nó sẽ phát triển theo hệ điều hành.
Một ích lợi khác của việc gọi một API là API được xem là một thành phần cơ bản của hệ điều hành. Chính vì thế, các ứng dụng sẽ không cần phải bố trí lại nó nữa hay là dùng bất cứ một thư viện thứ ba nào nữa dẫn đến các ứng dụng sẽ nhỏ hơn và chạy nhanh hơn.
Như đã nói ở trên, API cũng cung cấp một lớp bảo vệ giữa hệ điều hành và các ứng dụng gọi đến hệ điều hành thông qua API. Đây là một lợi ích cả cho ứng dụng lẫn hệ điều hành.