20135221黄卫 第三周博客

Linux内核源代码

回顾:

计算机三大法宝

  • 存储程序计算机
  • 函数调用堆栈
  • 中断

操作系统两把宝剑

  • 中断上下文的切换
  • 进程上下文的切换

Linux内核源代码简介

  • arch/x86目录下的代码是重点关注的
  • init目录:内核启动相关的代码基本都在init目录下
  • init/main.c中start_kernel函数就相当于普通C程序的main函数
  • fs目录:file system文件系统
  • ipc目录:进程间通信
  • kernel目录:Linux内核核心代码在kernel目录中

二、构造一个简单的Linux系统

实验楼环境

cd Linuxkernel/

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

qemu:启动一个虚拟机平台
-kernel:给一个内核,操作系统
-initrd:驱动所需的硬盘
rootfs.img:放一个可执行文件由menuOS源代码编译成的init

进入menu系统,支持三个命令 help version quit

自己搭建

1、下载内核源代码编译内核(下载,解压,编译)

2、制作根文件系统(创建目录存放文件系统)

3、启动menuOS

三、分析start_kernel函数的执行过程

在init目录下的main.c有函数 ,其中包含start_kernel函数

基本所有模块,都需要start_kernel来进行初始化。

asmlinkage __visible void __init start_kernel(void)

其中,有init_ task,set_ task_ stack_ end_ magic(&init_task);这个是手工创建的PCB,0号进程,即最终的idle进程。

trap_init();//中断向量初始化
mm_init();//内存管理模块初始化
sched_init();//调度模块初始化
console_init();//控制模块初始化
rest_init(); //其他模块初始化

其中rest_ init()调用了 
-->kernel_ thread(kernel_ init, NULL, CLONE_ FS); 调用了
-->run_ init_ process(ramdisk_ execute_ command); 
//init是第一个用户态进程,是1号进程

pid = kernel_thread(kthreadd, NULL, CLONE_FS | CLONE_FILES);
//创建了线程

在rest_init中,各部分启动完毕后,

   /* Call into cpu_idle with preempt disabled */

cpu_startup_entry(CPUHP_ONLINE); 

调用static void cpu_idle_loop(void);
里面有个while(1)

也就是在系统没有进程需要执行时就调度idle进程

总结下来:在start_ kernel启动后,rest_ init的中0号进程会一直存在。

如图所示,第500行代码有start_kernel函数

时间: 2024-09-29 17:00:50

20135221黄卫 第三周博客的相关文章

第三周博客问题总结

1.学会了```的用法 一开始并没有成功,后来发现是因为输入法没有切换成英文,今后这样的问题要避免出现.--20145106 2.问题:教材86页,Guess的代码,猜数字,不知道原先没有设定好一个数字,为什么可以在0-9之间猜中一个数 解答:百度了(Math.random()10)这行代码的意思,知道了(Math.random())的意思是在[0,1)之间随机产生一个数字,10,所以变成了[0,10)之间随机产生一个数字,所以可以进行猜数字 --20145123 3.IntegerCache.

第三版博客装订完毕

html: <div class="header"> <div class="wrap"> <div class="logo"> <a href="http://www.cnblogs.com/qiuge227/"> <img src="http://images.cnblogs.com/cnblogs_com/qiuge227/565381/o_logo.png

第三版博客修改计划

为了让自己在学习中不断进步,随时保持学以致用的心态是尤为重要的.这样,一来让人有一种成就感的同时,也有一种满足感. 二来让你永远保持着一种心态,那就是谦逊,释然. 什么是进步,进步就是在每天的点点滴滴中,有所获,有所得. 什么是付出,付出就是每天你都知道自己在做什么,为什么要做,并为之努力的做. 什么是收获,收获就是即使你看不到它微小的变化,但在不知不觉中让自己仿佛变了一个人似的. 记得,记忆中感受最深的一本书是斯宾塞·约翰逊著作的<谁动了我的奶酪?>(Who Moved My Cheese?

第三次博客

第三次博客 一. 规格发展历史 从20世纪60年代开始,就存在着许多不同的形式规格说明语言和软件开发方法.在形式规格说明领域一些最主要的发展过程列举如下: 1969-1972 C.A.R Hoare撰写了"计算机编程的公理基础(An Axiomatic Basis for Computer Programming)"和"数据表示的正确性证明"两篇开创性的论文,并提出了规格说明的概念. 1974-1975 B.Liskow/S.N. Zilles和J. Guttag引

第十周博客总结

这个作业属于哪个课程 C语言程序设计ll 这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/software-engineering-class2-2018/homework/3162 我在这个课程的目标是 复习之前学过的内容 这个作业在哪个具体方面帮助我实现目标 网上课程 参考文献 C语言第三版第九章 一.刘未鹏的博客:怎样花两年时间面试一个人 http://mindhacks.cn/2011/11/04/how-to-interview-a-per

JAVA学习第一周博客

20145333 <Java程序设计>第一周学习总结 教材学习内容总结 第一章 Java平台概论 Java三大平台:Java SE.Java EE与Java ME Java SE的四个组成部分:JVM.JRE.JDK与Java语言 JRE包括Java SE API和JVM,JDK包括Java程序设计语言.JRE和开发工具. 如果要运行Java程序,必须安装JRE:如果要开发Java程序,必须要取得JDK. 第二章 从JDK到IDE JVM是Java程序唯一识别的操作系统,对JVM来说,可执行文

Android 博客园客户端 (三) 博客列表和内容显示

项目地址:https://github.com/ZhangTingkuo/AndroidCnblogs.git 经过很多天的努力,终于完成了博客界面的三个Fragment列表显示,分别是,首页.推荐.阅读排行.其实,距离上次,并没有增加更多的功能. 下一步,添加新闻界面的列表和内容显示.

第二周博客记录 11月27日

11月27日.周一 例会记录: 今天进行项目任务分配和初始讨论. 首先由雷毅同学进行web项目介绍,项目来源于之前参与高级软件开发工具课程设计,所设计的是一个学生信息管理系统.(有学校logo,下面是主功能导航条,左侧是某个选定功能和其子功能的列表,右侧是主窗口).系统的主功能分类,每个功能的子功能自定义,数据库表自定义). 其次进行了项目任务预估,预估项目点有8点,依据最后提交文档内容进行划分,包括5份文档,2份工程源码和可执行文件,1份视频制作. 最后进行了项目分工,分工内容以及理由如下:

oo第三次博客总结

1.规则化发展历史 形式化方法的研究高潮始于20世纪60年代后期,针对当时所谓"软件危机",人们提出种种解决方法,归纳起来有两类:一是采用工程方法来组织.管理软件的开发过程:二是深入探讨程 序和程序开发过程的规律,建立严密的理论,以其用来指导软件开发实践.前者导致"软件工程"的出现和发展,后者则推动了形式化方法的深入研究.经过30多 年的研究和应用,如今人们在形式化方法这一领域取得了大量.重要的成果,从早期最简单的形式化方法一阶谓词演算方法到现在的应用于不同领域.不