随笔分类 -  Linux

摘要:字节序 主机大多为小端,即低字节在低地址 网络大多为大端,即高字节在低地址 h:主机host,n:网络network,l:unsigned long,s:unsigned short htonl htons ntohl ntohs socket地址 对于不同协议有不同的格式,使用时强转 比如IPv6 阅读全文
posted @ 2021-03-25 23:32 肥斯大只仔 阅读(160) 评论(0) 推荐(0)
摘要:传统多线程阻塞 阻塞方式 多线程独立完成数据输入、业务处理、数据返回 问题: 高并发时,需要创建大量线程,会受系统线程数限制,也有创建开销 线程大量阻塞时,也浪费资源 Reactor(反应堆) 基于同步IO模型 主线程负责监听文件描述符上的事件,由工作线程负责处理 解决传统多线程阻塞的两个问题:IO 阅读全文
posted @ 2021-03-17 17:00 肥斯大只仔 阅读(154) 评论(0) 推荐(0)
摘要:为什么要IO复用 问题:如果单线程需要处理两个描述符,它只能同时阻塞于一个描述符。如果线程阻塞于A描述符,B描述符中有很重要的信息,也必须A描述符解除阻塞后才可以看到B描述符的信息 解决方法一:多线程分别处理一个描述符 解决方法二:IO复用(一个线程同时阻塞多个描述符) IO复用就是把需要处理的描述 阅读全文
posted @ 2021-03-17 10:58 肥斯大只仔 阅读(456) 评论(0) 推荐(0)
摘要:块设备是系统中能够随机(不需要按顺序)访问固定大小数据片的硬件设备,像硬盘 字符设备是按照字符流的方式被有序访问,像键盘 IO调度程序 为什么需要IO调度程序:简单的以内核产生请求的次序直接请求的话,磁盘寻址的速度会很慢,性能会很低。IO调度程序会有一定的延迟,对调度队列进行调整 请求队列 一个关于 阅读全文
posted @ 2021-02-17 23:13 肥斯大只仔 阅读(332) 评论(0) 推荐(0)
摘要:页高速缓存 页高速缓存是Linux实现磁盘缓存,由内存中的物理页面组成,内容对应磁盘上的物理块 作用:减少对磁盘的IO操作 实现:通过把磁盘中的数据缓存到物理内存中,把对磁盘的访问变为对物理内存的访问 读操作:比如read。检查数据是否在页高速缓存,有则直接拷贝到进程地址空间;无则调度块IO操作从磁 阅读全文
posted @ 2021-02-16 20:49 肥斯大只仔 阅读(194) 评论(0) 推荐(0)
摘要:VFS使得用户可以直接使用open,read,write这样的系统调用而无需考虑具体的文件系统和实际物理介质 四个主要的对象类型 超级块对象:代表一个具体的已安装的文件系统 索引节点inode对象:代表一个具体文件 目录项对象:代表一个目录项,是路径的一个组成部分 文件对象:代表由进程打开的文件 四 阅读全文
posted @ 2021-02-16 17:35 肥斯大只仔 阅读(131) 评论(0) 推荐(0)
摘要:进程地址空间 进程地址空间就是允许进程使用的全部线性地址,用mm_struct内存描述符表示 内核线程使用前一个进程的内存描述符,mm字段为NULL,active_mm为前一个进程的active_mm;普通进程的mm和active_mm相同 几个重要字段: pgd:指向页目录 堆的起始和最后地址 用 阅读全文
posted @ 2021-02-15 19:36 肥斯大只仔 阅读(311) 评论(0) 推荐(0)
摘要:页 内核用page结构体表示系统的每个物理页(页框),描述当前时刻在相关物理页存放的东西 flag:表示状态,包括是不是脏的、是否锁定在内存中 _count:页的引用计数 区(指物理内存,只和内核空间有关) Linux根据页的特性进行分组,划分为区,每个区使用自己的伙伴系统算法 ZONE_DMA:< 阅读全文
posted @ 2021-02-14 17:41 肥斯大只仔 阅读(101) 评论(0) 推荐(0)
摘要:内存地址 逻辑地址:段+偏移量 线性地址:也称为虚拟地址,32位 物理地址:对真正存在的内存条进行寻址的地址 内存管理单元MMU: 分段单元:将逻辑地址转换成线性地址 分页单元:将线性地址转换成物理地址 硬件中的分段 段选择符和段寄存器 段选择符,16位字段 索引号 表指示器(GDT还是LDT) 请 阅读全文
posted @ 2021-02-13 19:52 肥斯大只仔 阅读(259) 评论(0) 推荐(0)
摘要:每CPU变量 每CPU变量主要是数据结构的数组。系统的每个CPU对应数组的一个元素 一个CPU不应该访问其他CPU对应的数组元素 一个CPU可以随意读和修改自己的元素而不用担心出现竞争条件 原子操作 保证指令以原子方式执行——执行过程不被打断 若干汇编语言指令都具有“读-修改-写”类型 进行0次或1 阅读全文
posted @ 2021-02-12 14:48 肥斯大只仔 阅读(229) 评论(0) 推荐(0)
摘要:承接已有博客 中断:异步中断,由其他硬件设备依照CPU时钟信号随机产生,比如间隔定时器和IO设备 异常:同步中断,当指令执行时由CPU控制单元产生的,即程序的错误产生的 中断描述符表IDT 和异常或中断向量相关联,映射向量对应的异常或中断处理程序的入口地址 如何找到IDT:IDT在保护模式下可以在内 阅读全文
posted @ 2021-02-09 23:18 肥斯大只仔 阅读(120) 评论(0) 推荐(0)
摘要:API和系统调用的区别 都是函数 API提供用户态服务或者内核态服务 系统调用通过软中断进入内核态 API可能调用几个系统调用 系统调用也是一种API int指令 用户态进程发出int $0x80指令(老版本Linux中,从用户态切换到内核态的唯一方法) 系统调用号放入eax寄存器 根据idtr寄存 阅读全文
posted @ 2021-02-08 22:18 肥斯大只仔 阅读(80) 评论(0) 推荐(0)
摘要:承接已有博客 task_struct 结构体内包含的几种重要信息 thread_info:进程的基本信息 mm_struct:指向内存区描述符的指针 fs_struct:当前目录 files_struct:指向文件描述符的指针 signal_struct:所接收的信号 pid:每个进程都有唯一的,内 阅读全文
posted @ 2021-02-05 17:47 肥斯大只仔 阅读(124) 评论(0) 推荐(0)
摘要:题目内容 分析include/linux/list.h中哈希表的实现,给出分析报告,并编写内核模块,调用其中的函数和宏,实现哈希表的建立和查找 关于头文件中函数、宏、结构的分析 默认已经理解用 数组链表实现哈希表的原理 struct hlist_head,strutc hlist_node head 阅读全文
posted @ 2020-10-06 14:03 肥斯大只仔 阅读(530) 评论(0) 推荐(0)
摘要:问题 这是我安装mysql-workbench时出现的问题,用来作为例子 wasi@wasi-KPL-W0X:~/下载$ sudo dpkg -i mysql-workbench-community_8.0.21-1ubuntu20.04_amd64.deb 正在选中未选择的软件包 mysql-wo 阅读全文
posted @ 2020-09-20 21:10 肥斯大只仔 阅读(10348) 评论(0) 推荐(0)
摘要:找到你自己的安装路径 输入命令如下,记得根据安装路径更改下面指令的目录 阅读全文
posted @ 2020-01-10 10:47 肥斯大只仔 阅读(405) 评论(0) 推荐(1)