
Linux
文章平均质量分 89
Big Skipper
The Chosen One.
展开
-
JUC 工具类之 Phaser 详解
一 概述Phaser 是 JDK1.7 推出的,一个可重用的同步障碍,与 CyclicBarrier,CountDownLatch 功能类似,但是它支持更灵活的用法。先简单说明这个类的作用。假设有一个大工程,可以分为多个阶段,每一个阶段有多个人参与,并且每一个阶段需要参与的所有人都完成这个阶段的事情,才可以进入下一个阶段,然后所有人又继续做下一个阶段的事,直到所有阶段都完成,当然这途中每个人都可以随时退出,整个工程也可以中途终止。二 Phaser 的使用例如某天陈皮约小美,小雪去他家吃饭。这个事情可原创 2021-09-12 23:17:00 · 914 阅读 · 0 评论 -
Linux 内核 hlist 详解
在Linux内核中,hlist(哈希链表)使用非常广泛。本文将对其数据结构和核心函数进行分析。和hlist相关的数据结构有两个:hlist_head 和 hlist_node//hash桶的头结点struct hlist_head { struct hlist_node *first;//指向每一个hash桶的第一个结点的指针};//hash桶的普通结点struct hlist_node { struct hlist_node *next;//指向下一个结点的指针 struct hl转载 2020-07-24 15:42:12 · 1261 阅读 · 0 评论 -
Linux中的虚拟内存机制和内存映射
最近学习了Linux中的虚拟内存,这个机制真的是非常的妙。虚拟内存可以说是硬件异常、主存、外存和操作系统的完美交互,而且更妙的是,这个机制是完全自动运行的。如果我们理解一点点虚拟内存的原理,就可以理解经常出现的内存错误的原因,还可以理解什么是内存映射mmap。一、物理地址空间是什么理解虚拟地址空间还得从物理地址空间开始说起。我们知道内存就像一个数组,每个存储单元被分配了一个地址,这个地址就是物理地址,所有物理地址构成的集合就是物理地址空间。物理地址也就是真实的地址,对应真实的那个内存条。...转载 2020-07-14 19:45:22 · 752 阅读 · 0 评论 -
linux mmap详解
mmap基础概念mmap是一种内存映射文件的方法,即将一个文件或者其它对象映射到进程的地址空间,实现文件磁盘地址和进程虚拟地址空间中一段虚拟地址的一一对映关系。实现这样的映射关系后,进程就可以采用指针的方式读写操作这一段内存,而系统会自动回写脏页面到对应的文件磁盘上,即完成了对文件的操作而不必再调用read,write等系统调用函数。相反,内核空间对这段区域的修改也直接反映用户空间,从而可以实现不同进程间的文件共享。如下图所示:由上图可以看出,进程的虚拟地址空间,由多个虚拟内存区域构成。虚拟内存转载 2020-07-14 19:38:53 · 1037 阅读 · 0 评论 -
linux 页、页表、页框(块)
我们知道,在linux操作系统中,CPU在执行一个进程的时候,都会访问内存。但CPU并不是直接访问物理内存地址,而是通过虚拟地址空间来间接的访问物理内存地址。所谓的虚拟地址空间,是操作系统为每一个正在执行的进程分配的一个逻辑地址,在32位机上,其范围从0 ~ 4G-1。操作系统通过将虚拟地址空间和物理内存地址之间建立映射关系,让CPU间接的访问物理内存地址。通常将虚拟地址空间以512Byte ~ 8K,作为一个单位,称为页,并从0开始依次对每一个页编号。这个大小通常被称为页面将物理地址按照同...转载 2020-07-14 19:32:24 · 497 阅读 · 0 评论 -
container of()函数简介
在linux 内核编程中,会经常见到一个宏函数container_of(ptr,type,member), 但是当你通过追踪源码时,像我们这样的一般人就会绝望了(这一堆都是什么呀? 函数还可以这样定义??? 怎么还有0呢??? 哎,算了,还是放弃吧。。。)。 这就是内核大佬们厉害的地方,随便两行代码就让我们怀疑人生,凡是都需要一个过程,慢慢来吧。其实,原理很简单: 已知结构体type的成员member的地址ptr,求解结构体type的起始地址。type...转载 2020-07-05 17:32:07 · 173 阅读 · 0 评论 -
Epoll的本质(内部实现原理)
从事服务端开发,少不了要接触网络编程。epoll作为linux下高性能网络服务器的必备技术至关重要,nginx、redis、skynet和大部分游戏服务器都使用到这一多路复用技术。文/罗培羽因为epoll的重要性,不少游戏公司(如某某九九)在招聘服务端同学时,可能会问及epoll相关的问题。比如epoll和select的区别是什么?epoll高效率的原因是什么?如果只靠背诵,显然不能算上深刻的理解。网上虽然也有不少讲解epoll的文章,但要不是过于浅显,就是陷入源码解析,很少能有通俗易懂的。于是原创 2020-05-24 23:49:30 · 471 阅读 · 0 评论 -
linux 管道的创建和读写 pipe
1、管道的创建#include <unistd.h>int pipe(int pipefd[2]);linux下创建管道可以通过函数pipe来完成。该函数如果调用成功,数组中将包含两个新的文件描述符。管道两端可分别用描述符fd[0] 以及fd[1]来描述。需要注意的是,管道两端的任务是固定的,一端只能用于读,由描述符fd[0]表示,称其为管道读端;另一端只能用于写,由描述符fd[1]来表示,称其为管道写端。如果试图从管道写端读数据,或者向管道读端写数据都将导致出错。管道是转载 2020-05-23 23:05:53 · 6243 阅读 · 0 评论 -
linux fork函数理解
fork函数用于创建一个与当前进程映像一样的子进程,所创建的子进程将复制父进程的代码段、数据段、BSS段、堆、栈等所有用户空间信息,在内核中操作系统会重新为其申请一个子进程执行的位置。fork系统调用会通过复制一个现有进程来创建一个全新的进程,新进程被存放在一个叫做任务队列的双向循环链表中,链表中的每一项都是类型为task_struct的进程控制块PCB的结构。父子进程有什么区别呢?父进程设置了锁,子进程不继承。 进程ID各不相同 子进程的未决告警被清除 子进程的未决信号集设置未空集函数转载 2020-05-23 22:54:52 · 290 阅读 · 0 评论 -
Ubuntu下Thunderbird邮件ExQuilla插件license过期解决办法
Linux上只用Web版处理邮件,就是因为找不到太好的能支持Exchange的邮件客户端。在网上无意中发现了ExQuilla这个Thunderbird的插件,试用了一下还是不错的,很方便,不过只能免费试用60天,60天之后必须付费,价格是$10/年。网上能找到的解决办法都是用老版本的Thunderbird,搭配老版本的ExQuilla,但版本都太老了点。另外一种办法是破解license,原原创 2016-10-10 09:28:11 · 3129 阅读 · 0 评论