学习笔记:Linux 总结图杂记篇

该篇笔记,主要是来自刘超老师的《趣谈Linux操作系统》,主要用于学习记录,便于以后查找之用,在此感谢老师的辛苦付出,如有侵权,立马删除

##1.Linux内核体系结构图

##2.Linux命令行图

##3.Linux系统调用

##4.计算机工作模式

##5.控制单元

##6.X86架构

##7.Linux启动 过程

##8.内核启动

##9.x86的分层权限机制

##10.  64位系统调用过程

##11.进程从代码到二进制的运行过程

##12.多线程

需要记住的是,创建线程的套路、mutex 使用的套路、条件变量使用的套路,如果需要对每一个函数进行详细了解,可看

ProgranmmingwithPOSIXThreads这本书,系统详细了解

##13.进场管理task_struct结构图

两重点:

  1.进程亲缘关系维护的数据结构,是一种很有参考价值的实现方式,在内核中会多个地方出现类似的结构。

  2.进程权限中setuid的原理,这一点比较难理解,但是很重要。 

真的要理解:进程树是如何组织的,以及如何控制进程的权限

##14.  32位和64位的工作模式

1.在用户态,应用程序进行了至少一次函数调用。32位和64的传递参数的方式稍有不同,32位的就是用函数栈,64位的前6个参数用寄存器,其他的用函数栈。

2.在内核态,32位和64位都使用内核栈,格式也稍有不同,主要集中在pt_regs结构上

3.在内核态,32位和64位的内核栈和task_struct的关联关系不同。32位主要靠thread_info,64位主要靠Per-CPU变量

##15. 调度相关的数据结构

一个CPU上有一个队列,CFS的队列是一棵红黑树,树的每一个节点都是一个sched_entity,每个sched_entity都属于一个task_struct,task_struct里面有指针指向这个进程属于哪个调度类,在调度的时候,依次调用调度类的函数,从CPU的队列中取出下一个进程。上面图中的调度器、上下文切换。

##16.主动调度的过程

即一个运行中的进程主动调用__schedule让出CPU。在__schedule里面会做两件事情,第一是选取下一个进程,第二是进行上下文切换。而上下文切换又分用户态进程空间的切换和内核态的切换。

##17.调度体系

##18.进程创建的过程

这个图的上半部分是复制task_struct结构,你可以对照着右面的task_struct结构图,看这里面的成员是如何一部分一部分的被复制的。图的下半部分是唤醒新创建的子进程,如果条件满足,就会将当前进程设置应该被调度的标识位,就等着当前进程执行__schedule了。

##19.创建进程和创建线程在用户态和内核态的不同

创建进程的话,调用的系统调用是fork,在copy_process函数里面,会将五大结构files_struct、fs_struct、sighand_struct、signal_struct、mm_struct都复制一遍,从此父进程和子进程各用各的数据结构。

创建线程的话,调用的是系统调用clone,在copy_process函数里面, 五大结构仅仅是引用计数加一,也即线程共享进程的数据结构。

##20.内存管理系统精细化的三件事

##21.进程运行状态在32位下对应关系

##22.进程运行状态在64位下对应关系

##23.物理内存的组织形式

##24.物理内存的管理

对于物理内存来讲,从下层到上层的关系及分配模式

##25.用户态的内存映射机制

##26.内核态的内存映射机制和内存管理体系的串连

物理内存根据NUMA架构分节点。每个节点里面再分区域。每个区域里面再分页。

物理页面通过伙伴系统进行分配。分配的物理页面要变成虚拟地址让上层可以访问,kswapd可以根据物理

页面的使用情况对页面进行换入换出。

对于内存的分配需求,可能来自内核态,也可能来自用户态。

对于内核态,kmalloc在分配大内存的时候,以及vmalloc分配不连续物理页的时候,直接使用伙伴系统,分配后转换为虚拟地址,访问的时候需要通过内核页表进行映射。

对于kmem_cache以及kmalloc分配小内存,则使用slub分配器,将伙伴系统分配出来的大块内存切成一小块一小块进行分配。

kmem_cache和kmalloc的部分不会被换出,因为用这两个函数分配的内存多用于保持内核关键的数据结构。内核态中vmalloc分配的部分会被换出,因而当访问的时候,发现不在,就会调用do_page_fault。

对于用户态的内存分配,或者直接调用mmap系统调用分配,或者调用malloc。调用malloc的时候,如果分配小的内存,就用sys_brk系统调用;如果分配大的内存,还是用sys_mmap系统调用。正常情况下,用户态的内存都是可以换出的,因而一旦发现内存中不存在,就会调用do_page_fault。

##27.文件系统

##28.硬盘

##29.文件系统格式

##30.元块组

##31.硬链接(Hard Link)和软链接(Symbolic Link)

##32.inode和数据块在文件系统上的关联关系

##33.虚拟文件系统

##34.文件读取和写入

 

----------------------------待完善

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荣•厚德载物

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值