2019-2020-1 20199312《Linux内核原理与分析》第四周作业
计算机和操作系统的法宝
- 计算机三个法宝 存储程序计算机、函数调用堆栈机制、中断
- 操作系统:中断中断上下文的切换--保护和恢复现场 进程上下文的切换。
Linux源代码目录分析
- arch目录:代码量庞大,支持不同CPU的代码。
- documentation:文档
- init目录:main.c根文件 初始化内核
- net:网络相关的代码;
使用gdb跟踪内核运行过程
—S free
打开gdb
file linux-3.18.6/vmlinux
加载完成后,连接
target remote:1234(关闭1234端口)
break start_kernel
c(系统开始执行)
list
start_kernel函数源码及简要注释
asmlinkage __visible void __init start_kernel(void)
{
…
set_task_stack_end_magic(&init_task);
printk(KERN_NOTICE"%s", linux_banner); /* 输出linux版本信息 */
setup_arch(&command_line); /* 设置与初始化硬件体系相关的环境并调用 */
sched_init() /* 初始化调度器,先于中断开始前 */
printk(boot_command_line); /* 提取分析核心启动参数过程(从bootloader中传递) */
parse_early_param();
parse_args
trap_init();
return
early_irq_init(); /* 中断初始化过程 */
init_IRQ();
init_timers(); /* 初始化定时器 */
timekeeping_init();
time_init(); /* 设置定时器及返回当前时间 */
console_init() /* 初步的初始化控制台 */
vmalloc_init();
vfs_caches_init_early();
mem_init(); /* 初始化内存并计算可用内存大小 */
kmem_cache_init(); /* 初始化SLAB缓存分配器 */
calibrate_delay(); /* 延迟校准 */
fork_init(num_physpages); /* 初始化max_threads,init_task参数为fork()提供参考 */
buffer_init(); /* 初始化块设备读写缓冲区 */
vfs_caches_init(num_physpages);
signals_init(); /* 初始化内核信号队列 */
rest_init(); /* 最后实际进入reset_init()函数,包括所有剩下的硬件驱动,线程初始化等过程,这也最终完成start_kernel的启动过程 */
}
总结
通过本次实验了解到了Linux系统的目录结构,及其对应目录的作用,简单的分希了start_kernel。了解到不管分别哪个模块时基本都要经过 start_kernel。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· C# 深度学习:对抗生成网络(GAN)训练头像生成模型
· .NET 适配 HarmonyOS 进展
· .NET 进程 stackoverflow异常后,还可以接收 TCP 连接请求吗?
· 本地部署 DeepSeek:小白也能轻松搞定!
· 基于DeepSeek R1 满血版大模型的个人知识库,回答都源自对你专属文件的深度学习。
· 在缓慢中沉淀,在挑战中重生!2024个人总结!
· 大人,时代变了! 赶快把自有业务的本地AI“模型”训练起来!
· Tinyfox 简易教程-1:Hello World!