Người dùng A yêu cầu hệ thống đọc tệp foo
và đồng thời người dùng B muốn lưu dữ liệu của họ vào cùng một tệp. Tình trạng này được xử lý như thế nào trên mức hệ thống tập tin?Làm thế nào để hệ thống tập tin xử lý đồng thời đọc/ghi?
Trả lời
Hầu hết các hệ thống tệp (nhưng không phải tất cả) đều sử dụng khóa để bảo vệ quyền truy cập đồng thời vào cùng một tệp. Khóa có thể độc quyền, vì vậy người dùng đầu tiên nhận được khóa được truy cập - người dùng tiếp theo nhận được lỗi "truy cập bị từ chối". Trong kịch bản ví dụ của bạn, người dùng A sẽ có thể đọc tệp và nhận khóa tệp, nhưng người dùng B sẽ không thể viết khi người dùng A đang đọc.
Một số hệ thống tệp (ví dụ: NTFS) cho phép mức khóa được chỉ định, để cho phép các trình đọc ví dụ đồng thời, nhưng không có người viết. Cũng có thể có khóa bằng byte.
Không giống như cơ sở dữ liệu, hệ thống tập tin thường không giao dịch, không nguyên tử và những thay đổi từ những người dùng khác nhau không bị cô lập (nếu thay đổi thậm chí có thể được nhìn thấy - khóa có thể cấm này.)
Sử dụng khóa toàn bộ tập tin là một hạt thô cách tiếp cận, nhưng nó sẽ bảo vệ chống lại các cập nhật không nhất quán. Không phải tất cả các hệ thống tệp đều hỗ trợ khóa toàn bộ tệp và do đó, thực tế phổ biến là sử dụng tệp khóa - một tệp rỗng thường có sự hiện diện biểu thị rằng tệp được liên kết của nó đang được sử dụng. (Tạo ra một tập tin là một hoạt động nguyên tử trên hầu hết các hệ thống tập tin.)
Đối với Linux, câu trả lời ngắn gọn là bạn có thể nhận được một số thông tin kỳ lạ lại từ một tập tin nếu có một nhà văn đồng thời . Hạt nhân không sử dụng khóa bên trong để chạy mỗi đọc() và write() hoạt động serially. (Mặc dù, tôi quên là toàn bộ tập tin có bị khóa hay không hoặc trên chi tiết mỗi trang). Nhưng nếu ứng dụng sử dụng nhiều cuộc gọi write() để ghi thông tin vào tập tin, số đọc() có thể xảy ra giữa bất kỳ cuộc gọi nào trong số đó, vì vậy nó có thể thấy dữ liệu không phù hợp. Đây là atomicity violation trong hệ điều hành.
Như mdma đã đề cập, bạn có thể sử dụng file locking để đảm bảo chỉ có một người đọc và một người viết tại một thời điểm. Có vẻ như NTFS sử dụng khóa bắt buộc, nếu một chương trình khóa tệp, tất cả các chương trình khác sẽ nhận được thông báo lỗi khi họ cố gắng truy cập vào nó.
Các chương trình Unix thường không sử dụng khóa nào cả, và khi thực hiện, khóa thường là tư vấn. Khóa tư vấn chỉ ngăn các quá trình khác nhận được khóa tư vấn trên cùng một tệp; nó không thực sự ngăn đọc hoặc viết. (Nghĩa là, nó chỉ khóa tập tin cho những người kiểm tra khóa.)
- 1. Làm thế nào để sử dụng hệ thống tập tin tạm thời của heroku
- 2. Xử lý đồng hồ hệ thống không chính xác
- 3. Làm thế nào để hệ thống xử lý Java ngắt như Ctrl + C
- 4. thư viện thông tin hệ thống/xử lý di động
- 5. Làm thế nào để kiểm tra hoạt động hệ thống tập tin
- 6. Xử lý đồng thời trong Scala
- 7. Sách trên lý thuyết về hệ thống tập tin
- 8. của Ruby xử lý tập tin quản lý (quá nhiều tập tin mở)
- 9. Làm thế nào để tạo một chuỗi Ruby an toàn cho một hệ thống tập tin?
- 10. Hệ thống tập tin giả trên * nix
- 11. Mọi người xử lý dàn dựng hệ thống quản lý nội dung như thế nào?
- 12. Gettext không có hệ thống tập tin
- 13. Làm thế nào để sử dụng tài sản giữ chỗ cho tập tin trên hệ thống tập tin
- 14. Làm thế nào để hệ thống tập tin giả/trừu tượng đi?
- 15. cloudfoundry: làm thế nào để sử dụng hệ thống tập tin
- 16. Thuật toán tập tin hệ thống đệ quy có nên được xử lý theo kiểu bắt buộc không?
- 17. Hệ thống tập tin đơn giản
- 18. xử lý tập tin đaFASTA
- 19. Confused về hệ thống tập tin Node.js
- 20. Làm thế nào để có được một tập tin thực thi để xử lý không gian trong tên tập tin?
- 21. Cách xử lý javascript xmlhttprequests đồng thời?
- 22. Qt lớp để xử lý đường dẫn tập tin
- 23. Làm cách nào để xử lý dữ liệu cũ, lỗi thời của một hệ thống chạy dài?
- 24. Làm thế nào để xác định liệu một xử lý tập tin Perl là một xử lý đọc hoặc viết?
- 25. Trên hệ thống/hệ thống tập tin nào là os.open() nguyên tử?
- 26. Xử lý đồng thời/xử lý đồng bộ Ruby (với trường hợp sử dụng đơn giản)
- 27. Làm thế nào tôi có thể mô phỏng tham nhũng hệ thống tập tin ext3?
- 28. Nhiều hệ thống kiểm soát phiên bản đồng thời?
- 29. Làm thế nào để đóng pyPDF "PdfFileReader" tập tin Class xử lý
- 30. Thiết kế hệ thống xử lý phân tích thời gian thực
Khóa có hoạt động trên toàn bộ tập tin hoặc trên các bộ phận (khối/inode/bất cứ thứ gì) của nó không? –
Câu trả lời là hệ thống tập tin cụ thể (như bạn không có nghi ngờ thu thập từ các câu trả lời khác). Windows sử dụng toàn bộ khóa tệp cho hầu hết các trường hợp, vì đó là một phần của API để mở tệp (CreateFile). Khóa byte có sẵn, nhưng các ứng dụng phải yêu cầu một khóa đặc biệt cho một vùng của một tệp bằng cách sử dụng một hàm API khác (LockFile). – mdma