自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

科学边界

炼狱是为追逐光芒

  • 博客(16)
  • 资源 (2)
  • 收藏
  • 关注

原创 Linux内核铁三角文章汇总

最近发现一个word直接转换markdown的工具,因此尝试把以前整理的一些Linux内核文章发到博客上;首先整理一点Linux内核铁三角(进程、内存、IO)的文章:第一部分 进程调度1.第二部分 内存管理第三部分 IO与文件系统...

2020-08-26 17:02:11 623 3

原创 Linux内核之IO4:块I/O流程与I/O调度器

1一个块IO的一生从page cache到bio到request当APP打开一个文件,内核为文件维护一个pagecache(磁盘的一个副本);读写文件时如果page cache命中,只会读写内存不操作磁盘;没有命中,才操作磁盘。在内核用file结构体表示,可见其包含一个inode结构体,一个地址空间;相关的几个结构体在内核对应关系如下:可见,当多个进程同时打开同一个文件时,不同的file结构体对应同一个inode和同一个地址空间,地址空间是由一颗radixtree维护(即pagecache

2020-08-27 18:02:43 1172

原创 Linux内核之IO3:文件系统一致性

1 掉电与文件系统一致性由上一节文件系统的布局分析可知,当操作一个文件时,比如往/a目录下添加一个b,即添加/a/b文件,需要修改inode bitmap, inode table, block bitmap, data block。这一系列的操作是非原子的,假如任何一个环节掉电,造成某些步骤丢失,就会造成数据的不完整,文件将无法正常访问。2 append一个文件的全流程而硬件是不可能原子执行的,因此会造成不一致性。3 模拟文件系统不一致性案例(1) 做一个image,用来模拟磁盘dd

2020-08-27 17:55:39 1248

原创 Linux内核之IO2:EXT文件系统详解(案例解析)

一切都是文件,Linux通过VFS中间层,支持多种文件系统,对APP统一接口;文件系统的本质是将用户数据和元数据(管理数据的数据),组织成有序的目录结构。1 EXT2文件系统总体存储布局一个磁盘可以划为多个分区,每个分区必须先用格式化工具(某种mkfs)格式化成某种格式的文件系统,然后才能存储文件,格式化的过程会在磁盘上写一些管理存储布局信息。一个典型的ext格式化文件系统存储布局如下:文件系统最小存储单位是Block,Block大小格式化时确定,一般4K;启动块(BootBlock):大小

2020-08-27 17:43:04 1683

原创 Linux内核之IO1: I/O模型

在业务执行过程中,常伴随大量的IO操作,如果IO操作和CPU消耗不能合理安排,将会导致整体业务执行效率低下,用户体验极差。比如手机启动过程,有大量CPU消耗和IO操作。用Bootchart记录android启动过程的CPU/IO消耗如下图Systemd readahead:Systemd readahead-collect.service搜集系统启动过程中的文件访问信息,Systemdreadahead-replay.service在后续启动过程中完成回放,即将IO操作与CPU并行;提高效率的

2020-08-27 16:57:20 768

原创 Linux内核之内存5: 其他工程问题以及调优

1.DMA和cache一致性(1)不带CACHE自己写驱动,申请DMA,可以用Coherent DMA buffersvoid * dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t*dma_handle,gfp_t flag);void dma_free_coherent (struct device *dev, size_t size,void *cpu_addr,dma_addr_t dma_handle);

2020-08-27 16:49:28 495 1

原创 Linux内核之内存4: 内存与I/O的交换

1. page cacheLinux读写文件过程;read:用户进程调用read命令,内核查询读取的文件内容是否在内存(内核pagecache)中,若该页内容缓存在内存中,直接读取返回给用户进程;若缓存不存在,则启动BIO,从硬盘读取该页面到内存,再送给用户进程;write过程:比如往某文件5K处写入10byte,内核先查询该页是否在内存缓存(内核pagecache),不在,同read,从硬盘读取该页4~8K到内存,再往5k处写入10byte,标明该页为脏页;写回磁盘时机,则由内存管理的BIO

2020-08-27 12:03:11 734

原创 Linux内核之内存3: 进程的内存消耗和内存泄漏

1.进程的VMA(1)进程地址空间在Linux系统中,每个进程都有自己的虚拟内存空间0~3G;内核空间只有一个3G~4G;进程通过系统API调用,在内核空间申请内存,不统计在任何用户进程;进程消耗内存,单指用户空间内存消耗;(2)VMA列表LINUX用task_struct来描述进程,其中的mm_struct是描述内存的结构体,mm_struct有一个vma列表,管理当前进程的所有vma段。每个进程的内存由多个vma段组成:(3)查看VMA方法:1.pmap由图知,从接近0地址开始

2020-08-27 11:46:50 1274

原创 Linux内核之内存2: 内存的动态申请、释放的原理和细节

1.slab、kmalloc/kfree、/proc/slabinfo和slabtopBuddy 是直面物理内存的,所有的内存分配,最终都通过Buddy的get_free_page/page_alloc分配;Buddy的粒度太大,最小分配一页(4k); 而我们常常需要分配小内存;所以Linux引入一个二级分配的概念:1.内核分配内存,调用kmalloc()/kfree()–调用slab–再调用Buddy ;2.用户空间malloc/free–调用C库–C库通过brk/mmap调用Buddy;fr

2020-08-27 11:35:57 1383

原创 Linux内核之内存1: CPU寻址原理和分页管理

1.1 CPU寻址内存,虚拟地址、物理地址(1)寻址内存:CPU访问外设,有两种类型,一个是内存空间,一个是IO空间;IO空间,X86通过in/out指令访问外设,IO空间只存在X86架构,在RISC架构不存在;内存空间,CPU通过指针访问所有内存空间,内存空间分为两类,普通内存和位于内存空间的寄存器。其他设备的寄存器,比如通过I2C总线访问触摸屏的寄存器,与CPU内存空间无关。(2) MMU原理对于一个支持MMU的CPU,只要开启MMU,CPU跟程序员视角一致,看到的永远是虚拟地址;在访问

2020-08-27 11:26:29 869 3

原创 Linux内核之进程6: 深度睡眠

1.深度睡眠特点及存在原因深度睡眠TASK_UNINTERRUPTIBLE:不可被信号唤醒;浅度睡眠TASK_INTERRUPTIBLE:唤醒方式,等到需要的资源,响应信号;深度睡眠场景:有些场景是不能响应信号的,比如读磁盘过程是不能打断的,NFS也是;执行程序过程中,可能需要从磁盘读入可执行代码,假如在读磁盘过程中,又有代码需要从磁盘读取,就会造成嵌套睡眠。逻辑做的太复杂,所以读磁盘过程不允许打断,即只等待IO资源可用,不响应任何信号;应用程序无法屏蔽也无法重载SIGKILL信号,深度睡眠可

2020-08-26 19:58:38 950 1

原创 Linux内核之进程5:Cgroup

1.按群分组Cgroup按群分组,分配资源,属于二级分配(1)按群组分配资源将进程分组,多个组按权重分配CPU配额,单个组内任务再按进程调度算法分配案例:启动三个a.out,一共耗CPU800%(八核)创建两个CGROUP:A和Bcd /sys/fs/cgroup/cpusudo mkdir Asudo mkdir B关注A/B中两个成员,cgroup.procs:本群组包含的进程cpu.shares:本组权重值,与其他组竞争的权重值;将进程1164/1184加入组A,114

2020-08-26 19:52:51 1043

原创 Linux内核之进程4:CPU的负载均衡

1.线程的负载均衡对task_struct做负载均衡;分布式系统中,linux的每个核都自动以劳动为乐,(共产主义社会)。分别对RT任务和普通线程做负载均衡:RT任务:将n个优先级最高的线程自动分配到n个核;pull_rt_task()push_rt_task()普通任务:周期性负载均衡,在时钟tick会检查哪个核空闲,优先使空闲核工作(从负载重的核pull任务,或push任务给空闲核,每个CPU以劳动为乐);idle时负载均衡;某个核进入idle状态,会主动pull任务执行;for

2020-08-26 18:12:15 1558

原创 Linux内核之进程3:进程调度

1. 吞吐率和响应吞吐:单位时间内做的有用功;响应:低延迟。吞吐追求的整个系统CPU做有用功,响应追求的是某个特定任务的延迟低;1GHZ的CPU切换线程保存恢复现场约几个微妙级别,看似消耗不了太多时间,但是由于系统的局部性原理,会保存当前线程数据的缓存,切换线程会打乱局部性引起cachemiss,而CPU访问cache速度远大于内存访问,这样综合看来上下文切换花销还是很大的。无用功占用较多CPU;所以追求吞吐量和低延迟,这两个目标是矛盾的编译内核选项有如下服务器版追求吞吐量,配置为不抢占

2020-08-26 17:31:50 453

原创 Linux内核之进程2:进程和线程的本质

1.进程拥有资源mm,fs,files,signal…fork创建一个新进程,也需要创建task_struct所有资源;实际上创建一个新进程之初,子进程完全拷贝父进程资源,如下图示:比如fs结构体:子进程会拷贝一份fs_struct,*p2_fs = *p1_fs;pwd路径和root路径与父进程相同,子进程修改当前路径,就会修改其p2_fs->pwd值;父进程修改当前路径,修改p1_fs->pwd;其他资源大体与fs类似,最复杂的是mm拷贝,需借助MMU来完成拷贝;即写时拷贝

2020-08-26 17:15:51 832

原创 Linux内核之进程1:进程的概念

1.什么是进程?进程:资源的封装单位;linux用一个PCB来描述进程,即task_struct, 其包含mm,fs,files,signal…root目录,是一个进程概念,不是系统概念;apropos chrootman chroot 2如下图,将分区/dev/sda5挂载到/mnt/a,调用chroot,改变root目录,当前进程下的文件b.txt即位于当前进程的根目录。(2)fd也是进程级概念;(base) leon@leon-Laptop:/proc/29171$ ls

2020-08-26 17:04:54 580

s3c2451 spec文档

s3c2451文档,s3c2451是s3c2440最佳替代品

2013-12-17

Linux内核与设计第三版(中英文)

Linux内核与设计原书第三版(中英文)

2013-06-19

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除