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

Một phần của tài liệu Giáo trình tổng quan về DHD (Trang 61)

- Đọ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 điu phi 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 hiu được gi đi bi:

- 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 yê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 nhn tín hiu, nĩ cĩ th x lý theo mt 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điu hành đồng b hĩa vic truy xut pipe trong tình hung 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.

Nhn 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ẻ

Nhn 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 Giáo trình tổng quan về DHD (Trang 61)