发布于 5年前

c – 排序内核linux链表

我有一个C程序,用于模拟不同的调度算法.从文件中读取过程信息.文件中的每个进程信息都存储在以下结构中:

struct task_struct {
  volatile long state; /* -1 unrunnable, 0 runnable, >0 stopped */
  unsigned int flags; /* per process flags, defined below */
  int on_rq;
  int prio, static_prio, normal_prio;
  const struct sched_class *sched_class;
  struct list_head tasks;
  pid_t pid;
  int arr;
  /* simplify accounting */
  int ticks;
  int start_tick;
  int end_tick;
  int burst;
};

我有一个“队列”结构,它将保存任务/进程列表

struct rq {
  struct task_struct *curr, *idle, *stop;
  struct list_head task_root;
};

我有点理解内核链表如何工作并拥有list.h的用户版本.似乎大多数与列表的交互都是在list.h中定义的.任何人都有一个想法,如何尝试使用该文件中的函数实现排序算法(可能合并)?

解决方案:

为什么不直接使用linux / list_sort.h中定义的list_sort?语法是: ``` /**

  • list_sort - sort a list
  • @priv: private data, opaque to list_sort(), passed to @cmp
  • @head: the list to sort
  • @cmp: the elements comparison function
  • This function implements "merge sort", which has O(nlog(n))
  • complexity.
  • The comparison function @cmp must return a negative value if @a
  • should sort before @b, and a positive value if @a should sort after
  • @b. If @a and @b are equivalent, and their original relative
  • ordering is to be preserved, @cmp must return 0. / void list_sort(void priv, struct list_head head, int (cmp)(void priv, struct list_head a, struct list_head *b))
©2020 edoou.com   京ICP备16001874号-3