linux 0.11 源码学习(六)
main.c
main函数其实是内核的初始化,如果把内核功能比作业务软件的话,就相当于是业务的初始化,从该文件的文件夹归属(init文件夹)也可以看出这一点。
main主函数很短,从代码中可以基本看出整个内核的功能模块,如下:
void main(void) { //略去一部分初值设置 mem_init(main_memory_start,memory_end);//内存管理初始化 trap_init();//陷阱门初始化 blk_dev_init();//块设备驱动初始化 chr_dev_init();//字符驱动初始化 tty_init();//tty初始化 time_init();//时钟初始化,通过读PC的CMOS sched_init();//调度模块初始化 buffer_init(buffer_memory_end);//文件缓存系统初始化 hd_init();//硬盘初始化 floppy_init();//软盘初始化 sti();//中断开启 move_to_user_mode(); if (!fork()) { /* we count on this going ok */ init();//fork一个初始化进程,在该初始进程中会另外起一个进程,该进程完成shell功能,循环等待用户输入。开启shell的前提是要能打开设备tty0. } for(;;) pause();
注:在linux中fork一个进程和unix是一样的,子进程会拷贝父进程的上下文、代码段。因此虽然代码文件的角度看似乎是顺序执行的,但在内核中如上述中的if(!fork())和init()是在不同的进程中执行的。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)