Tải bản đầy đủ (.doc) (37 trang)

CÁC CƠ CHẾ AN TOÀN CƠ BẢN CSDL

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 (415.74 KB, 37 trang )

Chơng 2
Các cơ chế an toàn cơ bản
2.1. Giới thiệu
2.2. Nhận dạng/xác thực ngời dùng
2.3. Bảo vệ bộ nhớ
2.3.1 Địa chỉ rào
2.3.2 Tái định vị
2.3.3 Bảo vệ dựa vào thanh ghi
2.3.4 Phân trang
2.3.5 Phân đoạn
2.4. Kiểm soát truy nhập tài nguyên
2.5. Các cơ chế kiểm soát luồng
2.6. Sự cách ly
2.7. Các chuẩn an toàn
2.7.1 Tiêu chuẩn DoD
2.7.2 Phân loại một số hệ thống theo tiêu chuẩn DoD
2.8. Thiết kế các hệ điều hành an toàn
Nội dung
Trong chơng này, chúng ta sẽ quan tâm đến các vấn đề sau:
- Mt s c ch bo v ti nguyờn mc h iu hnh.
- Cỏc ci tin i vi c ch an ton c bn dnh cho h iu hnh.
- Thit k h iu hnh an ton.
- Chun an ton DoD.

1


2.1 Các định nghĩa hệ điều hành
Trớc hết chúng ta tìm hiểu khái niệm hệ điều hành.
Hệ điều hành là một chơng trình đóng vài trò trung gian trong việc giao tiếp
giữa ngời sử dụng và phần cứng máy tính. Mục tiêu của hệ điều hành là cung cấp


một môi trờng cho phép ngời sử dụng phát triển và thực hiện các ứng dụng của họ
một cách dễ dàng và hiệu quả.
Hệ điều hành là một phần quan trọng của hầu hết các hệ thống máy tính. Sau
đây là kiến trúc điển hình của một hệ thống máy tính bao gồm các mức sau:
- Phần cứng: bao gồm CPU, bộ nhớ, các thiết bị nhập xuất đó là các tài
nguyên của máy tính.
- Chơng trình cơ sở (phần mềm hệ thống): đây là phần mềm hệ thống trong
ROM đợc nạp cố định trong bộ nhớ không thể thay đổi đợc.
- Chơng trình dịch hợp ngữ (assembler)
- Hệ điều hành (OS): iu khin v phi hp vic s dng phn cng cho
nhng ng dng khỏc nhau ca nhiu ngi dùng khỏc nhau.
- Các ứng dụng.
Hệ điều hành đóng vai trò nh là một giao diện giữa các chơng trình ứng dụng
và tài nguyên hệ thống.
Các ứng dụng
Hệ điều hành
Chơng trình dịch hợp ngữ
Chơng trình cơ sở
Phần cứng

Các mức
tợng
Hệ điều hành quản lý tấtHình
cả tài2.1nguyên
hệ trừu
thống
(bộ nhớ, các file, thiết bị
của
hệ
thông

máy
tính
vào/ra, bộ xử lý) và tối u hoá việc sử dụng tài nguyên cho các chơng trình ứng dụng
khác nhau.
Các chức năng của hệ điều hành đợc tóm tắt nh sau:
- Quản lý tiến trình và bộ xử lý:
Hỗ trợ các tiến trình đồng thời của ngời dùng và hệ thống
Đảm bảo tối đa hiệu năng sử tài nguyên hệ thống
2


- Quản lý tài nguyên:
OS cấp phát các tài nguyên hệ thống nh: bộ nhớ, file, thiết bị vào/ra cho
ứng dụng
OS giải quyết vấn đề xung đột giữa các tiến trình sử dụng chung tài
nguyên.
- Giám sát:
OS tơng tác trực tiếp với các chơng trình ứng dụng
Hỗ trợ thực hiện các ngôn ngữ ứng dụng khác nhau
Kiểm soát các chơng trình đang chạy, không cho phép sử dụng trái phép
tài nguyên hệ thống
Chống can thiệp trái phép vào các vùng nhớ
Hệ điều hành không ngừng phát triển từ một chơng trình đơn giản đến các hệ
thống phức tạp, hỗ trợ kiến trúc đa nhiệm, đa xử lý, phân tán và xử lý thời gian
thực.
Chức năng an toàn của hệ điều hành
Ngờimột
dùng
Hình 2.2 minh hoạ các chức năng của
OS trong việc hỗ trợ an toàn, trong

đó trình bày các giai đoạn cơ bản có trong một phiên làm việc của ngời dùng, trong
một hệ thống đa ngời dùng.
Quản lý hệ
Cấp phát tài
nguyên

Đăng nhập

Nhận dạng/Xác thực

Bảo vệ bộ nhớ

Thực hiện chơng
trình

Quản lý vào ra

Kiểm soát
truy nhập
tài nguyên

Quản lý và
phát hiện lỗi

thống file

Đăng xuất

Kiểm toán


Điều khiển
luồng

Các chức năng dịch vụ của OS
Các chức năng an toàn của OS
3

Hình 2.2 Phiên làm việc của ngời dùng


- Đầu tiên ngời dùng đăng nhập để tạo kết nối tới hệ thống, hệ thống sẽ kiểm
tra tính duy nhất của ngời dùng bằng cơ chế nhận dạng/xác thực.
- Khi qua đợc giai đoạn đăng nhập:
Ngời dùng làm việc với các file -> quản lý hệ thống file
Chạy chơng trình: chạy chơng trình cần vùng nhớ cấp phát trớc -> cần đợc bảo vệ tránh sự can thiệp của các chơng trình khác -> Bảo vệ bộ nhớ.
Một chơng trình chạy có thể thực hiện các thao tác vào/ra -> Quản lý
vào/ra.
- Hệ điều hành hỗ trợ truy nhập đồng thời vào tài nguyên, do đó nó có thể giải
quyết xung đột xảy ra -> Cấp phát truy nhập tài nguyên và kiểm soát truy
nhập tài nguyên.
- Quản lý và phát hiện lỗi: khi OS thấy chơng trình có lỗi, nó có thể kết thúc
chơng trình ngay.
- OS lu tất cả các thao tác mà ngời dùng thực hiện trên tài nguyên của hệ
thống -> Kiểm toán.
- Cuối cùng ngời dùng ngừng phiên làm việc và cắt kết nối tới hệ thống ->
đăng xuất.
Các chức năng hớng hỗ trợ an toàn của hệ điều hành, bao gồm:
- Nhận dạng/xác thực ngời dùng
- Bảo vệ bộ nhớ
- Kiểm soát truy nhập vào tài nguyên

- Kiểm soát luồng
- Kiểm toán

4


2.2 Nhận dạng/ xác thực ngời dùng
Yêu cầu đối với một hệ thống an toàn là phải nhận dạng chính xác ngời sử dụng,
do đó ta tìm hiểu xem chức năng an toàn nhận dạng/xác thực ngời dùng của OS
thực hiện nh thế nào.
1. Các hệ thống xác thực dựa vào thông tin ngời dùng biết
- Các hệ thống dựa vào mật khẩu: Ngời dùng đợc nhận dạng thông qua một
chuỗi ký tự bí mật (mật khẩu), chỉ có ngời dùng và hệ thống biết.
- Các hệ thống dựa vào hỏi đáp: Ngời dùng đợc nhận dạng, thông qua việc trả
lời một tập hợp các câu hỏi mà hệ thống đặt ra. Các câu hỏi đợc đặt riêng
cho từng ngời dùng và chủ yếu dựa vào các hàm toán học. Hệ thống sẽ tính
toán các hàm này sau khi nhận đợc các giá trị đa vào từ ngời dùng và so
sánh kết quả với nhau. Các hàm mẫu nh sau:
Các hàm đa thức (ví dụ, f(x) = x3+ x2- x + 4): giá trị của biến x do hệ
thống cung cấp, ngời dùng nhận đợc x sẽ tính giá trị hàm f(x) và gửi kết
quả cho hệ thống. Hệ thống sẽ kiểm tra lại kết quả này xem có chính xác
hay không.
Các hàm dựa vào việc biến đổi chuỗi ký tự: Hệ thống chuyển cho ngời
dùng một chuỗi ký tự để thay đổi, theo một lợc đồ đã biết (ví dụ,
f(a1a2a3a4a5) = a4a3a5a2a1). Khi đó ngời dùng phải gửi lại kết quả biến đổi
chuỗi ký tự cho hệ thống, sau đó hệ thống sẽ kiểm tra lại kết quả này
bằng hàm f xem có chính xác hay không.
Các hàm dựa vào các thuật toán mật mã đơn giản: sao cho từ một giá trị
mã hóa mà hệ thống đã cho trớc, ngời dùng giải mã và sử dụng nó để tính
toán một hàm, sau đó mã hoá kết quả, ví dụ f(E(x)) = E(D(E(x))2). ở đây

hệ thống cung cấp cho ngời dùng giá trị đã mã hóa E(x), ngời dùng phải
giải mã D(E(x)) sau đó tính hàm bình phơng [D(E(x))]2, cuối cùng mã
hóa giá trị này E(D(E(x))2). Sau đó ngời dùng gửi kết quả này tới hệ
thống, hệ thống sẽ kiểm tra kết quả này bằng hàm f.
- Các hệ thống xác thực hai lần bắt tay : hệ thống tự giới thiệu mình với ngời dùng, còn ngời dùng tự xác thực ngợc trở lại hệ thống. Xác thực hệ thống
dựa vào các thông tin chỉ có ngời dùng biết (ví dụ, ngày, giờ và đoạn chơng
trình của phiên làm việc cuối). Xác thực ngời dùng dựa vào mật khẩu.
Về cơ bản, các hệ thống xác thực dựa vào thông tin ngời dùng là các hệ thống
dựa vào thẻ: thẻ từ có chứa một mã vạch, hoặc mã vạch từ, hoặc một bộ vi xử lý.
Hệ thống dùng thiết bị đọc để xác thực các thẻ từ đa vào, đôi khi thẻ này đợc gắn
kèm với một mã bí mật (secret code).
2. Các hệ thống xác thực dựa vào đặc điểm của ngời dùng, bao gồm:

5


- Các hệ thống nhận dạng qua ảnh: ảnh của ngời dùng đợc lu giữ. Việc nhận dạng
đợc thực hiện bằng cách đối chiếu ngời sử dụng với ảnh của anh ta đợc lu giữ hiển
thị trên màn hình;
- Các hệ thống nhận dạng qua dấu vân tay: Việc nhận dạng đợc thực hiện bằng
cách đối chiếu dấu vân tay của ngời dùng với dấu vân tay đợc lu giữ;
- Các hệ thống nhận dạng qua đặc trng của chữ ký viết bằng tay: Việc nhận dạng
đợc thực hiện dựa vào độ nhấn của tay ngời dùng khi ký trên một thiết bị thích hợp.
- Các hệ thống nhận dạng qua tiếng nói: So sánh giọng nói của ngời dùng với
giọng nói đợc lu giữ.
- Các hệ thống nhận dạng qua đặc điểm võng mạc-đồng tử): Việc nhận dạng đợc
thực hiện bằng cách kiểm tra các đặc điểm võng mạc của ngời dùng.
=> Các hệ thống xác thực này có độ phức tạp cao hơn và cũng đắt hơn về chi phí so
với các hệ thống xác thực dựa vào thông tin ngời dùng biết đã đợc liệt kê trớc, do
sự phức tạp khi đối chiếu các đặc điểm đợc lu giữ của cá nhân với con ngời thực tế.

Do đó, xác xuất từ chối ngời dùng hợp pháp cao hơn. Do vậy, việc sử dụng nó chỉ
thích hợp trong các môi trờng an toàn cao và thiết yếu.
Không phải tất cả các cơ chế nêu trên đều đợc thực hiện tại mức OS, cơ chế xác
thực dựa vào mật khẩu đợc sử dụng phổ biến nhất. Chúng ta sẽ đi sâu xem xét các
cơ chế này.
3. Xác thực dựa vào mật khẩu
Mật khẩu là một chuỗi ký tự bí mật (số hoặc chữ), chỉ có ngời dùng và hệ thống
biết, do đó hệ thống có khả năng nhận dạng duy nhất ngời dùng dựa vào việc xác
nhận tính hợp lệ của mật khẩu. Những vấn đề trong việc sử dụng mật khẩu phụ
thuộc vào việc chọn mật khẩu ban đầu, phụ thuộc vào khả năng khám phá mật khẩu
và phụ thuộc vào việc quản lý mật khẩu.
Các tiêu chuẩn đối với mật khẩu 'bí mật' là:
- Sử dụng ít nhất 8 ký tự, nói chung nên sử dụng các mật khẩu dài.
- Sử dụng cả số và chữ.
- Sử dụng cả chữ thờng và chữ in hoa.
- Sử dụng các ký hiệu bàn phím đặc biệt (ví dụ, &,@ và %).
- Ghép 2 từ không liên quan, sau đó cắt bớt từ mới thu đợc sao cho nó có độ
dài bằng n-1, với n là độ dài cho phép của mật khẩu, sau đó chèn thêm một
ký tự đặc biệt vào.
- Chọn các từ nớc ngoài.
- Sử dụng các chuỗi ký tự bàn phím, sao cho có thể lu giữ dễ dàng (ví dụ, sử
dụng 4 ký tự cuối của hàng 2; các chữ cái trong cột thứ 3 của bàn phím,v.v).

6


- Chọn các thuật ngữ liên quan đến hoạt động thể thao hoặc sở thích của một
ngời, sau đó ghép chúng lại.
- Thông thờng chọn các thuật ngữ dễ nhớ.
Ngời dùng nên lựa chọn mật khẩu phù hợp và sử dụng chúng chính xác và cẩn

thận. Đặc biệt, ngời dùng nên:
- Chọn mật khẩu tuân theo tiêu chuẩn trên
- Ghi nhớ mật khẩu của mình, không bao giờ đợc viết ra
- Không bao giờ để lộ mật khẩu của mình.
- Thay đổi mật khẩu thờng xuyên và định kỳ.
Vấn đề quản lý mật khẩu
Thông thờng, mật khẩu phải đợc lu giữ trong một hệ thống đa ngời dùng, nhằm
đáp ứng các hoạt động xác thực sau này, do đó mật khẩu phải lu trong một file do
hệ điều hành quản lý. Điều này dẫn đến tất cả các modul trong OS đều truy nhập đợc file mật khẩu, do đó ngời dùng có thể lợi dụng một số modul dễ bị tấn công của
OS để truy cập file này.
Các trở ngại này có thể đợc giải quyết trong một số hệ thống, bằng cách mã hoá
mật khẩu sử dụng các thuật toán mã hoá. Sau khi đợc tạo ra, mật khẩu đợc mã hoá
và lu giữ trong các file mật khẩu, ngời dùng có thể đọc nó nhng việc sửa đổi (chèn,
xoá, cập nhật) do OS thực hiện. Việc bảo vệ các mật khẩu này có hiệu quả hay
không phụ thuộc vào sự chọn lựa các thuật toán mã hoá, sao cho việc giải mã phức
tạp và tốn kém cả về thời gian và tính toán.
Nếu hai ngời sử dụng tình cờ lựa chọn cùng một mật khẩu, thì sẽ có hai bản mã
mật khẩu giống hệt nhau trong file mật khẩu. Khi đó hai ngời sử dụng này có thể
biết đợc mật khẩu của ngời kia. Do vậy cần thiết phải có các cơ chế mã hóa thích
hợp sao cho có thể thực hiện đợc tính duy nhất của mật khẩu.
=> Để giải quyết vấn đề tính duy nhất của mật khẩu ta có thể dùng kỹ thuật salt.
Kỹ thuật salt đợc sử dụng trong UNIX. Một salt là một số 12 bit đợc thêm vào
nh là phần mở rộng của một mật khẩu. Trong kỹ thuật này, một mật khẩu sẽ đợc kết
hợp với salt của nó, salt này đợc sinh ra dựa vào thời gian sinh ra và định danh của
tiến trình đang chạy. Vì thời gian sinh và định danh của tiến trình đang chạy của
từng ngời dùng sẽ khác nhau, do đó tham biến salt đợc sinh ra của từng ngời dùng
sẽ khác nhau. Điều này đảm bảo cho tính duy nhất của mật khẩu khi đợc mã hóa.

Salt


Mật khẩu

DES

Mật khẩu
mã hóa

Salt

File mật
khẩu
7


Hình 2.3 Kỹ thuật salt
Thuật toán mã hóa DES (Data Encryption Standard) đợc áp dụng trong UNIX
để kết nối mật khẩu/salt, kết quả đợc lu trong file mật khẩu cùng với salt tơng
ứng. Tại mỗi thời điểm, khi ngời sử dụng gõ mật khẩu của mình, hệ thống sẽ mã
hóa mật khẩu này kết hợp với salt đã đợc lu trong file mật khẩu, sau đó so sánh kết
quả mã hóa với mật khẩu đợc lu trong file mật khẩu. Nh vậy bằng cách sử dụng hệ
thống kiểm soát truy nhập vào file mật khẩu và sử dụng thuật toán mật mã để mã
hóa các mật khẩu, đã làm cho sự bảo vệ mức hệ điều hành tăng khả năng chống lại
những tiếp cận trái phép tới mật khẩu của ngời sử dụng.
Ngời dùng
gõ mật khẩu

Mật khẩu
mã hóa

File mật

khẩu

Salt

DES

Mật khẩu
mã hóa

So sỏnh

Hình 2.4 Kiểm tra mật khẩu bằng salt

2.3 Bảo vệ bộ nhớ
Trớc hết ta thấy rằng, bộ nhớ chính là thiết bị lu trữ duy nhất thông qua đó,
CPU có thể trao đổi thông tin với môi trờng bên ngoài, do đó vấn để tổ chức, quản
lý và bảo vệ bộ nhớ là một trong những nhiệm vụ trọng tâm hàng đầu của hệ điều
hành. Bộ nhớ chính đợc tổ chức nh một mảng một chiều các từ nhớ (word), mỗi từ
nhớ có một địa chỉ.
Các kiểu cơ chế phần cứng đợc sử dụng để bảo vệ và chia sẻ bộ nhớ có kiểm soát
là:
- Địa chỉ rào
- Tái định vị
8


- Các thanh ghi cơ sở/giới hạn
- Phân trang
- Phân đoạn
2.3.1 Địa chỉ rào

(Thông thờng một chơng trình đợc lu trữ dới dạng tập tin nhị phân trên đĩa có
thể xử lý. Để thực hiện chơng trình, cần nạp chơng trình vào trong bộ nhớ chính và
tạo lập tiến trình tơng ứng để xử lý.
- Các địa chỉ trong chơng trình nguồn chỉ là các địa chỉ tợng trng- địa chỉ
logic, để chuyển đổi các địa chỉ này thành các địa chỉ tuyệt đối trong bộ nhớ
chính, chơng trình phải trải qua nhiều giai đoạn xử lý.
+ Địa chỉ logic - địa chỉ ảo: là tất cả các địa chỉ do bộ xử lý sinh ra.
+ Địa chỉ vật lý là địa chỉ thực tế mà trình quản lý bộ nhớ nhìn thấy và
thao tác.
+ Không gian địa chỉ là tập hợp tất cả các địa chỉ ảo phát sinh bởi một chơng trình.
+ Không gian vật lý là tập hợp tất cả các địa chỉ vật lý tơng ứng với các
địa chỉ ảo.
+ MMU (memory management unit) là một cơ chế phần cứng để chuyển
đổi địa chỉ ảo thành địa chỉ vật lý tại thời điểm xử lý.)

9


- Địa chỉ rào đánh dấu ranh giới giữa vùng nhớ dành cho hệ điều hành (thờng là
vùng nhớ thấp) và vùng nhớ cho tiến trình ngời dùng.
0
Hệ điều hành

Thanh ghi rào
Giá trị địa
chỉ rào

Địa chỉ rào
Vùng nhớ ng
ời dùng


Vùng nhớ sẵn
dùng
0xFFF

Hình 2.5 Bảo vệ dựa vào địa chỉ rào
Khi đó cần phải bảo vệ bộ nhớ dành cho hệ điều hành tránh khỏi sự xâm phạm,
tác động của tiến trình ngời dùng. Cơ chế dựa vào địa chỉ rào sẽ so sánh địa chỉ mà
tiến trình ngời dùng truy xuất với giá trị của địa chỉ rào, nếu lớn hơn thì đây là một
tham chiếu chính xác tới vùng nhớ của ngời dùng, ngợc lại không phải là một tham
chiếu chính xác, chơng trình bị dừng đa ra một thông báo lỗi tới ngời dùng. Chú ý,
địa chỉ rào là địa chỉ vật lý. Khi ngời dùng truy xuất đến một địa chỉ logic, CPU sẽ
chuyển địa chỉ logic này thành địa chỉ vật lý A và so sánh với địa chỉ rào FA.
Giá trị của địa chỉ rào có thể đợc lu trong một thanh ghi rào. Khi đó, giá trị rào
có thể thay đổi động tuỳ thuộc vào sự thay đổi của kích cỡ OS, đồng thời OS sẽ lu
giá trị mới của địa chỉ rào vào trong thanh ghi. Các địa chỉ trong chơng trình ngời
dùng đợc so sánh với giá trị lu trong thanh ghi rào xem có hợp lệ hay không.

Địa chỉ rào
(FA)
0
Hệ điều hành

CPU

Địa chỉ
(A)

A>F
A


Sai

Vùng nhớ ng
ời dùng

FA

Đúng
Vùng nhớ sẵn
dùng
0xFFF

Lỗi

10


Hình 2.6 Truy nhập vào bộ nhớ bằng địa chỉ rào
Nhợc điểm:
- Khi bộ nhớ đợc tổ chức theo kiểu đơn chơng, tại một thời điểm chỉ có thể xử
lý một chơng trình, không cho phép nhiều ngời dùng làm việc đồng thời =>
lãng phí hiệu suất của CPU.
- Nếu bộ nhớ tổ chức theo kiểu đa chơng thì thanh ghi rào chỉ bảo vệ một hớng. Có nghĩa là, hệ điều hành có thể đợc bảo vệ đối với ngời dùng nhng
thanh ghi rào không thể bảo vệ ngời dùng này trớc ngời dùng khác. Bởi vì
cha có sự phân định rõ ràng giữa vùng nhớ của các chơng trình ngời dùng.
Để giải quyết vấn đề này, ta có thể sử dụng các thanh ghi giới hanh/cơ sở để
phân định vùng nhớ giữa cá tiến trình ngời dùng.

2.3.2 Tái định vị

Ta biết rằng, trong hệ thống đa chơng với phần vùng cố định, bộ nhớ đợc chia
thành n phân vùng (chú ý là phân vùng vật lý) với kích thớc cố định (các phân vùng
có thể có kích thớc bằng nhau hoặc khác nhau). Các tiến trình có yêu cầu bộ nhớ sẽ
đợc đặt trong hàng đợi, có hai cách tiếp cận để tổ chức hàng đợi:
+ Nhiều hàng đợi: Mỗi phân vùng có một hàng đợi tơng ứng, một tiến trình
sinh ra sẽ đợc đặt vào trong hàng đợi của phân vùng có kích thớc nhỏ nhất nhng
vẫn thỏa mẵn nhu cầu chứa tiến trình đó.
=> Nhợc điểm: Có hàng đợi thì trống, hàng đợi thì đầy khiến nhiều tiến trình phải
chờ đợi để cấp phát bộ nhớ.
+ Một hàng đợi: Tất cả các tiến trình đợc đặt trong một hàng đợi duy nhất, khi
có một phân vùng tự do (tự do hoàn toàn cả phân vùng) thì tiến trình đầu tiên trong
hàng đợi có kích thớc phù hợp sẽ đợc đặt vào trong phân vùng đó.
Nhợc điểm:
- Nếu kích thớc của tiến trình không vừa đúng bằng (<) kích thớc của phân
vùng chứa nó thì phần bộ nhớ còn lại trong phân vùng sẽ bị lãng phí. Đây gọi
là hiện tợng phân mảnh nội vi (internal fragement).
- Mức độ đa chơng của hệ thống sẽ bị giới hạn bởi số lợng phân vùng.
- Khi cho phép sự đa chơng, cần giải quyết 2 vấn đề:
+ Tái định vị (relocation) các tiến trình:
Rõ ràng trong hệ thống đa chơng, các tiến trình khác nhau sẽ đợc xử lý, thực
hiện ở các vùng địa chỉ vật lý khác nhau. Khi liên kết một chơng trình (kết hợp chơng trình chính với các modul vào cùng một không gian địa chỉ), trình liên kết cần
phải biết chơng trình đợc nạp vào địa chỉ nào trong bộ nhớ.
11


Ví dụ, nếu chơng trình truy xuất đến địa chỉ 100 (địa chỉ logic), và chơng
trình đợc nạp vào phân vùng 1 có địa chỉ vật lý bắt đầu là 100K, thì địa chỉ truy
xuất thực sự là 100K+100 = địa chỉ vật lý.
=> Đây là sự tái định vị = chuyển từ địa chỉ logic => địa chỉ vật lý.
+ Bảo vệ các tiến trình: Khi cho phép sự đa chơng, có nhiều tiến trình đồng thời

trong bộ nhớ, do đó cần phải bảo vệ các tiến trình khỏi sự xâm phạm lẫn nhau. (Vì
lúc này, một tiến trình có thể tạo ra các chỉ thị truy xuất đến một địa chỉ bất kỳ
trong bộ nhớ => truy xuất đến dữ liệu của tiến trình khác, nếu nh không có phơng
pháp bảo vệ).
Nh vậy, thực chất tái định vị là việc chuyển đổi từ địa chỉ logic của chơng trình
sang địa chỉ vật lý, còn gọi là Sự kết buộc địa chỉ.
- Giả thiết rằng K là giá trị rào, khi đó địa chỉ vật lý của một chơng trình sẽ đợc
tính bằng cách cộng K với địa chỉ logic của chơng trình đó.
- Sự kết buộc có thể xảy ra trong thời điểm biên dịch, thời điểm nạp, thời điểm
xử lý chơng trình.
+ Thời điểm biên dịch: Nếu tại thời điểm biên dịch, có thể biết vị trí mà chơng
trình sẽ thờng trú trong bộ nhớ (ví dụ chơng trình sẽ có địa chỉ bắt đầu trong bộ
nhớ chính là K1 - địa chỉ rào), thì trình biên dịch có thể phát sinh ngay mã lệnh
thực thi với các địa chỉ tuyệt đối. Trong suốt quá trình biên dịch, địa chỉ trong
chơng trình là các địa chỉ dạng tuyệt đối = địa chỉ tơng đối + K1. Sau đó, chơng
trình nạp sẽ nạp mã lệnh thực thi vào vùng nhớ vật lý có địa chỉ băt đầu là K1.
Nếu về sau có sự thay đổi vị trí thờng trú lúc đầu của chơng trình (K1 thay đổi),
cần phải biên dịch lại chơng trình. Do đó, nếu có sự thay đổi địa chỉ rào K1, có
nghĩa là địa chỉ thờng trú lúc đầu của chơng trình bị thay đổi, ta cần phải biên
dịch lại chơng trình.
+ Thời điểm nạp: Nếu trong quá trình biên dịch cha biết vị trí thờng trú của chơng trình trong bộ nhớ, thì trình biên dịch sẽ sinh ra mã lệnh thực thi tơng đối
chứa các địa chỉ tơng đối. Mã lệnh đó gọi là object code mã lệnh đối tợng.
Khi nạp chơng trình vào bộ nhớ, những địa chỉ tơng đối đó sẽ đợc chuyển thành
các địa chỉ tuyệt đối trong bộ nhớ. Đây đợc gọi là tái định vị tĩnh. Khi có sự
thay đổi vị trí lu trữ tiến trình trong bộ nhớ, chỉ cần nạp lại mà không cần biên
dịch lại chơng trình.
+ Thời điểm xử lý: Nếu có nhu cầu di chuyển tiến trình từ vùng nhớ này sang
vùng nhớ khác trong quá trình xử lý chạy, thì sự kết buộc địa chỉ cần đợc
thực hiện trong thời gian chạy chơng trình. Khi đó cần sử dụng cơ chế phần
cứng đặc biệt. Trong trờng hợp này, địa chỉ của chơng trình khi đợc nạp vào bộ

nhớ cha phải địa chỉ tuyệt đối, nó có thể đợc tái định vị. Và các địa chỉ đó sẽ đợc chuyển thành địa chỉ tuyệt đối khi chạy chơng trình. Đây đợc gọi là tái
định vị động

12


Chú ý:
- Tái định vị tĩnh: có nghĩa là việc chuyển đổi địa chỉ đợc diễn ra khi biên
dịch hoặc khi nạp chơng trình vào bộ nhớ.
- Taí định vị động: có nghĩa là việc chuyển đổi địa chỉ diễn ra khi chạy chơng
trình. Nếu K là địa chỉ rào (địa chỉ bắt đầu của chơng trình trong bộ nhớ
chính) thì tái định vị động cho phép K biến đổi trong suốt thời gian chạy chơng trình, còn tái định vị tĩnh K là cố định trong suốt thời gian chạy chơng
trình.
Ví dụ về tái định động:
Ta đa ra ví dụ về tái định vị động, nh hình dới đây. Một chơng trình bắt đầu từ
địa chỉ lôgíc 0 và kết thúc tại địa chỉ lôgíc N. Do tái định vị động nên giá trị của
địa chỉ rào K thay đổi trong thời gian chạy của tiến trình. Trong thời gian chạy, mỗi
địa chỉ lôgíc R của chơng trình sẽ đợc cộng thêm giá trị có trong thanh ghi rào (K),
tạo ra địa chỉ vật lý (R+K). Địa chỉ này chứa mục dữ liệu hoặc câu lệnh mà CPU
thực sự tham chiếu vào.
Thanh ghi
rào
Hệ điều hành

FA = K

FA
PA

PA:=LA+FA


CPU
Địa chỉ logic
(LA)

Địa chỉ vật lý
(PA)

Vùng nhớ ng
ời dùng

Vùng nhớ sẵn
dùng

Hình 2.7 Ví dụ về tái định vị động
=> Nh vậy đến đây, ta mới chỉ áp dụng đợc thanh ghi rào để bảo vệ vùng nhớ cho
hệ điều hành tránh khỏi sự xâm phạm, tác động của các tiến trình ngời dùng. Đồng
thời có thể dùng thanh ghi rào để tái định vị địa chỉ của chơng trình. Tuy nhiên, do
sự đa chơng nên có thể có nhiều chơng trình thờng trú trong bộ nhớ trong một thời
điểm, ta không thể tránh đợc sự can thiệp lẫn nhau giữa các tiến trình ngời dùng,
tiến trình ngời dùng này vẫn có thể truy nhập vào bất kỳ vùng nhớ nào của các tiến
trình ngời dùng khác. Tiếp theo ta sẽ xem cơ chế bảo vệ bộ nhớ dựa vào thanh ghi
của hệ điều hành.
2.3.3 Bảo vệ dựa vào thanh ghi

13


Bổ sung vào cấu trúc phần cứng của máy tính một thanh ghi cơ sở (base
register) và một thanh ghi giới hạn (limit register). Khi một tiến trình đợc sinh ra,

nạp vào thanh ghi cơ sở địa chỉ bắt đầu của phân vùng sẽ cấp phát cho tiến trình, và
nạp vào thanh ghi giới hạn kích thớc của tiến trình. Mỗi địa chỉ bộ nhớ do tiến trình
ngời dùng phát sinh ra đều so sánh với thanh ghi giới hạn, nếu nhỏ hơn nó sẽ đợc tự
động cộng với địa chỉ chứa trong thanh ghi cơ sở để cho ra địa chỉ tuyệt đối trong
bộ nhớ.
CPU
Địa chỉ
logic (LA)
Thanh ghi
giới hạn
Lỗi

LA
Hệ điều hành

K

Sai

Thanh ghi
cơ sở

Đúng

Địa chỉ cơ sở
(BA)

Vùng nhớ ng
ời dùng A

Vùng nhớ ng
ời dùng B

BA

PA
Vùng nhớ ng
ời dùng C

PA:= LA+BA
Địa chỉ vật lý
(PA)

BA+K

Vùng nhớ sẵn
dùng

Hình 2.8 Bảo vệ bộ nhớ bằng các thanh ghi cơ sở/giới hạn
Trong trờng hợp này, thanh ghi cơ sở lu địa chỉ vật lý bắt đầu của phân vùng
dành cho tiến trình ngời dùng, thanh ghi giới hạn ghi kích thớc lớn nhất của tiến
trình.
Khi tiến trình ngời dùng (CPU) truy xuất đến địa chỉ logic LA, thì phải thỏa
mãn LA< K (giá trị trong thanh ghi giới hạn), sau đó lấy LA +BA (giá trị trong
thanh ghi cơ sở) = PA địa chỉ vật lý. Các địa chỉ vật lý đợc tính một cách trực tiếp
theo giá trị của thanh ghi cơ sở. Giá trị BA có thể thay đổi.
=> Ưu điểm: Nhờ sử dụng thanh ghi cơ sở/giới hạn, một tiến trình không thể
truy xuất đến địa chỉ thuộc phân vùng của tiến trình khác. Mặt khác nhờ sử dụng
thanh ghi cơ sở, ta có thể di chuyển các chơng trình trong bộ nhớ khi chúng bắt đầu
xử lý. Khi tiến trình di chuyển đến một vị trí mới, chỉ cần nạp lại giá trị cho thanh

ghi cơ sở, các địa chỉ tuyệt đối sẽ tự động phát sinh lại mà không cần cập nhật lại
các địa chỉ tơng đối trong chơng trình.)

14


Nh vậy, các thanh ghi này hỗ trợ tái định vị động, vì ta có thể thay đổi giá trị
của thanh ghi cơ sở BA, nhng K không thay đổi, do đó địa chỉ vật lý chỉ cần = K +
BA mới.
=>Sử dụng các thanh ghi giới hạn/cơ sở giúp bảo vệ hoàn toàn ngời dùng này
với ngời dùng khác nghĩa là các lỗi xảy ra trong chơng trình ngời dùng này không
làm ảnh hởng đến chơng trình của ngời dùng khác. Tuy nhiên, vấn đề lại là bảo vệ
bên trong vùng nhớ của một ngời dùng.
Vấn đề 1: Có thể đoạn lệnh sẽ bị ghi đè?
Vì, thực tế chơng trình bao gồm: 1 đoạn lệnh và 1 đoạn dữ liệu. Nếu 2 đoạn này
nằm chung một vùng nhớ, giả sử trong một lệnh chứa một biến đợc gán một giá trị
nằm ngoài vùng dữ liệu. Khi đó CPU tạo ra một biến ghi nằm ngoài vùng dữ liệu,
biến này có thể thuộc vùng lệnh, khiến cho đoạn lệnh có thể bị ghi đè. Do đó cần
tách đoạn lệnh và đoạn dữ liêu, đồng thời định rõ quyền thao tác trên các đoạn đó.
Đoạn lệnh có thể đợc thực hiện thao tác chạy, đoạn dữ liệu có thể là đọc/ghi.
Để phân biệt các thao tác hay các quyền (có thể thực hiện đợc trên các nội dung
của một vùng nhớ), ta có thể dựa vào các cơ chế sau:


Hai cặp thanh ghi

Kiến trúc gắn nhãn
+ Dùng 2 cặp thanh ghi: Mỗi đoạn lệnh và đoạn dữ liệu đều có một cặp
thanh ghi biên. Thanh ghi cho đoạn lệnh đợc gán quyền chỉ đọc, thanh ghi cho
đoạn dữ liệu gán quyền đọc/ghi. Nh vậy, do đoạn lệnh chỉ có thể đọc nên không

gây tình trạng ghi đè nữa, đồng thời đoạn lệnh này không thể bị sửa đổi.

Hệ điều hành
Cặp thanh
ghi biên cho
đoạn mã
A

Cặp thanh
ghi biên cho
đoạn dữ liệu
A

R

Đoạn mã ngời
dùng A

R

Đoạn mã ngời
dùng B

R/W

Dữ liệu
ngời dùng A

R/W


Dữ liệu
ngời dùng B
Đoạn mã ngời
dùng C
Dữ liệu
Ngời dùng C

R
R

R/W

R/W

Cặp thanh
ghi biên cho
đoạn mã
B

Cặp thanh
ghi biên cho
dữ liệu
B

15


Hình 2.8 Sử dụng 2 cặp thanh ghi biên
+ Kiến trúc gắn nhãn: Ta vẫn có thể sử dụng giải pháp trên dùng 2 cặp thanh
ghi, tuy nhiên với giải pháp trên sử dụng cặp thanh ghi biên sẽ hạn chế truy nhập

trên cả một vùng địa chỉ liên tục. Tuy nhiên, trong một số trơng hợp ta chỉ cần bảo
vệ một số dữ liệu nhất định chứ không phải tất cả, để đảm bảo tính toàn vẹn của
chúng. Khi đó, ta sử dụng kiến trúc gắn nhãn, mỗi từ nhớ một địa chỉ đợc gắn
nhãn với các quyền thao tác trên đó.
Kiến trúc gắn nhãn là một kỹ thuật bảo vệ cho mỗi từ nhớ (word), mỗi địa chỉ
bộ nhớ đợc gắn một nhãn. Nhãn này có thể chứa trong 1 hay hơn 1 bit, để thiết lập
các quyền thao tác có thể thực hiện đợc trên nội dung của địa chỉ đó, mỗi địa chỉ ta
có một nhãn tơng ứng. Hai địa chỉ kề bên có thể đợc gắn các nhãn khác nhau. Việc
gắn nhãn do OS thực hiện theo chế độ đặc quyền.

Nhãn

Từ nhớ

R

0001

RW

0137

R

0099

X

Mã:
R = Chỉ đọc

RW = đọc/ghi
X = thực hiện

X
X
X
R

4091

RW

0002

Hình 2.9 Ví dụ về kiến trúc gắn nhãn
Vấn đề 2: chia sẻ vùng nhớ
Nếu nhiều ngời dùng cùng dùng chung một vùng nhớ, mỗi ngời dùng có thể có
các quyền thao tác khác nhau trên các địa chỉ đó, nh vậy có thể xảy ra tình trạng

16


không tơng thích, gây ra lỗi. ở đây ta quan tâm đến việc dùng chung một vùng dữ
liệu, bởi vì việc dùng các thanh ghi biên cũng không kiểm soát đợc các thao tác
khác nhau của những ngời dùng khác nhau lên vùng dữ liệu chung đó. Còn với
vùng chơng trình, cặp thanh ghi biên cho nó đã xác định quyền chỉ đọc nên không
sợ bị bất kỳ ngời dùng nào thay đổi.
=> Giải pháp: Ta vẫn sử dụng 2 cặp thanh ghi để phân tách đoạn lệnh và đoạn
dữ liệu, tuy nhiên ngời dùng sẽ đợc dùng chung đoạn lệnh (chỉ đọc), còn đoạn dữ
liệu do từng ngời dùng sở hữu. Điều này cho phép, các chơng trình ngời dùng khác

nhau sử dụng chung một đoạn mã với dữ liệu khác nhau.
Tóm lại, với cơ chế bảo vệ bộ nhớ dựa vào thanh ghi, ta đã giải quyết đợc vấn
đề tránh truy nhập trái phép vào vùng nhớ của hệ điềuh hành cũng nh tránh việc
can thiệp trái phép vào vùng nhớ của ngời dùng này với ngời dùng khác.

2.3.4 Phân trang

ở các phần trên, ta đề cập đến kiểu cấp phát một vùng nhớ liên tục cho tiến
trình. Tuy nhiên, việc cấp phát liên tục vùng nhớ cho tiến trình có thể gây ra sự
phân mảnh cho bộ nhớ. Giải pháp cho vấn đề này là cho phép không gian địa chỉ
vật lý của tiến trình không liên tục, nghĩa là có thể cấp phát cho tiến trình những
vùng nhớ tự do bất kỳ, không cần liên tục. Ta có các kỹ thuật nh: phân trang, phân
đoạn, phân đoạn kết hợp phân trang.
ý tởng: Phân bộ nhớ vật lý thành các khối có kích thớc cố định và bằng nhau,
gọi là khung trang (page frame). Không gian địa chỉ (logic) cũng đợc chia thành
các khối có cùng kích thớc với khung trang, đợc gọi là trang (page). Khi cần nạp
một tiến trình vào bộ nhớ để xử lý, các trang của tiến trình sẽ đợc nạp vào những
khung trang còn trống. Một tiến trình có N trang sẽ yêu cầu N khung trang tự do.
Frame 0
Page 0

Page 2

Page 1

Page 0

Page 2

.

.
.
.

Bộ nhớ
logic

Frame 1
Frame 2

Page 1
Frame N

Hình2.10 Mô hình bộ nhớ phân trang
Bộ nhớ
vật lý

17


Cơ chế chuyển đổi địa chỉ trong kỹ thuật phân trang
Cơ chế phần cứng hỗ trợ chuyển đổi địa chỉ trong kỹ thuật phân trang là bảng
trang (page table), và hệ điều hành quản lý trực tiếp bảng trang này. Mỗi phần tử
trong bảng trang chứa địa chỉ bắt đầu của một khung trang trong bộ nhớ vật lý. Khi
đó cơ chế chuyển đổi địa chỉ đợc thực hiện nh sau: mỗi địa chỉ logic do CPU sinh
ra bao gồm 2 phần (Pn, P0) trong đó :
- Pn là số hiệu trang (trong không gian địa chỉ logic) đợc dùng nh chỉ mục đến
phần tử tơng ứng trong bảng trang.
- P0 là địa chỉ tơng đối trong trang (trong không gian logic)
Giả sử Sp là kích thớc của một trang (hay khung trang), khi đó ta có địa chỉ vật

lý tơng ứng với địa chỉ logic trên là L= Pn*Sp +P0 (kích thớc của một trang do phần
cứng quy định).
Địa chỉ
vật lý

Địa chỉ
logic

Hệ điều hành

BA
CPU

Pn: số hiệu trang
P0: địa chỉ tơng
đối trong trang

Pn

BA

P0

Pn

P0

PA

Địa chỉ

cơ sở (BA)

Hình2.11 Cơ chế phân trang
Bảng trang

Cài đặt bảng trang
Trong trờng hợp đơn giản nhất, bảng trang là một tập các thanh ghi đợc sử dụng
để cài đặt bảng trang. Tuy nhiên, việc sử dụng các thanh ghi chỉ phù hợp khi bảng
trang có kích thớc nhỏ, nếu bảng trang có kích thớc lớn, nó phải đợc lu trữ trong bộ
nhớ chính và sử dụng một thanh ghi để lu địa chỉ bắt đầu lu trữ bảng trang.
Tổ chức bảng trang
Mỗi hệ điều hành có một phơng pháp riêng để tổ chức và lu trữ bảng trang. Đa
số các hệ điều hành cấp cho mỗi tiến trình một bảng trang. Tuy nhiên nếu không
gian địa chỉ logic có dung lợng quá lớn (>232, 264) thì có hai giải pháp là dùng: phân
trang đa cấp hoặc bảng trang nghịch đảo.
Bảo vệ
18


Cơ chế bảo vệ trong hệ thống phân trang đợc thực hiện với các bit bảo vệ đợc
gắn với mỗi khung trang. Mỗi phần tử trong bảng trang sẽ bao gồm: số hiệu khung
trang và bit hợp lệ bất hợp lệ (valid invalid) để xem khung trang đó còn tự do
hay không.
Số hiệu
khung trang

bit
valid - invalid

Hình2.12 Cấu trúc một phần tử trong bảng trang

Chia sẻ bộ nhớ trong cơ chế phân trang
Một u điểm của cơ chế phân trang là cho phép chia sẻ các trang giữa các tiến
trình. Sự chia sẻ đợc thể hiện ở chỗ có nhiều địa chỉ logic cùng ánh xạ đến một địa
chỉ vật lý duy nhất. Có thể áp dụng kỹ thuật này để cho phép có nhiều tiến trình
cùng chia sẻ các trang chứa đoạn mã - code chung, với dữ liệu riêng của từng tiến
trình đó.
code1

0

2

code2

1

3

code3

2

6

data1

3

0


data1

code1
code2

P1

Bảng trang P1

code1

0

2

code2

1

3

code3

2

6

data2

3


4

data2

code3

Hình2.13 Chia sẻ các trang trong hệ thống phân trang
Bộ nhớ

Nhận xét: kỹ thuật
loạitrang
bỏ Pđợc hiện tợng phân vật
mảnh
lý ngoại vi mỗi
P2 phân trang
Bảng
2
khung trang đều có thể đợc cấp phát cho một tiến trình nào đó có yêu cầu. Tuy
nhiên hiện tợng phân mảnh nội vi vẫn có thể xảy ra khi kích thớc của tiến trình
không đúng bằng bội số của kích thớc một trang, khi đó trang cuối cùng sẽ không
đợc sử dụng hết. Ngoài ra, kỹ thuật phân trang có u điểm là tạo ra sự phân biệt giữa
góc nhìn của ngời dùng và bộ phận quản lý bộ nhớ vật lý:
- Góc nhìn của ngời sử dụng: một tiến trình của ngời dùng nhìn thấy bộ nhớ nh
là một không gian liên tục, đồng nhất và chỉ chứa duy nhất bản thân tiến trình này.

19


- Góc nhìn của bộ nhớ vật lý: một tiến trình của ngời sử dụng đợc lu trữ phân

tán khắp bộ nhớ vật lý, trong bộ nhớ vật lý đồng thời cũng chứa những tiến trình
khác nhau.
Lu ý rằng sự phân trang không phản ánh đúng cách thức ngời sử dụng cảm
nhận về bộ nhớ. Bởi vì, ngời dùng nhìn bộ nhớ nh một tập các đối tợng của chơng
trình (nh: các phân đoạn segments, các th viện) và các đối tợng dữ liệu (nh:
biến toàn cục, stack, vùng nhớ chia sẻ). Vấn đề đặt ra là cần tìm một cách thức
biểu diễn bộ nhớ sao cho nó có thể cung cấp cho ngời dùng một cách nhìn gần với
quan điểm logic của họ hơn.

2.3.5 Phân đoạn

ý tởng: ta quan niệm không gian địa chỉ (không gian logic) là một tập các phân
đoạn (segment) các phân đoạn là những phần bộ nhớ kích thớc khác nhau có
liên hệ logic với nhau. Thông thờng, một chơng trình đợc phân tách thành nhiều
phân đoạn, bao gồm các phân đoạn cho chơng trình chính, các thủ tục, hàm, mảng,
các th viện, stack
Cơ chế chuyển đổi địa chỉ
Trong kỹ thuật phân đoạn, ta sử dụng bảng phân đoạn (segment table) để ánh
xạ địa chỉ logic sang địa chỉ vật lý. Mỗi thành phần trong bảng phân đoạn bao gồm
một thanh ghi cơ sở và một thanh ghi giới hạn. Thanh ghi cơ sở lu trữ địa chỉ vật lý
nơi bắt đầu phân đoạn trong bộ nhớ vật lý, thanh ghi giới hạn lu chiều dài của phân
đoạn.
Mỗi địa chỉ logic do CPU sinh ra là một bộ đôi (s, d):
+ s là số hiệu phân đoạn: dùng nh chỉ mục tới phần tử tơng ứng trong bảng phân
đoạn.
+ d địa chỉ tơng đối trong phân đoạn: có giá trị trong khoảng từ 0 đến giới hạn
chiều dài của phân đoạn. Nếu địa chỉ này hợp lệ sẽ đợc cộng với giá trị chứa trong
thanh ghi cơ sở để phát sinh địa chỉ vật lý.

20



Hình2.14 Cơ chế phần cứng hỗ trợ kỹ thuật phân đoạn
Bảo vệ
Tơng tự nh trong cơ chế phân trang, trong cơ chế phân đoạn ta cũng có thể bảo
vệ các phân đoạn bằng bit hợp lệ bất hợp lệ gắn với từng phân đoạn trong bảng
phân đoạn.
Chia sẻ phân đoạn
Tơng tự nh trong cơ chế phân trang, cơ chế phân đoạn cũng cho phép chia sẻ
các phân đoạn giữa các tiến trình. Tuy nhiên các tiến trình có thể chia sẻ với nhau
từng phần của chơng trình (ví dụ: thủ tục, hàm) không nhất thiết phải chia sẻ toàn
bộ chơng trình nh trong trờng hợp phân trang.

Hình 2.15 Chia sẻ phân đoạn trong kỹ thuật phân đoạn
Nhận xét: Cũng nh trờng hợp mô hình phân vùng động, kỹ thuật phân đoạn
phải giải quyết vấn đề cấp phát động. Trong kỹ thuật này, hiện tợng phân mảnh
ngoại vi lại xuất hiện khi các khối nhớ tự do (trong bộ nhớ vật lý) đều quá nhỏ,
không đủ để chứa một phân đoạn (trong bộ nhớ logic). Ngoài ra, kỹ thuật phân
đoạn thỏa mãn nhu cầu thể hiện cấu trúc logic của chơng trình nhng nó dẫn đến
tình huống phải cấp phát các khối nhớ có kích thớc khác nhau (trong bộ nhớ vật lý)
cho các phân đoạn trong bộ nhớ logic, điều này rắc rối vấn đề hơn nhiều so với việc
cấp phát các trang có kích thớc cố định nh trong kỹ thuật phân trang.
2.4 Kiểm soát truy nhập tài nguyên
Khi tiến trình chạy, chúng có thể yêu cầu đến các tài nguyên của hệ thống nh:
bộ nhớ, CPU, các file, thiết bị vật lý (nhập, xuất), các chơng trình, thủ tục
=> Để tránh sự can thiệp trái phép tài nguyên giữa các tiến trình, cần phải bảo
vệ các tài nguyên này.
21



- Việc bảo vệ bộ nhớ, các chơng trình dùng chung, CPU do phần cứng đảm
nhiệm.
- Việc bảo vệ các tài nguyên khác nh: file, các thiết bị vừa do phần cứng, và các
modul phần mềm của hệ điều hành quản lý. Các modul của OS có nhiệm vụ sau:
+ Kiểm soát ruy nhập: kiểm tra các quyền truy nhập, ai là ngời yêu cầu, có
quyền gì và đối tợng tài nguyên là gì.
+ Kiểm soát luồng: kiểm tra các đích đầu ra để tránh làm lộ dữ liệu mật.
+ Cơ chế kiểm toán: ghi lại các thao tác đã thực hiện trên tài nguyên để có
thể phát hiện việc sử dụng trái phép tài nguyên.
Muốn kiểm soát truy nhập vào tài nguyên cần phải nhận dạng tài nguyên đó
một cách rõ ràng:
Nhận dạng tiến trình (process identification) dựa vào định danh ngời
dùng (user-id), đây là ngời khởi chạy tiến trình.
Bộ nhớ đợc nhận dạng bằng các thanh ghi biên, bảng chuyển đổi (bảng
trang, bảng phân đoạn).
CPU đợc nhận biết thông qua phần cứng.
Các file đợc nhận biết qua tên file.
Các chơng trình, thủ tục đợc nhận biết qua tên và địa chỉ bắt đầu của nó.
Ngời sử dụng đợc nhận biết qua quá trình xác thực trong giai đoạn đăng
nhập.
Ta có một định nghĩa đơn giản sau: bảo vệ tài nguyên có nghĩa là không cho
phép ngời sử dụng truy nhập trái phép (cho dù ngẫu nhiên hay chủ ý) vào tài
nguyên.
- Việc bảo vệ tài nguyên cần:
+ Kiểm tra quyền của tiến trình truy nhập vào tài nguyên.
+ Chỉ cho phép tiến trình truy nhập vào các tài nguyên cần thiết cho nhiệm vụ
của nó (nguyên tắc đặc quyền tối thiểu - need to know). Theo nguyên tắc này,
một chơng trình chỉ đợc truy nhập vào tài nguyên thiết yếu, cần thiết cho nhiệm
vụ của nó, chứ không phải là tất cả tài nguyên mà nó có thể truy nhập vào trong
suốt thời gian chạy.

a) Các cơ chế kiểm soát truy nhập
- Các cơ chế kiểm soát truy nhập có thể đợc thực hiện thao hai chế độ: Phân
cấp truy nhập và ma trận truy nhập.
Phân cấp truy nhập: phân cấp theo hai chế độ
Đối với chế độ phân cấp truy nhập, các quyền truy nhập gắn liền với các
mức bảo vệ khác nhau. Phân cấp truy nhập sử dụng một trong hai chế độ
thực hiện sau: chế độ đặc quyền (privileged mode) hoặc khối chơng trình
lồng nhau (nested program unit).

22


(Trong hầu hết các hệ thống, có hai chế độ xử lý cho các tiến trình là:
chế độ đặc quyền (privileged mode) và chế độ không đặc quyền nhờ vào
cơ chế phần cứng. Mỗi tiến trình sẽ đợc gán một bit trạng thái để thể hiện
trạng thái thực hiện của nó. Mỗi trạng thái sẽ tơng ứng với một tập quyền
đợc gắn với một tập các lệnh thực thi. Tập lệnh của CPU đợc phân chia
thành các lệnh đặc quyền và không đặc quyền. Các lệnh đặc quyền thờng
là các lệnh để quản lý hệ thống nh: các lệnh nhập/xuất, lệnh dừng, lệnh
thay đổi trạng thái Thông thờng chỉ có hệ điều hành hoạt động trong
chế độ đặc quyền, các tiến trình của ngời dùng hoạt động trong chế độ
không đặc quyền.
Do vậy, hệ điều hành đợc bảo vệ. Khi một tiến trình ngời dùng gọi
đến một lời gọi hệ thống (lênh đặc quyền), tiến trình của hệ điều hành xử
lý lời gọi này sẽ hoạt động trong chế độ đặc quyền, sau khi hoàn tất thì
trả quyền điều khiển về cho tiến trình ngời dùng hoạt động trong chế độ
không đặc quyền ).
Ta sẽ xem xét hai chế độ thực hiện của phân cấp truy nhập:
+ Chế độ đặc quyền: : ta phân cấp các mức bảo vệ, mỗi mức sẽ có một tập
các quyền truy nhập khác nhau. Tập các quyền trong một mức đợc gọi là

miền truy nhập của mức đó. Giả sử có N mức (từ 0..N-1), khi đó mức
trong cùng (mức 0) sẽ có tối đa quyền truy nhập, mức ngoài cùng (mức N1) sẽ có tối thiều quyền. Miền truy nhập của mức i+1 sẽ là tập con của
miền truy nhập mức i. Mỗi tiến trình sẽ đợc gắn với một mức bảo vệ, và đợc hoạt động trong miền truy nhập của mức đó.
Nh vậy sự phân cấp mức độ bảo vệ trái ngợc lại với nguyên tắc đặc
quyền tối thiểu. Bởi vì mỗi tiến trình có mọi quyền truy nhập trong mức
bảo vệ của nó, đồng thời tiến trình ở mức 0 sẽ có quyền truy nhập vào tất
cả các đối tợng hệ thống.
Ví dụ, với một số ngôn ngữ lập trình cấu trúc nh: Pascal, ALGOL, PL/1
cho phép chơng trình bao gồm nhiều chơng trình con (thủ tục), và mỗi thủ
tục P chỉ có thể truy nhập các đối tợng cục bộ đợc khai báo trong P, còn
những đối tợng toàn cục sẽ đợc khai báo trong chơng trình chính.
+ Các khối chơng trình lồng nhau: Một khối chơng trình có thể truy
nhập các đối tợng toàn cục của tất cả các khối chứa khối chơng trình này,
và tất nhiên là cả các đối tợng bên trong nó. Ví dụ về việc lồng 5 khối chơng trình nh sau: < U5 <<< U1 > U2 > U3 > < U4 >>. Khối trong nhất
U1 có quyền truy nhập tất cả các đối tợng (đã đợc khai báo bên trong U1)
và tất cả các đối tợng bên trong các khối chứa U1 là (U2, U3, U5), nhng
U1 không thể truy nhập vào các đối tợng của U4. Thông qua cơ chế này,
các khối chỉ có thể truy nhập vào các đối tợng cần thiết cho nhiệm vụ của
chúng. Do đó, dùng các khối chơng trình lồng nhau thỏa mãn nguyên tắc
đặc quyền tối thiểu.
23


Ma trận truy nhập:
Khác với chế độ phân cấp truy nhập, ta phân cấp hệ thống thành các mức
bảo vệ khác nhau, mỗi tiến trình đợc gắn với một mức bảo vệ và chỉ đợc
thực hiện các quyền truy nhập trong mức đó. Đối với ma trận truy nhập,
các quyền gắn liền với các chủ thể (các thực thể hoạt động của hệ thống).
Ta có thể biểu diễn các quyền truy nhập của từng chủ thể S tới từng đối tợng O trong một ma trận truy nhập. Có thể biểu diễn ma trận truy nhập
bằng:

. Bảng toàn cục
. Danh sách quyền truy nhập (ALC)
. Danh sách tiềm năng của miền bảo vệ (C-List)
. Cơ chế khóa và chìa
b) Bảo vệ file
Ta có thể áp dụng ma trận truy nhập để bảo vệ file, tuy nhiên trong nhiều hệ
điều hành, ta có các cách khác nhau để bảo vệ file.
- Cơ chế dựa vào mật khẩu:
Muốn truy nhập vào một file bất kỳ với các thao tác (đọc, ghi, xóa, sửa)
đều phải có mật khẩu. Cơ chế này không truy nhập theo định danh ngời
dùng. Mỗi ngời dùng muốn truy nhập vào một file nào đó cần phải có mật
khẩu của file đó.
- Cơ chế dựa vào quyền sở hữu:
Thông thờng trong nhiều hệ thống, ngời sử dụng đợc phân thành 3 loại nh sau:
Ngời sở hữu: là ngời tạo ra một file và có thể định nghĩa các quyền truy nhập
của những ngời sử dụng khác đối với file này.
Nhóm: là tập hợp những ngời sử dụng có nhu cầu dùng chung file, ví dụ
những ngời làm việc trong cùng dự án.
Những ngời sử dụng khác: tất cả những ngời sử dụng của hệ thống, trừ ngời
sở hữu và các thành viên của nhóm.
Cơ chế này hỗ trợ truy nhập file theo định danh ngời dùng. Mỗi file sẽ có một
danh sách kiểm soát truy nhập, mỗi phần tử chứa 3 trờng: định danh ngời dùng,
định danh nhóm chứa ngời dùng, các quyền truy nhập.
Thực tế, cơ chế bảo vệ file này đợc thực hiện trong UNIX. Mỗi file đợc gán tơng ứng 9 bit bảo vệ, từng 3 bit sẽ mô tả quyền truy xuất R (đọc), W (ghi) hay X
(xử lý) của ngời sở hữu file, những ngời cùng nhóm với ngời sở hữu, và những ngời
dùng khác. Ký hiệu - tơng ứng với các thao tác không đợc phép trên file.
Ví dụ, một file F đợc gắn chuỗi 9 bit sau: rwx r-x r, nghĩa là ngời sở hữu file
này sẽ đợc toàn quyền thao tác trên F, những ngời dùng cùng nhóm với ngời sở hữu
chỉ đợc đọc, và thực hiện F, còn lại những ngời dùng khác chỉ đợc đọc F.
24



=> Nh vậy, cơ chế dựa vào quyền sở hữu hỗ trợ việc phân biệt các quyền trên
cùng một file, định nghĩa số lợng ngời sử dụng dùng chung 1 file. Việc thực hiện
không có gì phức tạp vì nó dựa vào định danh ngời dùng.
2.5 Các cơ chế kiểm soát luồng
Ta biết rằng, các cơ chế kiểm soát truy nhập có trách nhiệm kiểm tra quyền của
ngời dùng khi họ truy nhập vào tài nguyên: chỉ thực hiện các thao tác đã đợc trao.
Còn các cơ chế kiểm soát luồng có trách nhiệm kiểm tra đích cuối cùng của đầu ra,
tránh làm lộ dữ liệu.
Luồng (flow) xảy ra khi thông tin đợc chuyển từ đối tợng nguồn tới đối tợng
đích. Chúng ta phân biệt hai kiểu luồng: luồng hiển (explicit flow) là kết quả của
các lệnh gán, ví dụ nh y:= f(x1, ..., xn) và luồng ẩn (implicit flow) là kết quả của các
lệnh điều kiện, ví dụ nh if f(xm+1, ..., xn) then y:= f(x1, ..., xm). Các cơ chế kiểm soát
luồng phải đảm bảo: chỉ thực hiện các luồng đợc phép (không phân biệt luồng hiện
hay luồng ẩn).
Chúng ta kiểm tra tính đúng đắn của luồng thông qua việc thực hiện lệnh.
Trong chính sách kiểm soát luồng, ta phân các đối tợng và chủ thể thành các các
lớp an toàn. Hai đặc điểm chính của lớp đối tợng an toàn là: mức phân loại (mức
nhạy cảm) phản ánh thông tin có trong đó và loại - kiểu (vùng ứng dụng) mà thông
tin đối tợng đề cập đến. Phân loại đối tợng phản ánh mức độ nhạy cảm của thông
tin có trong đối tợng và loại vùng ứng dụng mà thông tin đang đề cập đến.
Nói chung, các cơ chế kiểm soát luồng thực hiện kiểm soát bằng cách gán cho
mỗi đối tợng một nhãn xác định lớp an toàn của đối tợng đó. Các cơ chế kiểm
soát trong thời gian thao tác đợc áp dụng trên các đối tợng của lớp cố định (liên kết
tĩnh giữa lớp và đối tợng) và các đối tợng của lớp động (liên kết động giữa lớp và
đối tợng).
Cơ chế kiểm soát luồng chỉ cho phép một chủ thể đợc đọc nội dung ở các đối tợng mức thấp hơn và có quyền ghi lên các đối tợng mức cao hơn, không đợc phép
đọc ở đối tợng ở mức cao hơn và ghi xuông các đối tợng mức thấp hơn. Điều này
có thể tránh việc làm lộ các dữ liệu mật.

2.5 Sự cách ly
Sự cách ly là khả năng hạn chế hậu quả của các xâm phạm an toàn có thể xảy
ra, bằng cách ngăn chặn chúng, tránh làm ảnh hởng đến các yếu tố khác của hệ
thống. Sự cách ly có thể thực hiện đợc bằng cách tách phần cứng và phần mềm
thành các modul hoạt động độc lập. Sự cách ly có thể yêu cầu lặp một số modul
phần cứng/phần mềm. Để cách ly, chúng ta có thể sử dụng 2 phơng pháp: phơng
pháp đa không gian (multiple-space-based method) và phơng pháp dựa vào máy ảo
(virtual-machine-based method).
Phơng pháp đa không gian khai thác bộ nhớ chính ảo cho từng ngời dùng hệ
thống. Các vùng nhớ chính và chơng trình dùng chung đợc lặp và đợc dùng chung
giữa nhiều ngời dùng khác nhau. Tuy nhiên, không tiến hành lặp OS, các chơng
25


×