Trên một máy tính đơn bộ xử lý thì tại một thời điểm chỉ có một tiến trình thực hiện, do đó các tiến trình không thể đồng thời thực hiện song song nhiều dòng lệnh trên máy tính một bộ xử lý. Trong các hệ điều hành hỗ trợ tính toán song song thì vấn đề này có thể giải quyết bằng cách tạo ra các processor logic, mỗi processor này quản lý một tiến trình tơng ứng và thực hiện tiến trình khi nhận đợc processor vật lý. Với mô hình phân chia thời gian này, các tiến trình sẽ có cảm giác nh đang chỉ có duy nhất một tiến trình sử dụng hệ thống.
Trong khi thực thi tiến trình song song, mỗi tiến trình có thể thuộc một trong ba trạng thái sau:
Hình 6. 1 Công việc và trạng thái tiến trình
Tiến trình nằm trong trạng thái sẵn sàng khi đã đợc cung cấp đầy đủ tài nguyên để thực hiện, chờ đợi đợc cung cấp processor vật lý. Tiến trình trong trạng thái thực khi đang thực hiện các lệnh trên processor vật lý. Còn tiến trình trong trạng thái ngắt khi đợi xuất hiện một sự kiện hoặc cung cấp tài nguyên để thực hiện.
Tại mỗi thời điểm, có nhiều tiến trình đang tồn tại và có trạng thái riêng. Do đó, để quản lý đợc các tiến trình song song trong máy tính đơn bộ xử lý, các hệ điều hành cần phải tổ chức lu thông tin trạng thái tiến trình vào khối điều khiển tiến trình PCB ( Process Control Block). Khối điều khiển này sẽ chứa toàn bộ trạng thái của tiến trình.
Các tiến trình chủ yếu nằm trong hai trạng thái là sẵn sàng và ngắt. Tổ chức các tiến trình trong cùng một trạng thái thành một dòng hàng đợi thực sự ( tức là tổ chức theo kiểu FIFO).
Khi một tiến trình đợc cung cấp processor vật lý, các thông tin trong bảng mô tả nh bộ đếm chơng trình, các thanh ghi, con trỏ stack đợc nạp vào trong processsor và lu trữ giá trị hiện thời của CPU.
Khi dừng tiến trình lại để chuyển sang tiến trình khác, cần thiết phải lu trạng thái của các thanh ghi vào PCB.
Khi bắt đầu thực hiện một tiến trình mới, cần nạp các trạng thái đợc lu trong PCB vào trong processor. Chơng trình cần duy trì đợc các hàng đợi trạng thái trong khi thực hiện, bởi vì các hàng đợi thể hiện trạng thái của tất cả các tiến trình đang tồn tại.
Công cụ để các tiến trình có thể thực hiện chính xác là ngắt. Ngắt sẽ phân chia thời gian tính toán cho từng tiến trình, các thiết bị ngoại vi sử dụng ngắt để báo cho processor biết sự thay đổi trạng thái của mình.
Trên quan điểm lập trình, từ góc độ processor, ta có thể định nghĩa ngắt ngừng đột xuất việc thực hiện một tiến trình để chuyển sang thực hiện tiến
Nhập Khởi tạo Sẵn sàng Thực hiện Ngắt Kết thúc
Vào từ chế độ phân chia
trình khác khi có một sự kiện nào đó xảy ra. Nh vậy ngắt là công cụ chuyển điều khiển tới một tiến trình khác mà tiến trình hiện tại không biết.
Phần lớn các máy tính đều có đồng hồ độc lập đo khoảng thời gian. Do đó có thể dùng đồng hồ để điều khiển processor theo thời gian. Cần xác lập một khoảng thời gian nhất định cho đồng hồ và giá trị này tự động đợc giảm dần cho đến khi xuất hiện tín hiệu ngắt đồng hồ. Bằng cách này có thể tạo đồng hồ riêng cho từng tiến trình và việc xử lý dòng xếp hàng kết hợp với thứ tự u tiên trở nên dễ dàng hơn nhiều. mỗi phần tử của danh sách ứng với dòng xếp hàng chứa tên tiến trình và khoảng thời gian cần cung cấp processor. Mỗi lần có ngắt đồng hồ báo hết thời gian thì hệ thống kích hoạt tiến trình khác và nạp khoảng thời gian mới bộ đếm thời gian.
Tuy nhiên để quản lý các tiến trình nh các hệ điều hành 32 bít, ta cần truy xuất vào hệ thống, lấy đợc các trạng thái của tiến trình đang thực hiện. Với các ngôn ngữ lập trình thông thờng thì việc thực hiện các tiến trình song song nh thế sẽ rất khó bởi vì ngời lập trình phải phụ thuộc vào trình biên dịch của ngôn ngữ cụ thể.
Đối với bài toán giải hệ phơng trình tuyến tính thì các tiến trình đợc thiết kế phụ thuộc vào tham số hàng, cột. Do đó, đơn vị phân chia là thời gian thực hiện một hàng cột, mỗi tiến trình sẽ thực hiện một hàng hoặc cột sau đó chuyển sang tiến trình khác thực hiện.
Lý do giải quyết bài toán lớn vì nếu với bài toán nhỏ do tốc độ của máy tính là quá lớn nên thời gian để giải quyết một bài toán là rất nhỏ ( chỉ khoảng micro giây) nên ta không thể nhận biết đợc lợi ích của việc thực hiện song song. Vì vậy, bài toán đa ra thử nghiệp yêu cầu cần phải có số bậc lớn. Mặt khác, do hạn chế về ngôn ngữ thực hiện (ngôn ngữ C), bộ nhớ dành cho ch- ơng trình tối đa là 640KB nên việc lu trữ và trao đổi dữ liệu là hạn chế. Để có thể giải quyết đợc bài toán lớn ta phải thực hiện việc lu trữ và truy xuất với bộ nhớ bên ngoài ( ổ đĩa cứng). Cụ thể việc thực hiện đợc minh hoạ nh sau:
• Tất cả các hệ số của hệ phơng trình đợc lu trữ ở bộ nhớ ngoài. Khi cần một hệ số nào thì hệ số đó sẽ đợc đọc vào bộ nhớ trong ( biến tạm thời).
• Sau khi xử lý xong thì tất cả các biến tạm thời đó lại đợc lu trở lại bộ nhớ ngoài ( tất cả các biến đã xử lý và cha xử lý).
• Quá trình cứ tiếp tục nh vậy cho đến khi chơng trình kết thúc. Kết quả sẽ đợc lu ra bộ nhớ ngoài.
Thớc đo đánh giá sự khác biệt giữa thực hiện song song và thực hiện tuần tự đó là thời gian thực hiện của chơng trình với cùng một đầu vào. Thời gian thực hiện song song sẽ đợc tính toán theo cách sau :
• Khi bắt đầu thực hiện tiến trình ta khởi tạo bộ đếm thời gian (sẽ lấy theo đồng hồ hệ thống). Nh vậy mỗi tiến trình sẽ có một bộ đếm thời gian riêng.
• Khi tiến trình thực hiện xong ( một hàng hoặc một cột), bộ đếm đợc lu lại và sẽ đợc tiếp tục tính toán khi ta bắt đầu lại tiến trình này ( giá trị khởi tạo cho bộ đếm thời gian của tiến trình này là thời gian của việc thực hiện tiến trình này trớc đó).
• Sau khi thực hiện xong thì thời gian thực hiện song song sẽ bằng thời gian lớn nhất mà một trong các tiến trình trên thực hiện.
Để so sánh ta sẽ thực hiện giải bài toán này theo giải thuật tuần tự và sẽ thu đợc thời gian thực hiện tuần tự này, sau đó đem so sánh thời gian đã thu đợc ở bớc thực hiện song song để thấy đợc hiệu quả của giải thuật song song.