Các kiến thức liên quan lập trình đa tuyến

Tiến trình (process)

Tiến trình là một thể hiện của một chương trình đang xử lý. Sở hữu một con trỏ lệnh, tập các thanh ghi và các biến. để hoàn thành tác vụ của mình, một tiến trình còn cần đến một số tài nguyên khác như: CPU, bộ nhớ, các tập tin, các thiết bị ngoại vi..

Cần phân biệt được giữa tiến trình và chương trình. Một chương trình là một thể hiện thụ động, chứa các chỉ thị điều khiển máy tính để thực hiện mục đích gì đó; khi cho thực thi chỉ thị này thì chương trình sẽ biến thành tiến trình

Có thể nói tóm tắt tiến trình là một chương trình chạy trên hệ điều hành và được quản lý thông qua một số hiệu gọi là thẻ

Tiểu trình (thread)

Một tiểu trình là một đơn vị xử lý cơ bản trong hệ thống. Mỗi tiểu trình xử lý tuần tự các đoạn code của nó, sở hữu một con trỏ lệnh, một tập các thanh ghi và một vùng nhớ stack riêng, các tiểu trình chia sẻ CPU với nhau giống như cách chia sẻ giữa các tiến trình. Một tiến trình sở hữu nhiều tiểu trình, tuy nhiên một tiểu trình chỉ có thể thuộc về một tiến trình, các tiểu trình bên trong cùng một tiến trình chia sẻ nhau không gian địa chỉ chung, điều này có nghĩa là các tiểu trình có thể chia sẻ nhau các biến toàn cục của tiến trình. Một tiểu trình cũng có thể có các trạng thái giống như các trạng thái của một tiến trình.

Hệ điều hành đơn nhiệm, đa nhiệm

  • HĐH đơn nhiệm là HĐH chỉ cho phép 1 tiến trình chạy tại một thời điểm, ví dụ HĐH DOS là HĐH đơn nhiệm.
  • HĐH đa nhiệm cho phép nhiều tiến trình chạy tại một thời điểm, ví dụ HĐH windows, Unix, Linux là các HĐH đa nhiệm
  • HĐH đa nhiệm ưu tiên: các tiến trình được cấp phát thời gian sử dụng CPU theo mức ưu tiên khác nhau
  • HĐH đa nhiệm không ưu tiên: các tiến trình không có mức ưu tiên nào cả, chúng “tự giác” nhả quyền kiểm soát CPUsau khi kết thúc phần công việc

Chú ý: trong thực tế mỗi máy thường chỉ có 1 CPU, nên không thể có nhiều tiến trình chạy tại một thời điểm. Nên thông thường sự đa chương chỉ là giả lập. Chúng được giả lập bằng cách lưu trữ nhiều tiến trình trong bộ nhớ tại một thời điểm, và điều phối CPU qua lại giữa các tiến trình.

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

Trạng thái của một tiến trình tại một thời điểm được xác định bởi hoạt động hiện thời của tiến trình đó. Trong quá trình sống một tiến trình thay đổi trạng thái do nhiều nguyên nhân như: hết thời gian sử dụng CPU, phải chờ một sự kiện nào đó xẩy ra, hay đợi một thao tác nhập/xuất hoàn tất…

Tại một thời điểm một tiến trình có thể nhận một trong các trạng thái sau đây:

  • Tạo mới: tiến trình đang được thành lập
  • Running: các chỉ thị của tiến trình đang được xử lý, hay nói cách khác tiến trình đang sở hữu CPU
  • Blocked: tiến trình đang chờ được cấp tài nguyên, hay chờ một sự kiện nào đó xẩy ra
  • Ready: tiến trình đang chờ cấp CPU để xử lý
  • Kết thúc: tiến trình đã hoàn tất việc xử lý

Miền găng (Critical Section)

Vấn đề tranh chấp tài nguyên

Ta xét tình huống sau:

  • Giả sử A có 500$ trong tài khoản ngân hàng
  • A quyết định rút ra 100$ từ tài khoản ngân hàng, thao tác của A gồm 2 bước:
    • lấy ra 100$
    • giảm số tài khoản đi 100$
  • Tình huống giữa 2 thao tác 1 và 2, B trả A 300$, do vậy B cập nhật vào trong tài khoản của A là 800$ ( =500$ +300$), sau đó A tiếp tục công việc 2, nó cập nhật lại trong tài khoản là 400$, như vậy B đã trả A 300$, nhưng A không nhận được.

Miền găng (Critical Section)

Đoạn chương trình trong đó có thể xẩy ra các mâu thuẫn truy xuất trên tài nguyên dụng chung được gọi là miền găng ( Critical Section )

Khoá chết (deadlock)

Một tập các tiến trình được định nghĩa là ở trong tình trạng khoá chết nếu như, mỗi tiến trình trong tập hợp đều đều chờ đợi một số tài nguyên đang bị nắm

giữ bởi các tiến trình khác, như vậy không có tiến trình nào có thể tiếp tục xử lý, cũng như giải phóng tài nguyên cho các tiến trình khác sử dụng, tất cả các tiến trình trong tập hợp đểu bị khoá vĩnh viễn!.

Avatar Administrator

Administrator

@thaycacac
Bạn cần sức mạnh, nghị lực nên cuộc sống đã đặt ra những khó khăn nghịch cảnh để bạn vượt qua và trở nên mạnh mẽ hơn.
Logo thể loại Java

Java

Chuyên mục học lập trình
Học Java từ cơ bản đến thông thạo cho mọi đối tượng
hello