2.3.1.2.Các đặc điểm của tiến trình

Một phần của tài liệu Bài giảng Nguyên lý điều hành (Trang 36)

2.3.Điều phối tiến trình

2.3.1.2.Các đặc điểm của tiến trình

1. (Admit) tiến trình được khởi tạo, được đưa vào hệ thống, được cấp phát đầy

đủ tài nguyên chỉ thiếu vi xử lý.

2. (Dispatch) tiến trình được cấp vi xử lý để bắt đầu thực hiện/xử lý. 3. (Release) tiến trình hoàn thành xử lý và kết thúc.

Hình 2.14.Sơ đồ chuyển tiến trình 3 trạng thái

4. (Time_Out) tiến trình bị bộ điều phối thu hồi vi xử lý, do hết thời gian được quyền sử dụng vi xử lý, để cấp phát cho tiến trình khác.

5. (Event Wait) tiến trình đang chờ một sự kiện nào đó xảy ra hay đang chờ một thao tác nhập/xuất kết thúc hay tài nguyên mà tiến trình yêu cầu chưa được hệ điều hành đáp ứng.

6. (Event Occurs) sự kiện mà tiến trình chờ đã xảy ra, thao tác nhập/xuất mà tiến trình đợi đã kết thúc, hay tài nguyên mà tiến trình yêu cầu đã được hệ điều hành đáp ứng.

Bộ phận điều phối tiến trình thu hồi vi xử lý từ một tiến trình đang thực hiện khi:

- Tiến trình đang thực hiện hết thời gian (Time-Out) được quyền sử dụng vi xử lý mà bộ phận điều phối dành cho nó.

- Có một tiến trình mới phát sinh và tiến trình mới này có độ ưu tiên cao hơn tiến trình hiện tại.

- Có một tiến trình mới phát sinh và nó cần một khoảng thời gian vi xử lý nhỏ hơn nhiều so với khoảng thời gian còn lại mà tiến trình hiện tại cần vi xử lý.

Tại một thời điểm xác định trong hệ thống có thể có nhiều tiến trình đang ở trạng thái Ready hoặc Blocked nhưng chỉ có một tiến trình ở trạng thái Running. Các tiến trình ở trạng thái Ready và Blocked được chứa trong các hàng đợi (Queue) riêng.

Hình 2.15. Sơ đồ chuyển tiến trình vào các hàng đợi R u n n i n g B l o c k e d R e a d y 3 4 6 5 1 N e w E x i t 2 Release Admit Ready Queue Dispatch Time-out Event Wait Event Occurs Blocked Queue Processor Processor

Có nhiều lý do để một tiến trình đang ở trạng thái Running chuyển sang trạng thái Blocked, các hệ điều hành đều thiết kế một hệ thống gồm nhiều hàng đợi, mỗi hành đợi dùng để chứa những tiến trình đang đợi cùng một sự kiện nào đó.

Tiến trình 4 trạng thái: Việc tổ chức các Queue để lưu các tiến trình chưa hoạt động là cần thiết, nhưng tồn tại quá nhiều tiến trình trong Queue, sẽ lãng phí không đủ bộ nhớ để nạp các tiến trình khác. Mặt khác nếu các tiến trình trong Queue đang chiếm giữ tài nguyên của hệ thống, mà những tài nguyên này các tiến trình khác đang cần, rõ ràng sử dụng tài nguyên không hợp lý, làm cho hệ thống thiếu tài nguyên (thực chất là thừa) trầm trọng và có thể làm cho hệ thống bế tắc. Với những lý do trên các hệ điều hành đa nhiệm thiết kế thêm một trạng thái tiến trình mới, đó là trạng thái Suspend (tạm dừng). Trạng thái này rất cần thiết cho các hệ thống sử dụng kỹ thuật Swap trong việc cấp phát bộ nhớ cho các tiến trình.

Hình 2.16. Sơ đồ chuyển trạng thái tiến trình có Suspend

Suspend là trạng thái của một tiến trình khi nó đang được lưu trữ trên bộ nhớ phụ, là các tiến trình đang ở trong trạng thái Blocked hoặc Ready bị hệ điều hành chuyển ra đĩa để thu hồi lại không gian nhớ đã cấp hoặc thu hồi lại tài nguyên đã cấp để cấp cho một tiến trình khác đang rất cần được nạp vào bộ nhớ tại thời điểm hiện tại.

Tiến trình 5 trạng thái: Trong thực tế hệ điều hành thiết kế 2 trạng thái Suspend:

+ Blocked-Suspend: là trạng thái Suspend dành cho các tiến trình Blocked chuyển đến.

+ Ready-Suspend: là trạng thái Suspend dành cho các tiến trình Ready chuyển đến.

Tới đây ta có thể hiểu các trạng thái tiến trình như sau:

- Ở trạng thái Ready tiến trình được định vị trong bộ nhớ chính và đang chờ được cấp vi xử lý để thực hiện.

- Ở trạng thái Blocked tiến trình được định vị trong bộ nhớ chính và đang đợi một sự kiện hay một quá trình nhập/xuất nào đó.

- Ở trạng thái Blocked-Suspend tiến trình đang bị chứa trên bộ nhớ phụ (đĩa) và đang đợi một sự kiện nào đó.

- Ở trạng thái Ready-Suspend tiến trình đang bị chứa trên bộ nhớ phụ nhưng sẵn sàng thực hiện ngay sau khi được nạp vào bộ nhớ chính.

Sau đây chúng ta xem xét sự chuyển trạng thái tiến trình trong sơ đồ trên: Ready Blocked Suspend Running Activate Suspend End New

Hình 2.17. Sơ đồ chuyển trạng thái tiến trình với 2 Suspend

1. Blocked sang Blocked-Suspend: Nếu không còn tiến trình Ready trong bộ nhớ chính và bộ nhớ chính không còn không gian nhớ trống thì phải có ít nhất một tiến trình Blocked bị chuyển ra ngoài, Blocked-Suspend, để dành bộ nhớ cho một tiến trình không bị khóa (not Blocked) khác.

2. Blocked-Suspend sang Ready-Suspend: Một tiến trình đang ở trạng thái Blocked- Suspend được chuyển sang trạng thái Ready-Suspend khi sự kiện mà nó đợi đã xảy ra.

3. Ready-Suspend sang Ready: có 2 lý do để hệ điều hành chọn khi chuyển một tiến trình ở trạng thái Ready-Suspend sang trạng thái Ready:

- Không còn tiến trình Ready trong bộ nhớ chính, hệ điều hành phải nạp một tiến trình mới vào để nó tiếp tục thực hiện

- Nếu có tiến trình Ready-Suspend có độ ưu tiên cao hơn so với các tiến trình Ready hiện tại thì hệ điều hành có thể chuyển nó sang trạng thái Ready để nó nhiều cơ hội để được thực hiện hơn.

4. Ready sang Ready Suspend: Hệ điều hành thường chuyển các tiến trình Blocked sang Suspend hơn là các tiến trình Ready, vì các tiến trình ở trạng thái Blocked không thể thực hiện ngay lập tức nhưng lại chiếm nhiều không gian bộ nhớ chính hơn so với các tiến trình ở trạng thái Ready. Tuy nhiên, nếu việc chọn tiến trình để chuyển sang Suspend dựa vào 2 điều kiện: chiếm ít không gian bộ nhớ hơn và có độ ưu tiên thấp hơn thì hệ điều hành có thể chuyển một tiến trình Ready sang trạng thái Suspend.

Việc chuyển tiến trình sang trạng thái Suspend hệ điều hành sẽ chủ động hơn khi cấp phát bộ nhớ và ngăn chặn các tình huống bế tắc do sự tranh chấp về tài nguyên, nhờ vậy mà hệ điều hành tiết kiệm được bộ nhớ, chia sẻ được tài nguyên cho nhiều tiến trình và tăng được mức độ đa chương của hệ thống. Để có được lợi ích trên hệ điều hành phải chi phí rất nhiều cho việc tạm dừng tiến trình. Hệ điều hành xem xét tiến trình nào được chọn để Suspend, khi Suspend một tiến trình hệ điều hành phải lưu lại tất cả các thông tin liên quan đến tiến trình đó (con trỏ lệnh, tài nguyên mà tiến trình đã được cấp ...), và phải lựa chọn thời điểm thích hợp để đưa tiến trình ra bộ nhớ ngoài, ... những thao tác đó sẽ làm chậm tốc độ thực hiện của toàn bộ hệ thống. Nhưng dầu sao đi nữa thì hệ điều hành vẫn phải sử dụng trạng thái Suspend vì tăng mức độ đa

Ready Blocked Running Activate Blocked Susp end Blocked Susp end Event Occurs Release Suspend Admit Ready Suspe nd Ready Suspe nd New Exit Admit Suspend Activate Event Occurs

chương của hệ thống là một trong những mục tiêu lớn của hệ điều hành.

Để đảm bảo hệ thống hoạt động đúng đắn, hệ điều hành cần phải được bảo vệ khỏi sự xâm phạm của các tiến trình. Bản thân các tiến trình và dữ liệu cũng cần được bảo vệ để tránh các ảnh hưởng sai lệch lẫn nhau. Một cách tiếp cận để giải quyết vấn đề là phân biệt hai chế độ xử lý cho các tiến trình: chế độ không độc quyền và chế độ

độc quyền nhờ vào sự trợ giúp của cơ chế phần cứng. Tập lệnh của CPU được phân

chia thành các lệnh độc quyền và lệnh không độc quyền. Cơ chế phần cứng chỉ cho phép các lệnh độc quyền được thực hiện trong chế độ độc quyền. Thông thường chỉ có hệ điều hành hoạt động trong chế độ độc quyền, các tiến trình của người dùng hoạt động trong chế độ không độc quyền, không thực hiện được các lệnh độc quyền có nguy cơ ảnh hưởng đến hệ thống. Như vậy hệ điều hành được bảo vệ. Khi một tiến trình người dùng gọi đến một lời gọi hệ thống, tiến trình của hệ điều hành xử lý lời gọi này sẽ hoạt động trong chế độ độc quyền, sau khi hoàn tất thì trả quyền điều khiển về cho tiến trình người dùng trong chế độ không độc quyền.

Hình 2.18. Chế độ xử lý độc quyền và không độc quyền.

2.2.4. Cấu trúc dữ liệu của khối quản lý tiến trình

Để quản lý các tiến trình và tài nguyên trong hệ thống, hệ điều hành phải có các thông tin về trạng thái hiện thời của mỗi tiến trình và tài nguyên. Trong trường hợp này hệ điều hành xây dựng và duy trì các bảng thông tin về mỗi đối tượng (Memory, Devices, File, Process) mà nó quản lý, đó là các bảng: memory table cho đối tượng bộ nhớ, nhập/xuất Table cho đối tượng thiết bị nhập/xuất, File Table cho đối tượng tập tin, Process Table cho đối tượng tiến trình. Memory Table được sử dụng để theo dõi cả bộ nhớ thực lẫn bộ nhớ ảo, gồm các thông tin sau: Không gian bộ nhớ chính và không gian bộ nhớ phụ dành cho tiến trình. Các thuộc tính bảo vệ bộ nhớ chính và bộ nhớ ảo. Các thông tin cần thiết để quản lý bộ nhớ ảo. Nhiệm vụ quản lý tiến trình và quản lý bộ nhớ của hệ điều hành có quan hệ chéo với nhau, bộ phận quản lý tiến trình cần phải có các thông tin về bộ nhớ để điều khiển sự hoạt động của tiến trình, ngược lại bộ phận quản lý bộ nhớ phải có các thông tin về tiến trình để tổ chức nạp tiến trình vào bộ nhớ v.v… Điều này cũng đúng với các bộ phận quản lý nhập/xuất và quản lý tập tin. Ở đây chúng ta chỉ đề cập đến Process Table của hệ điều hành.

Để quản lý và điều khiển được một tiến trình, thì hệ điều hành phải biết được vị trí nạp tiến trình trong bộ nhớ chính, phải biết được các thuộc tính của tiến trình cần thiết cho việc quản lý tiến trình của nó:

2.2.4.1. Định vị của tiến trình (Process Location)

Định vị của tiến trình phụ thuộc vào chiến lược quản lý bộ nhớ đang sử dụng. Khi các tiến trình đang ở trong trạng thái Blocked hoặc Ready được hệ điều hành lưu giữa tại các khối nhớ liên tục trên bộ nhớ phụ (thường là đĩa), để tiến trình thực hiện được

Người sử dụng Sell,editors,compilers,. .... Hệ điều hành Hard ware Chế độ không độc quyền Chế độ độc quyền

thì tiến trình phải được nạp vào bộ nhớ chính. Do đó, hệ điều hành cần phải biết định vị của mỗi tiến trình trên đĩa và cho mỗi tiến trình đó trên bộ nhớ chính. Trong một số chiến lược quản lý bộ nhớ, hệ điều hành chỉ cần nạp một phần tiến trình vào bộ nhớ chính, phần còn lại vẫn nằm trên đĩa. Hay tiến trình đang ở trên bộ nhớ chính thì có một phần bị Swap-Out ra lại đĩa, phần còn lại vẫn còn nằm ở bộ nhớ chính. Trong các trường hợp này hệ điều hành phải theo dõi tiến trình để biết phần nào của tiến trình là đang ở trong bộ nhớ chính, phần nào của tiến trình là còn ở trên đĩa.

Đa số các hệ điều hành hiện nay đều sử dụng chiến lược quản lý bộ nhớ mà trong đó không gian địa chỉ của tiến trình là một tập các Block, các Block này có thể không liên tiếp nhau. Tùy theo chiến lược bộ nhớ sử dụng mà các Block này có thể có chiều dài cố định (chiến lược phân trang bộ nhớ) hay thay đổi (chiến lược phân đoạn bộ nhớ) hay kết hợp cả hai. Hệ điều hành cho phép không nạp tất cả các trang (Page) hoặc các đoạn (Segment) của tiến trình vào bộ nhớ. Do đó, Process Table phải được duy trì bởi hệ điều hành và phải cho biết vị trí của mỗi trang (đoạn) tiến trình trên hệ thống. Những điều trên đây sẽ được làm rõ ở phần chiến lược cấp phát bộ nhớ trong chương 3

Quản lý bộ nhớ.

2.2.4.2. Các thuộc tính của tiến trình

Thông tin về mỗi tiến trình là rất cần cho công tác quản lý tiến trình của hệ điều hành, các thông tin này thường trú trong khối quản lý tiến trình (PCB: Process Control Block). Các hệ điều hành khác nhau sẽ có cách tổ chức PCB khác nhau. Các thông tin trong PCB có thể được chia thành ba nhóm chính:

- Định danh tiến trình (PID: Process Identification): Mỗi tiến trình có một định danh duy nhất để phân biệt với các tiến trình khác. Định danh của tiến trình có thể xuất hiện trong Memory Table, nhập/xuất Table. Khi tiến trình này truyền thông với tiến trình khác thì định danh tiến trình được sử dụng để hệ điều hành xác định tiến trình đích. Khi tiến trình cho phép tạo ra tiến trình khác thì định danh được sử dụng để chỉ đến tiến trình cha và tiến trình con của mỗi tiến trình.

- Thông tin trạng thái vi xử lý (Processor State Information): Bao gồm các thanh ghi User-Visible, các thanh ghi trạng thái và điều khiển, các con trỏ Stack.

- Thông tin điều khiển tiến trình (Process Control Information): Bao gồm thông tin trạng thái và lập lịch, cấu trúc dữ liệu, truyền thông liên tiến trình, quyền truy cập tiến trình, quản lý bộ nhớ, tài nguyên khởi tạo và tài nguyên sinh ra.

PCB là một trong những cấu trúc dữ liệu trung tâm và quan trọng của hệ điều hành và nó chứa các thông tin về tiến trình rất cần cho hệ điều hành. Có nhiều Modul thành phần trong hệ điều hành có thể Read hoặc Modified PCB như: lập lịch tiến trình, cấp phát tài nguyên cho tiến trình, ngắt tiến trình v.v. Có thể nói các thiết lập trong PCB định nghĩa trạng thái của hệ điều hành.

2.2.5. Các thao tác điều khiển tiến trình

2.2.5.1. Các thao tác khi khởi tạo tiến trình của hệ điều hành

- Hệ điều hành gán PID cho tiến trình mới và đưa tiến trình vào danh sách quản lý của hệ thống, tức là dùng một entry trong PCB để chứa các thông tin liên quan đến tiến trình mới tạo ra.

- Cấp phát không gian bộ nhớ cho tiến trình, hệ điều hành cần phải xác định được kích thước của tiến trình bao gồm: Code, Data và Stack. Giá trị kích thước này có thể

được gán mặc định dựa theo loại của tiến trình hoặc được gán theo yêu cầu của người sử dụng khi có một công việc (Job) được tạo. Nếu một tiến trình được sinh ra bởi một tiến trình khác, thì tiến trình cha có thể chuyển kích thước của nó đến hệ điều hành trong yêu cầu tạo tiến trình.

- Khởi tạo các thông tin cần thiết cho khối điều khiển tiến trình như định danh của tiến trình cha (nếu có), thông tin trạng thái tiến trình, độ ưu tiên của tiến trình, thông tin ngữ cảnh của vi xử lý (bộ đến chương trình và các thanh ghi khác)….

- Cung cấp đầy đủ các tài nguyên cần thiết nhất để tiến trình có thể vào trạng thái Ready được hoặc bắt đầu hoạt động được.

- Đưa tiến trình vào một danh sách tiến trình Ready List, Suspend List, Waiting List… sao cho phù hợp với chiến lược điều phối tiến trình hiện tại của bộ phận điều phối tiến trình của hệ điều hành.

Khi một tiến trình con được tạo lập thì nó được cấp phát tài nguyên bởi chính hệ điều hành hoặc được tiến trình cha cho thừa hưởng một số tài nguyên ban đầu của nó.

2.2.5.2. Các thao tác khi kết thúc tiến trình của hệ điều hành

Khi tiến trình kết thúc hoặc hoàn thành, hệ điều hành sẽ thực hiện các thao tác:

- Thu hồi tài nguyên đã cấp phát cho tiến trình.

- Loại bỏ tiến trình ra khỏi danh sách quản lý của hệ thống.

- Hủy bỏ khối điều khiển tiến trình.

- Hầu hết các hệ điều hành đều không cho phép tiến trình con hoạt động khi tiến trình cha đã kết thúc. Trong những trường hợp như thế hệ điều hành sẽ chủ động việc

Một phần của tài liệu Bài giảng Nguyên lý điều hành (Trang 36)