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相关推荐

  1. Linux内核分析——第三周学习笔记

    20135313吴子怡.北京电子科技学院 chapter1 知识点梳理 一.Linux内核源代码简介 (视频中对目录下的文件进行了简介,记录如下) arch目录 占有相当庞大的空间 arch/x86目 ...

  2. linux内核启动分析 三,Linux内核分析 实验三:跟踪分析Linux内核的启动过程

    贺邦 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程 http://mooc.study.163.com/course/USTC-1000029000 一. 实验过程 ...

  3. Linux内核分析 第七周 可执行程序的装载

    张嘉琪 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 Linux内核分析 第七 ...

  4. Linux内核分析(三)----初识linux内存管理子系统

    原文:Linux内核分析(三)----初识linux内存管理子系统 Linux内核分析(三) 昨天我们对内核模块进行了简单的分析,今天为了让我们今后的分析没有太多障碍,我们今天先简单的分析一下linu ...

  5. Linux内核分析作业第二周

    操作系统是如何工作的 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.函数调用堆栈 1.计算机工作三 ...

  6. 《Linux内核分析》第一周笔记 计算机是如何工作的

    一.计算机是如何工作的? 1.存储程序计算机工作模型 1)冯诺依曼体系结构 学习研究计算机的基本概念.就是指存储程序计算机.所有的有计算功能的电子设备小到计算器,大到超级计算机核心部分都可以用这种体系 ...

  7. Linux内核分析——第八周学习笔记

    实验作业:进程调度时机跟踪分析进程调度与进程切换的过程 20135313吴子怡.北京电子科技学院 [第一部分]理解Linux系统中进程调度的时机 1.Linux的调度程序是一个叫schedule()的 ...

  8. LINUX内核分析第八周总结:进程的切换和系统的一般执行过程

    一.进程调度与进程切换 1.不同的进程有不同的调度需求 第一种分类: I/O密集型(I/O-bound) 频繁的进行I/O 通常会花费很多时间等待I/O操作的完成 CPU密集型(CPU-bound) ...

  9. linux内核分析实验三,linux内核分析第三次实验

    WIN10 CMD 启动虚拟WIFI 1.以管理员身份运行命令提示符: 快捷键win+R→输入cmd→回车 2.启用并设定虚拟WiFi网卡: 运行命令:netsh wlan set hostednet ...

最新文章

  1. Apache与Tomcat联系及区别
  2. [POJ 1741] Tree
  3. MySQL笔记3:深入理解MySQL中的NULL
  4. swift 基础学习之属性修饰符
  5. 旅行场景下的个性化营销平台揭秘
  6. C# 动态加载 动态卸载
  7. 华为5g汽车鸿蒙,网传华为携手极狐造车新图片,搭载5G天线+鸿蒙OS!
  8. 引用数据类型的方法调用
  9. python优先级排序_python中使用优先队列
  10. JSTL与JAVA数据交互 pagecontext
  11. python写word表格_使用表格—— 使用Python读写Office文档之三
  12. idea 自动生成mybaits_如何让idea自动创建mybatis配置文件?
  13. Mac端SVN工具CornerStone详解
  14. php 除数 保留两位小数,c语言除法怎么保留小数
  15. 40个增长和管理你的WordPress网站的有用博客工具
  16. python遍历字母_如何遍历字母表?
  17. short java_java基本数据类型short的使用(23)
  18. audio播放器进度条
  19. 新晋小王子 doodoo.js Node.js开发框架
  20. 深度学习自然语言处理模型实现大集合(精简版<100行)

热门文章

  1. ap模式和sta模式共存_无线Wifi图传模块AP和STA工作模式详解
  2. r语言 python 股票_R语言:抓取股票数据并存入数据库进行分析实例 MySQL
  3. 【BMI指数计算器V2.0】项目实战
  4. OUTCAD中视口与视图区别
  5. 学习日志day41(2021-09-03)(1、文件的上传 2、文件的查看 3、文件的下载 4、使用工具类上传文件 5、基于servlet3.0以上的文件上传 )
  6. 《投名状》,真正的赢家到底是谁?
  7. 如何选择适合自己门店的收银系统呢?
  8. 强大新UI装逼神器微信小程序源码下载用不完的模板支持多种流量主模式
  9. 【JavaScript 教程】事件——键盘事件
  10. 记录一下个人网站开发路程。