MỤC LỤC
Một chương trình là một thực thể thụ động, chứa đựng các chỉ thị điều khiển máy tính để tiến hành một tác vụ nào đó ; khi cho thực hiện các chỉ thị này, chương trình chuyển thành tiến trình, là một thực thể hoạt động, với con trỏ lệnh xác định chỉ thị kế tiếp sẽ thi hành, kèm theo tập các tài nguyên phục vụ cho hoạt động của tiến trình. Tuy nhiên, có nhiều tình huống người sử dụng mong muốn có nhiều dòng xử lý cùng chia sẻ một không gian địa chỉ, và các dòng xử lý này hoạt động song song tương tự như các tiến trình phân biệt (ngoại trừ việc chia sẻ không gian địa chỉ). Tuy nhiên, có nhiều tình huống người sử dụng mong muốn có nhiều dòng xử lý cùng chia sẻ một không gian địa chỉ, và các dòng xử lý này hoạt động song song tương tự như các tiến trình phân biệt (ngoại trừ việc chia sẻ không gian địa chỉ).
Thường thì các công việc nhỏ này cần hợp tác với nhau để cùng hoàn thành tác vụ ban đầu, ví dụ dữ liệu kết xuất của tiến trình này lại là dữ liệu nhập cho tiến trình khác …Trong các trường hợp đó, hệ điều hành cần cung cấp cơ chế để các tiến trình có thể trao đổi thông tin với nhau. Liên lạc theo chế độ đồng bộ hay không đồng bộ (blocking / non-blocking): khi một tiến trình trao đổi thông tin với một tiến trình khác, các tiến trình có cần phải đợi cho thao tác liên lạc hoàn tất rồi mới tiếp tục các xử lý khác?. • Liên lạc theo chế độ đồng bộ hay không đồng bộ (blocking / non-blocking): khi một tiến trình trao đổi thông tin với một tiến trình khác, các tiến trình có cần phải đợi cho thao tác liên lạc hoàn tất rồi mới tiếp tục các xử lý khác?.
Nếu hai tiến trình P và Q muốn liên lạc với nhau, cần phải thiết lập một mối liên kết giữa hai tiến trình, sau đó P, Q sử dụng các hàm IPC thích hợp để trao đổi thông điệp, cuối cùng khi sự liên lạc chấm dứt mối liên kết giữa hai tiến trình sẽ bị hủy. Giới thiệu: Một socket là một thiết bị truyền thông hai chiều tương tự như tập tin, chúng ta có thể đọc hay ghi lên nó, tuy nhiên mỗi socket là một thành phần trong một mối nối nào đó giữa các máy trên mạng máy tính và các thao tác đọc/ghi chính là sự trao đổi dữ liệu giữa các ứng dụng trên nhiều máy khác nhau.
Chúng ta định nghĩa e là một tập tất cả các sự kiện bên trong hệ thống của chúng ta và ep là tất cả các sự kiện trong e xảy ra tại bộ xử lý p. Chúng ta thấy rằng tất cả các thông báo kiểu điểm tới điểm (point-to-point) được phân chia và gửi đi theo thư tự, có thể sử dụng nhãn thời gian duy trì liên kết nhân quả. Kết quả là giữ lại thông báo m gửi từ bộ xử lý p cho đến khi chúng ta đảm bảo rằng không có thông báo m’<Hm sẽ được phân chia từ bất cứ bộ xử lý nào.
Mỗi một bộ xử lý p giữ một mảng earliest[1…M] cất trong phạm vi thấp nhất trong nhãn thời gian của các thông báo mà có thể được phân chia ra từ các bộ xử lý khác nhau. Khi một bộ xử lý nhận thông báo m từ bộ xử lý p, thông báo được đặt vào hàng đợi blocked[p] và giữ ở đó cho tới khi nó an toàn để phân chia. Nếu không có thông báo trong blocked[p] thì earliest[p] là tập m.timestamp, bởi vì chúng ta bây giờ biết rằng không có thông báo sớm hơn được phân chia từ p.
Cách khác, thông báo sớm nhất có thể tới từ bộ xử lý k phải có nhãn thời gian tại ít nhất lk lớn hơn m.timestamp = earliest[k]. Nếu chúng ta thừa nhận khả năng mà mạng và các bộ xử lý phải trải qua các độ trễ tuỳ ý, nó không hiểu hơn để nói về bộ xử lý khởi tạo toàn cục. Nếu một bộ xử lý không thể tạo ra sự đảm nhận an toàn về điều chỉnh các sự kiện hệ thống, một bộ xử lý đang triển các giải thuật cho hệ thống không đồng bộ.
Từ khi khai báo người dẫn dầu toàn bộ chứa đầy nguy hiểm, chúng ta cần xem xét lại những gì chúng ta giải thích bằng bộ xử lý khởi tạo. Có lẽ mất thời gian cho các nhóm liên kết hợp khi dùng giải thuật được mời bởi vì không có định nghĩa cấu trúc phù hợp trên chúng. Đồng bộ chống lại không đồng bộ: giả thuật bắt buộc dùng kỹ thuật thúc đẩy thông tin từ tất cả các bộ xử lý khác, như vậy nó cảm thấy giống với giải thuật chọn động phân tán.
Các trả lời này mang nhãn thời gian tại bên trả lời yêu cầu phần tới hạn hay giá trị không nếu bên trả lời không đợi hay sử dụng phần tới hạn. Khi bộ xử lý tìm thấy hàng đợi ưu tiên, nó biết rằng không có bộ xử lý khác nghĩ rằng nó ở đầu của hàng đợi ưu tiên, như vậy nó an toàn đi vào phần tới hạn. Bộ xử lý p sẽ bị chặn ít nhất chođến khi có trả lời của q.Nếu q có yêu cầu ưu tiên cao hơn p, p sẽ bị chặn cho đến khi q tách ra khỏi phần tới hạn.
Giải thuật 2 vòng thực hiện như sau : Khi bộ xử lý muốn đi vào phần tới hạn, nó ghi lại nhãn thời gian hiện thời và gửi yêu cầu tới tất cả bộ xử lý khác. Một cách để đảm bảo token có thể đi tới tất cả các bộ xử lý là đặt cấu trúc vật lý trong các bộ xử lý và yêu cầu token đi theo cấu trúc vật lý. Tiếp theo ta cần giải quyết 2 vấn đề để yêu cầu thông qua token như thế nào và để token thông qua bộ xử lý tiếp theo như thế nào để vào phần tới hạn.
Để có thể kiểm soát được tình hình sử dụng tài nguyên trong hệ thống, hệ điều hành chỉ cho phép các tiến trình được truy xuất đến các tài nguyên mà nó có quyền sử dụng, hơn nữa tiến trình chỉ được truy xuất đến các tài nguyên cần thiết trong thời điểm hiện tại để nó hoàn thành tác vụ (nguyên lý need-to-know) nhăm hạn chế các lỗi truy xuất mà tiến trình có thể gây ra trong hệ thống. Một miền bảo vệ sẽ xác định các tài nguyên ( đối tượng) mà những tiến trình hoạt động trong miền bảo vệ này có thể sử dụng, và các thao tác hợp lệ các tiến trình này có thể thực hiện trên những tài nguyên đó. Tuy nhiên, nếu sử dụng liờn kết tĩnh, rừ ràng là ngay từ đầu miền bảo vệ đó phải đặc tả tất cả các quyền truy xuất qua các giai đoạn cho tiến trình, điều này có thể khiến cho tiến trình có dư quyền trong một giai đoạn nào đó, và vi phạm nguyên lý need-to-know.
Để có thể tôn trọng nguyên lý này, khi đó cần phải có khả năng cập nhật nội dung miền bảo vệ để có thể phản ánh các quyền tối thiểu của tiến trình trong miền bảo vệ tại một thời điểm!. Để tiếp tục tuân theo nguyên lý need-to-know, thay vì sửa đổi nội dung của miền bảo vệ, có thể tạo ra các miền bảo vệ mới với nội dung thay đổi qua từng giai đoạn xử lý của tiến trình, và chuyển tiến trình sang hoạt động trong miền bảo vệ phù hợp theo từng thời điểm. Một tiến trình : trong trường hợp này, tập các đối tượng được phép truy xuất phụ thuộc vào định danh của tiến trình, miền bảo vệ được chuyển khi quyền điều khiển được chuyển sang tiến trình khác.
Một người sử dụng : trong trường hợp này, tập các đối tượng được phép truy xuất phụ thuộc vào định danh của người sử dụng, miền bảo vệ được chuyển khi thay đổi người sử dụng. Một thủ tục : trong trường hợp này, tập các đối tượng được phép truy xuất là các biến cục bộ được định nghĩa bên trong thủ tục, miền bảo vệ được chuyển khi thủ tục được gọi. Khả năng này, đến lượt nó, lại phụ thuộc vào việc xác định được người dùng đang sử dụng hệ thống để có thể kiểm tra người dùng này được cho phép thao tác trên những tài nguyên nào.
Mỗi khi người dùng muốn sử dụng tài nguyên, hệ thống sẽ kiểm tra password của người dùng nhập vào với password được lưu trữ, nếu đúng, người dùng mới được cho phép sử dụng tài nguyên. Cơ chế password rất dễ hiểu và dễ sử dụng do vậy được sử dụng rộng rãi, tuy nhiên yếu điểm nghiêm trọng của phương pháp này là khả năng bảo mật password rất khó đạt được sự hoàn hảo, những tác nhân tiêu cực có thể đoán ra password của người khác nhờ nhiều cách thức khác nhau. Tiến trỡnh ô sõu bo ằù cú khả năng tự động phát sinh các phiên bản ngay cả trên môi trường mạng, lan tràn trên nhiều máy tính khác nhau, sau đó chiếm dụng các tài nguyên hệ thống và làm ngừng trệ hoàn toàn hoạt động của các tiến trình khác trên hệ thống mạng.