本文共 2141 字,大约阅读时间需要 7 分钟。
Makefile Kconfig Kbuild 分析
1.打印2.内存3.硬件初始化(设备)4.进程建立及调度 4.1 进程的创建(idle及其他) 4.2 多进程的调度 4.3 进程通信机制 4.4 线程同步机制 5.异常向量表角度 5.1 中断 5.2 其他异常A.其他 1. 网络 2. 文件系统
一开始 是 裸机程序然后将裸机程序 封装成 idle 进程然后idle 就开始 fork 出 kernel_init 和 kthreadd然后调度 开始,混乱的多进程调度开始了接着 kthreadd fork出了 所有的内核进程接着 用户进程init及其子进程 fork出了 所有的用户进程计算机三大抽象之一 进程对CPU虚拟化 // 进程是对处理器 主存 和IO设备的抽象表示考虑进程执行的时候(除去考虑竞态)一般不考虑调度 因为对于该进程来说,它执行的时候占用了整个cpu
为什么需要调度 因为多进程的需求为什么需要多进程 因为 只有一个进程,造成资源浪费虽然有调度,可指令还是 one by one 执行的 宏观并行,微观串行调度的实质 选中一个进程 (调度的核心,如何发展的?) 保存当前的进程/恢复选中的进程(架构强相关,因为涉及到寄存器的保存和恢复)进程创建/调度的性能参数 ???系统有多少进程?进程是怎么被看见的?如何遍历进程
内存管理的历史内存管理的性能
及及
及 . . .及
及. . . . .及
及. .及
以 无init_xxx技术 的启动流程为研究对象start_kernel vfs_caches_init_early vfs_caches_init mnt_init init_rootfs //注册 rootfs 文件系统 init_mount_treekernel_init prepare_namespace mount_root //挂载真正的文件系统(在这里以root=/dev/mmcblk0p2中的rootfstype=ext3为例,该文件系统根目录有/linuxrc) init_post run_init_process(execute_command) //内核参数为init=/linuxrc
单核心的soc 的话,其实运行流程很单纯包含 1. A进程代码 2. B进程代码 3. AB 系统调用(异常3) 4. AB 系统调用后进入内核的代码 5. 调度 6. 其他异常(异常1 2 4 5 6 7 8)其他的就没了 // (由于会有异常及调度,所有会有竞态,所以需要同步)多核心的soc,其实和这个一样 但是 多核心 相比 单核心,多了 1. 核间通信(应该归入异常范畴) 2. 核间同步 3. 多核boot 另外,会在 增加 调度方面的功能: cpu绑定,cpu间调度之类
除0 : SIGFPE未对齐的数据访问 : 空指针的读写、写rodata section : SIGSEGVprefetch abort
1. printk2. syslog3. console 4. syslogd 5. klogd 6. kmesg7. 动态打印8. dump_stack---9. 内核参数& CONFIG---10. procfs11. sysctl12. sysfs 13. debugfs14. top/htop free---15. gdb-with-jtag16. kdb17. kgdb10.kgtp---10.BUG&BUG_ON11.oops&panic 10.kdump(based on kexec)&crash & kcore10.SysRq magic key---11.kprobe & systemtap12.ftrace(trace-cmd)13.perf & eBPF14.LTTng15.分析工具:火焰图 https://github.com/brendangregg/FlameGraph
转载地址:http://kdigi.baihongyu.com/