
简介
该用户还未填写简介
擅长的技术栈
可提供的服务
暂无可提供的服务
step1:安装java环境Eclipse运行依赖jave环境;sudo apt install openjdk-13-jrestep2:安装Eclipse-CDT官网:http://www.eclipse.org/cdt/step3:配置Eclipse-CDT(1)创建工程在Eclipse菜单选择File->New->Project,选择Makefile Project with E
1一个块IO的一生从page cache到bio到request当APP打开一个文件,内核为文件维护一个pagecache(磁盘的一个副本);读写文件时如果page cache命中,只会读写内存不操作磁盘;没有命中,才操作磁盘。在内核用file结构体表示,可见其包含一个inode结构体,一个地址空间;相关的几个结构体在内核对应关系如下:可见,当多个进程同时打开同一个文件时,不同的file结构体对应
1.slab、kmalloc/kfree、/proc/slabinfo和slabtopBuddy 是直面物理内存的,所有的内存分配,最终都通过Buddy的get_free_page/page_alloc分配;Buddy的粒度太大,最小分配一页(4k); 而我们常常需要分配小内存;所以Linux引入一个二级分配的概念:1.内核分配内存,调用kmalloc()/kfree()–调用slab–再调用Bu
1.线程的负载均衡对task_struct做负载均衡;分布式系统中,linux的每个核都自动以劳动为乐,(共产主义社会)。分别对RT任务和普通线程做负载均衡:RT任务:将n个优先级最高的线程自动分配到n个核;pull_rt_task()push_rt_task()普通任务:周期性负载均衡,在时钟tick会检查哪个核空闲,优先使空闲核工作(从负载重的核pull任务,或push任务给空闲核,每个CPU
1.深度睡眠特点及存在原因深度睡眠TASK_UNINTERRUPTIBLE:不可被信号唤醒;浅度睡眠TASK_INTERRUPTIBLE:唤醒方式,等到需要的资源,响应信号;深度睡眠场景:有些场景是不能响应信号的,比如读磁盘过程是不能打断的,NFS也是;执行程序过程中,可能需要从磁盘读入可执行代码,假如在读磁盘过程中,又有代码需要从磁盘读取,就会造成嵌套睡眠。逻辑做的太复杂,所以读磁盘过程不允许打
1.1 CPU寻址内存,虚拟地址、物理地址(1)寻址内存:CPU访问外设,有两种类型,一个是内存空间,一个是IO空间;IO空间,X86通过in/out指令访问外设,IO空间只存在X86架构,在RISC架构不存在;内存空间,CPU通过指针访问所有内存空间,内存空间分为两类,普通内存和位于内存空间的寄存器。其他设备的寄存器,比如通过I2C总线访问触摸屏的寄存器,与CPU内存空间无关。(2) MMU原理
1.进程拥有资源mm,fs,files,signal…fork创建一个新进程,也需要创建task_struct所有资源;实际上创建一个新进程之初,子进程完全拷贝父进程资源,如下图示:比如fs结构体:子进程会拷贝一份fs_struct,*p2_fs = *p1_fs;pwd路径和root路径与父进程相同,子进程修改当前路径,就会修改其p2_fs->pwd值;父进程修改当前路径,修改p1_fs-
1 掉电与文件系统一致性由上一节文件系统的布局分析可知,当操作一个文件时,比如往/a目录下添加一个b,即添加/a/b文件,需要修改inode bitmap, inode table, block bitmap, data block。这一系列的操作是非原子的,假如任何一个环节掉电,造成某些步骤丢失,就会造成数据的不完整,文件将无法正常访问。2 append一个文件的全流程而硬件是不可能原子执行的,
1.进程的VMA(1)进程地址空间在Linux系统中,每个进程都有自己的虚拟内存空间0~3G;内核空间只有一个3G~4G;进程通过系统API调用,在内核空间申请内存,不统计在任何用户进程;进程消耗内存,单指用户空间内存消耗;(2)VMA列表LINUX用task_struct来描述进程,其中的mm_struct是描述内存的结构体,mm_struct有一个vma列表,管理当前进程的所有vma段。每个进
一切都是文件,Linux通过VFS中间层,支持多种文件系统,对APP统一接口;文件系统的本质是将用户数据和元数据(管理数据的数据),组织成有序的目录结构。1 EXT2文件系统总体存储布局一个磁盘可以划为多个分区,每个分区必须先用格式化工具(某种mkfs)格式化成某种格式的文件系统,然后才能存储文件,格式化的过程会在磁盘上写一些管理存储布局信息。一个典型的ext格式化文件系统存储布局如下:文件系统最







