Hê điê u ha nh free dos là gì năm 2024

Trong bài viết này, chúng ta sẽ tìm hiểu cách quản lý tiến trình trong hệ điều hành và các thuật toán liên quan đến nó. Trước khi đi sâu vào tìm hiểu cách quản lý tiến trình thì trước hết ta sẽ xem qua định nghĩa và các khía cạnh liên quan của nó.

Hiểu đơn giản thì một chương trình đang thực thi được gọi là tiến trình, hay nói cách khác, tiến trình là một thực thể của chương trình đang chạy, thực thể này có thể được gán và thực thị bởi một trình xử lý. Hai phần tử cốt lõi của một tiến trình là code của chương trình và tập dữ liệu liên quan đến đoạn code đó.

Bộ nhớ tiến trình [process memory] được chia làm bốn phần:

  • Phần program lưu trữ code của chương trình, đọc từ bộ nhớ điện tĩnh [non-volatile storage] khi chương trình được khởi động.
  • Phần data lưu trữ biến toàn cục và biến tĩnh, được cấp phát và khởi tạo trước khi thực thi chương trình chính.
  • Phần heap được dùng cho quản lý cấp phát bộ nhớ động trong chương trình. Nói cách khác, nó là một phần của bộ nhớ khi thực hiện cấp phát động ví dụ như cấp phát thông qua new hay malloc và giải phóng thông qua delete hay free,...
  • Phần stack lưu trữ biến cục bộ được đinh nghĩa bên trong hàm. Không gian trong stack được tạo cho biến cục bộ khi chúng được khai báo và phần không gian này được giải phóng khi ra khỏi phạm vi của nó.

Process Control Block [PCB]

Một chương trình thực thi như một tiến trình được xác định duy nhất bởi các tham số khác nhau. Các tham số này được lưu trữ trong Process Control Block [PCB] cho mỗi tiến trình. Nó là một cấu trúc dữ liệu lưu trữ các thông tin như sau:

  • Identifier/Process Id: một định danh duy nhất hay ID liên kết với tất cả tiến trình để phân biệt một tiến trình với các tiến trình khác.
  • Process State: trạng thái tiến trình có thể là ready, running, halted, completed,...
  • CPU-Scheduling: độ ưu tiên so với các tiến trình khác và con trỏ đến hàng đợi định thời [scheduling queues].
  • CPU register và Program Counter: cần cho lưu trữ và phục hồi khi hoán đổi các tiến trình trong và ngoài CPU.
  • I/O status: bao gồm các yêu cầu I/O chưa giải quyết, I/O của thiết bị được gán cho tiến trình này, một danh sách các file được sử dụng bởi tiến trình.
  • Memory-Management: bảng trang hoặc bảng phân đoạn.
  • Accounting Information: dung lượng CPU sử dụng cho thực thi tiến trình, giới hạn thời gian,...

Trạng thái của tiến trình

Bây giờ, ta sẽ tìm hiểu về tiến trình, khi ta định nghĩa một tham số của tiến trình được gọi là State. Các tiến trình có thể có một trong 5 trạng thái là: start, ready, running, wait và terminated.

Bây giờ ta sẽ tìm hiểu về cách chuyển đổi trạng thái của chúng:

  • Null -> Start: khi một tiến trình được tạo, nó được bảo rằng tiến trình đã được khởi tạo hoặc một tiến trình từ trạng thái NULL trở thành một trạng thái mới.
  • Start -> Ready: hệ điều hành sau đó chuyển một tiến trình từ trạng thái Start sang trạng thái Ready, khi nó chuẩn bị được nhận. Ở giai đoạn này, tiến trình có tất cả tài nguyên khả dụng cần có để chạy với đang chờ đợi để CPU có thời gian thực thi nó.
  • Ready -> Running: ở chuyển đổi này, hệ điều hành chọn một trong các tiến trình ở trạng thái Ready bằng cách sử dụng bộ định thời tiến trình hoặc dispatcher. Sau đó CPU bắt đầu thực thi tiến trình đã chọn ở trạng thái running.
  • Running -> Terminated: tiến trình đang chạy hiện tại bị huỷ bởi hệ điều hành nếu nó đã hoàn thành.
  • Running -> Ready: tập định thời chỉ định thời gian giới hạn cho việc thực thi bất kỳ tiến trình đang chạy nào. Nhưng nếu tiến trình hiện tại nhiều hơn thời gian được chỉ định bởi bộ định thời, nó sẽ được chuyển lại trạng thái ready. Lý do chính cho chuyển đổi này là để đạt được khoảng thời gian tối đa cho việc thực thi không bị gián đoạn. Hầu hết các hệ điều hành đa chương trình đều bắt buộc ràng buộc thời gian này.
  • Running -> Wait: nếu một tiến trình muốn bất cứ thứ gì mà nó phải đợi, nó sẽ được đặt ở trạng thái chờ đợi. Quá trình không thể chạy ngay bây giờ vì nó đang chờ một số tài nguyên sẵn có hoặc cho một số sự kiện xảy ra. Ví dụ: quá trình có thể đang đợi nhập liệu bằng bàn phím, yêu cầu truy cập đĩa, thông báo giữa các tiến trình, bộ hẹn giờ hoạt động hoặc quá trình con kết thúc.
  • Wait -> Ready: Khi sự kiện mà nó đã chờ xảy ra, một quá trình ở trạng thái Waiting sẽ được chuyển sang trạng thái Ready.

Lưu ý: Một số hệ thống có thể có các trạng thái khác ngoài những trạng thái được liệt kê ở đây.

Thực thi một tiến trình trong Hệ điều hành

Hệ điều hành thực thi nhiều hoạt động khác nhau trong khi tạo một tiến trình, khi sử dụng PCB để theo dõi trạng thái thực thi của từng tiến trình.

  • Để theo dõi tất cả tiến tình, nó gán một PID [ID của tiến trình] với từng tiến trình để định danh nó là duy nhất. Như đã thảo luận ở trên, nó còn lưu trữ nhiều chi tiết cốt lõi trong PCB.
  • Hệ điều hành cập nhật thông tin trong PCB của tiến trình khi nó chuyển từ trạng thái này sang trạng thái khác.
  • Để truy cập PCB thường xuyên, hệ điều hành giữ các con trỏ đến từng PCB của tiến trình trong một bảng tiến trình.

Bộ định thời tiến trình trong Hệ điều hành

Định thời tiến trình là rất quan trọng để chọn và loại bỏ tiến trình đang chạy dựa trên một chiến lược hoặc thuật toán cụ thể. Các mục tiêu chính của quá trình định thời tiến trình là giữ cho CPU luôn bận rộn và cung cấp thời gian phản hồi "có thể chấp nhận được" cho tất cả các chương trình. Hệ điều hành đa chương trình cho phép nhiều tiến trình được tải vào bộ nhớ thực thi tại một thời điểm và tiến trình được tải chia sẻ CPU bằng cách sử dụng ghép kênh thời gian.

Hệ điều hành có ba loại bộ định thời để định thời tiến trình.

Bộ định thời dài hạn [Job scheduler]: bộ định thời này đưa tiến trình mới về trạng thái Ready. Nó xác định tiến trình nào được gán cho CPU để xử lý, chọn các tiến trình từ hàng đợi và tải chúng vào bộ nhớ để thực thi.

  • Mục tiêu chính của bộ định thời dài hạn là cung cấp sự kết hợp cân bằng giữa các công việc [chẳng hạn như giới hạn I/O và ràng buộc trình xử lý] và kiểm soát mức độ đa chương trình. Đây là một hệ thống được tải nhiều, có thể dành thời gian để triển khai các thuật toán định thời thông minh và nâng cao.

Bộ định thời ngắn hạn [CPU scheduler]: Nó chịu trách nhiệm chọn một tiến trình từ trạng thái Ready và lên lịch cho nó đến trạng thái Running. Nó còn được gọi là Dispatchers.

  • Bộ định thời CPU chịu trách nhiệm đảm bảo không bị chết đói do các tiến trình thời gian bùng nổ cao.
  • Nó chạy rất thường xuyên và nhanh chóng hoán đổi một quá trình từ trạng thái Running sang trạng thái Ready.

Bộ định thời trung hạn: Nó chịu trách nhiệm hoán đổi các tiến trình khi một quy trình cụ thể đang thực hiện thao tác I/O. Nếu một tiến trình đang chạy thực hiện một yêu cầu I/O, nó có thể bị tạm dừng. Tiến trình đã bị tạm ngừng sẽ không thể đạt được bất kỳ tiến độ nào để hoàn thành. Tiến trình bị treo được chuyển sang bộ nhớ thứ cấp trong tình huống này để xóa nó khỏi bộ nhớ và nhường chỗ cho các tiến trình khác. Điều này được gọi là chuyển mạch, và tiến trình này được gọi là chuyển đổi hoặc triển khai.

Định thời CPU trong Hệ điều hành

Bây giờ mục tiêu tiếp theo của chúng ta là hiểu khái niệm về định thời CPU và tại sao chúng ta cần nó. Thời gian cho I/O và CPU đều được sử dụng trong một tiến trình điển hình. Thời gian chờ đợi I/O trong một hệ điều hành cũ như MS-DOS bị lãng phí và CPU đang rảnh rỗi trong thời gian này.

Một tiến trình có thể sử dụng CPU trong khi một tiến trình khác đợi I/O trong hệ điều hành đa chương trình. Chỉ định thời tiến trình mới cho phép điều này. Định thời CPU là quá trình xác định quá trình nào sẽ có quyền sử dụng riêng đối với CPU trong khi một tiến trình khác bị tạm dừng. Mục tiêu cơ bản của định thời CPU là đảm bảo rằng bất cứ khi nào CPU rãnh, HĐH sẽ chọn ít nhất một trong các chương trình trong hàng đợi sẵn sàng để chạy. Bộ định thời CPU sẽ phụ trách quá trình lựa chọn. Nó chọn một trong số các tiến trình đang sẵn sàng chạy trong bộ nhớ.

Các kiểu định thời CPU

Có hai kiểu định thời CPU chính là:

1. Định thời preemptive: các tác vụ thường được giao với mức độ ưu tiên của chúng trong. Ngay cả khi hoạt động có mức độ ưu tiên thấp hơn vẫn đang chạy, đôi khi cần phải chạy một tác vụ có mức độ ưu tiên cao hơn trước một tác vụ có mức độ ưu tiên thấp hơn. Tác vụ có mức độ ưu tiên thấp hơn được tạm dừng trong một thời gian và sau đó tiếp tục khi tác vụ có mức độ ưu tiên cao hơn được hoàn thành.

2. Định thời non-preemptive: CPU đã được gán cho một tiến trình nhất định trong cơ chế định thời này. Quá trình giữ CPU bị chiếm đóng sẽ chuyển đổi ngữ cảnh hoặc kết thúc để giải phóng CPU. Đây là phương pháp duy nhất hoạt động trên nhiều nền tảng phần cứng. Đó là bởi vì, không giống như định thời preemptive, nó không yêu cầu bất kỳ phần cứng cụ thể nào như bộ hẹn giờ.

Sự khác biệt giữa định thời Preemptive và Non-Preemptive

  1. Trong preemptive, bộ nhớ được cấp phát trong bộ nhớ chính của CPU với thời gian giới hạn, nó có thể được gán cho bất kỳ tiến trình nào khác phụ thuộc vào trạng thái của tiến trình hiện tại hoặc độ ưu tiên của tiến trình mới đến. Trong khi với Non-preemptive, bộ nhớ được cấp phát cho cùng một tiến trình đến khi nó hoàn thành.
  2. Trong preemptive, nếu các tiến trình có mức độ ưu tiên cao tiếp tục diễn ra thì tiến trình có mức độ ưu tiên thấp sẽ vẫn bị gián đoạn trong thời gian không xác định. Trong khi với định thời Non-preemptive, nếu bất kỳ tiến trình lớn nào đang xử lý, nó sẽ tiếp tục xử lý và sẽ không cho phép một tiến trình dù rất nhỏ xử lý trước khi thực thi hoàn chỉnh.
  3. Trong preemptive, nó phải lưu tất cả dữ liệu của tiến trình ở trạng thái tạm dừng để nó chỉ có thể tiếp tục từ thời điểm đó trong khi không có yêu cầu nào như vậy trong định thời Non-preemptive.

Các giải thuật định thời trong hệ điều hành

Bây giờ, ta sẽ tìm hiểu một vài giải thuật định thời khác nhau về Quản lý tiến trình.

First Come First Serve [FCFS]

Đây là giải thuật định thời CPU cơ bản và trực quan nhất. Tiến trình đầu tiên yêu cầu CPU sẽ được nhận phân bổ CPU đầu tiên trong phương thức này. Hàng đợi FIFO được sử dụng để quản lý chiến lược định thời này. PCB của tiến trình được liên kết với phần đuôi của hàng đợi khi nó đi vào. Do đó, bất cứ khi nào CPU trở nên khả dụng, nó sẽ được gán cho tiến trình ở đầu hàng đợi.

Vài điểm quan trọng của phương thức này:

  • Nó cung cấp giải thuật định thời preemptive và non-preemptive.
  • Công việc luôn được thực hiện theo thứ tự đến trước, phục vụ trước.
  • Rất dễ triển khai và sử dụng.
  • Hiệu suất tệ và thời gian đợi thường rất cao.

Giả sử chúng ta có 5 tiến trình p1, p2, p3, p4, p5 và chúng được nhận bởi hàng đợi sẵn sàng tại thời điểm t1, t2, t3, t4, t5 sao cho t1

Chủ Đề