File tree Expand file tree Collapse file tree 3 files changed +41
-7
lines changed Expand file tree Collapse file tree 3 files changed +41
-7
lines changed Original file line number Diff line number Diff line change 9999本章代码树
100100------------------------------------------------
101101
102- LibOS操作系统的总体结构如下图所示 :
102+ 三叶虫LibOS操作系统的总体结构如下图所示 :
103103
104104.. image :: ../../os-lectures/lec2/figs/lib-os-detail.png
105105 :align: center
106106 :scale: 30 %
107107 :name: lib-os-detail
108108 :alt: LibOS总体结构
109109
110- 通过上图,大致可以看出Qemu把包含app和LibOS的image镜像加载到内存中 ,RustSBI(bootloader)完成基本的硬件初始化后,跳转到LibOS起始位置,LibOS首先进行app执行前的初始化工作 ,即建立栈空间和清零bss段,然后跳转到app去执行。app在执行过程中,会通过函数调用的方式得到LibOS提供的OS服务 ,如输出字符串等,避免了app与硬件直接交互的繁琐过程。
110+ 通过上图,大致可以看出Qemu把包含app和三叶虫LibOS的image镜像加载到内存中 ,RustSBI(bootloader)完成基本的硬件初始化后,跳转到三叶虫LibOS起始位置,三叶虫LibOS首先进行app执行前的初始化工作 ,即建立栈空间和清零bss段,然后跳转到app去执行。app在执行过程中,会通过函数调用的方式得到三叶虫LibOS提供的OS服务 ,如输出字符串等,避免了app与硬件直接交互的繁琐过程。
111111
112112注: 图中的S-Mode和M-Mode是RISC-V 处理器架构中的两种特权级别。S-Mode 指的是 Supervisor 模式,是操作系统使用的特权级别,可执行特权指令等。M-Mode是 Machine模式,其特权级别比S-Mode还高,可以访问RISC-V处理器中的所有系统资源。关于特权级的进一步描述可以看第二章的 :doc: `../chapter2/1rv-privilege ` 中的详细说明。
113113
114- LibOS操作系统的源代码如下所示 :
114+ 位于 `` ch1 `` 分支上的三叶虫LibOS操作系统的源代码如下所示 :
115115
116116.. code-block ::
117117
Original file line number Diff line number Diff line change 157157 本章代码树
158158-------------------------------------------------
159159
160- BatchOS操作系统的总体结构如下图所示 :
160+ 邓式鱼BatchOS操作系统的总体结构如下图所示 :
161161
162162.. image :: ../../os-lectures/lec3/figs/batch-os-detail.png
163163 :align: center
164164 :scale: 30 %
165165 :name: batch-os-detail
166166 :alt: BatchOS总体结构
167167
168- 通过上图,大致可以看出Qemu把包含多个app的列表和BatchOS的image镜像加载到内存中,RustSBI(bootloader)完成基本的硬件初始化后,跳转到BatchOS起始位置,BatchOS首先进行正常运行前的初始化工作 ,即建立栈空间和清零bss段,然后通过 `AppManager ` 内核模块从app列表中依次加载各个app到指定的内存中在用户态执行。app在执行过程中,会通过系统调用的方式得到BatchOS提供的OS服务 ,如输出字符串等。
168+ 通过上图,大致可以看出Qemu把包含多个app的列表和BatchOS的image镜像加载到内存中,RustSBI(bootloader)完成基本的硬件初始化后,跳转到邓式鱼BatchOS起始位置,邓式鱼BatchOS首先进行正常运行前的初始化工作 ,即建立栈空间和清零bss段,然后通过 `AppManager ` 内核模块从app列表中依次加载各个app到指定的内存中在用户态执行。app在执行过程中,会通过系统调用的方式得到邓式鱼BatchOS提供的OS服务 ,如输出字符串等。
169169
170- BatchOS操作系统的源代码如下所示 :
170+ 位于 `` ch2 `` 分支上的邓式鱼BatchOS操作系统的源代码如下所示 :
171171
172172.. code-block ::
173173
Original file line number Diff line number Diff line change 242242本章代码树
243243-----------------------------------
244244
245- 这里以位于 ``ch3 `` 分支上的分时多任务系统为例。
245+ 锯齿螈多道程序操作系统 - Multiprog OS的总体结构如下图所示:
246+
247+ .. image :: ../../os-lectures/lec4/figs/jcy-multiprog-os-detail.png
248+ :align: center
249+ :scale: 30 %
250+ :name: jcy-os-detail
251+ :alt: 锯齿螈多道程序操作系统 -- Multiprog OS总体结构
252+
253+ 通过上图,大致可以看出Qemu把包含多个app的列表和MultiprogOS的image镜像加载到内存中,RustSBI(bootloader)完成基本的硬件初始化后,跳转到MultiprogOS起始位置,MultiprogOS首先进行正常运行前的初始化工作,即建立栈空间和清零bss段,然后通过改进的 `AppManager ` 内核模块从app列表中把所有app都加载到内存中,并按指定顺序让app在用户态一个接一个地执行。app在执行过程中,会通过系统调用的方式得到MultiprogOS提供的OS服务,如输出字符串等。
254+
255+
256+ 始初龙协作式多道程序操作系统 -- CoopOS的总体结构如下图所示:
257+
258+ .. image :: ../../os-lectures/lec4/figs/more-task-multiprog-os-detail.png
259+ :align: center
260+ :scale: 20 %
261+ :name: more-task-multiprog-os-detail
262+ :alt: 始初龙协作式多道程序操作系统 -- CoopOS总体结构
263+
264+ 通过上图,大致可以看出相对于MultiprogOS,CoopOS进一步改进了 `AppManager ` 内核模块,可以通过 `task ` 任务控制块来管理应用程序的执行过程,支持应用程序主动放弃 CPU 并切换到另一个应用继续执行,从而提高系统整体执行效率。应用程序在运行时有自己所在的内存空间和栈,确保被切换时相关信息不会被其他应用破坏。如果当前应用程序正在运行,则该应用对应的任务处于运行(Running)状态;如果该应用主动放弃处理器,则该应用对应的任务处于就绪(Ready)状态。操作系统进行任务切换时,需要把要暂停任务的上下文(即任务用到的通用寄存器)保存起来,把要继续执行的任务的上下文恢复为暂停前的内容,这样就能让不同的应用协同使用处理器了。
265+
266+
267+ 腔骨龙分时多任务操作系统 -- TimesharingOS的总体结构如下图所示:
268+
269+ .. image :: ../../os-lectures/lec4/figs/time-task-multiprog-os-detail.png
270+ :align: center
271+ :scale: 20 %
272+ :name: time-task-multiprog-os-detail
273+ :alt: 腔骨龙分时多任务操作系统 -- TimesharingOS总体结构
274+
275+ 通过上图,大致可以看出相对于CoopOS,TimesharingOS最大的变化是改进了 `Trap_handler ` 内核模块,支持时钟中断,从而可以抢占应用的执行。并通过进一步改进 `AppManager ` 内核模块,提供任务调度功能,这样可以在收到时钟中断后统计任务的使用时间片,如果任务的时间片用完后,则切换任务。从而可以公平和高效地分时执行多个应用,提高系统的整体效率。
276+
277+ 位于 ``ch3 `` 分支上的腔骨龙分时多任务操作系统 -- TimesharingOS 的源代码如下所示:
278+
279+ 这里
246280
247281.. code-block ::
248282 :linenos:
You can’t perform that action at this time.
0 commit comments