1. Multiprogramming
Trong một hệ thống máy tính hiện đại, thường có một số tiến trình ứng dụng đồng thời muốn thực thi. Giờ đây, hệ điều hành có trách nhiệm quản lý tất cả các quy trình một cách hiệu quả và hiệu quả.
Một trong những khía cạnh quan trọng nhất của hệ điều hành là đa chương trình.
Trong một hệ thống máy tính, có nhiều quá trình đang chờ được thực thi, tức là chúng đang đợi khi CPU sẽ được cấp phát cho chúng và chúng bắt đầu thực thi. Các quy trình này còn được gọi là công việc. Bây giờ bộ nhớ chính quá nhỏ để chứa tất cả các quy trình hoặc công việc này vào đó. Do đó, các quy trình này ban đầu được lưu giữ trong một khu vực được gọi là nhóm công việc. Nhóm công việc này bao gồm tất cả các quy trình đang chờ cấp phát bộ nhớ chính và CPU.
CPU chọn một công việc trong số tất cả các công việc đang chờ này, đưa nó từ nhóm công việc đến bộ nhớ chính và bắt đầu thực thi nó. Bộ xử lý thực hiện một công việc cho đến khi nó bị gián đoạn bởi một số yếu tố bên ngoài hoặc nó thực hiện một tác vụ I / O.
Hệ thống không đa chương trình đang hoạt động:
- Trong một hệ thống không đa lập trình, Ngay sau khi một công việc rời khỏi CPU và thực hiện một số tác vụ khác (ví dụ I / O), CPU sẽ trở nên nhàn rỗi. CPU tiếp tục chờ và đợi cho đến khi công việc này (đã được thực thi trước đó) quay trở lại và tiếp tục thực hiện với CPU. Vì vậy, CPU vẫn miễn phí trong tất cả thời gian này.
- Bây giờ nó có một nhược điểm là CPU không hoạt động trong một thời gian rất dài. Ngoài ra, các công việc khác đang chờ thực hiện có thể không có cơ hội thực hiện vì CPU vẫn được phân bổ cho công việc trước đó. Điều này đặt ra một vấn đề rất nghiêm trọng là mặc dù các công việc khác đã sẵn sàng thực thi, CPU không được cấp phát cho chúng vì CPU được phân bổ cho một công việc thậm chí không sử dụng nó (vì nó đang bận trong các tác vụ I / O).
- Không thể xảy ra trường hợp một công việc sử dụng CPU trong 1 giờ trong khi những công việc khác đã chờ đợi trong hàng đợi trong 5 giờ. Để tránh những tình huống như thế này và sử dụng CPU hiệu quả, người ta đã đưa ra khái niệm đa lập trình.
Nhiều hệ thống được chương trình đang hoạt động
- Trong một hệ thống đa lập trình, ngay sau khi một công việc thực hiện một tác vụ I / O, hệ điều hành sẽ ngắt công việc đó, chọn một công việc khác từ nhóm công việc (hàng đợi), cung cấp cho CPU công việc mới này và bắt đầu thực thi nó. Công việc trước đó tiếp tục thực hiện hoạt động I / O của nó trong khi công việc mới này thực hiện các tác vụ ràng buộc CPU. Bây giờ giả sử công việc thứ hai cũng áp dụng cho một tác vụ I / O, CPU chọn công việc thứ ba và bắt đầu thực thi nó. Ngay sau khi một công việc hoàn thành hoạt động I / O của nó và quay trở lại với các tác vụ của CPU, CPU sẽ được cấp phát cho nó.
- Bằng cách này, không có thời gian CPU bị lãng phí bởi hệ thống chờ đợi tác vụ I / O được hoàn thành. Do đó, mục tiêu cuối cùng của lập trình đa là giữ cho CPU luôn bận rộn miễn là có các tiến trình sẵn sàng thực thi. Bằng cách này, nhiều chương trình có thể được thực thi trên một bộ xử lý bằng cách thực thi một phần của chương trình tại một thời điểm, một phần của chương trình khác sau phần này, sau đó là một phần của chương trình khác, v.v., do đó thực thi nhiều chương trình. Do đó, CPU không bao giờ ngừng hoạt động.
Trong hình dưới đây, chương trình A chạy một thời gian rồi chuyển sang trạng thái chờ. Trong thời gian trung bình, chương trình B bắt đầu thực hiện. Vì vậy, CPU không lãng phí tài nguyên của nó và tạo cơ hội cho chương trình B chạy.
2. Multiprocessing
Trong hệ thống đơn bộ xử lý, chỉ có một quá trình thực thi tại một thời điểm.
Đa xử lý là việc sử dụng hai hoặc nhiều CPU (bộ xử lý) trong một hệ thống máy tính. Thuật ngữ này cũng đề cập đến khả năng của một hệ thống hỗ trợ nhiều hơn một bộ xử lý trong một hệ thống máy tính duy nhất. Bây giờ vì có nhiều bộ xử lý có sẵn, nhiều quá trình có thể được thực hiện cùng một lúc. Các bộ xử lý đa này chia sẻ bus máy tính, đôi khi cả đồng hồ, bộ nhớ và các thiết bị ngoại vi.
Nhiều hệ thống xử lý đang hoạt động:
- Với sự trợ giúp của đa xử lý, nhiều quá trình có thể được thực hiện đồng thời. Giả sử các quá trình P1, P2, P3 và P4 đang chờ thực thi. Bây giờ trong một hệ thống xử lý duy nhất, trước hết một quá trình sẽ thực thi, sau đó là quá trình kia, sau đó là quá trình khác, v.v.
- Nhưng với đa xử lý, mỗi quá trình có thể được gán cho một bộ xử lý khác nhau để thực hiện. Nếu nó là bộ xử lý lõi kép (2 bộ xử lý), hai quá trình có thể được thực thi đồng thời và do đó sẽ nhanh hơn hai lần, tương tự bộ vi xử lý lõi tứ sẽ nhanh hơn bốn lần so với bộ xử lý đơn.
Tại sao sử dụng đa xử lý?
- Ưu điểm chính của hệ thống đa xử lý là hoàn thành nhiều công việc hơn trong một khoảng thời gian ngắn hơn. Các loại hệ thống này được sử dụng khi yêu cầu tốc độ rất cao để xử lý một khối lượng lớn dữ liệu. Hệ thống đa xử lý có thể tiết kiệm tiền so với hệ thống xử lý đơn vì các bộ xử lý có thể dùng chung thiết bị ngoại vi và nguồn cung cấp năng lượng.
- Nó cũng cung cấp độ tin cậy cao hơn theo nghĩa là nếu một bộ xử lý bị lỗi, công việc sẽ không dừng lại mà chỉ chậm lại. ví dụ. nếu chúng ta có 10 bộ vi xử lý và 1 bộ xử lý bị lỗi, thì công việc sẽ không dừng lại, đúng hơn là 9 bộ vi xử lý còn lại có thể chia sẻ công việc của bộ xử lý thứ 10. Do đó, toàn bộ hệ thống chỉ chạy chậm hơn 10 phần trăm, chứ không phải là thất bại hoàn toàn.
Đa xử lý đề cập đến phần cứng (tức là các đơn vị CPU) chứ không phải phần mềm (tức là các quy trình đang chạy). Nếu phần cứng bên dưới cung cấp nhiều hơn một bộ xử lý thì đó là quá trình đa xử lý. Đó là khả năng của hệ thống tận dụng sức mạnh tính toán của nhiều bộ xử lý.
Sự khác biệt giữa đa chương trình và da xử lý
- Một hệ thống có thể được lập trình đa bằng cách có nhiều chương trình chạy cùng lúc và đa xử lý bằng cách có nhiều hơn một bộ xử lý vật lý. Sự khác biệt giữa đa xử lý và đa lập trình là Đa xử lý về cơ bản là thực hiện nhiều quy trình cùng lúc trên nhiều bộ xử lý, trong khi đa lập trình là lưu giữ một số chương trình trong bộ nhớ chính và thực thi chúng đồng thời chỉ bằng một CPU duy nhất.
- Đa xử lý xảy ra bằng cách xử lý song song trong khi Đa lập trình xảy ra bằng cách chuyển từ quá trình này sang quá trình khác (hiện tượng được gọi là chuyển mạch ngữ cảnh).
3. Multitasking
Như tên gọi của chính nó, đa tác vụ đề cập đến việc thực thi nhiều tác vụ (chẳng hạn như quy trình, chương trình, luồng, v.v.) tại một thời điểm. Trong các hệ điều hành hiện đại, chúng ta có thể phát nhạc MP3, chỉnh sửa tài liệu trong Microsoft Word và lướt Google Chrome đồng thời, điều này được thực hiện nhờ đa tác vụ.
Đa nhiệm là một phần mở rộng hợp lý của đa lập trình. Cách chính mà đa nhiệm khác với đa lập trình là lập trình đa hoạt động chỉ dựa trên khái niệm chuyển đổi ngữ cảnh trong khi đa nhiệm dựa trên chia sẻ thời gian cùng với khái niệm chuyển đổi ngữ cảnh.
Hệ thống đa nhiệm đang hoạt động:
- Trong một hệ thống chia sẻ thời gian, mỗi quá trình được ấn định một số lượng thời gian cụ thể để một quá trình thực thi. Giả sử có 4 quy trình P1, P2, P3 và P4 sẵn sàng thực thi. Vì vậy, mỗi người trong số họ được gán một số lượng tử thời gian mà chúng sẽ thực thi, ví dụ lượng tử thời gian 5 nano giây (5 ns). Khi một quá trình bắt đầu thực hiện (ví dụ P2), nó sẽ thực thi trong lượng tử thời gian đó (5 ns). Sau 5 ns, CPU bắt đầu thực hiện quá trình khác (ví dụ P3) trong lượng tử thời gian được chỉ định.
- Do đó, CPU làm cho các tiến trình chia sẻ các lát thời gian giữa chúng và thực thi tương ứng. Ngay sau khi lượng tử thời gian của một quá trình hết hạn, một quá trình khác sẽ bắt đầu thực hiện.
- Ở đây về cơ bản cũng có một chuyển đổi ngữ cảnh đang xảy ra nhưng nó xảy ra quá nhanh đến mức người dùng có thể tương tác với từng chương trình riêng biệt trong khi nó đang chạy. Bằng cách này, người dùng có ảo tưởng rằng nhiều quy trình / tác vụ đang thực hiện đồng thời. Nhưng trên thực tế, chỉ có một tiến trình / tác vụ được thực thi tại một thời điểm cụ thể. Trong đa nhiệm, chia sẻ thời gian được thể hiện tốt nhất bởi vì mỗi quá trình đang chạy chỉ chiếm một lượng tử thời gian hợp lý của CPU.
Nói một cách khái quát hơn, đa nhiệm là việc có nhiều chương trình, tiến trình, tác vụ, luồng chạy cùng một lúc. Thuật ngữ này được sử dụng trong các hệ điều hành hiện đại khi nhiều tác vụ chia sẻ một tài nguyên xử lý chung (ví dụ: CPU và Bộ nhớ).
- Như được mô tả trong hình trên, Tại bất kỳ thời điểm nào CPU chỉ thực hiện một tác vụ trong khi các tác vụ khác đang chờ đến lượt. Ảo tưởng về sự song song đạt được khi CPU được phân công lại cho một nhiệm vụ khác. tức là tất cả ba nhiệm vụ A, B và C dường như xảy ra đồng thời vì chia sẻ thời gian.
- Vì vậy, để đa nhiệm diễn ra, trước tiên phải có đa chương trình, tức là sự hiện diện của nhiều chương trình sẵn sàng để thực thi. Và thứ hai là khái niệm chia sẻ thời gian.
4. Multithreading
Một luồng là một đơn vị cơ bản của việc sử dụng CPU. Đa luồng là một mô hình thực thi cho phép một quá trình có nhiều đoạn mã (tức là các luồng) chạy đồng thời trong “ngữ cảnh” của quá trình đó.
Ví dụ. Trình phát phương tiện VLC, trong đó một luồng được sử dụng để mở trình phát phương tiện VLC, một luồng để phát một bài hát cụ thể và một luồng khác để thêm các bài hát mới vào danh sách phát.
Đa luồng là khả năng của một quá trình quản lý việc sử dụng nó bởi nhiều người dùng tại một thời điểm và quản lý nhiều yêu cầu của cùng một người dùng mà không cần phải có nhiều bản sao của chương trình.
Hệ thống đa luồng đang hoạt động:
Trường hợp 1:
- Giả sử có một máy chủ web xử lý các yêu cầu của khách hàng. Bây giờ nếu nó thực thi như một quy trình đơn luồng, thì nó sẽ không thể xử lý nhiều yêu cầu cùng một lúc. Đầu tiên, một máy khách sẽ đưa ra yêu cầu của mình và hoàn thành việc thực thi và chỉ sau đó, máy chủ mới có thể xử lý yêu cầu của một máy khách khác. Đây là một công việc thực sự tốn kém, mất thời gian và mệt mỏi. Để tránh điều này, có thể sử dụng đa luồng.
- Bây giờ, bất cứ khi nào có yêu cầu của khách hàng mới, máy chủ web chỉ cần tạo một luồng mới để xử lý yêu cầu này và tiếp tục thực thi để nghe thêm các yêu cầu của khách hàng. Vì vậy máy chủ web có nhiệm vụ lắng nghe các yêu cầu mới của khách hàng và tạo các luồng cho từng yêu cầu riêng lẻ. Mỗi luồng mới được tạo xử lý một yêu cầu của khách hàng, do đó giảm bớt gánh nặng cho máy chủ web.
Trường hợp 2:
- Chúng ta có thể coi các luồng là các quy trình con chia sẻ tài nguyên quy trình mẹ nhưng thực thi độc lập. Bây giờ hãy lấy trường hợp của GUI. Giả sử chúng tôi đang thực hiện một phép tính trên GUI (mất rất nhiều thời gian để hoàn thành). Bây giờ chúng ta không thể tương tác với phần còn lại của GUI cho đến khi lệnh này kết thúc quá trình thực thi. Để có thể tương tác với phần còn lại của GUI, lệnh tính toán này nên được gán cho một luồng riêng biệt. Vì vậy, tại thời điểm này, 2 luồng sẽ thực thi, tức là một để tính toán và một cho phần còn lại của GUI. Do đó, ở đây trong một quy trình duy nhất, chúng tôi đã sử dụng nhiều luồng cho nhiều chức năng.
Hình ảnh dưới đây mô tả hoàn toàn ví dụ về trình phát VLC:
Ưu điểm của đa luồng
- Lợi ích của Đa luồng bao gồm tăng khả năng phản hồi. Vì có nhiều luồng trong một chương trình, vì vậy nếu một luồng mất quá nhiều thời gian để thực thi hoặc nếu nó bị chặn, phần còn lại của luồng sẽ tiếp tục thực thi mà không gặp bất kỳ sự cố nào. Do đó, toàn bộ chương trình vẫn đáp ứng cho người dùng bằng các luồng còn lại.
- Một ưu điểm khác của đa luồng là nó ít tốn kém hơn. Tạo các quy trình hoàn toàn mới và phân bổ tài nguyên là một công việc tốn nhiều thời gian, nhưng vì các luồng chia sẻ tài nguyên của quy trình mẹ nên việc tạo các luồng và chuyển đổi giữa chúng tương đối dễ dàng. Do đó đa luồng là nhu cầu của các Hệ điều hành hiện đại.
Cảm ơn mọi người đã theo dõi.
Author: DuongVT19