Professional Documents
Culture Documents
HỆ ĐIỀU HÀNH
MỤC TIÊU CHUNG CỦA MÔN HỌC
Về kiến thức: Cung cấp cho sinh viên kiến thức cơ bản về Hệ điều hành,
thành phần, nguyên lý xây dựng và các chức năng cơ bản của hệ điều hành.
Về kỹ năng: Sinh viên có thể hiểu nguyên lí hoạt động của các hệ điều hành
phổ biến, có thể giải quyết các bài toán về quản lý tiến trình, bộ nhớ, thiết bị vào
ra và hệ tệp.
◆ Về thái độ: Có thái độ nghiêm túc, đúng đắn, có tinh thần tự học, tự nghiên
cứu kiến thức có liên quan đến hệ điều hành.
NGƯỜI DÙNG
HỆ ĐIỀU HÀNH
PHẦN CỨNG
- Nếu trên máy tính cài cùng lúc nhiều OS, chương trình mồi được gọi là Multi
OS loader cho phép chọn một trong các hệ điều hành đấy để tải vào bộ nhớ.
3. CHỨC NĂNG CỦA HỆ ĐIỀU HÀNH
3.1. Quản lý bộ nhớ
OS cần thực hiện các nhiệm vụ sau để quản lý bộ nhớ:
- Cấp phát, phân phối bộ nhớ cho các tiến trình;
- Cung cấp và giải phóng bộ nhớ theo yêu cầu của tiến trình;
- Quản lý không gian nhớ đã cấp và không gian nhớ còn trống;
3.2. Quản lý tiến trình
Tiến trình là một chương trình đang ở trạng thái thực hiện. Khi thực hiện một
tiến trình, đòi hỏi một số tài nguyên nhất định như: CPU, bộ nhớ, các thiết bị
... các tài nguyên này sẽ được cấp phát cho tiến trình vào những thời điểm cần
thiết và được thu hồi khi tiến trình kết thúc. Ngoài ra, khi tiến trình hoạt động
trong hệ thống có thể phát sinh các tiến trình con.
OS có nhiệm vụ:
- Tạo, xóa và lưu thông tin về các tiến trình;
- Lập lịch cho các tiến trình (lập lịch cho CPU);
- Nhược điểm: tốc độ chậm, khó xác định số lớp và phân chia thành phần của
lớp.
4.4.3. Cấu trúc vi nhân (microkernel)
Phần nhân chỉ chứa các chức năng quan trọng nhất như quản lý tiến trình,
quản lý bộ nhớ. Các chức năng còn lại được tổ chức thành các môđun, hoạt động
trong chế độ đặc quyền hoặc trong chế độ người dùng. Khi có yêu cầu về dịch vụ,
nhân sẽ chuyển tiếp cho mô đun tương ứng thực hiện.
- Ưu điểm: giảm thiểu kích thước nhân, việc thiết kế, cài đặt, quản lý các mô đun
sẽ dễ dàng và mềm dẻo hơn so với cấu trúc khối. Lỗi của các mô đun chạy trong
chế độ người dùng không ảnh hưởng đến toàn bộ OS.
- Nhược điểm: Việc chuyển đổi giữa các mô đun đòi hỏi tài nguyên hệ thống và
thời gian.
5.3.4. Cấu trúc lai - Là cấu trúc kết hợp của các kiểu cấu trúc trên.
5. LỊCH SỬ PHÁT TRIỂN CỦA HỆ ĐIỀU HÀNH
5.2. Hệ điều hành của các máy tính thế hệ thứ hai (1955-1965)
Các máy tính thế hệ thứ hai có tốc độ vài nghìn đến vài chục nghìn phép tính
một giây, bộ nhớ trong từ vài nghìn đến vài chục nghìn từ máy. Thông tin
nhập vào máy qua bìa đục lỗ (punched card) hay băng đục lỗ. Bộ nhớ ngoài
kiểu băng từ đã được sử dụng.
Từ thế hệ này bắt đầu có hệ điều hành. Đấy là các OS đơn chương trình, mỗi
lúc chỉ cho phép thực hiện một chương trình. Để tăng hiệu suất của máy,
người ta sử dụng kỹ thuật xử lý theo lô (batch rocessing), hay còn gọi là
xử lý theo mẻ.
Lập trình viên chuẩn bị chương trình trên bìa đục lỗ hoặc trên đĩa từ và giao cho
các kỹ thuật viên. Kỹ thuật viên sẽ phân chương trình thành các lô. Mỗi lô bao
gồm những chương trình có yêu cầu giống nhau, sau đó nạp toàn bộ lô vào băng
từ và tải vào máy để thực hiện lần lượt.
- Một chương trình giám sát được gọi là Monitor được lưu trữ thường xuyên
trong bộ nhớ để tự động hóa việc xử lý theo lô, nhằm loại trừ thời gian chết của
CPU khi chuyển tiếp giữa các công đoạn trong một công việc.
- Monitor chính là dạng đơn giản nhất của hệ điều hành.
- Hai hệ điều hành tiêu biểu của thời kỳ này là FMS (The FORTRAN Monitor
System) và IBMSYS của IBM chạy trên dòng máy 7094.
MONITOR
- Hệ thống file được phân cấp theo một cây thư mục có các thuộc tính
để kiểm soát thẩm quyền: đọc, sửa, …
- Nhận xét về mức độ tham gia của các thành viên trong nhóm
- Cầu trúc OS
1. Hãy trình bày các chức năng chính của hệ điều hành.
2. Trình bày khái niệm về tài nguyên hệ thống. Cho ví dụ minh hoạ
3. Trình bày các nguyên tắc thiết kế và xây dựng hệ điều hành.
4. Hệ điều hành cần đảm bảo những tính chất cơ bản nào, trình bày một số kiểu
cấu trúc hệ điều hành, so sánh ưu nhược điểm của các kiểu cấu trúc đấy.
5. Tại sao cần tách biệt chế độ nhân và chế độ người dùng? Hãy sử dụng ví dụ
để minh họa cho lập luận.
6. Trình bày kỹ thuật xử lý theo lô, kỹ thuật đa chương trình, hỗ trợ thời gian và
đa nhiệm.
1. KHÁI NIỆM
2. LẬP LỊCH CPU
3. ĐỒNG BỘ HÓA TIẾN TRÌNH ĐỒNG THỜI
1. KHÁI NIỆM
1.1. Tiến trình (Process)
- Tiến trình là một chương trình đang trong quá trình thực hiện
Tiêu chí bổ sung liên quan đến đảm bảo tính ổn định của hệ thống:
- Tính dự đoán được.
- Tính công bằng.
2.2. MỘT SỐ THUẬT TOÁN LẬP LỊCH CPU
2.2.1 Đến trước phục vụ trước (First Come First Served)
Tiến trình nào yêu cầu CPU trước sẽ được cấp trước, thông thường đây là dạng
điều độ không phân phối lại.
Ví dụ:
Có 5 tiến trình
Sơ đồ Gant:
Thời gian đợi trung bình của các tiến trình: TTB = (0+8+10+24+24)/5=13,2
=> Đơn giản và công bằng nhưng thời gian đợi của tiến trình lớn.
2.2.2. Điều độ quay vòng (round robin - RR)
Trong thuật toán này, hệ thống quy định một lượng tử thời gian (time
quantum) khoảng từ 10 – 100 mili giây. Mỗi tiến trình được phân phối một
lượng tử thời gian, sau khoảng thời gian đấy nếu tiến trình chưa kết thúc hoặc
rơi vào trạng thái đợi, nó được chuyển về cuối hàng đợi. Hàng đợi được tổ
chức theo kiểu vòng tròn theo cơ chế FIFO.
* Cần chọn lượng tử thời gian thích hợp: nếu time quantum lớn việc bổ sung
tiến trình mới hoặc kích hoạt tiến trình bị ngắt sẽ làm tăng thời gian chờ đợi
trung bình nhưng nếu chọn giá trị time quantum nhỏ thì các tiến trình phải liên
tục chuyển trạng thái dẫn đến giảm hệ số hữu ích của CPU.
Sơ đồ Gant:
Sơ đồ theo SPF:
Sơ đồ Gant:
=> thời gian chờ đợi trung bình nhỏ nhưng đòi hỏi hệ điều hành phải dự
đoán được độ dài chu kỳ sử dụng CPU của tiến trình
2.2.5. Điều độ có mức ưu tiên - Priority Scheduling
- Mỗi tiến trình sẽ được gán một độ ưu tiên; CPU sẽ được cấp cho tiến trình có
độ ưu tiên cao nhất.
- Hệ điều hành quy định mức ưu tiên dưới dạng số nguyên trong một khoảng
nào đó.
Điều độ có mức ưu tiên không phân phối lại: (giả sử tất cả các tiến trình
cùng xuất hiện ở thời điểm 0)
Sơ đồ Gant:
- Phát triển (Progress): Một tiến trình tạm dừng bên ngoài CS không được ngăn
cản các tiến trình khác vào CS.
- Chờ đợi có giới hạn (Bounded Waiting): Mỗi tiến trình chỉ phải chờ để được
vào CS trong một khoảng thời gian có hạn (finite wait time). Không được xảy
ra tình trạng đói tài nguyên (starvation).
3.2.2 Nhóm giải pháp Busy Waiting
Đặc điểm:
- Tiếp tục sử dụng CPU trong khi chờ đợi vào CS (kiểm tra điều kiện vào CS
liên tục)
- Không đòi hỏi sự trợ giúp của hệ điều hành.
Một số loại tiêu biểu:
- Sử dụng các biến cờ hiệu (Semarphore)
- Sử dụng việc kiểm tra luân phiên.
- Thuật toán Peterson.
- Cấm ngắt (giải pháp phần cứng – hardware).
- Chỉ thị TSL (giải pháp phần cứng – hardware).
Biến cờ hiệu (Semarphore):
Các tiến trình chia sẻ một biến chung đóng vai trò « chốt cửa » (lock) , biến này
được khởi động là 0. Một tiến trình muốn vào đoạn nguy hiểm trước tiên phải
kiểm tra giá trị của biến lock. Nếu lock = 0, tiến trình đặt lại giá trị cho lock = 1
và đi vào đoạn nguy hiểm . Nếu lock đang nhận giá trị 1, tiến trình phải chờ bên
ngoài đoạn nguy hiểm cho đến khi lock có giá trị 0. Như vậy giá trị 0 của lock
mang ý nghĩa là không có tiến trình nào đang ở trong đoạn nguy hiểm , và
lock=1 khi có một tiến trình đang ở trong đoạn nguy hiểm .
Kiểm tra luân phiên:
Giải pháp đề xuất cho hai tiến trình. Hai tiến trình này sử dụng chung
biến turn (phản ánh phiên tiến trình nào được vào miền găng), được khởi động
với giá trị 0. Nếu turn = 0, tiến trình A được vào đoạn nguy hiểm . Nếu turn =
1, tiến trình A đi vào một vòng lặp chờ đến khi turn nhận giá trị 0. Khi tiến trình
A rời khỏi đoạn nguy hiểm , nó đặt giá trị turn về 1 để cho phép tiến trình B đi
vào đoạn nguy hiểm .
Thuật toán Peterson
Kết hợp cả 2 giải pháp trên. Các tiến trình chia sẻ 2 biến chung:
int turn; // đến phiên ai
int interesse[2]; // khởi động là FALSE
Khi một tiến trình Pi muốn vào đoạn nguy hiểm , nó đặt giá trị
interesse[i]=TRUE để tuyên bố nhu cầu vào đoạn nguy hiểm , sau đó đặt
Turn=j (kiểm tra nhu cầu vào đoạn nguy hiểm của tiến trình khác). Nếu tiến
trình Pj không có nhu cầu vào đoạn nguy hiểm (interesse[j]=FALSE), thì Pi có
thể vào, ngược lại Pi phải chờ đến khi interesse[j]=FALSE. Khi rời khỏi đoạn
nguy hiểm , Pi đặt lại giá trị cho interesse[i]= FALSE.
Cấm ngắt
Cho phép tiến trình cấm tất cả các ngắt trước khi vào đoạn nguy hiểm , và phục
hồi ngắt khi ra khỏi đoạn nguy hiểm . Khi đó, ngắt đồng hồ cũng không xảy ra,
do vậy hệ thống không thể tạm dừng hoạt động của tiến trình đang xử lý để cấp
phát CPU cho tiến trình khác, nhờ đó tiến trình hiện hành yên tâm thao tác trên
đoạn nguy hiểm mà không sợ bị tiến trình nào khác tranh chấp.
Chỉ thị TSL (Test-and-Set)
Giải pháp đòi hỏi sự trợ giúp của cơ chế phần cứng. Nhiều máy tính cung cấp
một chỉ thị đặc biệt cho phép kiểm tra và cập nhật nội dung một vùng nhớ
trong một thao tác nguyên tử (atomic), gọi là chỉ thị Test-and-Set Lock (TSL).
Tất cả các giải pháp trên đều phải thực hiện một vòng lặp để kiểm tra xem
tiến trình có được phép vào đoạn nguy hiểm hay không, nếu điều kiện chưa
cho phép, tiến trình phải chờ tiếp tục trong vòng lặp kiểm tra này. Các giải
pháp buộc tiến trình phải liên tục kiểm tra điều kiện để phát hiện thời điểm
thích hợp được vào đoạn nguy hiểm như thế được gọi các giải pháp «busy
waiting». Lưu ý rằng việc kiểm tra như thế tiêu thụ rất nhiều thời gian sử
dụng CPU, tiến trình đang chờ vẫn chiếm dụng CPU. Vì vậy, xu hướng giải
quyết vấn đề đồng bộ hoá thường tránh các giải pháp « busy waiting ».
3.2.3 Nhóm giải pháp Sleep & Wakeup
Đặc điểm:
- Tiến trình chưa đủ điều kiện vào đoạn nguy hiểm chuyển sang trạng thái
blocked, từ bỏ quyền sử dụng CPU.
- Cần sự hỗ trợ từ hệ điều hành (để đánh thức tiến trình ra khỏi trạng thái blocked
và đưa nó vào trạng thái ready)
SLEEP là một lời gọi hệ thống có tác dụng tạm dừng hoạt động của tiến trình
(blocked) gọi nó và chờ đến khi được một tiến trình khác «đánh thức ». Lời gọi hệ
thống WAKEUP nhận một tham số duy nhất : tiến trình sẽ được tái kích hoạt (đặt
về trạng thái ready).
Một số loại:
-Semaphore.
-Monitor.
-Message
Semaphore
Semaphore là 1 biến nhận các thuộc tính sau:
- Một giá trị nguyên dương e(s)
- Một hàng đợi f(s) (danh sách các tiến trình đang chờ trên semaphore s
Chỉ có hai thao tác được định nghĩa trên semaphore
- Wait(s): giảm giá trị của semaphore s đi 1 đơn vị nếu semaphore có trị e(s) > 0,
và tiếp tục xử lý, nếu ngược lại, tiến trình sẽ phải chờ đến khi e(s) >0.
- Signal(s): tăng giá trị của semaphore s lên 1 đơn vị. Nếu có một hoặc nhiều tiến
trình đang chờ trên semaphore s, bị khóa bởi thao tác Wait, thì hệ thống sẽ chọn
một trong các tiến trình này để kết thúc thao tác Wait và cho tiếp tục xử lý.
* Wait và Signal là những thao tác nguyên tử
- Xây dựng cờ hiệu
- Sử dụng cờ hiệu:
+ Sử dụng để gửi tín hiệu trước khi vào đoạn nguy hiểm và sau khi ra khỏi đoạn
nguy hiểm
+ Khi cần truy cập tài nguyên, tiến trình thực hiện thao tác Wait của cờ hiệu tương
ứng
+ Sau khi dùng xong tài nguyên, tiến trình thực hiện Signal trên cùng cờ hiệu
Monitor
-Giải pháp dựa trên hỗ trợ của hệ điều hành và ngôn ngữ bậc cao.
- Là một cấu trúc đặc biệt bao gồm các thủ tục, các biến và cấu trúc dữ liệu có các
thuộc tính:
+ Các biến và cấu trúc dữ liệu bên trong monitor chỉ có thể được thao tác bởi các
thủ tục định nghĩa bên trong monitor đó
+ Tại một thời điểm, chỉ có một tiến trình duy nhất được hoạt động trong monitor
+ Trong một monitor, có thể định nghĩa các biến điều kiện và hai thao tác kèm
theo là Wait và Signal như sau : gọi C là biến điều kiện được định nghĩa trong
monitor:
Wait(c): chuyển trạng thái tiến trình gọi sang blocked , và đặt tiến trình này vào
hàng đợi trên biến điều kiện C.
Signal(c): nếu có một tiến trình đang bị khóa trong hàng đợi của C, tái kích hoạt
tiến trình đó, và tiến trình gọi sẽ rời khỏi monitor.
Message
Một tiến trình kiểm soát việc sử dụng tài nguyên và nhiều tiến trình khác yêu
cầu tài nguyên này. Tiến trình có yêu cầu tài nguyên sẽ gửi một thông điệp
đến tiến trình kiểm soát và sau đó chuyển sang trạng thái blocked cho đến khi
nhận được một thông điệp chấp nhận cho truy xuất từ tiến trình kiểm soát tài
nguyên. Khi sử dụng xong tài nguyên , tiến trình gửi một thông điệp khác đến
tiến trình kiểm soát để báo kết thúc truy xuất.
Tiến trình kiểm soát, khi nhận được thông điệp yêu cầu tài nguyên, nó sẽ chờ
đến khi tài nguyên sẵn sàng để cấp phát thì gửi một thông điệp đến tiến trình
đang bị khóa trên tài nguyên đó để đánh thức tiến trình này.
=> Semaphore và monitor có thể giải quyết được vấn đề truy xuất độc quyền
trên các máy tính có một hoặc nhiều bộ xử lý chia sẻ một vùng nhớ chung.
Nhưng không hữu dụng trong các hệ thống phân tán, khi mà mỗi bộ xử lý sở
hữu một bộ nhớ riêng biệt và liên lạc thông qua mạng. Trong những hệ thống
phân tán như thế, cơ chế trao đổi thông điệp tỏ ra hữu hiệu và được dùng để
giải quyết bài toán đồng bộ hóa.
3.3 BẾ TẮC – DEADLOCK
3.3.1. Deadlock là gì?
Khi tiến trình P1 yêu cầu tài nguyên A, nhưng A chưa sẵn sàng thì P1 rơi vào
trạng thái chờ đợi. P1 có thể mãi mãi chờ đợi nếu A đang bị tiến trình P2 nắm
giữ, mà P2 đang trong trạng thái chờ tài nguyên B nào đó do P1 nắm giữ.
Trường hợp chờ đợi vòng tròn như vậy và hệ thống không thể tiến triển được
gọi là bế tắc (deadlock).
Ví dụ :
Hệ thống có 2 file (A và B) trên đĩa.
- P1 đang mở (đang khoá) file A và yêu cầu file B.
- P2 đang mở (đang khoá) file B và yêu cầu file A.
=> Deadlock.
3.3.2 Điều kiện xảy ra deadlock
Một tình huống deadlock chỉ xuất hiện khi có 4 tình huống sau đây cùng xảy ra
đồng thời:
• Loại trừ tương hỗ (Mutual Exclusion): Tồn tại một tài nguyên găng
(Critical resource), nơi tại cùng một thời điểm chỉ có thể 1 tiến trình truy
cập.
• Giữ và chờ (Hold and Wait): Một tiến trình P1 phải đang giữ ít nhất một tài
nguyên A và đang chờ một hoặc nhiều tài nguyên B đang bị giữ bởi một tiến
trình B2 khác.
• Không phân phối lại (Non-Preemption): Tài nguyên mà tiến trình đang giữ
không thể phân phối lại cho tiến trình khác trừ khi tiến trình nắm giữ kết thúc
công việc của mình hoặc tự nguyện nhường.
• Chờ đợi vòng tròn (Circular Wait) :Tồn tại nhóm tiến trình P1, P2, …, Pn
sao cho P1 chờ đợi tài nguyên do P2 đang giữ, P2 chờ tài nguyên do P3 đang
giữ, …, Pn chờ tài nguyên do P1 đang giữ.
3.3.3 Các giải pháp cho vấn đề deadlock
- Ngăn ngừa deadlock
- Phòng tránh deadlock
- Phát hiện và giải quyết deadlock
- Bỏ qua deadlock
3.3.3.1 Ngăn ngừa deadlock - (deadlock prevention):
Đảm bảo để không xảy ra ít nhất 1 trong 4 điều kiện nói trên.
- Loại trừ tương hỗ:
+ Đối với tài nguyên không chia sẻ (printer) : Không làm được.
+ Đối với tài nguyên chia sẻ (read-only file) : Không cần thiết.
- Giữ và chờ:
+Cách 1 : Mỗi tiến trình yêu cầu toàn bộ tài nguyên cần thiết một lần.
Nếu có đủ tài nguyên thì hệ thống sẽ cấp phát, nếu không đủ tài nguyên thì tiến
trình phải bị block.
+Cách 2 : Khi yêu cầu tài nguyên, tiến trình không được giữ tài
nguyên nào. Nếu đang có thì phải trả lại trước khi yêu cầu thêm.
- Không phân phối lại: Nếu P1 yêu cầu tài nguyên đang bị tiến trình khác nắm
giữ, có 2 cách:
+ cách 1: OS thu hồi lại toàn bộ tài nguyên mà P1 đang nắm giữ, P1
chỉ Ready khi nhận lại được tài nguyên cũ cùng tài nguyên mới yêu cầu.
+ cách 2: nếu tài nguyên đang giữ bởi 1 tiến trình P2 khác cũng đang
đợi tài nguyên khác thì OS lấy lại tài nguyên và cấp cho P1.
M0 M1 M2 M3 M4 M5
-- Ưu điểm: đơn giản, thời gian thực hiện nhanh vì mọi công việc chuẩn bị
đều được thực hiện trước. Có tính lưu động cao, dễ dàng sao chép chương
trình tới các hệ thống khác có cùng tập mã lệnh mà vẫn duy trì khả năng
thực hiện
-- Nhược điểm: lãng phí bộ nhớ
2.2. Cấu trúc động
- Các modul chương trình được biên tập riêng biệt.
- Khi thực hiện chương trình, hệ thống chỉ cần tải modul gốc vào bộ nhớ.
Trong quá trình thực hiện, cần tới modul nào (đã đăng ký với hệ thống để thực
hiện) thì hệ thống cấp phát không gian nhớ và nạp tiếp modul đó. Khi hoạt
động xong thì giải phóng modul khỏi bộ nhớ, thu hồi không gian nhớ.
M0
M0 M1 M2
M0 M3 M4
M0 M5
- Ưu điểm: nếu quản lý bộ nhớ và tổ chức chương trình tốt sẽ tiết kiệm bộ nhớ;
- Nhược điểm: vì trách nhiệm nạp và xoá các modul là của người dùng nên các
câu lệnh nạp, xoá phải được nêu ngay trong chương trình nguồn => kích thước
chương trình nguồn lớn và người dụng cần phải nắm vững cấu trúc chương
trình và các công cụ điều khiển bộ nhớ của hệ điều hành.
2.3. Cấu trúc Overlay
Các modul chương trình sau khi biên dịch được chia thành các mức:
Mức 0: chứa modul gốc dùng để nạp chương trình
Mức 1: chứa các modul được gọi bởi mức 0
Mức 2: chứa các modul được gọi bởi mức 1
.....
Mức i: chứa các modul được gọi bởi mức i-1
Mức 0: 80Kb M0
(80Kb)
Mức 1: 90Kb M1 M2
(50Kb) (90Kb)
Mức 2: 100Kb M3 M4 M5
(50Kb) (100Kb) (70 Kb)
- Chương trình nguồn được viết và biên dịch như các cấu trúc khác tạo thành các
modul chương trình.
- Người dùng cung cấp thông tin về các mức cho trình biên dịch thông qua sơ đồ
Overlay. Modul gốc được lưu trữ trong một file chương trình riêng. Khi thực
hiện, modul gốc được tải vào bộ nhớ như chương trình có cấu trúc tuyến tính,
sau đấy cần đến modul nào hệ thống sẽ tìm kiếm trong sơ đồ Overlay và nạp vào
bộ nhớ ở mức tương ứng.
- Cấu trúc Overlay, thông thường không xét tới các lời gọi đồng mức.
Ưu điểm: cấu trúc Overlay có tính chất tải động do đó cho phép sử dụng bộ
nhớ nhiều hơn phần bộ nhớ mà hệ thống dành cho chương trình.
- So với cấu trúc động, cấu trúc Overlay chỉ đòi hỏi người sử dụng cung cấp
những thông tin đơn giản và quan trong nhất là không gắn cố định cấu trúc vào
chương trình nguồn.
Nhược điểm: cấu trúc Overlay vẫn yêu cầu người sử dụng cung cấp thông tin
phụ (mặc dù chỉ là các thông tin đơn giản). Hiệu quả tiết kiệm bộ nhớ vẫn phụ
thuộc cách tổ chức, bố trí các modul của chương trình. Chỉ cần một vài modul
có kích thước lớn ở các mức overlay khác nhau thì hiệu quả sử dụng bộ nhớ sẽ
giảm hẳn
2.4. Tải trong quá trình thực hiện
Kỹ thuật tải động: không tải toàn bộ chương trình vào bộ nhớ cùng lần. Khi có
lời gọi hàm, chương trình sẽ kiểm tra xem hàm có trong bộ nhớ chưa, nếu chưa
chương trình tải sẽ được gọi để tải hàm vào bộ nhớ, ánh xạ địa chỉ hàm vào
không gian nhớ chung của chương trình và thay đổi bảng địa chỉ ghi lại các ánh
xạ đó
Việc kiểm tra và tải các hàm do chương trình người dùng đảm nhiệm. Hệ điều
hành không kiểm soát quá trình tải mà chỉ cung cấp các hàm phục vụ việc tải
các mô đun.
2.5. Liên kết động và thư viện dùng chung
Hàm thư viện: là các hàm được dùng chung cho nhiều chương trình.
Trong liên kết truyền thống (liên kết tĩnh), các hàm thư viện được liên kết luôn
vào chương trình chính => tăng không gian chiếm dụng bộ nhớ của chương
trình.
Kỹ thuật liên kết động: chỉ liên kết thư viện vào chương trình trong thời gian
thực hiện bằng cách chèn một đoạn mã nhỏ vào vị trí của hàm thư viện. Đoạn
mã này chứa thông tin về mô đun thư viện như: trong thư viện nào, vị trí (địa
chỉ) mà mô đun đó chiếm trong không gian địa chỉ của chương trình.
3. PHÂN CHƯƠNG BỘ NHỚ (PARTITIONING)
- Hệ điều hành chia bộ nhớ thành các phần liên tục gọi là chương (partition)
- Mỗi tiến trình được cấp 1 chương bộ nhớ
- Quá trình phân chia bộ nhớ thành chương gọi là phân chương bộ nhớ hay
cấp phát vùng nhớ liên tục.
3.1. Phân chương cố định
- Bộ nhớ được phân thành những chương có kích thước cố định ở những vị
trí cố định, mỗi chương chứa được 1 tiến trình.
- Kích thước chương:
Kích thước chương bằng nhau: không mềm dẻo, gây nhiều bất cập trong sử
dụng bộ nhớ. Dẫn đến hiện tượng phân mảnh trong (internal fragmentation).
Kích thước chương không bằng nhau: Các tiến trình được sắp xếp trong
hàng đợi chờ đến lượt được cấp chương bộ nhớ.
2 cách phân chương:
Phân chương nhỏ nhất có thể chứa tiến trình Mỗi chương có một hàng đợi
riêng. Tiến trình có kích thước phù hợp với chương nào sẽ nằm trong hàng đợi
của chương đó.
Ưu điểm: cho phép giảm tối thiểu phân mảnh trong và do đó tiết kiệm được bộ
nhớ
Nhược điểm: có thể có những thời điểm hàng đợi ở 1 chương lớn trống, và ở
chương nhỏ có nhiều tiến trình đang đợi, trong khi đó có thể tải các tiến trình
nhỏ này vào chương lớn hơn và chạy.
Sử dụng một hàng đợi cho tất cả các tiến trình:
- Tất cả các tiến trình được xếp vào chung 1 hàng đợi
- Khi xuất hiện 1 chương trống, tiến trình nằm gần nhất và có kích thước phù
hợp với chương sẽ được tải vào
- Khi một tiến trình bị “chen hàng” vì kích thước không phù hợp, nó sẽ được
cộng thêm 1 điểm ưu tiên. Nếu tiến trình bị bỏ qua số lần tối đa theo quy định,
OS sẽ tìm khả năng tải tiến trình vào bộ nhớ sớm nhất có thể.
=> Phương pháp phân chương cố định mặc dù đơn giản nhưng gây ra vấn đề
phân mảnh và số lượng tiến trình trong bộ nhớ bị hạn chế bởi số lượng chương.
Hiện nay, phương pháp này hầu như không còn được sử dụng.
3.2. Phân chương động
- Kích thước và số lượng chương không cố định, có thể thay đổi.
- Khi được tải vào, tiến trình được cấp không gian bộ nhớ đúng bằng tiến trình
- Sau khi kết thúc tiến trình giải phóng bộ nhớ, trả lại vùng nhớ trống cho OS
- Hệ điều hành sử dụng một bảng quản lý không gian nhớ còn trống
Vấn đề phân mảnh ngoài (external fragmentation)
- Các vùng nhớ trống nhỏ nằm rải rác không ghép lại được với nhau, không đủ
kích thước để cấp phát cho tiến trình.
- Kỹ thuật dồn bộ nhớ: di chuyển các chương đang được cấp phát cho tiến trình
lại gần nhau, dồn các vùng nhớ trống thành vùng trống duy nhất. Kỹ thuật này
đòi hỏi một thời gian nhất định và làm thay đổi địa chỉ của các tiến trình trong
bộ nhớ.
- Nhược điểm: hiệu quả sử dụng bộ nhớ phụ thuộc vào cấu trúc chương trình
của người sử dụng. Ngoài ra, sau một thời gian hoạt động, bộ nhớ bị phân
đoạn do đó cần phải tổ chức lại bộ nhớ bằng cách đưa bớt một số modul ra
ngoài.
5. PHÂN TRANG BỘ NHỚ (PAGING)
- Tương đồng với phân chương cố định.
- Bộ nhớ được chia thành các khối nhỏ kích thước cố định và bằng nhau gọi là
khung trang (page frame) được đánh số 0,1,2,3 … Không gian địa chỉ lôgic của tiến
trình cũng được chia thành các trang (page) có kích thước bằng kích thước của
khung. Tiến trình có thể được cấp các khung nằm tách rời nhau.
- Khi thực hiện chương trình, OS xây dựng một bảng quản lý trang (Page Control
Block - PCB) để xác lập mối quan hệ giữa trang vật lý và trang logic
giảm phân mảnh trong, không có phân mảnh ngoài do mỗi khung trang đều
được sử dụng
5.1. Ánh xạ địa chỉ
-Bảng trang (page table) bao gồm các ô, mỗi ô tương ứng với một trang và
chứa số thứ tự hay địa chỉ cơ sở của khung chứa trang đó trong bộ nhớ.
- Mỗi tiến trình có 1 bảng trang riêng của mình.
Địa chỉ. Địa chỉ lô gic khi phân trang gồm hai phần: số thứ tự trang (p) và độ
dịch (o) của địa chỉ tính từ đầu trang đó. Số thứ tự trang được dùng để tìm ra ô
tương ứng trong bảng trang, từ bảng tìm được địa chỉ cơ sở của khung tương
ứng. Địa chỉ này được cộng vào độ dịch trong trang để tạo ra địa chỉ vật lý và
được chuyển cho mạch điều khiển bộ nhớ để truy cập.
Ưu điểm: sơ đồ phân trang làm tăng tốc độ truy nhập bộ nhớ, không bị
hiện tượng phân mảnh bộ nhớ (vì kích thước trang logic và vật lý bằng
nhau). Nếu còn bộ nhớ tự do thì kích thước phải chẵn trang do đó bao
giờ cũng đủ chỗ để đưa các trang mới vào. Tình trạng thiếu bộ nhớ chỉ
thực sự xảy ra khi tất cả các trang vật lý đã được sử dụng hết.
Nhược điểm: sơ đồ phân trang cần có thiết bị vật lý hỗ trợ công việc
định vị trang vì mỗi trang chương trình không phải là một modul hoàn
chỉnh nên không thể biến đổi địa chỉ và tự định vị theo địa chỉ đầu. Do
đó việc định vị trang phải được sự hỗ trợ của các công cụ ngoài
KẾT HỢP PHÂN ĐOẠN VÀ PHÂN TRANG
- Để kết hợp các ưu điểm của phân đoạn với các ưu điểm của phân trang, các
hệ thống tính toán hiện đại thường kết hợp cả hai phương pháp tổ chức bộ nhớ
này. Tiến trình bao gồm nhiều đoạn. Mỗi đoạn lại được phân trang. Mỗi tiến
trình có một bảng phân đoạn riêng và mỗi đoạn lại có bảng phân trang riêng
của mình.
- Để định vị ô nhớ trong phương pháp này, địa chỉ phải gồm ba phần (s,p,o).
Phần thứ nhất s là số thứ tự đoạn. s cho phép xác định khoản mục ứng với đoạn
trong bảng chia đoạn.
Khoản mục chứa con trỏ tới bảng chia trang cho đoạn đó. Số thứ tự trang p cho
phép xác định khung trang tương ứng. Độ dịch o sẽ được cộng vào địa chỉ
khung để tính ra địa chỉ vật lý.
6. BỘ NHỚ ẢO (Virtual Memory)
6.1 Khái niệm
- Bộ nhớ thực là bộ nhớ vật lý của máy tính, lệnh và dữ liệu chỉ được xử lý khi
nằm trong bộ nhớ thực.
- Bộ nhớ ảo là kỹ thuật cho phép sử dụng không gian nhớ lớn hơn không gian
nhớ thực, bằng cách không tải ngay toàn bộ chương trình vào bộ nhớ thực.
- Bộ nhớ ảo được sử dụng trong hầu hết các hệ điều hành hiện đại.
- Bộ nhớ ảo thường được xây dựng dựa trên phương pháp phân trang trong đó
các trang là đơn vị để nạp từ đĩa vào khi cần. Trong phương pháp kết hợp phân
đoạn với phân trang, trang cũng được sử dụng như đơn vị để xây dựng bộ nhớ
ảo. Phương pháp phân đoạn tương đối ít được sử dụng làm cơ sở cho bộ nhớ
ảo do các thuật toán đổi đoạn phức tạp hơn đổi trang, nguyên nhân chính do
kích thước đoạn không cố định.
6.2. Nạp trang
6.2.1 Nạp trang theo nhu cầu (demand paging)
- Phân trang theo yêu cầu là sự kết hợp giữa kỹ thuật phân trang và kỹ
thuật swapping
- Một chương trình được xem như một tập hợp các trang thường trú trên
bộ nhớ ngoài (thường là đĩa từ). Khi cần xử lý, chương trình sẽ được nạp
vào bộ nhớ trong nhưng thay vì nạp toàn bộ chương trình, hệ thống chỉ
nạp các trang cần thiết trong thời điểm hiện tại.
- Cơ chế phần cứng phân biệt các trang đang ở bộ nhớ trong và các trang ở
bộ nhớ ngoài:
Thêm 1 bít chứa giá trị 1 (0) vào bảng phân trang (1-đã tải vào bộ nhớ
trong; 0 – đang ở bộ nhớ ngoài). Khi tiến truy cập trang, bít này sẽ được
kiểm tra. Nếu giá trị của bit = 1, tiến trình hoạt động bình thường, nếu =0,
xảy ra hiện tượng lỗi trang (page fault).
Phần cứng làm nhiệm vụ ánh xạ địa chỉ trang sinh ra một ngắt và được
chuyển cho hệ điều hành để xử lý.
Xử lý lỗi trang:
Bước 1: Kiểm tra việc truy xuất tới bộ nhớ có hợp lệ hay không.
Nếu có, chuyển sang Bước 2
Ngược lại, kết thúc chương trình.
Bước 2: Tìm vị trí chứa trang cần truy xuất trên đĩa từ
Bước 3: Tìm một trang vật lý trống trong bộ nhớ chính
Nếu tìm thấy, chuyển sang Bước 4
Nếu không, chọn một trang đang sử dụng và chuyển nội dung trang này ra bộ
nhớ ngoài (lưu nội dung trang này vào đĩa từ), cập nhật bảng quản lý trang
tương ứng.
Bước 4: Chuyển trang muốn truy xuất từ bộ nhớ ngoài vào bộ nhớ
trong: nạp trang cần truy xuất vào trang vật lý trống, cập nhật nội dung bảng
quản lý trang.
Bước 5: Tái kích hoạt chương trình.
Nạp trang hoàn toàn theo nhu cầu
6.2.2 Nạp trang trước ((prepage): các trang chưa cần đến cũng được nạp vào
bộ nhớ
6.3. Đổi trang
Khi tiến trình có nhu cầu nạp trang nhưng trong bộ nhớ vật lý không còn
trang trống nữa, có thể có 3 lựa chọn:
- kết thúc tiến trình do không thoả mãn được nhu cầu bộ nhớ
- tạm trao đổi tiến trình ra đĩa, giải phóng toàn bộ không gian mà tiến trình
chiếm trong bộ nhớ và chờ tới khi thuận lợi (nhiều bộ nhớ trống hơn) mới
nạp
lại tiến trình vào bộ nhớ để thực hiện tiếp.
- Đổi trang.
Kỹ thuật đổi trang
Khi tiến trình cần nạp một trang mới, hệ điều hành kiểm tra các trang
trống. Nếu không còn trang trống trong bộ nhớ trong, OS sẽ thực hiện việc
thay thế trang tức là chọn một trang đang tồn tại ở bộ nhớ trong (không
được sử dụng tại thời điểm hiện tại) và đưa nó ra không gian swapping trên
đĩa từ để giải phóng một trang vật lý, dành chỗ nạp trang cần nạp vào bộ
nhớ.
Các bước đổi trang
Bước 1: Xác định trang cần nạp vào trên đĩa
Bước 2: Nếu có khung trống trống thì chuyển sang bước 4.
Bước 3:
a) Lựa chọn một khung để giải phóng. Khung được lựa chọn theo một
thuật toán hay chiến lược đổi trang nào đó.
b) Ghi nội dung khung bị đổi ra đĩa (nếu cần); cập nhật bảng trang và
bảng khung.
Bước 4: Tải trang cần nạp vào khung vừa giải phóng; cập nhật bảng
trang và bảng khung để thể hiện thay đổi này.
Bước 5: Thực hiện tiếp tiến trình từ điểm bị dừng trước khi đổi trang.
Các chiến lược (thuật toán) đổi trang
- Đổi trang tối ưu (OPT): hệ điều hành chọn trang nhớ sẽ không được dùng tới
trong khoảng thời gian lâu nhất để trao đổi. Nói cách khác, trang bị đổi là trang
có lần truy cập tiếp theo cách xa thời điểm hiện tại nhất.
- Vào trước, ra trước (FIFO): Trang được đọc vào bộ nhớ trước sẽ bị đổi ra
trước khi có yêu cầu đổi trang. Chiến lược này sử dụng hàng đợi FIFO: Khi
trang được nạp vào bộ nhớ, số thứ tự trang được thêm vào cuối hàng đợi. Khi
cần đổi trang, trang có số thứ tự ở đầu hàng đợi sẽ bị đổi
- Thay thế trang có lần sử dụng cuối cùng cách thời điểm hiện tại lâu nhất
(LRU): trang bị đổi là trang mà thời gian từ lần truy cập cuối cùng đến thời
điểm hiện tại là lâu nhất. Nói cách khác, đó là trang ít được truy cập trong thời
gian cuối nhất trong số các trang đang nằm trong bộ nhớ.
- Thuật toán đồng hồ (CLOCK): còn gọi là thuật toán cơ hội thứ hai (second
chance), là một cải tiến của thuật toán FIFO nhằm tránh thay thế những trang
mặc dù đã được nạp vào lâu nhưng hiện vẫn có khả năng được sử dụng. Khi
chọn trang, thuật toán đồng hồ dựa trên hai thông tin. Thứ nhất, đó là thứ tự nạp
trang vào bộ nhớ. Thứ hai, thông tin về việc gần đây trang có được truy cập hay
không.
CÂU HỎI ÔN TẬP CHƯƠNG
1. KHÁI NIỆM
2. FILE
3. THƯ MỤC
4. CẤP PHÁT KHÔNG GIAN NHỚ CHO FILE
5. QUẢN LÝ KHÔNG GIAN TRÊN ĐĨA
6. TỔ CHỨC BÊN TRONG CỦA THƯ MỤC
7. ĐỘ TIN CẬY CỦA HỆ THỐNG FILE
8. BẢO MẬT CHO HỆ THỐNG FILE
1. KHÁI NIỆM
1.1. Hệ thống file:
- Từ phía người dùng, hệ thống file là tập hợp các file chứa dữ liệu hoặc chương
trình và hệ thống thư mục cho phép tổ chức và lưu trữ thông tin về các file đó.
- Từ phía hệ điều hành, với vai trò quản lý file và thư mục, các vấn đề được quan
tâm là phương pháp ánh xạ file lên các đĩa, tổ chức bên trong của file và thư mục,
cấu trúc dữ liệu dùng cho biểu diễn file.
- Hệ thống file gồm có các file, các thư mục và cấu trúc dữ liệu đặc thù cho hệ
thống file đó, cũng như phần mềm (mô đun của hệ điệu hành) quản lý các file và
cấu trúc dữ liệu đó.
- File là tập hợp các thông tin liên quan đến nhau được đặt tên và lưu trữ trên
thiết bị nhớ.
- Thuộc tính của file (attribute): thông tin mô tả file
Ví dụ: Tên file, dạng file, kích thước, địa chỉ, người tạo, người sở hữu, thời gian
truy cập, chỉnh sửa lần cuối, quyền truy cập …
Tên file: Tên tự do . Đuôi mở rộng
2. FILE
2.1. Truy cập file
2.1.1 Truy cập tuần tự
- Đa số các hệ điều hành cổ điển chỉ hỗ trợ cách truy cập này. Là phương pháp trong
đó thông tin chứa trong file được đọc hoặc ghi lần lượt từ đầu file, ví dụ theo từng
byte hay từng bản ghi.
- Một con trỏ được sử dụng để định vị ví trí hiện hành trong file. Thao tác đọc trả về
nội dung byte hoặc bản ghi ở vị trí hiện hành
- Phù hợp với thông tin lưu trên băng từ.
- Mặc dù các hệ điều hành ngày nay hỗ trợ những kiểu truy cập phức tạp và ưu việt
hơn song rất nhiều chương trình ứng dụng vẫn sử dụng cách truy cập này.
2.2.2 Truy cập trực tiếp
-Sử dụng phương pháp truy cập trực tiếp (direct access) hay truy cập tương đối: file
được xem như gồm các khối hay các bản ghi được đánh số. Việc đọc ghi các khối
được tiến hành theo thứ tự tùy ý.
Có hai cách để đọc ghi trực tiếp khối:
+ Cách 1: ví dụ lệnh READ n: n là số thứ tự của khối hay bản ghi cần đọc.
+ Cách 2: dùng lệnh định vị SEEK để nhảy tới vị trí cần đọc, sau đó tiến hành đọc
bản ghi, n có thể là số thứ tự tuyệt đối tính từ đầu file hoặc cuối file, hoặc cũng có
thể là khoảng cách tương đối tính từ vị trí hiện thời về phía đầu file hoặc cuối file.
2.2.3 Truy cập dựa trên chỉ số
-Truy cập tới bản ghi trong file không theo số thứ tự hoặc vị trí mà theo một
khoá ứng với bản ghi đó.
-Mỗi file có chứa một chỉ số riêng của mình gồm các khoá và con trỏ chỉ tới các
bản ghi trong file.
-Để truy cập tới bản ghi, ta tìm khoá tương ứng trong chỉ số, sau đó theo con trỏ
chỉ số để xác định bản ghi và tiến hành truy cập.
- Thường dùng cho các file cơ sở dữ liệu.
2.2. Thao tác với file
Tạo file: tạo 1 file trống chưa có dữ liệu, cấp cho file một vị trí kèm theo các
thông tin thuộc tính
Xóa file: giải phóng không gian của file trên đĩa, chỗ của file trong thư mục
Mở file: Thực chất là đọc các thuộc tính và vị trí của file trên đĩa vào bộ nhớ để
tăng tốc độ cho các thao tác đọc ghi tiếp theo.
Thao tác mở file bao gồm:
- Tìm file trong thư mục
- Đọc một phần thông tin file vào bảng chứa thông tin về các file đang mở (tên
file, quyền truy cập, chủ sở hữu file và vị trí các khối chứa nội dung file trên
đĩa …)
- Trả về chỉ số ứng với file trong bảng (số thứ tự của file trong bảng hoặc con
trỏ tới dòng chứa thông tin về file).
Với các hệ điều hành cho phép nhiều người dùng cùng sử dụng, nếu có nhiều
tiến trình cùng lúc yêu cầu mở file, OS sẽ xây dựng một bảng lưu trữ các thông
tin chung về file như tên, vị trí.v.v. và xây dựng riêng cho mỗi tiến trình một
bảng chứa thông tin riêng liên quan đến việc sử dụng file của tiến trình.
Đóng file
Khi đóng file, tất cả các thông số về file trong bảng nói trên sẽ bị xóa.
Ghi vào file:
Vị trí của file trên đĩa được xác định từ thông tin ghi trong thuộc tính của file.
Dữ liệu được ghi vào vị trí hiện hành, nếu vị trí hiện hành là cuối file, thông tin
sẽ được thêm vào và kích thước file tăng lên. Nếu không phải cuối file, thông
tin ở vị trí đó sẽ bị ghi đè lên. Lệnh ghi file cần cung cấp thông tin cần ghi.
Đọc từ file:
Thông tin đọc từ vị trí hiện hành. Lệnh đọc file cần cung cấp thông tin
về số lượng byte hoặc bản ghi cần đọc và nơi chứa dữ liệu được đọc từ file.
Định vị (seek)
Cho phép xác định vị trí hiện hành của file.
Đọc thuộc tính của file
Một số chương trình cần đến thao tác này trong quá trình làm việc.
Thay đổi thuộc tính của file
Một số thuộc tính của file cho phép đặt lại giá trị
Khóa file (lock):
- Một số OS cho phép tiến trình khóa file khi đang truy cập (không cho phép
tiến trình khác đồng thời truy cập
- Có thể khóa file theo từng loại thao tác.
3. THƯ MỤC (directory hay folder)
- Để phân biệt khoản mục của file với khoản mục chỉ tới thư mục con, thường
sử dụng một bit đặc biệt, nếu bit này bằng 1, thì đó là khoản mục của thư mục
mức dưới, nếu bằng 0, đó là khoản mục của file.
- Thư mục (thư mục con) được lưu trên đĩa như 1 file thông thường, nhưng lời
gọi hệ thống đối với thư mục khác đối với file.
3.3.3 Cấu trúc đồ thị không tuần hoàn
- Acyclic graph
- Thư mục và file có thể đồng thời
Thuộc về các thư mục
- Cách triển khai: tạo liên kết đến
File hoặc thư mục dùng chung
hoặc tạo bản sao của thư mục (file)
cần chia sẻ và lưu vào các thư mục
hác nhau (OS cần đảm bảo tính
đồng bô và nhất quán của chúng)
mềm dẻo hơn nhưng phức tạp hơn
1. Hệ thống file là gì? Hãy nêu các phương pháp truy cập file và đặc điểm của
chúng.
2. Các cấu trúc thư mục thông dụng và đặc điểm của chúng.
3. Trình bày khái niệm cấp phát không gian nhớ cho file.
4. Các phương pháp cấp phát không gian nhớ cho file.
5. Trình bày các phương pháp xây dựng thư mục