Linux_源代码分析

Linux_源代码分析

ID:37658352

大小:420.08 KB

页数:47页

时间:2019-05-27

Linux_源代码分析_第1页
Linux_源代码分析_第2页
Linux_源代码分析_第3页
Linux_源代码分析_第4页
Linux_源代码分析_第5页
资源描述:

《Linux_源代码分析》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、Linux内核(2.6.13.2)源代码分析苗彦超摘要:1系统启动1.1汇编代码head.S及以前设置CPU状态初值,创建进程0,建立进程堆栈:movqinit_rsp(%rip),%rsp,init_rsp定义.globlinit_rspinit_rsp:.quadinit_thread_union+THREAD_SIZE-8即将虚地址init_thread_union+THREAD_SIZE-8作为当前进程(进程0)核心空间堆栈栈底,init_thread_union定义于文件arch/x86_64/kernel/init_task.c中:union

2、thread_unioninit_thread_union__attribute__((__section__(".data.init_task")))={INIT_THREAD_INFO(init_task)};INIT_THREAD_INFO定义于文件include/asm-x86_64/thread_info.h中,初始化init_thread_union.task=&init_task,init_task同样定义于文件init_task.c中,初始化为:structtask_structinit_task=INIT_TASK(init_task)

3、;INIT_TASK宏在include/linux/init_task.h中定义。全部利用编译时静态设置的初值,将进程0的控制结构设置完成,使进程0可以按普通核心进程访问。init_task.mm=NULL;init_task.active_mm=INIT_MM(init_mm),init_task.comm=“swapper”INIT_MM将init_mm.pgd初始化为swapper_pg_dir,即init_level4_pgt,定义与head.S中。进程0的名称为swapper。利用下述汇编代码跳转到C函数执行:movl%esi,%edi//传递

4、函数参数movqinitial_code(%rip),%raxjmp*%raxinitial_code:.quadx86_64_start_kernel开始执行文件arch/x86_64/kernel/head64.c中的C函数x86_64_start_kernel(char*real_mode_data),1.2函数x86_64_start_kernel(char*real_mode_data)1设置全部中断向量初始入口为early_idt_handler,加载中断描述符idt_descr2clear_bss():BSS段清03pda_init(0):

5、设置处理器0相关信息(processordatastructurearea?),重置CR3为init_level4_pgt4copy_bootdata:复制BIOS启动参数到操作系统变量x86_boot_params中,再复制启动命令行参数由x86_boot_params到saved_command_line中,用printk显示saved_command_line,从此不再与实模式数据打交道5cpu_set:设置CPU0开始工作标志6处理“earlyprintk=”、“numa”、“disableapic”等命令行参数7setup_boot_cpu_d

6、ata():设置CPU信息结构boot_cpu_data,使用cpuid指令18执行start_kernel()函数1.3start_kernel函数1.3.1系统结构相关初始化前lock_kernel():::文件:lib/kernel_lock.c实现了BKL(bigkernellock),使用:lock_kernel/unlock_kernel如果开启PREEMPT_BKL,则使用信号量kernel_sem实现,否则使用自旋锁kernel_flag实现。通常缺省开启PREEMPT_BKL选项。当task->lock_depth等于-1时,执行dow

7、n(&kernel_sem)操作current->lock_depth++unlock_kernel执行--current->lock和up(&kernel_sem)操作page_address_init():在x86-64系统中为空函数。printk(linux_banner):打印特征信息1.3.2体系结构相关初始化setup_arch(&command_line)9setup_memory_region():Isanitize_e820_map(E820_MAP,&E820_MAP_NR):清理E820图,E820_MAP,E820_MAP_NR均

8、为x86_boot_params中的参数IIcopy_e820_map():调用

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。