在构建时间

时间:2016-02-23 09:25:21

标签: c linux kernel

我正在努力寻找以下问题的解决方案:

假设我在内核中有一个“服务器”进程,它集中了注册它的所有“客户端”进程的报告。当所有“客户端”进程完成启动并准备就绪时,此“服务器”进程将报告系统中的其他CPU。

我的示例中的“客户端”将是我系统中的任何进程,希望签署为“服务器”需要等待他完成启动的进程。

我的问题是,整个过程大多数是在构建时间内完成的,因为否则我很容易遇到种族案例,例如以下示例:

假设我的'服务器'进程完成了他的初始启动并准备就绪,他是第一个在系统中启动的进程。在这种情况下,如果另一个CPU将查询他 - 他将回复所有'客户'已准备就绪(即使没有人列出)。因此,当其他“客户”启动并在其上列出时 - 将为时已晚。

我想构建一个通用解决方案,所以一旦我完成环境构建 - “服务器”流程将“知道”在系统启动期间应该注册多少“客户端”。

这里有什么想法吗?

谢谢大家

1 个答案:

答案 0 :(得分:1)

这是我所理解的:

  • 您想构建一个服务,它将报告其他客户是否已启动
  • 您希望客户列表是动态的 - 即客户可以随意注册或取消注册
  • 您希望客户端列表是持久的 - 服务应该在每次启动后立即知道当前的客户端列表

这种要求的一种常见方式是使用持久性数据库,客户​​端可以注册(添加一行)或取消注册(删除自己的行)。然后,该服务仅在引导时或每次请求时读取数据库。

你无法决定:

  • 是否要使用简单文件,精简数据库(SQLite)或完整数据库(PosgreSQL,MariaDB,...)
  • 是否要在每个查询上读取数据库或让服务器缓存当前状态
  • 在缓存的情况下,是否可以接受非准确的响应,只是在超过n秒时刷新状态,或者如果需要立即同步(数据库在引导时读取,但注册转到写入数据库的服务永久存储) - 最后一种方式更准确,但只有在服务启动时才能注册

根据您的实际要求,您可以想象更聪明的解决方案,但上面应该可以帮助您开始