深入linux内核架构读书笔记

通过ps 可以知道在中括号内的是内核线程
系统调用可以分为六类:进程管理/信号/文件/目录和文件系统/保护机制/定时器函数
kernel中使用register_binfmt来增加支持的二进制格式
进程用exit系统调用终止,其函数是do_exit
调度器分为主调度器和周期调度器
可以通过proc/sys/kernel/sched_child_runs_first来让子进程先运行
通过pglist_data来表示一个内存节点
应用程序可以使用mlock系统调用通知内核页不能从物理内存移除到硬盘
可以通过cat /proc/buddyinfo查新当前系统伙伴系统信息
内存使用的反碎片就是就是基于将具有相同可移动的页组分支的思想,例如不可以移动页/可回收页/可移动页,内存还提供了虚拟内存域zone_movable来防止内存碎片,只要指定kernelcore或者movablecore这个内存区域才会存在
memmap_init_zone负责处理内存域的page实例,会将所有页标记为可以移动的
acl的全称是access control list ,是针对文件和目录的访问控制列表,可以针对任意指定的用户或者组分配rwx权限,acl 要文件系统支持,可以通过mount 命令开查询mount 参数中是否包含acl来判断当前是否支持acl。在linux中 可以直接使用setfacl/getfacl/chfacl 来操作单个文件或者命令的acl.
用户空间的内存布局通过arch_pick_mmap_layout来完成
通过sys_remap_file_pages可以重新排列映射中的页,使得内存域中间中的顺序不在等价,实现所谓的非线性映射
堆在mm_struct中的起始地址和结束地址分别是start_brk和brk,可以通过brk来指定对在虚拟地址空间中新的结束地址
缺页异常的入口是do_page_fault
必须要通过rcu_dereference(ptr)来引用rcu指针,如果要修改指针的内容需要通过rcu_assign_pointer来操作
,synchronize_rcu()等待所有现存的读访问完成,call_rcu()可用于注册一个函数,在所有针对共享资源的读访问完成之后调用.
互斥量分为经典mutex互斥量和实时rt_mutex,这个必须打开config_rt_mutex
针对多核可以采用per-CPU技术来减少锁操作
3中进程间通信机制:信号量,消息队列,共享内存,其他的还有信号,管道,套接字
struct genhd用来管理块设备的分区,通过fs/partitions/check.c中的add_partition 来向通用数据结构中添加一个新的分区
usb是根据D+/D- 来检测设备插入,usb的四种传输模式:控制传输/块传输/中断传输/同步传输
在fs/super.c中通过register_filesystem来注册文件系统
扩展属性就是与文件系统对象关联的一个名称/值 对,是存在innode上的
netlink 是一种基于网络的机制,允许内核内部以及内核与用户层之间进行通信,类似的方法还设有procfs/sysfs,netlink 包含很多协议族,每个协议族需要在内核中注册一个net_proto_family实例
通过slab_is_available可以判断释放可以使用slab
使用clocksource_register函数来注册始终到全局的clocksource_list中

猜你喜欢

转载自blog.csdn.net/tiantao2012/article/details/81354423