Linux & C:如何在多进程程序中设置文件读取优先级?

6

我正在完成一项任务,我不是想让你直接给我答案。我只需要有人指点我正确的方向,或者提供一两行示例代码。

我需要找出如何在程序内部设置文件读取操作的优先级:

  • 服务器进程接收消息并生成一个子进程来处理它
  • 子进程尝试打开消息中的文件名,并开始将文件内容加载到消息队列中
  • 可能会有多个子进程同时运行,初始消息包含优先级,因此某些消息可能会获得更多的设备访问权限

目前我能想到的唯一方法(至少现在是这样)就是每次创建消息时递增计数器,并在该进程分配的优先级达到给定值后执行类似sched_yield的操作。那很可能是一个可怕的、可怕的方法,但这是我目前所能想到的全部。这个任务更多关于消息队列,但我们仍然必须有数据传输优先级。

感激任何帮助/指导 :)

3个回答

6
让子进程池共享一个信号量。一旦子进程获取了信号量,它就可以从资源中读取预定义数量的字节并将其返回给客户端。读取的字节数可以与请求的优先级相关联。一旦进程读取了预定义的字节数,释放信号量即可。

那其实不错!谢谢你! 根据你的用户名,我猜想你认识给我这个任务的讲师? - David

2

最近,Linux中没有IO优先级。现在有了ionice。但我怀疑你不需要在任务中使用它。


1
你确定你的任务是关于文件而不是系统V消息队列吗?
阅读以下手册页面:
   msgctl(2),    msgget(2),    msgrcv(2),    msgsnd(2),   capabilities(7),
   mq_overview(7), svipc(7)

虽然我认为您可以使用文件作为键来创建消息队列,以便多个进程通过消息队列进行会合,但 Sys V 消息队列本身不是文件。

只是好奇,因为您特别提到了“消息队列”,并谈论了“优先级”,这可能与例如 msgsnd 和 msgrcv 的 msgtyp 字段相对应,尽管很难根据您提供的信息确定任务的真正内容。


我已经让服务器从多个客户端接收消息,所以msgget/snd/rcv和ftok对我来说不是问题。我面临的挑战是如何从我的消息中获取优先级值,并将其强制执行在每个服务器子进程离开消息的速率上,或者数据读取的速率上。 - David

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接