zoukankan      html  css  js  c++  java
  • Linux内核运行机制学习笔记

    等待队列

    参考:

    http://blog.csdn.net/murui/archive/2008/04/23/2318280.aspx

    http://blog.ednchina.com/tiloog/133368/message.aspx

    http://blogold.chinaunix.net/u2/73528/showart_1108420.html

    什么是等待队列?

           在软件开发中任务经常由于某种条件没有得到满足而不得不进入睡眠 状态,然后等待条件得到满足的时候再继续运行 ,进入运行状态。这种需求需要等待队列机制的支持。 Linux 中提供了等待队列的机制,该机制在内核中应用很广泛。

     

           Linux 内核中使用等待队列的过程很简单,首先定义一个 wait_queue_head ,然后如果一个 task 想等待某种事件,那么调用 wait_event (等待队列,事件)就可以了。


    linux 中等待队列的实现思想如下图所示,当一个任务需要在某个 wait_queue_head 上睡眠时,将自己的进程控制块信息封装到 wait_queue 中,然后挂载到 wait_queue 的链表中,执行调度睡眠。当某些事件发生后,另一个任务(进程)会唤醒 wait_queue_head 上的某个或者所有任务,唤醒工作也就是将等待队列中的任务设置为可调度的状态,并且从队列中删除。
    点击看大图

    Linux 内核的等待队列是以双循环链表为基础数据结构,与进程调度机制紧密结合,能够用于实现核心的异步事件通知机制。在 Linux2.4.21 中,等待队列在源代码树 include/linux/wait.h 中,这是一个通过 list_head 连接的典型双循环链表,如下图所示。

    在这个链表中,有两种数据结构:等待队列头( wait_queue_head_t )和等待队列项( wait_queue_t )。等待队列头和等待队列项中都包含一个 list_head 类型的域作为 " 连接件 " 。由于我们只需要对队列进行添加和删除操作,并不会修改其中的对象(等待队列项),因此,我们只需要提供一把保护整个基础设施和所有对象的锁,这把锁保存在等待队列头中,为 wq_lock_t 类型。在实现中,可以支持读写锁( rwlock )或自旋锁( spinlock )两种类型,通过一个宏定义来切换。如果使用读写锁,将 wq_lock_t 定义为 rwlock_t 类型;如果是自旋锁,将 wq_lock_t 定义为 spinlock_t 类型。无论哪种情况,分别相应设置 wq_read_lock wq_read_unlock wq_read_lock_irqsave wq_read_unlock_irqrestore wq_write_lock_irq wq_write_unlock wq_write_lock_irqsave wq_write_unlock_irqrestore 等宏。

     

    Linux中的物理地址与虚拟地址

    http://blog.csdn.net/do2jiang/archive/2010/04/05/5450839.aspx

    linux中,驱动程序不能直接访问物理地址空间,要访问外设的寄存器,需要将寄存器的地址映射到虚拟地址中,才能访问,wince也是这样的。

    Linux中的Socket编程

    htons(将16位主机字符顺序转换成网络字符顺序)host to network

    因为网络的字节顺序与CPU的字节顺序可能不同,所以转一下,只有16位,32位需要,8位一个字节的不需要了。

    peeraddr.sin_port=htons(atoi(argv[2]));argv2是port

    atoi:ascii to int,字符串转成有符号整数。

    inet_pton(AF_INET, argv[1], &peeraddr.sin_addr),点分十进制IP地址转成IP地址结构体

  • 相关阅读:
    UVa OJ 148 Anagram checker (回文构词检测)
    UVa OJ 134 LoglanA Logical Language (Loglan逻辑语言)
    平面内两条线段的位置关系(相交)判定与交点求解
    UVa OJ 130 Roman Roulette (罗马轮盘赌)
    UVa OJ 135 No Rectangles (没有矩形)
    混合函数继承方式构造函数
    html5基础(第一天)
    js中substr,substring,indexOf,lastIndexOf,split等的用法
    css的textindent属性实现段落第一行缩进
    普通的css普通的描边字
  • 原文地址:https://www.cnblogs.com/yanhc/p/2175238.html
Copyright © 2011-2022 走看看