Giíi thiÖu 2.2 . NhËn d¹ngx¸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: Một số cơ chế bảo vệ tài nguyên ở mức hệ điều hành. Các cải tiến đối với cơ chế an toàn cơ bản dành cho hệ điều hành. Thiết kế hệ điều hành an toàn. Chuẩn an toàn DoD.
Trang 1Chơng 2 Các cơ chế an toàn cơ bả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:
- Một số cơ chế bảo vệ tài nguyờn ở mức hệ điều hành
- Cỏc cải tiến đối với cơ chế an toàn cơ bản dành cho hệ điều hành
- Thiết kế hệ điều hành an toàn
- Chuẩn an toàn DoD
Trang 22.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ếpgiữ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ấpmộ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): điều khiển và phối hợp việc sử dụng phần cứng cho
những ứng dụng khỏc nhau của nhiều người 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
Hình 2.1 Các mức trừu t ợng của hệ thông máy tính
Trang 3- 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àinguyê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éptà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 gianthực
Chức năng an toàn của hệ điều hành
Hình 2.2 minh hoạ các chức năng của một 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, trongmột hệ thống đa ngời dùng
Đăng xuất
Quản lý hệ thống file
Trang 4- Đầ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ểmtra 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ảiquyế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
- Kiểm soát truy nhập vào tài nguyên
- Kiểm soát luồng
- Kiểm toán
4
Trang 52.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êngcho 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ínhtoá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à sosá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ếtquả cho hệ thống Hệ thống sẽ kiểm tra lại kết quả này xem có chính xáchay 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(a 1 a 2 a 3 a 4 a 5 ) = a 4 a 3 a 5 a 2 a 1) 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àybằ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ínhtoá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ảigiả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 ngng-ời dùng tự xác thực ngợc trở lại hệ thống Xác thực hệ thốngdự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ơngtrì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ốngdự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ắnkè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:
Trang 6- 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ểnthị 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í sovớ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ốngbiế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ácnhậ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
Trang 7- Chọn các thuật ngữ liên quan đến hoạt động thể thao hoặc sở thích của mộtngờ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ẩnthậ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ả haykhô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ứctạ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íchhợ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ếthợ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ủatừ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
mã hóa Salt
File mật khẩu DES
Salt
Trang 8Hì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ếtquả 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
Hình 2.4 Kiểm tra mật khẩu bằng salt
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
Trang 9- Các thanh ghi cơ sở/giới hạn
- 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à
+ 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ý.)
Trang 10- Đị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
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ộttham 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 thamchiế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ẽ lugiá trị mới của địa chỉ rào vào trong thanh ghi Các địa chỉ trong chơng trình ngờidù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
Thanh ghi rào Giá trị địa chỉ rào
Hệ điều hành
Địa chỉ (A)
Sai
Địa chỉ rào (FA)
Hệ điều hành
FA
Trang 11Hì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 ớng Có nghĩa là, hệ điều hành có thể đợc bảo vệ đối với ngời dùng nhngthanh 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
h-Để 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 nhngvẫ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ảichờ đợ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 tronghà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ânvù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ựchiệ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ớ
Trang 12Ví dụ, nếu chơng trình truy xuất đến địa chỉ 100 (địa chỉ logic), và chơngtrì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ỉ truyxuấ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ơngphá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ẽ đợctí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ệnhthực thi với các địa chỉ tuyệt đối Trong suốt quá trình biên dịch, địa chỉ trongchơng trình là các địa chỉ dạng tuyệt đối = địa chỉ tơng đối + K1 Sau đó, chơngtrì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êndị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 tch-ơng đốichứ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ànhcá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êndị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 đợcthực hiện trong thời gian chạy chơng trình Khi đó cần sử dụng cơ chế phầncứ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
Trang 13Chú ý:
- 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ơngtrì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à CPUthực sự tham chiếu vào
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 Đồngthờ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ếntrì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 ghicủa hệ điều hành
2.3.3 Bảo vệ dựa vào thanh ghi
PA FA
Địa chỉ vật lý (PA)
Thanh ghi rào
Địa chỉ logic (LA)
Hệ điều hành
FA = K
CPU
Trang 14Bổ 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ớ
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ùngdà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ếntrình
Khi tiến trình ngời dùng (CPU) truy xuất đến địa chỉ logic LA, thì phải thỏamãn LA< K (giá trị trong thanh ghi giới hạn), sau đó lấy LA +BA (giá trị trongthanh 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ếptheo 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ụngthanh 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 thanhghi 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ạicác địa chỉ tơng đối trong chơng trình.)
Hệ điều hành
BA
PA BA+K
Địa chỉ vật lý (PA)
Thanh ghi cơ sở
Địa chỉ cơ sở (BA)
PA:= LA+BA
Trang 15Nh 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àyvớ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ônglà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àynằ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ầntá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 dungcủ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ônggâ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
Đoạn mã ng ời dùng A
Đoạn mã ng ời dùng B Dữ liệu
ng ời dùng A Dữ liệu
ng ời dùng B
Đoạn mã ng ời dùng C Dữ liệu
R/W
Cặp thanh ghi biên cho
đoạn mã B
R R
Cặp thanh ghi biên cho dữ liệu B
R/W
R/W
Trang 16Hì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ậptrê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ủachúng Khi đó, ta sử dụng kiến trúc gắn nhãn, mỗi từ nhớ – một địa chỉ đợc gắnnhã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ậpcá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ệcgắn nhãn do OS thực hiện theo chế độ đặc quyền
X X X
R 4091
RW 0002
Trang 17khô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áckhác nhau của những ngời dùng khác nhau lên vùng dữ liệu chung đó Còn vớivù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ạndữ 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ácnhau 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ệccan 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ếntrì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ữngvù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ữngkhung trang còn trống Một tiến trình có N trang sẽ yêu cầu N khung trang tự do
Hình2.10 Mô hình bộ nhớ phân trang
Page 0 Page 1 Page 2
Page 2 Page 0
Page 1
Frame 0 Frame 1 Frame 2
Frame N
Bộ nhớ vật lý
Bộ nhớ logic
Trang 18Cơ 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 (P n , P 0) trong đó :
- P n 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
- P 0 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= P n *Sp +P 0 (kích thớc của một trang do phần
cứng quy định)
Hình2.11 Cơ chế phân 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ảngtrang 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ônggian địa chỉ logic có dung lợng quá lớn (>232, 264) thì có hai giải pháp là dùng: phântrang đa cấp hoặc bảng trang nghịch đảo
P n Địa chỉ cơ sở (BA)
Địa chỉ logic
Địa chỉ vật lý
P n: số hiệu trang
P 0: địa chỉ t ơng
đối trong trang
Bảng trang