MenuOS的构造

基础知识

1、操作系统的两把宝剑:①中断上下文的切换:保存现场和恢复现场;②进程上下文的切换。

2、Linux内核以A.B.C.D方式命名:A和B变得无关紧要,C是内核的真实版本,D是安全补丁和bug修复。

3、Linux内核源码的目录结构:

  • arch:与体系结构相关的子目录列表。存放了许多CPU体系结构的相关代码,使Linux内核支持不同的CPU和体系结构。
  • block:存放Linux存储体系中关于块设备管理的代码。
  • crypto:存放常见的加密算法的C语言代码,如crc32、md5等。
  • Documentation:存放文档。
  • drivers:驱动目录。分门别类地存放了Linux内核支持的所有硬件设备的驱动源代码。
  • fs:文件系统。列出了Linux支持的各种文件系统的实现。
  • include:头文件目录。存放各种CPU体系结构共用的头文件。
  • init:存放Linux内核启动时的初始化代码。其中的main.c源文件中的start_kernel是整个Linux内核启动的起点。
  • ipc:Linux支持的IPC(进程间通信)的代码实现。
  • kernel:存放内核本身需要的核心代码文件。
  • lib:共用的库文件。内核编程中不能用C语言标准库函数。
  • mm:存放Linux的内存管理代码。
  • net:网络相关的代码,例如TCP/IP协议栈等。

构造一个简单的Linux内核

启动MenuOS

在实验楼中打开shell,执行以下两个命令:

cd LinuxKernel/
qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img

注:qemu仿真kernel;bzImage是vnLinux经过gzip压缩后的文件,是压缩的内核映像;initrd是内存根文件系统;linux-3.18.6是内核源代码的目录;rootfs是编译好的文件系统。

启动结果如下:

跟踪调试Linux内核的启动过程

使用gdb跟踪调试内核,需要两个参数:

  • -s:在1234端口上创建了一个gdb-server。
  • -S:使CPU初始化之前冻结起来。

启动内核

用以下命令启动内核,可以看到它被冻结起来。

qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img -S -s

建立连接

再打开一个窗口进行水平分割,输入以下命令,启动gdb,用gdb把带有符号表的内核镜像加载进来,然后连接gdb server。

gdb
file linux-3.18.6/vmlinux
target remote:1234

设置断点

在start_kernel处设置断点,按“c”则继续执行,系统启动执行到start_kernel函数的位置停在断点处。

设置断点rest_init,继续执行然后停在断点处,rest_init是在start_kernel的尾部进行调用的。

start_kernel()



main.c中没有main函数,start_kernel()相当于C语言中的main函数。 start_kernel是一切的起点,几乎涉及了内核的所有主要模块。

总结

内核在启动过程中,init_task()即0号进程创建init进程,调用cpu_idle()演变成idle进程,执行一次调度后,init进程运行。kernel_init()1号内核线程执行内核的部分初始化工作及进行系统配置,最后调用do_execve加载init程序,演变成init进程即内核启动的第一个用户态进程。kthreadd()2号内核线程,是所有内核态其他守护线程的父线程,始终运行在内核空间。

2019-2020-1 20199319《Linux内核原理与分析》第四周作业的更多相关文章

  1. 2019-2020-1 20199303<Linux内核原理与分析>第二周作业

    2019-2020-1 20199303第二周作业 1.汇编与寄存器的学习 寄存器是中央处理器内的组成部份.寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令.数据和位址.在中央处理器的控制部件中 ...

  2. 20169219 linux内核原理与分析第二周作业

    "linux内核分析"的第一讲主要讲了计算机的体系结构,和各寄存器之间对数据的处理过程. 通用寄存器 AX:累加器 BX:基地址寄存器 CX:计数寄存器 DX:数据寄存器 BP:堆 ...

  3. 2019-2020-1 20199314 <Linux内核原理与分析>第二周作业

    1.基础学习内容 1.1 冯诺依曼体系结构 计算机由控制器.运算器.存储器.输入设备.输出设备五部分组成. 1.1.1 冯诺依曼计算机特点 (1)采用存储程序方式,指令和数据不加区别混合存储在同一个存 ...

  4. Linux内核原理与分析-第一周作业

    本科期间,学校开设过linux相关的课程,当时的学习方式主要以课堂听授为主.虽然老师也提供了相关的学习教材跟参考材料,但是整体学下来感觉收获并不是太大,现在回想起来,主要还是由于自己课下没有及时动手实 ...

  5. 2019-2020-1 20199314 <Linux内核原理与分析>第一周作业

    前言 本周对实验楼的Linux基础入门进行了学习,目前学习到实验九完成到挑战二. 学习和实验内容 快速学习了Linux系统的发展历程及其简介,学习了下的变量.用户权限管理.文件打包及压缩.常用命令的和 ...

  6. Linux内核原理与分析-第二周作业

    写之前回看了一遍秒速五厘米:如果

  7. 20169219linux 内核原理与分析第四周作业

    系统调用 系统调用是用户空间访问内核的唯一手段:除异常和陷入外,它们是内核唯一的合法入口. 一般情况下,应用程序通过在用户空间实现的应用编程接口(API)而不是直接通过系统调用来编程. 要访问系统调用 ...

  8. 2018-2019-1 20189221《Linux内核原理与分析》第一周作业

    Linux内核原理与分析 - 第一周作业 实验1 Linux系统简介 Linux历史 1991 年 10 月,Linus Torvalds想在自己的电脑上运行UNIX,可是 UNIX 的商业版本非常昂 ...

  9. 2019-2020-1 20199329《Linux内核原理与分析》第十三周作业

    <Linux内核原理与分析>第十三周作业 一.本周内容概述 通过重现缓冲区溢出攻击来理解漏洞 二.本周学习内容 1.实验简介 注意:实验中命令在 xfce 终端中输入,前面有 $ 的内容为 ...

  10. 2019-2020-1 20199329《Linux内核原理与分析》第十二周作业

    <Linux内核原理与分析>第十二周作业 一.本周内容概述: 通过编程理解 Set-UID 的运行机制与安全问题 完成实验楼上的<SET-UID程序漏洞实验> 二.本周学习内容 ...

随机推荐

  1. 在smarty模板中截取指定长度的字符串

    在smarty模板中截取指定长度的字符串,可使用truncate这个插件. 用法: {{$data.value|truncate:28:'...'}} 28个字节14个字数输出,多余部分输出...,一 ...

  2. Tomcat 8.5 配置 SSL 证书

    前文: 1.以上内容仅支持Linux-Tomcat配置 正文: 说一下我遇到的坑,我使用的服务器是阿里云服务器,阿里云提供的云服务器Tomcat配置SSL是7.0版本,跟8.5出入较大. 以下为阿里提 ...

  3. C基础知识(10):预处理器

    C预处理器不是编译器的组成部分,但是它是编译过程中一个单独的步骤.简言之,C预处理器只不过是一个文本替换工具而已,它们会指示编译器在实际编译之前完成所需的预处理. 所有的预处理器命令都是以井号(#)开 ...

  4. ubuntu中配置jdk1.8

    方法/步骤   1 首先,百度搜索jdk,选择第一个,网站是Oracle Jdk.点击进去 步骤阅读 2 点击Download,到官网下载linux版本的jdk.选择自己对应的操作系统及32或64位版 ...

  5. Qt qss问题总结

    1.在QWidget中设定了setObjectName,就是不起作用. 解决方法重写paintEvent. #ifndef BROWSEWIDGET_H #define BROWSEWIDGET_H ...

  6. Beego开启热升级

    1.打开配置 beego.BConfig.Listen.Graceful = true 2.写入pid 程序入口main()函数里写入pid func writePid() { fileName := ...

  7. URLOS开发基础教程——docker容器的使用方法

    URLOS本是基于docker容器运行,在入门URLOS开发之前,我们首先需要掌握docker的相关基础知识,本篇就以docker容器的基本使用方法为例,快速的让大家对docker有一个全面的印象. ...

  8. Leetcode之广度优先搜索(BFS)专题-133. 克隆图(Clone Graph)

    Leetcode之广度优先搜索(BFS)专题-133. 克隆图(Clone Graph) BFS入门详解:Leetcode之广度优先搜索(BFS)专题-429. N叉树的层序遍历(N-ary Tree ...

  9. java 数组学习

    遍历数组 --- for和foreach int[][] A = {{2,4},{3,5}}; int i = 0; for (int[] is : A) { i++; int j = 0; for ...

  10. 【miscellaneous】最新HEVC/H.265 4K视频,显卡解码测试

    转载自:http://bbs.zol.com.cn/diybbs/d34441_76103.html 4K这个概念也在最近几年开始流行了起来,无论是4K显示器.4K电视盒子,还是4K游戏对硬件的要求也 ...