×

LINUX内核的信号量设计与实现

消耗积分:0 | 格式:rar | 大小:1.22 MB | 2021-01-14

分享资料个

  为了同步对内核共享资源的访问,内核提供了down函数和up函数用于获取和释放资源。down和叩所保护的访问资源的内核代码区域,就构成一个临界区。在等待获取资源进入临界区的过程中,代表进程运行的内核控制路径可以睡眠。我们从 LINUX内核信号量最直观的设计/实现出发,通过一步步改进,揭示在x86平台上完整的信号量设计/实现,然后探讨在不同平台上通用的信号量设计/实现。

  LINUX内核信号量的初步设计与实现

  1数据结构我们首先分析信号量 semphore应具备的数据结构。它需要一个计数 count,表示能进入临界区的进程个数。 conut一般初始化为1,表示信号量是互斥信号量,一次只允许一个进程进入临界区。它也能被初始化为其他正值,表示可有多个进程同时进入临界区。当进程不能进入临界区时,它必须在信号量上睡眠,因此需要一个表示“等待队列头的字段wait。在SMP中,等待队列需要自旋锁来保护,因此wait结构中应含有自旋锁lock,和指向等待队列链表的指针 task list。而插入等待队列的“等待元素”,其字段中应含有指向进程结构的指针task,及能够链入等待队列的指针 task list

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !