Linux(操作系统)
文章平均质量分 86
Linux一些常见的指令和概念
吐泡泡_
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
ptmalloc(glibc-2.12.1)源码解析2
bins[NBINS * 2 - 2]:bins 数组,前面说的逻辑结构是 128 个,实际物理是 128 * 2 - 2,前面说过一个 bin 的哨兵节点需要 2 个指针,这里把 2 个指针拆开放到下标里,也就是两两下标为一组。stat_lock_direct/stat_lock_loop/stat_lock_wait:表示线程的直接获取锁的数量/自选等待锁的数量/阻塞等待锁的数量。max_n_mmaps:表示当前进程已经调用 mmap 且取最大值,不能超过 n_mmaps_max。原创 2025-07-25 17:50:15 · 804 阅读 · 0 评论 -
ptmalloc(glibc-2.12.1)源码解析1
chunk2mem(p):根据已分配的 chunk 的起始地址得到用户实际用的其实地址,本质是跳过前 2 个固定字段的大小,后4个字段在已分配的 chunk 中无效,直接给用户复用,也就是给用户返回的是 fd 字段的起始地址。MINSIZE:进行按最小的 chunk 对齐,比如传入 1 字节,至少对齐到 1+16(最小的 chunk 大小) -> 32(按最小的 chunk 对齐),大于最小的一样按照最小的 chunk 对齐。原创 2025-07-24 14:31:52 · 821 阅读 · 0 评论 -
Linux(内存分配算法)
最小分配出去的内存块是1页,即4k,所以如果申请小于1页的需求,也至少分配1页出去,可能导致大量的内存浪费用不上,如果分配的是完整的页,即计算后的大小命中某个下标,则直接分配出去,否则如果没能命中,则尝试找更大的连续的页,然后进行切割,剩余挂到对应的下标里,或者一个也没有则尝试合并小的页成一个大的页进行分配然后尝试切割,否则说明该数组不能满足需求则直接分配失败。首先伙伴算法管理的内存块是以页为单位的和物理内存一样,每个下标管理的是以 2^n 个页的内存块,比如:1页,2页,4页,8页.....。原创 2025-07-21 11:03:39 · 828 阅读 · 0 评论 -
ptmalloc(glibc-2.12.1)整体结构
先说说生活上的例子:比如在学校,每个月又或者每个星期或者每天家里人都会给生活费来维持在学校的生活开销。那么一次要多少,隔多少天要一次?这些情况都会带来不一样的效果和影响。比如一天要一次和一个星期要一次:每天都要一点,每天都会给家里人通信,想必时间久了家里人都会觉得太麻烦了。每隔星期要一点,一次要多点,这样就会家里人就不会觉得太麻烦了。家里人可能很忙,不能每天抽空按时给生活费。原创 2025-07-20 14:12:52 · 978 阅读 · 0 评论 -
Linux(生产消费者模型/线程池)
这里的效率指的是生产者生产数据和消费者消费数据都需要时间,仅放/拿数据是互斥的,放/拿数据和他们生产任务/处理任务不和交易场所直接关联,也就是通过交易场所进行解耦,互相不冲突达到并行效果,所以总体来说效率高,并且上面是把交易场所当整体使用了,也可以比如交易场所有10个数据,同时放10个消费者取数据,维护他们之间的互斥和同步,也能达到同时消费,进而提高效率,所以下面引入信号量。工厂和工厂的关系:如果超市还差一个货物满了,工厂与工厂之间同时出货物,超市只能处理一个,剩下处理不了,所以工厂和工厂是互斥关系。原创 2025-06-07 23:06:06 · 775 阅读 · 0 评论 -
Linux(线程控制)
第一:内存中的值没变,其他线程可以继续申请,如果申请到,内存中的值变了,切走的线程再回来,恢复自己的寄存器的里的值:0,交换内存中的值,此时假设内存中原来的值为1,因切走被其他线程交换,变为0,此时0和0交换,在进行if()判断,走else 阻塞等待。第二:执行第二行代码被切走,此时内存中的值由初始1被交换到寄存器,变为0,线程切换保存寄存器的值,后续线程的寄存器初始化为0,和内存中被交换后的值:0,0和0交换,if()不成立,else阻塞。那么用户级线程是如何封装的?用户级线程包含哪些属性?原创 2025-06-06 16:18:55 · 1372 阅读 · 0 评论 -
Linux(线程概念)
当创建一个进程,加载可执行文件代码和数据,创建内核数据结构:PCB,mm_struct,文件描述符表....等对象,都需要在内存中申请空间,被CPU调度,切换保护进程上下文数据,重新填充pc指针,MMU,TLB,CR3,等一系列的寄存器,每个进程新创建/被切换,带来的开销势必是很大的,这也就是为什么进程是资源分配的基本单位,要什么资源直接给进程分配物理内存。进程调度,当时间片到了切换到下一个进程时,保存上下文更新,CR2指向的页表,TLB缓存内容,全部都失效重新加载新的进程,重新进行TLB缓存预热。原创 2025-06-03 23:25:08 · 1096 阅读 · 0 评论 -
Linux(信号)
1. 生活中的信号:红绿灯,闹钟,上课铃声....都称为信号。2. 当得知了这些信号,是执行默认动作?还是不管直接忽略掉?还是做你想做的动作?还是等会在做?都取决于自己。3. 当你正在做某件事情的时候,信号可能随时产生,也就是说信号的产生是异步的,比如3个人吃饭,突然有一个人干别的事情去了,无需等待他,继续吃饭称为异步,如果等他把事情做完了再回来在继续吃饭称为同步。// 返回值为 void 参数为 int 的函数指针类型int signum, // 信号编号。原创 2025-06-03 00:00:19 · 1056 阅读 · 0 评论 -
进程间通信(信号量)
2. 还是和之前的共享内存/消息队列一样,通过形成的key_t并创建一个信号量集,一个信号量集里面可以有多个信号量,并初始化信号量集合,后续对集合中某个特定的元素进行操作。3. 信号量主要用来计数器,信号量++,--操作是原子的,自带同步机制,当某个信号量元素为0则阻塞/其他时间,阻塞有资源则就唤醒等。1. 和共享内存/消息队列一样都属于system v版本的进程间通信,接口大同小异。三 二元信号量的demo代码。原创 2025-05-31 23:35:43 · 312 阅读 · 0 评论 -
进程间通信(消息队列)
责任链属于行为类设计模式,也就是程序在运行的时候每个模块之间都有任务和优先级,哪些任务完成或者不完成的结果要交给下一个节点(处理点),也可以不启动这个任务,就好比食堂打饭打完这个菜,后面的菜可打可不打。原创 2025-05-31 18:39:51 · 1280 阅读 · 0 评论 -
进程间通信(共享内存)
key是用户形成的只是用来获取和创建共享内存的,并不能对已经存在的共享内存进行字段修改/结构修改等,只有shmid能操作,本质就是 shmid 属于内核提供的,key是有用户提供的,他们的功能侧重点不同,用户管用户,内核管内核,变相的解耦。1. 传入一个路径和id并通过算法形成一个key_t结构,本质是int类型,算法是固定的,所以不同的进程传入相同的字符串和id得到的key_t都是一样的,这是用户传入数据生成的。key: 用户形成的随机值,用来获取,创建访问共享内存。bytes: 共享内存多大。原创 2025-05-29 23:44:50 · 1007 阅读 · 0 评论 -
进程间通信(命名管道)
2. 命名管道通过特殊的管道文件路径来标识唯一性,不同的进程的文件描述符表是独立的,但如果都对同一个文件进行操作,该文件的属性,缓冲区,方法级,都是一样的,所以不通过的进程只需要让自己的文件描述符指向同一个文件的相关属性即可,怎么知道不同的进程打开的文件是一样的?1. 前一章说了匿名管道是通过借鉴文件系统的属性方法缓冲区等,操作系统实现的一套具有血液关系的进程通信机制,本质是让不同的进程看到同一份资源(通过子进程继承父进程的文件描述符表),那么命名管道如何标记同一份资源呢?原创 2025-05-27 18:09:09 · 369 阅读 · 0 评论 -
进程间通信(匿名管道)
字面意思来看管道是单向流动的,只许一方读一方写,或者一方写一方读,也就是特殊的半双工,除非创建2个管道通信,也就是全双工。原创 2025-05-27 15:34:18 · 1042 阅读 · 0 评论 -
动静态库--
1. 每个函数内部的地址都是相对于该函数的起始位置的偏移量,比如 1168 -> 1 ,-> 2 , -> 3,1加上1168就能访问到具体的语句,被称为相对编址,而上图没有采用,而是采用的绝对地址,1168 -> 116c,直接访问116c不需加上偏移量,被称为绝对编址,这种采用绝对编制范围 全0 ~ 全F,也可以说是逻辑地址(虚拟地址),这个文件里面的地址都是采用ELF格式进行编制的,有自己的固定格式。3. 动态库加载到内存,他的地址是不变的,不管虚拟地址是否变化,最终映射到的库的起始地址是不变的。原创 2025-05-25 00:00:52 · 1143 阅读 · 0 评论 -
软硬链接--
他们的Inode号是一样的,Link也和上面的软连接不一样,Link就是硬链接数,标识有多少文件与Inode的映射关系,也就是说Inode只有一个,但文件可以有很多个并同时指向这个Inode,类似引用计数,删除任意一个不会影响Inode,只要硬链接数为0,Inode也就会释放掉了。如果被链接的文件被删除或者移动到别的目录下,软连接也就失效了,不会动态随着目标文件而改变,但如果目标文件不在了,但又创建一个和目标文件同名的文件,且路劲和软连接文件的路劲是一样的,就不会失效了。原创 2025-05-23 00:06:26 · 816 阅读 · 0 评论
分享