操作系统
文章平均质量分 64
pipi糖
这个作者很懒,什么都没留下…
展开
-
互斥锁、自旋锁、读写锁、条件锁、悲观锁、乐观锁
一. 互斥锁(Mutex)互斥锁用于控制多个线程对他们之间共享资源互斥访问的一个信号量。也就是说是为了避免多个线程在某一时刻同时操作(如修改)一个共享资源。如果占用共享资源的线程释放互斥量时,有一个以上的线程阻塞,那么所有该锁上的阻塞线程进入准备就绪状态(其中也包括释放锁的线程,该线程也会进入就绪队列),准备就绪状态的所有线程,通过竞争,进入运行状态,然后竞争获取锁资源。二. 自旋锁(Mutex)自旋锁是一种非阻塞锁,也就是说,如果某线程需要获取自旋锁,但该锁已经被其他线程占用时,该线程不会被挂起(不原创 2021-04-30 22:03:58 · 976 阅读 · 1 评论 -
信号量
linux sem 信号量是一种特殊的变量,访问具有原子性, 用于解决进程或线程间对共享资源引发的同步问题。信号量通过一个计数器控制对共享资源的访问,信号量的值是一个非负整数,所有通过它的进程/线程都会将该整数减1。如果计数器大于0,则访问被允许,计数器减1;如果为0,则访问被禁止,所有试图通过它的线程都将处于等待状态。对共享资源使用完毕,计数器加1。信号量和互斥锁(mutex)的区别:互斥锁只允许一个线程进入临界区,可用于进程/线程的互斥,而信号量允许多个线程同时进入临界区,可用于进程/线程的同步。原创 2021-04-19 09:56:57 · 307 阅读 · 0 评论 -
条件锁(条件变量)
条件锁就是所谓的条件变量,某一个线程因为某个条件为满足时可以使用条件变量使改程序处于阻塞状态。条件锁强调的是条件等待而不是互斥,条件锁会阻塞当前线程,直到某个条件成立才会继续向下执行。条件变量是线程可用的另一种同步机制。互斥量用于上锁,条件变量则用于等待,并且条件变量总是需要与互斥量一起使用,运行线程以无竞争的方式等待特定的条件发生。条件变量本身是由互斥量保护的,线程在改变条件变量之前必须首先锁住互斥量。其他线程在获得互斥量之前不会察觉到这种变化,因为互斥量必须在锁定之后才能计算条件。如果条件不满足,则原创 2021-04-19 09:54:45 · 3419 阅读 · 0 评论 -
DPDK初识
一、DPDK原理网络设备(路由器、交换机、媒体网关、SBC、PS网关等)需要在瞬间进行大量的报文收发,因此在传统的网络设备上,往往能够看到专门的NP(Network Process)处理器,有的用FPGA,有的用ASIC。这些专用器件通过内置的硬件电路(或通过编程形成的硬件电路)高效转发报文,只有需要对报文进行深度处理的时候才需要CPU干涉。但在公有云、NFV等应用场景下,基础设施以CPU为运算核心,往往不具备专用的NP处理器,操作系统也以通用Linux为主,网络数据包的收发处理路径如下图所示:操作系原创 2021-04-16 21:25:39 · 191 阅读 · 0 评论 -
linux进程内存分布与管理
一、进程内存分布 一个程序的进程本质上都是由bss段、data段、text段三个组成的。可以看到一个进程在存储(没有调入内存)时分为代码段、数据区和未初始化数据区三部分,如下所示:BSS段(未初始化数据区):通常用来存放程序中未初始化的全局变量和静态变量的一块内存区域。BSS段属于静态分配,程序结束后静态变量资源由系统自动释放。数据(data)段(已初始化数据区):存放程序中已初始化的全局变量的一块内存区域。数据段也属于静态内存分配。代码段(text段):存放程序执行代码的一块内存区域。这部原创 2021-04-15 21:35:19 · 1395 阅读 · 0 评论