Tải bản đầy đủ (.docx) (22 trang)

Bài tập lớn: NGUYÊN LÝ HỆ ĐIỀU HÀNH

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (770.56 KB, 22 trang )

TRƯỜNG ĐẠI HỌC MỞ HÀ NỘI
KHOA CÔNG NGHỆ THÔNG TIN
-----

BÁO CÁO BÀI TẬP LỚN
Mơn học: Ngun Lí Hệ Điều Hành
Đề số 01: Trình bày cơ chế hoạt động của hệ điều hành WINDOWS đảm
bảo mọi tiến trình đang hoạt động đều có đủ bộ nhớ để thực hiện
GVHD:
Sinh Viên TH:

Hà Nội, 2023
1


Lời mở đầu
Có lẽ khơng cần phải nói q nhiều về cụm từ hệ điều hành nữa. Dù là bất
cứ ai, khi mà đã hoặc đang sử dụng một chiếc máy tính để học tập, làm việc thì đều
ít nhiều từng nghe đến cụm từ "Hệ điều hành". Với phần lớn hệ thống máy tính, khi
mà người sử dụng bật thiết bị của họ lên, thì ngay sau đoạn logo của của hãng phần
cứng xuất hiện sẽ là sự xuất hiện của hệ điều hành. Với đa số người, biểu tượng cửa
sổ huyền thoại của hệ điều hành Microsoft Windows khơng có gì xa lạ nữa. Từ
những năm 90 của thế kỉ trước, những phiên bản đầu tiên như Windows 1.0,
Windows 3.1 ... cho đến Windows 95, 98, ngày nay là Windows 7, Windows 8.1
hay Windows 10, có đơi chút thay đổi về màu sắc, kiểu dáng nhưng vẫn là cái biểu
tượng quen thuộc - biểu tượng của hệ điều hành Windows. Thế giới máy tính ngày
nay, ngồi Windows cịn có thêm rất nhiều hệ điều hành khác cho phép người dùng
trải nghiệm, như macOS dành cho máy tính của hãng Apple, ChromeOS dành
riêng cho ChromeBook của Google, hoặc những hệ thống dựa trên
nhân Linux và BSD. Nhưng nhìn chung, cho dù là gì đi nữa thì cũng vẫn là hệ điều
hành máy tính, đều là một loại phần mềm đặc biệt có thể quản lý bộ nhớ, các tiến


trình cũng như cho phép các phần mềm khác hoạt động phía trên nó. Ngồi ra, hệ
điều hành cịn cho phép kết nối, giao tiếp (làm cầu nối) giữa các máy tính với nhau
mà khơng u cầu người sử dụng phải hiểu biết quá nhiều về kỹ thuật hay ngôn ngữ
của máy tính (ngơn ngữ nhị phân). Có thể nhận định rằng:

Khơng có hệ điều hành, các thiết bị máy tính là vô dụng.
Tại sao phải nghiên cứu về các hoạt động của hệ điều hành?
Hệ điều hành được tạo ra nhằm mục đích giúp con người có thể sử dụng máy
tính và làm việc trên nó, đơi khi là giải trí hoặc tương tác với các máy tính khác.
Khi nó ra đời, bản thân nó đã bao gồm cả việc khiến cho mọi người đều có thể sử
dụng máy tính, mặc dù việc này là không đảm bảo được chắc chắn nếu như hệ điều
hành đó khơng đi kèm một số tài liệu hướng dẫn sử dụng cần thiết. Và khi hệ điều
hành được sử dụng rộng rãi cũng không có nghĩa là nó hồn hảo. Đâu đó bên trong
hệ thống phức tạp này vẫn còn tồn tại vài lỗi, hoặc thậm chí vài lỗ hổng bảo mật có
thể khiến toàn bộ thiết bị cũng như các phần mềm khác bị trục trặc. Chính vì vậy,
cần có những đội hoặc nhóm chun biệt, có trình độ kỹ thuật cao được lập ra để
nghiên cứu về các vấn đề xoay quanh hoạt động của hệ điều hành, hiểu rõ về bản
chất của nó và giúp cho việc khắc phục các vấn đề liên quan đến nó dễ dàng hơn.
Bài viết này của mình được nhằm mục đích tìm hiểu, cũng như giới thiệu cho mọi
người những hoạt động cơ bản nhất của hệ điều hành, qua đó có thể giúp mọi người
nắm được cơ bản các vấn đề xử lý ở mức thấp hơn của hệ thống mà chúng ta vẫn
2


đang sử dụng. Mặc dù các hệ điều hành có thể khác nhau nhưng nhìn chung hoạt
động về cơ bản là giống nhau.

Hệ điều hành là gì?
Trước khi nói về hoạt động, mình sẽ giải thích cơ bản một chút về hệ điều hành.
Nhìn chung hệ điều hành là một phần mềm máy tính, nhưng khơng giống như các

phần mềm quen thuộc chúng ta hay dùng hàng ngày như trình duyệt, trình soạn thảo
văn bản hay trình biên tập file. Hệ điều hành là tập hợp của các chương trình có
chức năng quản lý phần cứng cũng như cung cấp các dịch vụ cần thiết cho các phần
mềm khác hoạt động. Ngoài ra, hệ điều hành hầu hết sẽ che giấu đi những xử lý
tính tốn phức tạp, tính tốn việc sử dụng tài nguyên cũng như cung cấp các chức
năng về cách ly (để tránh tối đa xung đột giữa phần cứng với phần mềm) và tạo một
vài lớp bảo vệ tránh tấn cơng từ bên ngồi (điển hình nhất là Firewall). Hệ điều
hành bao gồm 3 thành phần, 3 yếu tố cấu thành và 2 nguyên tắc thiết kế
 3 thành phần chính là File system (các tập tin hệ thống), Scheduler (bộ lập
lịch) và Device driver (trình điều khiển thiết bị).
 3 yếu tố cấu thành bao gồm Abstraction(yếu tố trừu tượng)(gồm có process,
thread, file, socket và memory), Mechanisms(yếu tố cơ chế)(gồm có create,
schedule, open, write, allocate) và Policies(yếu tố chính sách)(gồm
có LRU và EDF)
 2 ngun tắc thiết kế bao gồm: Separation of mechanism and policy (đảm
bảo thiết kế các cơ chế dễ đáp ứng việc bổ sung chính sách) và Optimization
for common case (Tối ưu cho các trường hợp phổ biến)
Ngay sau đây, mình sẽ trình bày một số hoạt động chính của hệ điều hành mà
mình tìm hiểu được, do số lượng nội dung khá nhiều nên mình sẽ chia bài viết làm
3 phần. Trong phần 1 này, mình sẽ nói về 3 vấn đề: (1) Quản lý tiến trình, (2)
Luồng và xử lý đồng bộ và (3) Cơ chế lập lịch.
1. Quản lý tiến trình
Một tiến trình về cơ bản là một chương trình đang ở trong trạng thái thực thi.
Việc thực thi của các tiến trình buộc phải diễn ra theo kiểu tuần tự. Đơn giản là,
danh sách các chương trình muốn thực thi sẽ được điền vào một tệp văn bản và khi
máy tính hoạt động, nội dung của tệp trở thành thứ tự thực thi các tiến trình tương
ứng, nội dung của tệp sẽ được thay đổi theo thời gian. Mặc dù đã từng có nhiều
nhận định cho rằng máy tính có thể xử lý song song, tuy nhiên đó là với các vi xử lý
hiện đại ngày nay có chứa nhiều nhân (core) hoạt động độc lập, còn thực tế các tiến
3



trình được quản lý bởi một nhân xử lý sẽ luôn hoạt động tuần tự, chẳng qua việc xử
lý diễn ra nhanh đến mức mắt người không thể thấy được. Các chương trình sẽ luân
phiên hoạt động để đánh lừa mắt người rằng chúng đang hoạt động song song ^^.
Khi một chương trình được nạp vào bộ nhớ và trở thành một tiến trình, nó có thể
được chia thành bốn phần - Stack, Heap, Data và Text. Hình ảnh sau đây cho thấy
bố cục đơn giản của một tiến trình bên trong bộ nhớ chính:

Trong đó,
 Stack: Chứa dữ liệu tạm thời, thường chỉ chứa dữ liệu dùng trong thời gian
rất ngắn hoặc dùng một lần.
 Heap: Đây là vùng bộ nhớ được cấp phát động cho một tiến trình trong thời
gian thực thi.

4


 Data: Chứa các biến global (biến dùng chung ở cấp tồn bộ chương trình) và
static (loại biến dùng chung ở cấp struct).
 Text: Bao gồm hoạt động hiện tại được biểu thị bằng giá trị của Program
Counter và nội dung của các thanh ghi trên vi xử lý.
Khi một tiến trình thực thi, nó có thể đi qua các trạng thái khác nhau. Các giai đoạn
này có thể khác nhau đối với các hệ điều hành khác nhau và tên của các trạng thái
này cũng khơng được chuẩn hóa cụ thể. Nhưng nhìn chung, một tiến trình có thể có
một trong năm trạng thái sau đây tại một thời điểm:

 Start: Trạng thái khi một tiến trình được tạo hoặc được khởi động lần đầu
tiên.
 Ready: Tiến trình đang chờ để được chuyển cho vi xử lý. Thường thì khi

một tiến trình khác đang chạy, CPU sẽ khơng cho phép một tiến trình khác
xen vào mà sẽ phải đợi tới lượt để đảm bảo tiến trình hiện tại đã xử lý xong
(lưu ý, tiến trình xử lý xong khơng có nghĩa là nó sẽ kết thúc). Trạng thái
này thường xuất hiện ngay sau trạng thái Start.
 Running: Trạng thái thực thi của tiến trình, khi bộ lập lịch Scheduler đã
chuyển nó cho vi xử lý, vi xử lý sẽ tiến hành thực hiện các tính tốn hoặc chỉ
dẫn trên nó.
 Wait: Trạng thái này xảy ra nếu tiến trình cần chờ một tài ngun để có thể
sử dụng, ví dụ như chờ người dùng nhập liệu hoặc chờ đợi tệp tin đang được
sử dụng bởi tiến trình khác. (Vấn đề này có thể được thảo luận liên quan đến
xử lý I/O)

5


 Terminated: Xảy ra khi một tiến trình đã xử lý xong hoặc bị ngắt bởi yêu
cầu từ hệ thống hoặc người dùng, trạng thái này cũng có thể được gọi
là Exit.
Để lưu dữ liệu hoạt động của các tiến trình, hệ điều hành sẽ sử dụng một cấu trúc
dữ liệu gọi là Process Control Block (PCB). Mỗi PCB được xác định bởi một số
nguyên dương (bắt đầu từ 1), gọi là Process ID (PID). PCB thường sẽ bao gồm các
thông tin như sau:

 Process ID (PID): Số nguyên xác định định danh của tiến trình.
 State: Trạng thái hiện tại của tiến trình (là một trong các trạng thái ở phần
trên)
 Pointer: Con trỏ lưu địa chỉ của tiến trình cha.
 Priority: Độ ưu tiên của tiến trình, giúp cho vi xử lý xác định thứ tự thực
hiện.
 Program Counter: Con trỏ lưu địa chỉ của chỉ dẫn tiếp theo giúp cho tiến

trình thực thi (là một phép tính hoặc tương tự).
 CPU Registers: Các thanh ghi tiến trình cần sử dụng để thực thi.
 I/O Information: Thông tin về các thiết bị đọc - ghi mà tiến trình cần sử
dụng
6


 Accounting Information: Chứa các thông tin về việc sử dụng CPU như thời
gian sử dụng, định danh…
2. Cơ chế lập lịch
Scheduling (lập lịch) là nhiệm vụ của bộ xử lý, nó sẽ tiến hành loại bỏ các tiến
trình đang chạy khỏi CPU và lựa chọn một danh sách tiến trình khác trên cơ sở một
chiến lược cụ thể. (Có thể danh sách mới sẽ bao gồm một số tiến trình trong danh
sách cũ). Lập lịch là một trong các tiêu chí của việc thiết kế hệ điều hành đa nhiệm
(multi-task). Các hệ điều hành này cho phép nhiều hơn một tiến trình được nạp vào
bộ nhớ để thực thi tại một thời điểm và tiến trình được nạp sẽ chia sẻ thời gian CPU
bằng cách sử dụng ghép kênh thời gian (multiplexing). Hệ điều hành duy trì tất cả
các PCB (đã nhắc đến ở cuối phần 1) trong Process Scheduling Queues (hàng đợi
lập lịch tiến trình). Đồng thời, mỗi trạng thái của tiến trình sẽ có một hàng đợi riêng
được duy trì (1 hàng đợi riêng cho ready, 1 hàng đợi riêng cho running...) và PCB
của tất cả các tiến trình trong cùng trạng thái thực thi được đặt trong cùng một hàng
đợi. Khi trạng thái của một tiến trình được thay đổi, PCB của nó sẽ bị xóa liên kết
khỏi hàng đợi hiện tại và được chuyển sang hàng đợi trạng thái mới (áp dụng thuật
toán danh sách liên kết cơ bản và cơ chế truy xuất theo địa chỉ). Ngoài các hàng đợi
theo trạng thái, hệ điều hành cịn duy trì một số hàng đợi như:
 Job queue: Hàng đợi lưu trữ mọi tiến trình đang ở trong hệ thống
 Ready queue: Chứa các tiến trình mới được khởi tạo.
 Device queue: Nếu một tiến trình cần chờ để có thể sử dụng thiết bị I/O thì
được đưa vào đây. Dưới đây là hình ảnh mơ ta một tiến trình từ khi bắt đầu
cho đến khi rời khỏi CPU:


7


Một số chính sách thường sẽ được sử dụng để lập lịch bao gồm FIFO, Round
Robin hoặc Priority ... Theo như trên hình, khi một tiến trình rời khỏi Ready
queue để bắt đầu thực thi, nó có thể có 4 khả năng:
 Request I/O: tiến trình cần xử lý liên quan đến đọc - ghi => Sẽ được chuyển
vào Device queue.
 Timeout: tiến trình đã dùng hết thời gian được cấp phép bởi CPU, sẽ được
đưa trở lại vào Ready queue để đợi đến lượt tiếp theo.
 Fork child: tiến trình tạo ra tiến trình con để tiếp tục xử lý, thường là các tiến
trình phức tạp hoặc cần xử lý đồng thời nhiều cơng việc.
 Interrupt: tiến trình bị gián đoạn do một vấn đề nào đó đột ngột phát sinh.
Một khái niệm khác có thể được nhắc tới là Context switch (kỹ thuật chuyển
ngữ cảnh). Đây là cơ chế lưu trữ và khôi phục trạng thái hoặc ngữ cảnh của CPU
trong PCB. Nó cho phép thực hiện tiến trình được bắt đầu lại từ cùng một trạng thái
kết thúc trước đó. Giống như khi ta ghi dữ liệu lên một file, sau đó khi sửa file này
ta sẽ tiếp tục với nội dung được lưu trước đó thay vì bắt đầu lại từ đầu. Kỹ thuật này
cho phép nhiều tiến trình cùng chia sẻ một CPU. Context switch là một tính năng
thiết yếu của hệ điều hành đa nhiệm. Khi bộ lập lịch chuyển CPU từ việc thực thi
một tiến trình này sang một tiến trình khác, trạng thái từ tiến trình đang chạy hiện
tại được lưu trữ vào PCB. Với lần thực thi tiếp theo, trạng thái cho tiến trình đó
được tải từ PCB của chính nó và được sử dụng để thiết lập bộ đếm chương trình,
các thanh ghi, v.v. Tại thời điểm đó, tiến trình thứ hai có thể bắt đầu thực thi. Việc
tính tốn Context switch rất chuyên sâu, vì thanh ghi và trạng thái bộ nhớ phải
được lưu và khôi phục lại đúng như giai đoạn thực thi trước đó. Để tránh thời gian
chuyển đổi quá lâu, một số hệ thống phần cứng sử dụng hai hoặc nhiều thanh ghi
của bộ xử lý để tính tốn. Khi tiến trình được chuyển đổi bởi Context switch, các
thông tin sau sẽ được lưu trữ để sử dụng: bộ đếm chương trình, thơng tin lập lịch,

giá trị thanh ghi cơ sở và giới hạn, thanh ghi hiện được sử dụng, trạng thái thay đổi,
thông tin I/O và thơng tin kế tốn.
3. Luồng và xử lý đồng bộ
Luồng (hay Thread) là một quy trình thực hiện thơng qua mã tiến trình, một
tiến trình có thể có nhiều luồng thực hiện song song. Nó có bộ đếm chương trình
(Program Counter) riêng để theo dõi chỉ dẫn nào sẽ thực hiện tiếp theo. Nó cũng có
các thanh ghi hệ thống chứa các biến làm việc hiện tại và một ngăn xếp chứa lịch sử
thực hiện các chỉ dẫn. Một luồng chia sẻ với các luồng ngang hàng của nó các
thông tin khác nhau như code segment, data segment và các file đang mở. Khi một
8


luồng làm thay đổi bất cứ thông tin nào kể trên, tất cả các luồng khác sẽ thấy.
Luồng cũng có thể được gọi là một tiểu tiến trình. Luồng cung cấp một cách để cải
thiện hiệu suất ứng dụng thông qua việc xử lý song song. Luồng đại diện cho một
cách tiếp cận phần mềm để cải thiện hiệu suất của hệ điều hành bằng cách giảm chi
phí xử lý. Một luồng tương đương với một tiến trình cổ điển. Mỗi luồng thuộc về
chính xác một tiến trình và khơng có luồng nào có thể tồn tại bên ngồi một tiến
trình (nói cách khác, khơng có tiến trình thì khơng có luồng). Luồng thường được
áp dụng trong các máy chủ network hoặc máy chủ web, đáp ứng thực thi song song
trong một hệ thống dùng chung bộ nhớ.

Hình ảnh trên cho thấy trừ là các thanh ghi và ngăn xếp ra thì mọi dữ liệu
khác đều được dùng chung bởi luồng, khác với tiến trình ở việc tất cả đều được
dùng riêng.
Các ưu điểm của luồng bao gồm:
 Giảm thời gian chuyển ngữ cảnh (**Context switch)
 Các tài nguyên được cung cấp đồng thời giữa các luồng của cùng một tiến
trình.
9



 Việc giao tiếp giữa các luồng luôn đạt hiệu quả cao (thay vì là tạo tiến trình
con)
 Tiết kiệm chi phí hơn việc dùng đa tiến trình.
 Cho phép tận dụng hiệu quả hơn với vi xử lý hiện đại.
4. Quản lý bộ nhớ
Quản lý bộ nhớ (hay Memory Management) là một chức năng của hệ điều
hành, đối tượng được nhắm đến chủ yếu là RAM (Random Access Memory). Các
công việc của quản lý bộ nhớ sẽ bao gồm:
 Trao đổi dữ liệu qua lại giữa bộ nhớ RAM và ổ đĩa cứng trong khi một tiến
trình được thực hiện.
 Theo dõi từng vị trí cụ thể của bộ nhớ, bất kể nó được cấp cho một tiến trình
nào đó đang hoạt động hoặc vùng nhớ đang khơng được sử dụng.
 Kiểm tra dung lượng bộ nhớ được phân bố cho các tiến trình.
 Quyết định thời gian được cấp phát bộ nhớ với mỗi tiến trình.
 Theo dõi bất cứ khi nào bộ nhớ được giải phóng hoặc không được phân bố,
và ngay lập tức cập nhật trạng thái tương ứng.

10


 Hình ảnh thể hiện 1 phần cấp phát bộ nhớ của hệ điều hành.
 Ban đầu vùng nhớ được cấp phát (allocate) cho Class A, sau đó Class B
cũng sử dụng vùng nhớ này. Nếu quá trình diễn ra bình thường, vùng nhớ sẽ
bị tiêu hủy (destroy) nếu cả A và B đều giải phóng. Nhưng trước đó, Class C
đã xin tạo ra một bản sao (copy) để sử dụng và sẽ giải phóng nó sau.
 Tất cả các cơng đoạn cấp phát, sử dụng, giải phóng hay tiêu hủy đều do bộ
phận Memory management của hệ điều hành xử lý.
Địa chỉ vùng bộ nhớ được cấp cho các tiến trình được lưu trữ tập trung trong

một khơng gian đặc biệt (gọi là process addresses space), đó cũng chính là tập hợp
các địa chỉ logic mà tiến trình tham chiếu đến các mã xử lý của nó. Lấy ví dụ: khi
sử dụng địa chỉ loại 32 bit, địa chỉ được phép cấp phát có thể nằm trong khoảng
từ 0 đến 0x7FFFFFFF, tương đương với (231−1231−1 số có thể sử dụng, với tổng
kích thước lý thuyết là khoảng 2GB. Cịn với địa chỉ 64 bit, số cấp phát sẽ nằm
trong khoảng từ 0 đến $0x7FFFFFFFFFFFFFFF$ (263−1263−1 giá trị, tối đa
khoảng 8 Exabytes ơ nhớ có thể sử dụng theo lý thuyết).
Hệ điều hành phải đảm nhiệm công việc ánh xạ (mapping) các địa chỉ logic (địa
chỉ trong process addresses space) thành các địa chỉ vật lý (địa chỉ thực tế
của RAM) tại thời điểm cấp phát bộ nhớ cho các chương trình hoặc tiến trình sử
dụng. Có ba loại địa chỉ được sử dụng trong một chương trình hoặc tiến trình trước
và sau khi bộ nhớ được cấp phát, đó là:
 Symbolic Addresses (địa chỉ tượng trưng): Được sử dụng trong mã nguồn
của chương trình, thường lưu trữ tên biến, hằng số và các nhãn chỉ dẫn.
 Relative Addresses (địa chỉ tương đối): Được chuyển đổi từ Symbolic
Addesses tại thời điểm biên dịch.
 Physical Addresses (địa chỉ vật lý): Chỉ được tạo ra khi các mã xử lý của
tiến trình được nạp vào bộ nhớ RAM. Địa chỉ ảo và vật lý là như nhau trong
các lược đồ liên kết địa chỉ thời gian biên dịch và thời gian tải. Địa chỉ ảo và
vật lý khác nhau trong các lược đồ ràng buộc địa chỉ thời gian thực hiện. Tập
hợp tất cả các địa chỉ logic được tạo bởi một chương trình được gọi là khơng
gian địa chỉ logic. Tập hợp tất cả các địa chỉ vật lý tương ứng với các địa chỉ
logic này được gọi là không gian địa chỉ vật lý.
Cả Physical Addresses và Logical Addresses (gồm 2 loại Symbolic và Relative)
đều có khơng gian lưu trữ và quản lý riêng, tương ứng gọi là physical addresses
spacec và logical addresses space. Hai loại địa chỉ này tương đương nhau tại thời
11


điểm biên dịch và cho đến khi nạp vào bộ nhớ RAM, còn khi thực hiện các mã xử

lý bên trong RAM thì sẽ khác nhau, tất cả có thể được quản lý bởi bộ
phận Memory management của hệ điều hành.
5. Quản lý vào / ra
Ở phần 1 của bài viết, em đã đưa ra một luận điểm 1 chiều, đó là:
Khơng có hệ điều hành, các thiết bị máy tính là vơ dụng
Nhưng khi tìm hiểu đến phần này, em nhận ra rằng luận điểm trên chưa hồn
tồn chính xác. Đúng là một cỗ máy nếu khơng có hệ điều hành quản lý (hoặc
khơng có con người thao tác) thì đều khơng làm nên việc gì cả. Nhưng ngược lại,
nếu chỉ có hệ điều hành mà khơng có các thiết bị phần cứng đi kèm tương ứng thì
cũng khơng làm nên được cơng việc gì cả. Thật ra, phần cứng máy tính và hệ điều
hành đi kèm cùng nhau, hỗ trợ nhau, bổ sung cho nhau để cùng đạt được mục tiêu
chung, khơng cái nào có thể bỏ đi được. Cũng giống như phân cấp trong xã hội loài
người, người thường và các nhà quản lý cũng không thể tách rời nhau. Nếu thiếu
các nhà quản lý, xã hội sẽ loạn và khơng thể kiểm sốt. Và ngược lại, nếu như tất cả
đều là quản lý, khơng có những người bình thường nữa, thì cũng khơng ai là quản
lý cả. Tóm lại:
Phần cứng máy tính và hệ điều hành đi kèm là không thể tách rời, cả hai
phối hợp với nhau tạo ra một chỉnh thể hồn thiện.
Chính vì vậy, một trong những công việc quan trọng của Hệ điều hành là quản
lý các thiết bị đầu vào / đầu ra (Input / Output) khác nhau, bao gồm chuột, bàn
phím, touchpad, ổ đĩa cứng, màn hình, các thiết bị USB, thiết bị kết nối mạng, thiết
bị âm thanh, máy in, v.v. Cần thiết phải có hệ thống I / O để nhận các yêu cầu vào /
ra dữ liệu của ứng dụng và gửi nó đến thiết bị vật lý, sau đó nhận lại các phản hồi từ
thiết bị và gửi đến ứng dụng xử lý tiếp. Thiết bị I / O có thể được chia thành hai
loại:
 Block devices (thiết bị khối): loại thiết bị mà trình điều khiển giao tiếp bằng
cách gửi toàn bộ khối dữ liệu. Ví dụ: Ổ đĩa cứng, thiết bị USB Flash, máy
ảnh USB ...
 Character devices (thiết bị ký tự): Loại thiết bị mà trình điều khiển giao tiếp
bằng cách gửi và nhận các ký tự đơn (byte hoặc mã 8 - octa). Ví dụ: các loại

card màn hình, card âm thanh hoặc các cổng serial port, parallel ...
Trừ CPU thì các thiết bị ngoại vi khác thường sẽ có một trình điều khiển đi
12


kèm (CPU có kiểu xử lý riêng và thường đi cùng với phần cứng, có bộ nhớ
độc lập)

Chính vì sự đặc biệt của CPU, nên hệ điều hành cũng tạo ra một số cách giao
tiếp đặc biệt để CPU và các thiết bị I/O có thể làm việc cùng nhau, có tất cả 3 cách
như sau:
5.1) Special instruction I/O
Cách này sử dụng các chỉ dẫn CPU được tạo riêng để điều khiển các thiết
bị I/O. Các chỉ dẫn này thường cho phép dữ liệu được đọc ghi trực tiếp với các thiết
bị (dữ liệu là mã nhị phân).
5.2) Memory mapped I/O
Kỹ thuật này dùng để chia sẻ không gian địa chỉ giữa các thiết bị I/O và bộ
nhớ. Thiết bị được kết nối trực tiếp với một số vị trí bộ nhớ chính nhất định để nó
có thể truyền khối dữ liệu đến / từ bộ nhớ mà không cần thông qua CPU.

13


Ưu điểm của kỹ thuật này là mọi chỉ dẫn có thể truy cập bộ nhớ đều có thể
được sử dụng để thao tác với thiết bị ngoại vi. I/O được ánh xạ vào bộ nhớ cũng
được sử dụng cho hầu hết các thiết bị I/O tốc độ cao.
5.3) Direct memory Access (DMA)
Các thiết bị xử lý chậm như bàn phím, chuột sẽ tạo ra sự gián đoạn
(interrupt) đến CPU sau khi mỗi byte dữ liệu được truyền đi (có thể là nhấn một
phím, thả một phím ...). Điều này có thể khơng gây nhiều ảnh hưởng. Nhưng nếu

như là một thiết bị xử lý nhanh, chẳng hạn như đĩa cứng, tạo ra sự gián đoạn cho
mỗi byte sẽ khiến cho hệ điều hành phải dành phần lớn thời gian để xử lý vấn đề
này, có thể gây lãng phí rất nhiều tài nguyên CPU. Vì vậy để giảm chi phí phát
sinh, kỹ thuật truy cập bộ nhớ trực tiếp (DMA) được áp dụng.
DMA có nghĩa là CPU sẽ cấp quyền cho các mô-đun I/O để đọc hoặc ghi
vào bộ nhớ mà không cần bản thân CPU phải thao tác. Mô-đun DMA tự điều khiển
việc trao đổi dữ liệu giữa bộ nhớ RAM và thiết bị I/O. CPU chỉ tham gia vào lúc
bắt đầu và kết thúc quá trình chuyển và chỉ bị gián đoạn sau khi toàn bộ khối được
chuyển đi. DMA cần một phần cứng đặc biệt gọi là DMA Controller (DMAC) để
quản lý việc truyền dữ liệu và xử lý truy cập vào bus của hệ thống. Các bộ điều
khiển được lập trình với các con trỏ nguồn và đích (nơi đọc / ghi dữ
liệu), counter để theo dõi số lượng byte được truyền và các cài đặt khác nhau.
Chúng bao gồm các loại I/O và bộ nhớ, các ngắt và trạng thái cho các chu kỳ CPU.
6. Cơng nghệ ảo hóa phần cứng
Ảo hóa (Virtualization) là công nghệ đặc biệt cho phép chúng ta tạo ra nhiều
môi trường mô phỏng hoặc tài nguyên chuyên dụng từ một hệ thống phần cứng vật

14


lý duy nhất (Tức là có thể coi như dùng được nhiều máy tính trên một phần cứng
duy nhất).
Một loại phần mềm đặc biệt tên là hypervisor có thể kết nối trực tiếp với
phần cứng và cho phép ta chia một hệ thống thành nhiều môi trường riêng biệt, độc
lập và an toàn được gọi là máy ảo (VM - Virtual Machine). Các máy ảo này dựa
vào khả năng của hypervisor để chia tách tài nguyên của máy ra khỏi phần cứng và
phân phối chúng một cách thích hợp. Máy vật lý ban đầu được trang bị bộ ảo hóa
được gọi là máy chủ lưu trữ, trong khi nhiều máy ảo sử dụng tài nguyên của nó
được gọi là máy khách. Những máy khách này coi các tài nguyên điện toán - như
CPU, bộ nhớ và lưu trữ - như một kho tài nguyên có thể dễ dàng di dời. Phần mềm

vận hành có thể kiểm sốt các phiên bản ảo hóa của CPU, bộ nhớ, lưu trữ và các tài
nguyên khác để máy khách nhận được tài nguyên khi chúng cần. Tóm lại, cơng
nghệ ảo hóa sẽ tạo ra các môi trường và tài nguyên bạn cần để làm việc độc lập từ
phần cứng chưa được sử dụng.

Kỹ thuật ảo hóa khá đa dạng, tuy nhiên có thể tóm lại bằng các loại chính sau:
6.1) Ảo hóa dữ liệu - Data Virtualization
Trước khi dữ liệu được ảo hóa thì chúng được tập hợp lại thành một nguồn
duy nhất theo các phân loại nhằm tránh xự lan tràn. Ảo hóa dữ liệu cho phép các
công ty coi dữ liệu là nguồn cung cấp động - cung cấp khả năng xử lý có thể kết
hợp dữ liệu từ nhiều nguồn, dễ dàng cung cấp nguồn dữ liệu mới và chuyển đổi dữ
liệu theo nhu cầu của người dùng. Các công cụ ảo hóa dữ liệu nằm trước nhiều
nguồn dữ liệu và cho phép chúng được coi là một nguồn duy nhất. Chúng cung cấp
15


các dữ liệu cần thiết theo yêu cầu vào đúng thời điểm cho bất kỳ ứng dụng hoặc
người dùng nào.
6.2) Ảo hóa máy tính để bàn - Desktop Virtualization
Thường hay bị nhầm lẫn với ảo hóa hệ điều hành. Loại này cho phép chúng
ta triển khai nhiều hệ điều hành trên một máy duy nhất. Ảo hóa máy tính để bàn cho
phép quản trị viên trung tâm (hoặc công cụ quản trị tự động) triển khai mơi trường
máy tính để bàn mô phỏng lên hàng trăm máy vật lý cùng một lúc. Khơng giống
như các mơi trường máy tính để bàn truyền thống được cài đặt, cấu hình và cập
nhật vật lý trên mỗi máy, ảo hóa máy tính để bàn cho phép quản trị viên thực hiện
cấu hình hàng loạt, cập nhật và kiểm tra bảo mật trên tất cả các máy tính để bàn ảo
(Cịn có thể gọi là One-for-All)
6.3) Ảo hóa máy chủ - Server Virtualization
Máy chủ là máy tính được thiết kế để xử lý khối lượng lớn các tác vụ cụ thể,
thường là giao tiếp logic hoặc ở các tầng thấp của mơ hình mạng. Máy chủ sẽ cho

phép các máy tính khác (như máy tính xách tay và máy tính để bàn) có thể thực
hiện nhiều tác vụ khác nhau thông qua một giao diện cụ thể. Ảo hóa một máy chủ
cho phép nó thực hiện nhiều chức năng cụ thể hơn và liên quan đến việc phân vùng
nó để các thành phần có thể được sử dụng để phục vụ nhiều chức năng.
6.4) Ảo hóa hệ điều hành - Operating System Virtualization
Loại ảo hóa này sẽ xảy ra tại nhân (kernel), cũng là trình quản lý tác vụ trung
tâm của các hệ điều hành. Nó là một cách hữu ích để chạy song song các môi
trường hệ điều hành khác nhau như Linux và Windows. Các doanh nghiệp cũng có
thể đưa các hệ điều hành ảo vào máy tính. Điều này sẽ đem lại một số tác dụng:
 Giảm chi phí phần cứng, vì các máy tính sẽ khơng u cầu khả năng vượt
trội.
 Tăng tính bảo mật, vì tất cả các trường hợp ảo đều có thể được theo dõi và
độc lập với máy tính chủ ban đầu (host).
 Giới hạn thời gian dành cho các dịch vụ CNTT như cập nhật phần mềm, bảo
trì máy chủ.
6.5) Ảo hóa các chức năng mạng - Network Function Virtualization
Kỹ thuật này phân tách các chức năng chính của mạng (như Directory
Services, File sharing và IP configuration) để chúng có thể được phân phối giữa các
16


môi trường khác nhau qua mạng. Khi các chức năng phần mềm độc lập với các máy
vật lý mà chúng từng hoạt động, các chức năng cụ thể có thể được đóng gói cùng
nhau thành một mạng mới và được gán cho một mơi trường riêng. Mạng ảo hóa làm
giảm số lượng các thành phần vật lý(như: switches, routers, servers, cables và hubs)
cần thiết để tạo ra nhiều mạng độc lập và nó đặc biệt phổ biến trong ngành viễn
thơng.
7. Inter-Process Communication
Trong hệ thống tiến trình của máy tính thì sẽ có hai loại: Independent (tiến
trình độc lập) và Cooporating (tiến trình hợp tác). Một tiến trình độc lập sẽ hoạt

động mà khơng bị ảnh hưởng bởi các tiến trình khác, tức là nó có thể ln đảm bảo
được cơng việc mà nó thực thi. Ngược lại, khi tiến trình hợp tác hoạt động, nó có
thể bị ảnh hưởng bởi các tiến trình liên quan, thậm chí có thể gây gián đoạn vơ thời
hạn. Nếu chỉ nhìn qua khái niệm, ta có thể thấy rõ ràng tiến trình độc lập sẽ thực thi
hiệu quả hơn, do nó khơng phải phụ thuộc vào cái gì ngồi bản thân tập lệnh của
nó. Tuy nhiên, trong thực tế thì các tiến trình hợp tác mới thực sự là cái đem lại
hiệu quả cao. Do các vấn đề liên quan đến tốc độ, sự thuận tiện và tính mơ đun hóa
mà tiến trình hợp tác sẽ đem lại hiệu quả tốt hơn. Khái niệm Inter-Process
Communication (IPC) ra đời như là một cơ chế cho phép các tiến trình giao tiếp
với nhau và đồng bộ hóa các hành động của chúng. Q trình giao tiếp có thể giúp
các tiến trình biết được trình trạng hoạt động, cũng như tình trạng sử dụng tài
nguyên để phân bổ thời gian hợp lý. Các tiến trình có thể giao tiếp với nhau theo hai
cách: Shared Memory (chia sẻ bộ nhớ) và Message Parsing (phân tích thơng điệp).
7.1) Phương pháp Shared Memory
Giả sử ta có hai tiến trình, phân biệt gọi là Producer (tiến trình sản xuất)
và Consumer (tiến trình tiêu thụ). Tiến trình sản xuất tạo ra một số vật phẩm và tiến
trình tiêu thụ sẽ dùng những vật phẩm này. Hai tiến trình chia sẻ một khơng gian
chung hoặc vị trí bộ nhớ nào đó được gọi là bộ đệm. Vật phẩm nói trên sẽ được tiến
trình sản xuất lưu trữ trong bộ đệm này và tiến trình tiêu thụ sẽ lấy nó ra khi cần.
Vấn đề này sẽ có 2 hướng giải quyết:
 Cái đầu tiên cịn được biết đến là Unbounded Buffer Problem, trong đó tiến
trình sản xuất có thể tiếp tục tạo ra các vật phẩm và khơng có giới hạn về
kích thước của bộ đệm.
 Ngược lại, cái thứ hai được gọi là Bounded Buffer Problem, trong đó tiến
trình sản xuất chỉ có thể tạo ra tối đa một số lượng vật phẩm nhất định. Sau
đó nó cần chờ tiến trình tiêu thụ lấy ra dùng để giải phóng khơng gian bộ
17


đệm và tiếp tục tạo ra vật phẩm mới. Về phía cịn lại, tiến trình tiêu thụ nếu

như khơng thấy có vật phẩm mình cần trong bộ đệm thì nó sẽ đợi cho đến
khi tiến trình sản xuất tạo ra.

7.2) Phương pháp Message Parsing
Với phương pháp này, các tiến trình sẽ giao tiếp với nhau mà không cần sử dụng
bất kỳ loại bộ nhớ dùng chung nào. Nếu hai tiến trình p1 và p2 muốn giao tiếp với
nhau, chúng sẽ tiến hành như sau:
 Thiết lập một liên kết truyền thông (nếu liên kết đã tồn tại, không cần thiết
lập lại liên kết.)
 Bắt đầu trao đổi các thông điệp bằng cách sử dụng các giao tiếp cơ bản. Đó
là:
o Send: gửi thông điệp, bao gồm 2 tùy chọn: send(message, destination)
và send(mesage)
o Receive: nhận thông điệp, bao gồm 2 tùy chọn: receive(message,
host) và receive(message)

18


Kích thước thơng điệp có thể được cố định hoặc cũng có thể được thay đổi,
mỗi cách có ưu điểm và nhược điểm riêng. Kích thước cố định thì dễ dàng hơn cho
nhà thiết kế hệ điều hành nhưng phức tạp hơn đối với lập trình viên. Ngược lại, nếu
nó có thể thay đổi, thì nó dễ dàng cho lập trình viên nhưng phức tạp đối với người
thiết kế hệ điều hành. Một thơng điệp tiêu chuẩn có hai
phần: header và body. Header được sử dụng để lưu trữ loại thơng điệp (type), định
danh đích, định danh nguồn, độ dài thông điệp và thông tin điều khiển. Thông tin
điều khiển chứa thơng tin như phải làm gì nếu hết dung lượng bộ đệm, số thứ tự và
mức độ ưu tiên của nó. Nói chung, thơng điệp được gửi bằng cách sử dụng
kiểu FIFO (kiểu hàng đợi)
8. Distributed File Systems

Distributed File Systems (hệ thống tệp tin phân tán) sử dụng mơ
hình client/server-based application. Nó cho phép máy khách truy cập và xử lý dữ
liệu được lưu trữ trên máy chủ như thể nó nằm trên máy tính của chính họ. Khi
người dùng truy cập một tệp trên máy chủ, máy chủ sẽ gửi cho người dùng một bản
sao của tệp, được lưu trong bộ nhớ cache trên máy tính của người dùng trong khi dữ
liệu đang được xử lý và sau đó thơng tin xử lý được trả về máy chủ. Cách tốt nhất là
một hệ thống tệp phân tán tổ chức các dịch vụ tệp và thư mục của các máy chủ
riêng lẻ thành một thư mục chung theo cách mà việc truy cập dữ liệu từ xa không
19


cụ thể theo vị trí mà giống hệt với bất kỳ máy khách nào. Tất cả các tệp có thể truy
cập được đối với tất cả người dùng của hệ thống và tổ chức tệp toàn cầu được phân
cấp và dựa trên thư mục. Hay nói cách khác, với góc nhìn của các máy khách thì hệ
thống tệp tin và thư mục là như nhau.

Do có nhiều máy khách có thể truy cập cùng một dữ liệu tại cùng một thời
điểm, nên máy chủ phải có cơ chế (chẳng hạn như duy trì thơng tin về thời gian truy
cập) tổ chức hợp lý với các bản cập nhật để máy khách luôn nhận được phiên bản
dữ liệu mới nhất và tránh sự xung đột phát sinh xuống mức tối thiểu. Các hệ thống
tệp phân tán thường sử dụng sao chép tệp hoặc cơ sở dữ liệu (phân phối các bản sao
dữ liệu trên nhiều máy chủ) để bảo vệ chống lại lỗi truy cập dữ liệu.
Một vài ví dụ về hệ thống tệp phân tán hiện nay: NFS (Network File System,
của Sun Microsystem), NetWare (của Novell), DFS (Distributed File System,
của Microsoft).
9. Distributed Shared Memory
Distributed Shared Memory (bộ nhớ chia sẻ phân tán, DSM) là một thành
phần quản lý tài nguyên của hệ điều hành phân tán, thực hiện mơ hình bộ nhớ dùng
chung trong các hệ thống phân tán, không có bộ nhớ chia sẻ vật lý. Bộ nhớ dùng
chung này cung cấp một không gian địa chỉ ảo được chia sẻ giữa tất cả các máy tính

20



×