1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Tiểu luận nhập môn hệ điều hành thread scheduling (phần load sharing)

39 5 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Tiểu luận Nhập Môn Hệ Điều Hành Thread Scheduling (Phần Load Sharing)
Tác giả Huỳnh Minh Ngọc
Người hướng dẫn Bùi Quy Anh, PTS.
Trường học Trường Đại học Tôn Đức Thắng
Chuyên ngành Hệ Điều Hành
Thể loại Báo cáo tiểu luận
Năm xuất bản 2022
Thành phố TP. Hồ Chí Minh
Định dạng
Số trang 39
Dung lượng 1,46 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Cấu trúc

  • I. Hệ thống nhúng (Embedded Operating Systems) (10)
    • 1. Định nghĩa (10)
    • 2. Cách thức hoạt động (10)
    • 3. Hệ thống nhúng khác nhau đáng kể (11)
    • 4. Ứng dụng thực tế (11)
  • II. Hệ điều hành thời gian thực (Real-time Operating Systems) (12)
    • 2. Cách thức hoạt động và đặc điểm (12)
    • 3. Phân loại (13)
  • I. Máy chủ web (Web server) (14)
    • 1. Máy chủ web (14)
    • 2. Luồng (Thread) (15)
    • 4. Đọc và giải thích hình (16)
    • 5. Giải pháp thứ ba Máy trạng thái hữu hạn (20)
    • 1. Lập lịch luồng (Thread Scheduling) (21)
    • 2. Chia sẻ tải (Load sharing) (22)
    • 3. Nhược điểm của chia sẻ tải (24)
    • 1. Các cơ chế hoạt động chung (26)
    • 2. Semaphore (26)
    • 3. Semaphore nhị phân (29)
    • 4. Hạn chế về thời gian chờ bận (busy waiting) (30)
  • PHỤ LỤC (32)
    • I. Các ví dụ thực tế (35)
      • 1. Lên lịch FCFS (35)
      • 2. Nút thắc cổ chai (36)
    • II. Một số bài toán minh họa nhược điểm của phương pháp FCFS:. 36 1. Bài toán 1: Cho dãy tiến trình và thời gian phục vụ tương ứng: 36 2. Bài toán 2: Giả sử các bộ xử lí P1, P2, P3 ở bài toán 1 có thời (37)

Nội dung

Hay một định nghĩa khác: - Hệ thống nhúng là một hệ điều hành OS chuyên biệt được thiết kế để thực hiện một nhiệm vụ cụ thể cho một thiết bị mà không phải là máy tính.. Ví dụ: Hệ thống

Hệ thống nhúng (Embedded Operating Systems)

Định nghĩa

Ngày nay, công nghệ đã trở thành phần thiết yếu trong cuộc sống, dẫn đến sự phát triển hiện đại của các thiết bị điện tử, đặc biệt là các hệ thống nhúng.

Hệ thống nhúng (Embedded Operating Systems) là một hệ thống độc lập, thường được tích hợp vào các hệ thống lớn hơn Chúng được thiết kế để thực hiện các nhiệm vụ cụ thể, có thể hoàn thành nhiệm vụ độc lập hoặc hỗ trợ trong việc hoàn thành nhiệm vụ của toàn bộ hệ thống.

Hay một định nghĩa khác:

Hệ thống nhúng là một loại hệ điều hành chuyên biệt, được phát triển để thực hiện các nhiệm vụ cụ thể cho các thiết bị không phải là máy tính.

Cách thức hoạt động

- Hệ thống nhúng có xu hướng chỉ thực hiện những nhiệm vụ cụ thể.

Hệ thống nhúng của thang máy bao gồm bộ vi xử lý hoặc vi điều khiển, giúp thang máy nhận diện nút bấm và thực hiện yêu cầu một cách chính xác.

- Hệ điều hành cung cấp các tính năng hạn chế do các hệ thống mà chúng chạy thường là nguyên thủy.

- Chúng dành thời gian để quản lí và theo dõi các thiết bị phần cứng

- Thông thường thì các thiết bị này có rất ít hoặc không có giao diện người dùng.

- Một số hệ thống nhúng hiện nay: Embedded Linux, VxWorks, Integrity, QNX,…

Hệ thống nhúng khác nhau đáng kể

Hệ điều hành tiêu chuẩn, như Hệ điều hành Linux, được thiết kế cho mục đích sử dụng chung và hỗ trợ các ứng dụng cụ thể nhằm triển khai các chức năng nhất định.

Hệ điều hành nhúng được thiết kế cho các thiết bị phần cứng với mục đích đặc biệt, cung cấp các chức năng cụ thể Các thiết bị này thường sử dụng mạch tích hợp dành riêng cho các ứng dụng (ASIC) để thực hiện các tác vụ mà không cần đến hệ điều hành.

Ứng dụng thực tế

- Ứng dụng tiêu dùng: máy giặt, lò vi sóng, thiết bị giải trí bằng Audio/ Video, đồ chơi điều khiển từ xa,

- Ứng dụng phương tiện: các thiết bị an toàn trên xe ô tô (túi khí, ABS), cửa tự động.

- Ứng dụng liên lạc: hệ thống định vị toàn cầu (GPS), thiết bị không dây (điện thoại, máy chiếu), máy ATM, thẻ tín dụng,…

- Lĩnh vực công nghiệp: robotics, nhà máy điện hóa chất/ hạt nhân, đèn giao thông, camera an ninh,…

- Lĩnh vực y tế: màn hình quan sát tim, máy tạo nhiệt tim, máy lọc máu, kĩ thuật gắn chân giả,

- Lĩnh vực quân sự: thiết bị điều hướng và xác định máy bay, trực thăng; máy xác nhận mục tiêu, tháo bom tự động,…

Hệ điều hành thời gian thực (Real-time Operating Systems)

Cách thức hoạt động và đặc điểm

Các cảm biến sẽ truyền dữ liệu đến máy tính, nơi mà dữ liệu này được phân tích và máy tính có khả năng điều chỉnh các điều khiển để thay đổi các đầu vào từ cảm biến.

- Hệ thống thời gian thực có các giới hạn thời gian cố định và được xác định rõ ràng:

 Tính kịp thời: quá trình xử lí phải được thực hiện đúng trong khoảng thời gian đã ràng buộc.

 Tính chính xác: nó chỉ hoạt động đúng nếu nó trả về đúng trong giới hạn thời gian ràng buộc, ngược lại sẽ thất bại.

Máy tính có hệ thống thời gian thực khác biệt so với các loại máy tính truyền thống ở chỗ chúng yêu cầu thực hiện các tác vụ chính xác trong khoảng thời gian cố định, trong khi các máy tính trước đây không bắt buộc phải phản hồi nhanh chóng.

 Ví dụ: Các ứng dụng như Word, Excel sẽ mất khoảng thời gian thực thi và hiển thị khác nhau ở mỗi lần được kích hoạt.

Phân loại

Hình 1 1: Hệ thống thời gian thực cứng và thời gian thực mềm

- Hệ thống xử lí thời gian thực cứng (Hard real-time): các công việc tuyệt đối phải được hoàn thành đúng, chính xác trong thời gian quy định.

 Ứng dụng: trong các lĩnh vực quan sự, y tế, ngành công nghiệp, hàng không, robotics, hệ thống phun nhiên liệu cho động cơ – ô tô,…

Phẫu thuật robot từ xa yêu cầu sự đồng bộ hoàn hảo giữa hệ thống và hành động của bác sĩ, vì nếu hệ thống hoạt động quá nhanh hoặc quá chậm, có thể gây nguy hiểm đến tính mạng bệnh nhân Tương tự, các hệ thống xe hơi không người lái dựa trên nền tảng QNX cũng cần đảm bảo tính chính xác và an toàn trong mọi tình huống Trong lĩnh vực phóng vệ tinh, việc vòi phun của tên lửa không hoạt động đúng thời gian quy định có thể dẫn đến thất bại và gây thiệt hại tài chính nghiêm trọng.

Hệ thống xử lý thời gian thực mềm (Soft real-time) cho phép thời gian thực thi có thể bị vi phạm trong những khoảng nhỏ không thường xuyên, miễn là điều này không gây ra thiệt hại nào.

 Ứng dụng: hệ thống âm thanh kĩ thuật số, điện thoại,…

Khi mở ổ CD/DVD của máy tính cá nhân (PC) có sự chậm trễ nhưng hoàn toàn không gay ra thiệt hại nào.

Câu 2: Trình bày về Thread usage (Web server) (đọc và giải thích hình 2.8) Trả Lời:

Máy chủ web (Web server)

Máy chủ web

Web server, hay máy chủ web, là một máy tính lớn kết nối với mạng máy tính mở rộng, chứa toàn bộ dữ liệu mà nó quản lý Mỗi máy chủ có địa chỉ IP riêng và có khả năng đọc nhiều ngôn ngữ như HTML, HTM, và các loại file khác Với dung lượng lớn và tốc độ cao, máy chủ đảm bảo việc lưu trữ và vận hành kho dữ liệu trên internet một cách hiệu quả.

Cổng giao tiếp riêng biệt của mỗi máy chủ giúp hệ thống máy tính hoạt động hiệu quả hơn Để cung cấp dữ liệu liên tục cho mạng lưới máy tính, máy chủ cần đảm bảo hoạt động ổn định.

Máy chủ web theo luồng xử lý từng yêu cầu bằng cách tạo ra một luồng mới cho mỗi yêu cầu, khác với phương pháp truyền thống là sử dụng một quy trình mới cho từng yêu cầu.

Máy chủ web hoạt động với một hàng đợi cho các yêu cầu HTTP và một nhóm các luồng để xử lý chúng Khi nhận được yêu cầu, máy chủ sẽ lấy yêu cầu đầu tiên từ hàng đợi và chỉ định một luồng từ nhóm để thực hiện Các yêu cầu sẽ được xếp hàng trong hàng đợi nếu chúng đến nhanh hơn khả năng xử lý của các luồng hoặc khi nhóm luồng đã hết.

Ví dụ: Người dùng truy cập vào website tdtu.edu.vn Khi đó, server sẽ cung cấp tất cả dữ liệu về website đó thông qua lệnh giao tiếp.

Luồng (Thread)

Một tiến trình có khả năng tạo ra nhiều luồng, mỗi luồng thực hiện chức năng riêng biệt và có thể thực thi đồng thời thông qua việc chia sẻ CPU Các luồng trong cùng một tiến trình chia sẻ không gian địa chỉ nhưng có con trỏ lệnh, tập các thanh ghi và stack riêng biệt Ngoài ra, một luồng cũng có thể tạo ra các tiến trình con và nhận các trạng thái khác nhau giống như một tiến trình.

3 Máy chủ đơn luồng và máy chủ đa luồng (Single threaded web and multithreaded server web)

- Máy chủ đơn luồng: là loại máy chủ đơn giản nhất, chỉ sinh ra một luồng duy nhất nên khi đó:

 Chỉ xử lý được một yêu cầu tại một thời điểm.

 Các yêu cầu chỉ có thể được xử lý tuần tự.

 Các yêu cầu có thể được xử lý bởi các tiến trình khác nhau và được gửi đến các server khác nhau.

Hệ thống không đảm bảo tính trong suốt khi các yêu cầu gửi lên chưa được xử lý kịp thời và phải chờ trong hàng đợi, điều này khiến người dùng không cảm nhận được sự minh bạch của hệ thống.

 Là vòng lặp để đọc các yêu cầu và chuyển chúng đến Dispatcher để xử lý.

Máy chủ đa luồng là loại máy chủ có khả năng xử lý nhiều luồng đồng thời, với mỗi luồng đảm nhận việc xử lý một yêu cầu riêng biệt từ các máy khách Khi có yêu cầu mới, máy chủ sẽ khởi động một luồng mới để đáp ứng kịp thời.

Hình 2 2: Hoạt động của multithreaded server web

Việc áp dụng cơ chế đa luồng trong hệ thống cho phép trao đổi thông tin giữa client và server diễn ra song song với các công việc xử lý khác, từ đó nâng cao tốc độ và hiệu suất hoạt động của hệ thống.

Đọc và giải thích hình

 Web server process: Tiến trình máy chủ web

Luồng điều phối là một luồng chuyên dụng có nhiệm vụ quản lý và phân phối các yêu cầu công việc Khi nhận được yêu cầu, luồng này sẽ phân tích và chuyển tiếp đến các luồng phù hợp để xử lý hiệu quả.

Luồng làm việc (worker thread) là một loại luồng mà lập trình viên tạo ra để thực hiện các tác vụ không liên quan đến giao diện người dùng.

 Network connection: các yêu cầu công việc từ mạng gửi vào

Bộ nhớ đệm trang web (web page cache) là một hệ thống lưu trữ tạm thời các nội dung tĩnh thường xuyên được truy cập, giúp tăng tốc độ truy xuất dữ liệu cho các lần truy cập sau mà không cần phải sử dụng bộ nhớ chính.

Không gian người dùng là khu vực địa chỉ mà mã thực thi bị giới hạn truy cập Trong không gian này, bảng quản lý luồng lưu trữ được đặt và tiến trình chịu trách nhiệm điều phối các luồng.

 Kernel space (không gian nhân): bảng quản lý thread lưu trữ ở phần kernel và việc điều phối các luồng là do hệ điều hành chịu trách nhiệm

Trong mô hình đơn luồng, người điều phối (dispatcher) nhận và kiểm tra các yêu cầu công việc từ mạng Sau khi xác định yêu cầu, nó sẽ chọn một luồng làm việc (worker thread) đang không hoạt động (idle or blocked) và gửi yêu cầu cho luồng đó Việc này có thể được thực hiện bằng cách ghi một con trỏ tới thông báo đặc biệt liên kết với từng luồng Cuối cùng, người điều phối sẽ đánh thức luồng đang ngủ, chuyển nó từ trạng thái bị chặn (blocked) sang trạng thái sẵn sàng (ready).

Khi nhân viên thức dậy, nó sẽ kiểm tra khả năng đáp ứng yêu cầu từ bộ đệm của trang Web Nếu không có dữ liệu từ bộ đệm, nó sẽ bắt đầu thao tác đọc để lấy các trang từ đĩa và thực hiện chặn cho đến khi hoàn tất Trong khi luồng chặn đang hoạt động trên đĩa, một luồng khác sẽ được chọn để chạy, có thể là bộ điều phối hoặc một nhân viên khác đã sẵn sàng.

Mô hình này cho phép máy chủ được cấu trúc dưới dạng các luồng tuần tự, trong đó mỗi web server bao gồm hai luồng chính: luồng dispatcher và luồng worker, đảm nhiệm các nhiệm vụ khác nhau.

 Chương trình của người điều phối bao gồm một vòng lặp vô hạn để nhận yêu cầu công việc và giao nó cho nhân viên

Mỗi mã nhân viên thực hiện một vòng lặp vô hạn, trong đó chấp nhận yêu cầu từ người điều phối và kiểm tra bộ nhớ cache của Web để xác định xem trang có sẵn hay không Nếu trang có trong cache, nó sẽ được trả lại cho khách hàng, và nhân viên sẽ chờ yêu cầu mới Ngược lại, nếu trang không có trong cache, nhân viên sẽ lấy trang từ đĩa và tiếp tục quy trình tương tự.

Hình 2 4: Sơ lược về code cho hình 2 3 (a) Dispatcher thread (b) Worker thread

- Ở đây, TRUE được giả định là hằng số 1 Ngoài ra, buf và page là để lưu giữ một yêu cầu công việc và một trang Web tương ứng.

Vậy khi máy chủ web không có luồng thì thực thi như thế nào?

Máy chủ Web có thể hoạt động như một luồng duy nhất, trong đó vòng lặp chính nhận và xử lý từng yêu cầu một cách tuần tự Khi máy chủ đang chờ đĩa, nó không hoạt động và không thể xử lý các yêu cầu khác Điều này dẫn đến việc CPU trên máy chủ chuyên dụng không hoạt động trong thời gian chờ đợi.

Kết quả thực tế cho thấy rằng số lượng yêu cầu xử lý mỗi giây có thể thấp hơn mong đợi Mặc dù các luồng đạt được hiệu suất đáng kể, nhưng mỗi luồng vẫn được lập trình theo cách tuần tự truyền thống Do đó, cần tìm kiếm giải pháp khác cho vấn đề này trong phần tiếp theo.

Giải pháp thứ ba Máy trạng thái hữu hạn

Hai thiết kế được xem xét là máy chủ Web đa luồng và máy chủ Web đơn luồng Khi các luồng không khả dụng, các nhà thiết kế hệ thống nhận thấy rằng hiệu suất kém do sử dụng luồng đơn là một vấn đề nghiêm trọng Nếu có phiên bản không chặn của lệnh gọi hệ thống đọc, một cách tiếp cận thứ ba có thể được thực hiện.

Khi một yêu cầu được gửi đến, một luồng duy nhất sẽ kiểm tra yêu cầu đó Nếu yêu cầu có thể được đáp ứng từ bộ nhớ cache, điều này sẽ mang lại hiệu quả tốt Tuy nhiên, nếu không, một hoạt động đĩa không chặn sẽ được thực hiện để xử lý yêu cầu.

Máy chủ ghi lại trạng thái yêu cầu hiện tại trong một bảng và tiếp tục nhận yêu cầu tiếp theo, có thể là công việc mới hoặc câu trả lời từ đĩa Nếu là công việc mới, nó sẽ được bắt đầu ngay lập tức Ngược lại, nếu là câu trả lời từ đĩa, thông tin liên quan sẽ được tìm nạp từ bảng và xử lý Đối với I/O đĩa không chặn, phản hồi có thể được gửi dưới dạng tín hiệu hoặc ngắt.

Trong thiết kế này, mô hình "quy trình tuần tự" trong hai trường hợp đầu tiên bị mất, yêu cầu trạng thái của tính toán phải được lưu và khôi phục rõ ràng trong bảng khi máy chủ chuyển đổi giữa các yêu cầu Chúng tôi đang gặp khó khăn trong việc mô phỏng các luồng và ngăn xếp của chúng Thiết kế này, trong đó mỗi tính toán có trạng thái đã lưu và có các sự kiện có thể thay đổi trạng thái, được gọi là máy trạng thái hữu hạn (finite-state machine).

Phương pháp này duy trì ý tưởng về quy trình tuần tự thực hiện các lệnh gọi chặn, như I/O đĩa, trong khi vẫn đạt được tính song song Máy chủ đơn luồng giữ được sự đơn giản của việc chặn các cuộc gọi hệ thống nhưng lại ảnh hưởng đến hiệu suất Cách tiếp cận này đạt hiệu suất cao nhờ vào tính song song, nhưng sử dụng các cuộc gọi và ngắt không chặn, dẫn đến khó khăn trong lập trình.

Câu 3: Thread Scheduling (phần LOAD SHARING)

Lập lịch luồng (Thread Scheduling)

Một ứng dụng có thể được triển khai dưới dạng một tập hợp các luồng hợp tác, cho phép thực thi đồng thời trong cùng một không gian địa chỉ.

Trên một bộ xử lý đơn, luồng hỗ trợ cấu trúc chương trình và chồng chéo I/O với xử lý, mang lại lợi ích chi phí thấp hơn so với chuyển đổi quy trình Tuy nhiên, ưu điểm của luồng trở nên rõ ràng hơn trong hệ thống đa xử lý.

 Trong môi trường này, các luồng có thể được sử dụng để khai thác tính song song (parallelism) thực sự trong một ứng dụng

 Nếu các luồng khác nhau của một ứng dụng được chạy đồng thời trên các bộ xử lý riêng biệt, thì có thể đạt được hiệu suất đáng kể

Đối với các ứng dụng yêu cầu sự tương tác đáng kể giữa các luồng, tính song song trung bình (medium-grain parallelism) là một yếu tố quan trọng cần được xem xét.

 Sự khác biệt nhỏ trong việc lập lịch và quản lý luồng có thể có tác động đáng kể đến hiệu suất

- Trong số nhiều đề xuất về lập lịch luồng đa bộ xử lý và phân công bộ xử lý, có bốn cách tiếp cận chung nổi bật:

 Chỉ định bộ xử lý chuyên dụng

Chia sẻ tải (Load sharing)

Load sharing là quá trình mà các tác vụ không được gán cho một bộ xử lý cụ thể Hệ thống duy trì một hàng đợi toàn cục gồm các luồng đã sẵn sàng, và mỗi bộ xử lý sẽ chọn một luồng từ hàng đợi khi không hoạt động Thuật ngữ load sharing được sử dụng để phân biệt với load-balancing, trong đó công việc được phân bổ một cách đồng đều trên các bộ xử lý.

- Đây là cách tiếp cận đơn giản nhất và trực tiếp nhất từ môi trường đơn xử lý

Tải được phân bổ đồng đều giữa các bộ xử lý, giúp tối ưu hóa hiệu suất làm việc bằng cách đảm bảo rằng không có bộ xử lý nào bị nhàn rỗi trong khi vẫn còn công việc cần thực hiện.

Không cần phải thiết lập lịch tập trung hay quy về một chỗ; khi một bộ xử lý khả dụng, hệ điều hành sẽ tự động chạy quy trình lập lịch trên bộ xử lý đó để chọn luồng tiếp theo.

Hàng đợi toàn cục có thể được tổ chức và truy cập thông qua các lược đồ dựa trên mức độ ưu tiên, đồng thời xem xét lịch sử thực thi và các nhu cầu xử lý dự kiến.

- Theo [LEUT90], ta có ba phiên bản load sharing khác nhau:

 Ai đến trước được phục vụ trước (Firsr-come-first-served/FCFS):

Kỹ thuật First-come-first-served (FCFS) thực hiện các quá trình theo thứ tự đến, nghĩa là quá trình nào yêu cầu CPU trước sẽ được cấp phát CPU trước Chế độ hoạt động của FCFS là Non-Preemptive, tức là khi một quá trình đang chạy, bộ xử lý sẽ tiếp tục thực thi cho đến khi quá trình đó hoàn thành hoặc bị chặn do I/O Hệ thống sử dụng hàng đợi FIFO để quản lý các quá trình.

 Tiến trình đi vào được vào cuối hàng đợi

 Tiến trình được được lựa chọn để xử lí lấy từ đầu hàng đợi iv Ưu điểm:

 Là phiên bản cơ bản nhất và dễ cài đặt nhất

 Không gặp vấn đề đói CPU (Starvation) có nghĩa các quá trình có độ ưu tiên thấp sẽ không bao giờ được cấp CPU. v Nhược điểm:

Thời gian chờ trung bình của thuật toán FCFS thường dài, đặc biệt khi một tiến trình có burst-time lớn được thực thi trước Điều này dẫn đến việc các tiến trình có burst-time nhỏ phải chờ rất lâu mới đến lượt thực hiện.

Hiệu ứng nối đuôi (Convoy effect) xảy ra khi CPU bị lãng phí thời gian do có quá nhiều khoảng trống Khi chúng ta cấp phát CPU cho các quá trình ngắn sau các quá trình dài, điều này dẫn đến thời gian chờ đợi trung bình (Average waiting time) tăng cao, làm cho hệ thống CPU hoạt động không hiệu quả.

Hệ thống FCFS không hoạt động hiệu quả trong môi trường chia sẻ thời gian, vì mỗi người dùng cần được cấp phát CPU theo khoảng thời gian đều đặn Tuy nhiên, trong FCFS, CPU chỉ được cấp phát cho luồng tiếp theo khi luồng hiện tại hoàn tất thực thi hoặc gặp lệnh chặn từ I/O.

Trong chế độ không chiếm quyền, mức độ ưu tiên của các quá trình không quan trọng Khi một quá trình có mức ưu tiên thấp đang thực thi trong thời gian dài, nếu có các quá trình có mức ưu tiên cao hơn xuất hiện, như các ngắt để tránh sự cố hệ thống, thì các quá trình ưu tiên cao vẫn phải chờ cho quá trình ưu tiên thấp kết thúc Điều này có thể dẫn đến nguy cơ sập hệ thống.

Số luồng nhỏ nhất trước (Smallest number of thread first) là một phương pháp tổ chức hàng đợi sẵn sàng theo dạng hàng đợi ưu tiên, trong đó các luồng từ các công việc có số lượng luồng đột xuất nhỏ nhất được ưu tiên cao nhất Các công việc có mức độ ưu tiên ngang nhau sẽ được sắp xếp theo thứ tự đến trước Tương tự như FCFS, một luồng đã được lên lịch sẽ tiếp tục chạy cho đến khi hoàn thành hoặc bị chặn.

Ưu tiên công việc có số luồng nhỏ nhất không theo lịch (Preemptive smallest number of threads first) là phương pháp phân bổ mức độ ưu tiên cao nhất cho các công việc có số lượng luồng không theo lịch đột xuất ít nhất Khi một công việc mới với số lượng luồng ít hơn xuất hiện, nó sẽ chiếm ưu thế và tạm dừng các luồng của công việc đang thực thi.

Nhận xét: Qua các mô tả trên thì ta nhận thấy FCFS vượt trội hơn so với giải pháp còn lại.

Nhược điểm của chia sẻ tải

Nút thắt cổ chai xảy ra khi hàng đợi trung tâm chiếm một vùng bộ nhớ cần được truy cập theo cách thực thi loại trừ lẫn nhau, đặc biệt khi nhiều bộ xử lý cùng tìm việc Khi bộ đa xử lý có hàng chục hoặc hàng trăm bộ xử lý, nguy cơ về nút cổ chai trở thành một vấn đề quan trọng cần được giải quyết.

Hiện tượng nút thắt cổ chai xảy ra khi một quy trình lớn chiếm dụng CPU trong thời gian dài, trong khi nhiều quy trình nhỏ khác cần ít thời gian để thực thi Điều này dẫn đến việc các quy trình nhỏ bị trì hoãn, vì chúng chỉ có thể nhận lại CPU khi quy trình lớn hoàn thành hoặc khi có lệnh chặn từ I/O Kết quả là toàn bộ hàng đợi phía sau bị ảnh hưởng và trì hoãn.

Các luồng khởi đầu không thể tiếp tục thực thi trên cùng một bộ xử lý, dẫn đến việc bộ nhớ đệm cục bộ trên mỗi bộ xử lý trở nên kém hiệu quả hơn.

Không phải tất cả các luồng trong một chương trình đều có thể truy cập vào các bộ xử lý đồng thời Khi yêu cầu mức độ phối hợp cao giữa các luồng, quá trình chuyển mạch có thể gây ảnh hưởng đáng kể đến hiệu suất.

Chia sẻ tải, mặc dù có một số nhược điểm tiềm ẩn, vẫn là một trong những phương pháp phổ biến nhất được áp dụng trong các hệ thống đa xử lý hiện nay.

Các cơ chế hoạt động chung

Semaphore Một giá trị số nguyên được sử dụng để báo hiệu giữa các quá trình

Có 3 hoạt động thực thi (trong đó đều là các nguyên tử): khởi tạo, tăng và giảm

Thao tác giảm dần có thể chặn một quá trình, trong khi thao tác tăng dần sẽ bỏ chặn một quá trình Khái niệm này được gọi là semaphore đếm (counting semaphore) hoặc semaphore tổng quát (general semaphore).

Một semaphore chỉ nhận các giá trị 0 và 1.

Mutex tương tự như Semaphore nhị phân, nhưng điểm khác biệt chính là khi tiến trình khóa mutex, giá trị của nó sẽ được đặt bằng 0, trong khi khi mở khóa, giá trị sẽ được đặt bằng 1.

Một kiểu dữ liệu được sử dụng để chặn một luồng hay một quá trình cho đến khi đáp ứng đúng điều kiện.

Thực hiện trên cơ chế loại trừ lẫn nhau Là một quá trình thực hiện trong một vòng lặp vô hạn.

Bảng 3 1: Định nghĩa một số cơ chế hoạt động

Semaphore

Semaphore, được Edsger Dijkstra đề xuất vào năm 1965, là một kỹ thuật quan trọng trong việc quản lý các quá trình Đây là một trong những bước tiến đầu tiên trong việc giải quyết các vấn đề liên quan đến bộ xử lý.

Có nhiều quá trình có thể hợp tác bằng cách chia sẻ tín hiệu đơn giản, nhằm đảm bảo rằng một quá trình sẽ dừng lại ở một vị trí xác định cho đến khi nhận được tín hiệu báo cụ thể.

Semaphore là một biến đặc biệt được sử dụng để chia sẻ giữa các luồng, giúp giải quyết vấn đề quan trọng và đạt được mức độ đồng bộ hóa trong môi trường đa xử lý.

Semaphore chỉ có thể được truy cập thông qua hai phép toán nguyên tử tiêu chuẩn: semSignal(s) và semWait(s) Phép toán semSignal(s), được ký hiệu là P, có nguồn gốc từ tiếng Hà Lan "proberen", có nghĩa là "kiểm tra".

Semaphore được sử dụng để truyền tín hiệu, trong đó hàm semWait(s) có ký hiệu V, từ tiếng Hà Lan là verhogen, có nghĩa là "tăng dần" Hàm này nhận tín hiệu qua các semaphore và nếu tín hiệu chưa được truyền, bộ xử lý sẽ tạm dừng cho đến khi quá trình truyền hoàn tất.

- Các phép toán thực thi như sau:

 Một semaphore có thể được khởi tạo từ một giá trị số nguyên không âm

 semWait: nó làm nhiệm vụ giảm giá trị semarphore Nếu kết quả nhỏ hơn 0 thì quá trình thực thi semWait sẽ bị chặn

semSignal là hàm có chức năng tăng giá trị semaphore Nếu giá trị trả về nhỏ hơn hoặc bằng 0, quá trình sẽ bị chặn do hoạt động chờ đợi; ngược lại, quá trình sẽ được bỏ chặn.

 Ngoài 3 thao tác này thì không có cách nào để kiểm tra hoặc thực thi trên semarphore.

- Ba hệ quả thú vị của Semaphore:

 Không có cách nào biết trước một tiến trình làm giảm một semaphore liệu nó sẽ bị chặn hoặc không.

Sau khi một tiến trình tăng semaphore và một tiến trình khác được đánh thức, cả hai tiến trình sẽ chạy đồng thời Trong tình huống này, không có cách nào để xác định tiến trình nào sẽ tiếp tục hoạt động trên hệ thống đơn xử lý.

 Khi tạo một semaphore thì chúng ta không biết liệu tiến trình khác có đang chờ hay không, vì thế số lượng bỏ chặn có thể bằng 0 hoặc 1.

Semaphore nhị phân

Semaphore nhị phân chỉ nhận giá trị 0 hoặc 1, và trên một số hệ thống, nó còn được gọi là Mutex clocks (khóa loại trừ lẫn nhau) vì cung cấp chế độ loại trừ lẫn nhau Sự khác biệt cơ bản đã được đề cập trong phần 1.

Hình 4 3: Semaphore nhị nhân nguyên thủy

 Một semaphore có thể khởi tạo bởi hai giá trị 0 hoặc 1.

Hàm semWaitB kiểm tra giá trị của semaphore được truyền vào Nếu giá trị bằng 1, hàm sẽ gán lại thành 0 và chặn tiến trình semWaitB Ngược lại, nếu giá trị bằng 0, chỉ cần thực hiện chặn.

semSignalB kiểm tra sự tồn tại của các tiến trình bị chặn Nếu phát hiện có tiến trình bị chặn, nó sẽ thực hiện gỡ chặn Ngược lại, nếu không có tiến trình nào bị chặn, giá trị của semaphore sẽ được gán bằng 1.

Hạn chế về thời gian chờ bận (busy waiting)

Hạn chế của hệ thống là sự chờ đợi bận, dẫn đến lãng phí thời gian của CPU và hiệu suất thấp Do đó, cần áp dụng một giải pháp hàng đợi (queue) để cải thiện tình hình này.

Đối với semaphores đếm và semaphores nhị phân, hàng đợi giữ các tiến trình đang chờ Thứ tự xóa tiến trình khỏi hàng đợi theo phương pháp nhập trước xuất trước (FIFO) đảm bảo công bằng, với quá trình bị chặn lâu nhất được giải phóng trước Semaphore sử dụng phương pháp này được gọi là semaphore mạnh, trong khi semaphore không xác định thứ tự xóa tiến trình là semaphore yếu.

Hình 4 4: Cơ chế hoạt động Semaphore

- Hình là một ví dụ về hoạt động của một semaphore mạnh Ở đây các quả trình A,

B và C phụ thuộc vào kết quả từ quá trình D Khi A thực hiện lệnh semWait trên semaphore, semaphore giảm xuống 0, cho phép A tiếp tục và tham gia lại hàng đợi sẵn sàng Tiếp theo, B chạy và thực hiện lệnh semWait, nhưng bị chặn, tạo điều kiện cho D chạy Sau khi D hoàn thành, nó thực hiện lệnh semSignal, cho phép B di chuyển đến hàng đợi sẵn sàng D sau đó tham gia lại hàng đợi, và khi C bắt đầu chạy, nó cũng bị chặn khi thực hiện lệnh semWait Tương tự, A và B chạy và bị chặn trên semaphore, cho phép D tiếp tục thực hiện.

Khi D có kết quả, nó sẽ phát tín hiệu semSignal, chuyển C vào hàng đợi sẵn sàng Trong các chu kỳ tiếp theo, D sẽ giải phóng A và B khỏi trạng thái bị chặn.

Ngày đăng: 21/04/2023, 09:31

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w