Khóa tư vấn trên các tệp mà hệ thống Unix thường sử dụng là gì?


7

Tôi đọc rằng hệ thống giống như Unix thường sử dụng khóa tư vấn cho tệp IO so với khóa bắt buộc được sử dụng bởi Microsoft OS. Nếu tôi hiểu chính xác trong khóa tập tin khóa bắt buộc được thực thi bởi chính hệ điều hành. Nhưng tôi không có được trực giác của khóa tư vấn. Lấy ví dụ về hai quá trình, nói "A" và "B" đang hoạt động trên tệp "foo". Hãy nói "A" ghi vào "foo" và "B" đọc từ "foo". Làm thế nào sẽ tư vấn khóa làm việc trong kịch bản này? Nếu hệ thống tập tin / hệ điều hành không thực thi khóa cho "foo" thì tính nhất quán được duy trì để đọc và ghi như thế nào?


1
"tính nhất quán được duy trì cho việc đọc và viết như thế nào?" Xem nội dung về "khóa hồ sơ tư vấn" trong man fcntl: pubs.opengroup.org/onlinepub/9699919799/fifts/fcntl.html (POSIX)
goldilocks

Câu trả lời:


9

Khóa tư vấn là cho các quá trình hợp tác "hòa bình". Hạt nhân theo dõi các khóa nhưng không thực thi chúng - tùy thuộc vào các ứng dụng tuân theo chúng. Bằng cách này, kernel không cần phải xử lý các tình huống như khóa chết.

Khóa bắt buộc đã được giới thiệu trong System V Unix, nhưng hóa ra thiết kế không phải là thứ sáng nhất. (Đó là, có nhiều cách xung quanh nó.) Nếu bạn cần một cái gì đó giống như khóa bắt buộc thực sự trong các hệ thống unixy, thì hãy làm theo mẫu thiết kế máy khách-máy chủ trong đó máy chủ là cơ quan có thẩm quyền đối với (các) tài nguyên được chia sẻ.


1
Tại sao gọi là tư vấn? Hạt nhân có cung cấp lời khuyên cho quá trình yêu cầu liên quan đến người sở hữu ổ khóa không?
Geek

2
Đúng, hạt nhân đóng vai trò, không phải bằng cách chủ động tư vấn, mà như cách nói ngược lại, bằng cách cung cấp các khóa. Các công việc này giống như các mutexes trong đa luồng: chúng được liên kết với một tệp theo cách mà một mutex có thể được liên kết với một biến, nhưng nếu bạn không kiểm tra / đặt chúng, bạn vẫn có thể truy cập tệp hoặc biến. Vì vậy, hệ thống là hợp tác . Lưu ý rằng có những lý do tại sao khóa tệp bắt buộc thực sự là một ý tưởng tồi - ví dụ: nó ngụ ý sự không hợp tác tiềm năng liên quan đến các tệp hệ thống được chia sẻ và tạo cơ hội cho một ứng dụng hoạt động sai để giải quyết nhiều vấn đề.
goldilocks

Đây gavv.github.io/articles/file-locks là một tốt đọc về chủ đề này.
JGK
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.