2009-02-06 31 views
6

Đây là bài tập tôi đang làm, và KHÔNG Tôi không tìm bạn để chỉ cho tôi câu trả lời. Tôi chỉ cần một người nào đó chỉ cho tôi đúng hướng, có thể với một hoặc hai dòng mã mẫu.Linux & C: Cách đặt mức độ ưu tiên đọc tệp trong chương trình đa tiến trình?

Tôi cần tìm hiểu cách đặt mức ưu tiên của thao tác đọc tệp từ bên trong chương trình của tôi. Để điểm:

  • quá trình máy chủ nhận được một tin nhắn và sinh ra một đứa trẻ để xử lý nó
  • con cố gắng để mở filename từ tin nhắn và bắt đầu tải nội dung tập tin vào hàng đợi thông điệp
  • có thể có một số trẻ em chạy cùng một lúc và thông báo ban đầu chứa mức độ ưu tiên để một số tin nhắn có thể nhận được nhiều quyền truy cập thiết bị hơn

Cách duy nhất tôi có thể nghĩ là làm điều này (ngay bây giờ, dù sao) sẽ tăng bộ đếm mỗi khi tôi tạo một tin nhắn, và để làm điều gì đó ng như sched_yield sau khi bộ đếm đạt đến một giá trị đã cho cho quá trình đó 'ưu tiên được chỉ định. Đó có thể là một cách tiếp cận khủng khiếp, kinh khủng, nhưng đó là tất cả những gì tôi có thể nghĩ đến vào lúc này. Nhiệm vụ được nhiều hơn về hàng đợi tin nhắn hơn bất kỳ thứ gì khác, nhưng chúng tôi vẫn phải có ưu tiên truyền dữ liệu.

Bất kỳ sự giúp đỡ/hướng dẫn được đánh giá cao :)

Trả lời

1

Bạn có chắc chắn nhiệm vụ của bạn đang nói về các tập tin và không hàng đợi hệ thống nhắn V?

Đọc trang hướng dẫn sử cho:

msgctl(2), msgget(2), msgrcv(2), msgsnd(2), capabilities(7), 
    mq_overview(7), svipc(7) 

Mặc dù tôi nghĩ rằng bạn có thể sử dụng một tập tin như một chìa khóa để tạo ra một hàng đợi thông điệp, do đó nhiều quy trình có một cách để hẹn qua hàng đợi tin nhắn, một Sys Hàng đợi thông điệp V không phải là một tệp.

Chỉ cần tự hỏi vì bạn đề cập đến "hàng đợi thư" cụ thể và nói về "ưu tiên", có thể hình thành bản đồ đến trường msgtyp ví dụ. msgsnd và msgrcv, mặc dù thật khó để nói với những thông tin bạn đã cung cấp cho bài tập thực sự là gì.

+0

Tôi đã có máy chủ nhận tin nhắn từ nhiều khách hàng, do đó, msgget/snd/rcv và ftok không phải là vấn đề đối với tôi. Thách thức mà tôi đang phải đối mặt là cách lấy giá trị ưu tiên từ thông báo của mình và thực thi nó theo tốc độ mà thông điệp rời khỏi mỗi máy chủ con, hoặc tốc độ dữ liệu được đọc – David

+0

... từ đĩa. – David

2

Cho đến gần đây, không có ưu tiên IO trong Linux. Hiện tại có ionice. Nhưng tôi nghi ngờ bạn có nghĩa là để sử dụng nó trong nhiệm vụ của bạn.

6

Có một nhóm các quá trình con chia sẻ một semaphore. Khi một đứa trẻ mua lại semaphore nó có thể đọc một số byte được xác định trước từ tài nguyên và trả lại nó cho khách hàng. Số lượng byte được đọc có thể liên quan đến mức độ ưu tiên của yêu cầu. Một khi quá trình đã đọc số byte được xác định trước phát hành semaphore.

+0

Điều đó thực sự ... không tệ! Cảm ơn! Và đi theo tên người dùng của bạn, tôi mang nó cho bạn biết người hướng dẫn đã cho tôi nhiệm vụ này? – David

+0

+1 để trở thành một commie –

+0

Và tôi đang ở trong lớp ngay bên cạnh phòng thí nghiệm tùy chọn ... :-P – TofuBeer

Các vấn đề liên quan