《Linux内核分析》 第三周 构造一个简单的Linux系统MenuOS
Linux内核分析 第三周 构造一个简单的Linux系统MenuOS
张嘉琪 原创作品转载请注明出处 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000
一、Linux内核源代码简介
计算机工作的三个法宝
1.存储程序计算机
2.中断机制
3.堆栈
操作系统的两把宝剑
1.中断上下文的切换——保存现场&恢复现场
2.进程上下文的切换
内核源代码页面
arch/x86
init
kernel
README
start_kernel (类似于main)
二、构造一个简单的Linux系统
实验指导
- 使用实验楼的虚拟机打开shell
cd LinuxKernel/ qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img'\
- 内核启动完成后进入menu程序
- qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img -s -S # 关于-s和-S选项的说明: # -S freeze CPU at startup (use ’c’ to start execution) # -s shorthand for -gdb tcp::1234 若不想使用1234端口,则可以使用-gdb tcp:xxxx来取代-s选项`
- 使用gdb跟踪调试内核
- 另开一个shell窗口
使用gdb跟踪调试内核从start_kernel到init进程启动
gdb (gdb)file linux-3.18.6/vmlinux # 在gdb界面中targe remote之前加载符号表 (gdb)target remote:1234 # 建立gdb和gdbserver之间的连接,按c 让qemu上的Linux继续运行 (gdb)break start_kernel # 断点的设置可以在target remote之前,也可以在之后
三、总结
“Linux系统启动过程”的理解,尤其是idle进程、1号进程是怎么来的。
start_kernel是内核启动的起点,存在于init目录下main.c文件中。init_kernel即手工创建的PCB,0号进程即最终的idle.不论分析内核的哪一部分都会涉及start_kernel,模块初始化时需要调用start_kernel。在start_kernel中最后一句rest_init是start_kernel从内核启动时就一直存在的0号进程,0号进程创建了1号进程和其他的内核服务线程。
在kernel_init中有一句run_init_process,init_process是1号进程,也就是第一个用户进程,它还创建了kthreadd用一个线程管理系统资源。当系统中没有进程序需要执行时就调度idle进程
也就是说一个内核启动时就存在一个0号进程,0号进程创建了1号进程,一个进程创建另一个进程和线程,一生二,二生三,三生万物,系统内核就启动了
转载于:https://www.cnblogs.com/Juliet5307/p/5268589.html
《Linux内核分析》 第三周 构造一个简单的Linux系统MenuOS相关推荐
- Linux内核分析——第三周学习笔记
20135313吴子怡.北京电子科技学院 chapter1 知识点梳理 一.Linux内核源代码简介 (视频中对目录下的文件进行了简介,记录如下) arch目录 占有相当庞大的空间 arch/x86目 ...
- linux内核启动分析 三,Linux内核分析 实验三:跟踪分析Linux内核的启动过程
贺邦 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程 http://mooc.study.163.com/course/USTC-1000029000 一. 实验过程 ...
- Linux内核分析 第七周 可执行程序的装载
张嘉琪 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 Linux内核分析 第七 ...
- Linux内核分析(三)----初识linux内存管理子系统
原文:Linux内核分析(三)----初识linux内存管理子系统 Linux内核分析(三) 昨天我们对内核模块进行了简单的分析,今天为了让我们今后的分析没有太多障碍,我们今天先简单的分析一下linu ...
- Linux内核分析作业第二周
操作系统是如何工作的 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.函数调用堆栈 1.计算机工作三 ...
- 《Linux内核分析》第一周笔记 计算机是如何工作的
一.计算机是如何工作的? 1.存储程序计算机工作模型 1)冯诺依曼体系结构 学习研究计算机的基本概念.就是指存储程序计算机.所有的有计算功能的电子设备小到计算器,大到超级计算机核心部分都可以用这种体系 ...
- Linux内核分析——第八周学习笔记
实验作业:进程调度时机跟踪分析进程调度与进程切换的过程 20135313吴子怡.北京电子科技学院 [第一部分]理解Linux系统中进程调度的时机 1.Linux的调度程序是一个叫schedule()的 ...
- LINUX内核分析第八周总结:进程的切换和系统的一般执行过程
一.进程调度与进程切换 1.不同的进程有不同的调度需求 第一种分类: I/O密集型(I/O-bound) 频繁的进行I/O 通常会花费很多时间等待I/O操作的完成 CPU密集型(CPU-bound) ...
- linux内核分析实验三,linux内核分析第三次实验
WIN10 CMD 启动虚拟WIFI 1.以管理员身份运行命令提示符: 快捷键win+R→输入cmd→回车 2.启用并设定虚拟WiFi网卡: 运行命令:netsh wlan set hostednet ...
最新文章
- Apache与Tomcat联系及区别
- [POJ 1741] Tree
- MySQL笔记3:深入理解MySQL中的NULL
- swift 基础学习之属性修饰符
- 旅行场景下的个性化营销平台揭秘
- C# 动态加载 动态卸载
- 华为5g汽车鸿蒙,网传华为携手极狐造车新图片,搭载5G天线+鸿蒙OS!
- 引用数据类型的方法调用
- python优先级排序_python中使用优先队列
- JSTL与JAVA数据交互 pagecontext
- python写word表格_使用表格—— 使用Python读写Office文档之三
- idea 自动生成mybaits_如何让idea自动创建mybatis配置文件?
- Mac端SVN工具CornerStone详解
- php 除数 保留两位小数,c语言除法怎么保留小数
- 40个增长和管理你的WordPress网站的有用博客工具
- python遍历字母_如何遍历字母表?
- short java_java基本数据类型short的使用(23)
- audio播放器进度条
- 新晋小王子 doodoo.js Node.js开发框架
- 深度学习自然语言处理模型实现大集合(精简版<100行)
热门文章
- ap模式和sta模式共存_无线Wifi图传模块AP和STA工作模式详解
- r语言 python 股票_R语言:抓取股票数据并存入数据库进行分析实例 MySQL
- 【BMI指数计算器V2.0】项目实战
- OUTCAD中视口与视图区别
- 学习日志day41(2021-09-03)(1、文件的上传 2、文件的查看 3、文件的下载 4、使用工具类上传文件 5、基于servlet3.0以上的文件上传 )
- 《投名状》,真正的赢家到底是谁?
- 如何选择适合自己门店的收银系统呢?
- 强大新UI装逼神器微信小程序源码下载用不完的模板支持多种流量主模式
- 【JavaScript 教程】事件——键盘事件
- 记录一下个人网站开发路程。