当前位置: 首页 > news >正文

网站制作建设飞沐如何查看一个网站的域名解析

网站制作建设飞沐,如何查看一个网站的域名解析,网站页面优化方案,大数据分析当进程要获取某些资源#xff08;例如从网卡读取数据#xff09;的时候#xff0c;但资源并没有准备好#xff08;例如网卡还没接收到数据#xff09;#xff0c;这时候内核必须切换到其他进程运行#xff0c;直到资源准备好再唤醒进程。 waitqueue (等待队列) 就是内核…当进程要获取某些资源例如从网卡读取数据的时候但资源并没有准备好例如网卡还没接收到数据这时候内核必须切换到其他进程运行直到资源准备好再唤醒进程。 waitqueue (等待队列) 就是内核用于管理等待资源的进程当某个进程获取的资源没有准备好的时候可以通过调用 add_wait_queue() 函数把进程添加到 waitqueue 中然后切换到其他进程继续执行。当资源准备好由资源提供方通过调用 wake_up() 函数来唤醒等待的进程。 等待队列初始化 要使用 waitqueue 首先需要声明一个 wait_queue_head_t 结构的变量wait_queue_head_t 结构定义如下 struct __wait_queue_head {spinlock_t lock;struct list_head task_list; };waitqueue 本质上是一个链表而 wait_queue_head_t 结构是 waitqueue 的头部lock 字段用于保护等待队列在多核环境下数据被破坏而 task_list 字段用于保存等待资源的进程列表。 可以通过调用 init_waitqueue_head() 函数来初始化 wait_queue_head_t 结构其实现如下 void init_waitqueue_head(wait_queue_head_t *q) {spin_lock_init(q-lock);INIT_LIST_HEAD(q-task_list); }初始化过程很简单首先调用 spin_lock_init() 来初始化自旋锁 lock然后调用 INIT_LIST_HEAD() 来初始化进程链表。 向等待队列添加等待进程 要向 waitqueue 添加等待进程首先要声明一个 wait_queue_t 结构的变量wait_queue_t 结构定义如下 typedef int (*wait_queue_func_t)(wait_queue_t *wait, unsigned mode, int sync, void *key);struct __wait_queue {unsigned int flags;void *private;wait_queue_func_t func;struct list_head task_list; };下面说明一下各个成员的作用 flags: 可以设置为 WQ_FLAG_EXCLUSIVE表示等待的进程应该独占资源解决惊群现象。private: 一般用于保存等待进程的进程描述符 task_struct。func: 唤醒函数一般设置为 default_wake_function() 函数当然也可以设置为自定义的唤醒函数。task_list: 用于连接其他等待资源的进程。 可以通过调用 init_waitqueue_entry() 函数来初始化 wait_queue_t 结构变量其实现如下 static inline void init_waitqueue_entry(wait_queue_t *q, struct task_struct *p) {q-flags 0;q-private p;q-func default_wake_function; }也可以通过调用 init_waitqueue_func_entry() 函数来初始化为自定义的唤醒函数 static inline void init_waitqueue_func_entry(wait_queue_t *q, wait_queue_func_t func) {q-flags 0;q-private NULL;q-func func; }初始化完 wait_queue_t 结构变量后可以通过调用 add_wait_queue() 函数把等待进程添加到等待队列其实现如下 void add_wait_queue(wait_queue_head_t *q, wait_queue_t *wait) {unsigned long flags;wait-flags ~WQ_FLAG_EXCLUSIVE;spin_lock_irqsave(q-lock, flags);__add_wait_queue(q, wait);spin_unlock_irqrestore(q-lock, flags); }static inline void __add_wait_queue(wait_queue_head_t *head, wait_queue_t *new) {list_add(new-task_list, head-task_list); }add_wait_queue() 函数的实现很简单首先通过调用 spin_lock_irqsave() 上锁然后调用 list_add() 函数把节点添加到等待队列即可。 wait_queue_head_t 结构与 wait_queue_t 结构之间的关系如下图 waitqueue 休眠等待进程 当把进程添加到等待队列后就可以休眠当前进程让出CPU给其他进程运行要休眠进程可以通过一下方式 set_current_state(TASK_INTERRUPTIBLE); schedule();代码 set_current_state(TASK_INTERRUPTIBLE) 可以把当前进程运行状态设置为 可中断休眠 状态调用 schedule() 函数可以使当前进程让出CPU切换到其他进程执行。 唤醒等待队列 当资源准备好后就可以唤醒等待队列中的进程可以通过 wake_up() 函数来唤醒等待队列中的进程。wake_up() 最终会调用 __wake_up_common()其实现如下 static void __wake_up_common(wait_queue_head_t *q, unsigned int mode, int nr_exclusive, int sync, void *key) {wait_queue_t *curr, *next;list_for_each_entry_safe(curr, next, q-task_list, task_list) {unsigned flags curr-flags;if (curr-func(curr, mode, sync, key) (flags WQ_FLAG_EXCLUSIVE) !--nr_exclusive)break;} }可以看出唤醒等待队列就是变量等待队列的等待进程然后调用唤醒函数来唤醒它们。
http://www.w-s-a.com/news/501811/

相关文章:

  • 网站设计的导航栏怎么做太原有网站工程公司吗
  • 苏州虎丘区建设局网站如何在一个数据库做两个网站
  • 淘宝天猫优惠券网站建设费用腾讯邮箱企业邮箱登录
  • 深圳福田做网站公司海航科技网站建设
  • 网站降权查询wordpress更换文章背景色
  • 大型电商网站开发金融企业网站建设公司
  • 成都营销型网站建设价格化妆品品牌推广方案
  • 深圳公司手机网站制作苏州网站推广哪家好
  • 网站建设开发方式包括购买学校网站建设费计入什么科目
  • 做简单网站的框架图中小微企业查询平台
  • 哪些网站可以免费做产品推广建设建设部网站
  • 网站开发销售怎么做django做网站
  • 淘宝客网站做百度竞价万网域名怎么绑定网站
  • 建设网站找哪个公司北京知名大公司有哪些
  • 专业彩票网站开发网站流量在哪设置
  • 网站建设对应的岗位榆林做网站公司
  • 网站建设公司怎么算专业js网站分页怎么做
  • 网和网站的区别phpcms和帝国cms哪个好
  • wordpress改网站名字长沙网络营销外包
  • 宝塔怎么做第二个网站网站内容设计遵循的原则有
  • 网站违反了 google 质量指南免费ppt模版网站
  • 郑州网站建设郑州网站建设成都那家网站建设好
  • 温州网站排名优化公司如何招聘软件网站开发人员
  • 成都 网站建设公司哪家好襄阳行业网站建设
  • wordpress 调用时间做网站seo的公司哪家好
  • 手机上网站搭建网站账户系统
  • 西乡网站的建设柳州建站
  • 宁夏网站建设怎么样互联网 网站设计
  • 成都关键词seo推广平台手机端关键词排名优化软件
  • 学做软件的网站卡盟平台