Thuật tốn nhiều mức độ ưu tiên

Một phần của tài liệu Hệ Điều Hành Học Viện Công Nghệ Bưu Chính Viễn Thông (Trang 61 - 66)

- Đọc/Ghi ngày, tháng, năm

e/ Thuật tốn nhiều mức độ ưu tiên

Danh sách sẵn sàng đƣợc chia thành nhiều danh sách, mỗi danh sách gồm các tiến trình cĩ cùng độ ƣu tiên và đƣợc áp dụng một giải thuật điều phối riêng. Ngồi ra, cần cĩ một giải thuật điều phối giữa các danh sách, thƣờng giải thuật này là giải thuật khơng độc quyền và sử dụng độ ƣu tiên cố định. Một tiến trình thuộc về một danh sách nào đĩ chỉ đƣợc cấp phát CPU khi các danh sách cĩ cấp độ ƣu tiên cao hơn đã trống.

Hình 3.19: mơ hình điều phối theo nhiều mức ƣu tiên

Nhận xét:

- Cĩ thể dẫn đến tình trạng "đĩi CPU" cho các tiến trình thuộc về những danh sách cĩ độ ƣu tiên thấp. Do vậy cĩ thể xây dựng giải thuật điều phối nhiều cấp ƣu tiên và xoay vịng (Multilevel Feedback). Giải thuật này sẽ chuyển dần một tiến trình từ danh sách cĩ độ ƣu tiên cao xuống danh sách cĩ độ ƣu tiên thấp hơn sau một khoảng thời gian nào đĩ. Cũng vậy, một tiến trình chờ quá lâu trong các danh sách cĩ độ ƣu tiên thấp cũng đƣợc chuyển dần lên các danh sách cĩ độ ƣu tiên cao hơn.

- Khi xây dựng giải thuật điều phối nhiều cấp ƣu tiên và xoay vịng cần quan tâm các vấn đề sau : - Số lƣợng các cấp ƣu tiên

- Giải thuật điều phối cho từng danh sách ứng với một cấp ƣu tiên.

- Phƣơng pháp xác định thời điểm di chuyển một tiến trình lên danh sách cĩ độ ƣu tiên cao hơn và phƣơng pháp xác định thời điểm di chuyển một tiến trình xuống danh sách cĩ độ ƣu tiên thấp hơn. - Phƣơng pháp xác định một tiến trình mới đƣợc đƣa vào hệ thống sẽ thuộc danh sách cĩ độ tiên nào.

Hình 3.20: mơ hình điều phối theo nhiều mức ƣu tiên xoay vịng.

+ Chiến lược điều phối xổ số (Lottery)

Phát một vé số cho mỗi tiến trình khi vào hệ thống. Khi đến thời điểm ra quyết định điều phối, sẽ chọn 1 vé “trúng giải”, tiến trình nào sỡ hữu vé này sẽ đƣợc nhận CPU. Đây là giải thuật độc quyền.

Nhận xét: Giải thuật Lottery đơn giản chi phí thấp, bảo đảm tính cơng bằng cho các tiến trình.

3.3. LIÊN LẠC GIỮA CÁC TIẾN TRÌNH

Một tiến trình khơng bị ảnh hƣởng bởi một tiến trình khác gọi là tiến trình độc lập, ngƣợc lại gọi là tiến trình hợp tác (cooperating process). Lý do các tiến trình hợp tác, liên lạc với nhau là để chia sẻ thơng tin nhƣ dùng chung file, bộ nhớ,… hoặc hợp tác hồn thành cơng việc. Hệ điều hành cần cung cấp cơ chế để các tiến trình liên lạc với nhau, và thơng thƣờng cĩ các cơ chế liên lạc sau:

3.3.1 Liên lạc bằng tín hiệu (Signal)

Một tín hiệu đƣợc sử dụng để thơng báo cho tiến trình về một sự kiện nào đĩ xảy ra. Với mỗi tín hiệu sẽ cĩ một hàm xử lý tín hiệu (signal handler) do phần cứng hoặc hệ điều hành cung cấp. Ví dụ một số tín hiệu của hệ điều hành UNIX:

Tín hiệu Mơ tả

SIGINT Ngƣời dùng nhấn phím Ctl-C để ngắt xử lý tiến trình SIGILL Tiến trình xử lý một chỉ thị bất hợp lệ

SIGKILL Yêu cầu kết thúc một tiến trình SIGFPT Lỗi chia cho 0

SIGSEGV Tiến trình truy xuất đến một địa chỉ bất hợp lệ SIGCLD Tiến trình con kết thúc

+ Tín hiệu được gởi đi bởi:

- Phần cứng: Ví dụ lỗi do các phép tính số học

- Hệ điều hành: Ví dụ một tiến trình nào đĩ truy xuất đến một địa chỉ bất hợp lệ. - Tiến trình: Ví dụ tiến trình cha u cầu một tiến trình con kết thúc

- Ngƣời sử dụng: Ví dụ NSD nhấn phím Ctl-C để ngắt xử lý của tiến trình.

+ Khi tiến trình nhận tín hiệu, nĩ cĩ thể xử lý theo một trong các cách sau:

- Xử lý tín hiệu bằng cách gọi hàm xử lý tín hiệu. - Xử lý theo cách riêng của tiến trình.

- Bỏ qua tín hiệu.

Ví dụ cĩ 11 bƣớc khi thực hiện lời gọi hệ thống: read(fd,buffer,nbyte)

ghi số byte cần đọc (nbytes) vào thanh ghi; ghi địa chỉ vùng nhớ chứa dữ liệu (buffer) vào thanh ghi; ghi số hiệu đĩa vào thanh ghi (fd=0 là đĩa mềm,…); gọi hàm hệ thống read;…

Hình 3.22: các bƣớc thực hiện lời gọi hệ thống read.

Nhận xét

- Tiến trình nhận tín hiệu khơng thể xác định trƣớc thời điểm nhận tín hiệu.

Quản lý tiến trình

Hàm Ý nghĩa

pid = fork() Tạo một tiến trình con giống hết tiến trình cha pid = waitpid(pid,&statloc, options) Đợi một tiến trình con để ngừng thực thi

s = execve(name, argv, environp) Thay thế 1 “ảnh nhân tiến trình” (process‟ core image) exit(status) Ngừng thực thi tiến trình và nhận về trạng thái

Quản trị tập tin

Hàm Ý nghĩa

fd = open(file, how, …) Mở 1 file để đọc hoặc ghi hoặc cả hai s = close(fd) Đĩng 1 file đang mở

n = read(fd, buffer, nbytes) Đọc dữ liệu từ 1 file vào 1 bộ đệm (buffer) n = write(fd, buffer, nbytes) Ghi dữ liệu từ 1 bộ đệm vào 1 file

position = lseek(fd, offset, whence) Di chuyển con trỏ của file s = stat(name, &buf) Lấy thơng tin trạng thái của 1 file

Quản trị hệ thống thƣ mục và tập tin

Hàm Ý nghĩa

s = mkdir(name, mode) Tạo thƣ mục mới s = rmdir(name) Xĩa một thƣ mục rỗng

s = link(name1, name2) Tạo một đề mục mới gọi là name2, chỉ tới name1. s = unlink(name) Xĩa một đề mục

s = mount(special, name, tag) Khởi tạo hệ thống tập tin s = unmount(special) Đĩng hệ thống tập tin

Các hàm khác

Hàm Ý nghĩa

s = chdir(dirname) Đổi thƣ mục làm việc s = chmod(name, mode) Đổi các bit bảo vệ của 1 file s = kill(pid, signal) Gửi 1 tín hiệu tới 1 tiến trình

seconds = time(&seconds) Lấy thời gian đã trơi qua từ ngày 1/1/1097

Hình 3.23: một số lời gọi hệ thống thơng dụng

3.3.2 Liên lạc bằng đƣờng ống (Pipe)

Đƣờng ống là một kênh liên lạc trực tiếp giữa hai tiến trình, dữ liệu xuất của tiến trình này đƣợc chuyển đến làm dữ liệu nhập cho tiến trình kia dƣới dạng một dịng các byte. Thứ tự dữ liệu truyền qua pipe đƣợc bảo tồn theo nguyên tắc FIFO. Một tiến trình chỉ cĩ thể sử dụng một pipe do nĩ tạo ra hay kế thừa từ tiến trình cha.

Hình 3.24: mơ hình liên lạc bằng đƣờng ống.

Hệ điều hành cần cung cấp các hàm (lời gọi hệ thống) read/write cho các tiến trình thực hiện thao tác đọc/ghi dữ liệu trong pipe.

+ Hệ điều hành đồng bộ hĩa việc truy xuất pipe trong tình huống sau:

- Tiến trình đọc pipe sẽ bị khĩa nếu pipe trống, và đợi đến khi pipe cĩ dữ liệu mới đƣợc truy xuất. - Tiến trình ghi pipe sẽ bị khĩa nếu pipe đầy, và đợi đến khi pipe cĩ chỗ trống để chứa dữ liệu.

Nhận xét:

Một tiến trình kết nối với một pipe chỉ cĩ thể thực hiện một trong hai thao tác đọc hoặc ghi. Pipe cho phép truyền dữ liệu khơng cấu trúc.

Pipe chỉ để liên lạc giữa hai tiến trình cĩ quan hệ cha-con, và trên cùng một máy tính.

3.3.3 Liên lạc qua vùng nhớ chia sẻ (shared memory)

Nhiều tiến trình cùng cĩ thể truy xuất đến một vùng nhớ dùng chung, dữ liệu mà các tiến trình muốn gởi cho nhau, chỉ cần đặt vào vùng nhớ này. Vùng nhớ chia sẻ độc lập với các tiến trình, khi một tiến trình nào đĩ muốn truy xuất đến vùng nhớ dùng chung, tiến trình phải gắn kết vùng nhớ chung vào khơng gian địa chỉ riêng của tiến trình, và thao tác trên vùng nhớ chung giống nhƣ vùng nhớ của tiến trình.

Hình 3.25: Mơ hình liên lạc bằng vùng nhớ chia xẻ

Nhận xét:

- Vùng nhớ chia sẻ là phƣơng pháp nhanh nhất để trao đổi dữ liệu giữa các tiến trình. - Vùng nhớ chia sẻ cần đƣợc bảo vệ bằng những cơ chế đồng bộ hĩa.

- Vùng nhớ chia sẻ khơng thể áp dụng hiệu quả trong các hệ phân tán

3.3.4 Liên lạc bằng thơng điệp (Message)

Hai tiến trình muốn liên lạc với nhau, cần thiết lập một mối liên kết giữa hai tiến trình, sau đĩ sử dụng các hàm send, receive do hệ điều hành cung cấp để trao đổi thơng điệp. Khi sự liên lạc chấm dứt mối liên kết giữa hai tiến trình sẽ bị hủy.

* Cĩ hai cách liên lạc bằng thơng điệp:

Một phần của tài liệu Hệ Điều Hành Học Viện Công Nghệ Bưu Chính Viễn Thông (Trang 61 - 66)

Tải bản đầy đủ (PDF)

(200 trang)