精简内核–mykernel的运行机制简单分析

原创作品转载请注明出处,《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000

一、准备实验环境

准备步骤基本按照Github上面mykernel项目主页里的教程。

qemu

         图1.mykernel运行截图

 

二、运行过程简析

1、基本数据结构--头文件mypcb.h。

最主要的就是上面的两个结构体,定义了线程以及进程控制块两个结构体。结构体里面定义了ip、sp、pid、state等进程必须的基本属性。

2、开始干活咯--内核初始化入口

3、闹钟响了!定时器处理代码部分

  • 该函数被调用每1000次之后会进行一次是否需要进程调度的判断。如果需要,就将my_need_sched设为1,正在运行的进程my_process()会根据该值进行相关调度操作。

4、孪生的兄弟进程my_process()们都干了些什么

  •  很明显,该函数很自恋啊,每运行10,000,000次就向屏幕上打印一行“我是进程 xxx”。然后会根据my_need_sched的值决定是否让出CPU给下一个小伙伴,一旦决定将资源让给下一个伙伴,他先将my_need_sched的值设为0,毕竟不能让下一个小伙伴刚开始执行就再一次地让位嘛。

5、换位那些事儿--进程上下文切换的过程

 

三、作业小结

(对“操作系统是如何工作的”理解)

计算机硬件,比如CPU,提供了各种存储器、运算器以及一系列的控制器,组成了 "输入-存储-计算-输出"的基本结构。操作系统统筹了这些硬件的协同工作,提供了应用软件所必须的基本运行环境,其重要性不言而喻。

因为硬件平台的不同,所以操作系统是针对具体硬件平台的。操作系统根据具体硬件的功能特性搭建出一套统一的运行环境提供给上层应用运行。

除了提供基本的运行环境外,操作系统也负责硬件资源在不同应用程序之间的合理分配。操作系统根据一系列规则将有限的硬件资源分配给各个应用程序,这个也就是传说中的"进程调度程序"。这个特性使多任务操作系统的实现成为了可能,多道程序同时运行并合理切换成为一个成熟操作系统的必备特性。

发表评论

电子邮件地址不会被公开。 必填项已用*标注