fix index.
This commit is contained in:
parent
9d21552db1
commit
308006d21d
|
@ -274,6 +274,12 @@ timer.c 中包含了相关函数,功能分别为:打开了时钟中断使能
|
|||
return r_time();
|
||||
}
|
||||
|
||||
RISC-V 架构要求处理器要有一个内置时钟,其频率一般低于 CPU 主频。此外,还有一个计数器统计处理器自上电以来经过了多少个内置时钟的时钟周期。在 RV64 架构上,该计数器保存在一个 64 位的 CSR ``mtime`` 中,我们无需担心它的溢出问题,在内核运行全程可以认为它是一直递增的。
|
||||
|
||||
另外一个 64 位的 CSR ``mtimecmp`` 的作用是:一旦计数器 ``mtime`` 的值超过了 ``mtimecmp``,就会触发一次时钟中断。这使得我们可以方便的通过设置 ``mtimecmp`` 的值来决定下一次时钟中断何时触发。
|
||||
|
||||
可惜的是,它们都是 M 特权级的 CSR ,而我们的内核处在 S 特权级,是不被硬件允许直接访问它们的。好在运行在 M 特权级的 SEE 已经预留了相应的接口,我们可以调用它们来间接实现计时器的控制。
|
||||
|
||||
我们通过设置时钟中断相关的寄存器开启了时钟中断。这样用户程序在执行的时候经过一个指定的时间片(我们这里是10ms)就会产生一个中断,从U态回到内核的S态。此时我们就可以执行内存的切换了:
|
||||
|
||||
.. code-block:: C
|
||||
|
|
|
@ -10,5 +10,4 @@
|
|||
1multi-loader
|
||||
2task-switching
|
||||
3multiprogramming
|
||||
4time-sharing-system
|
||||
5exercise
|
||||
4exercise
|
||||
|
|
|
@ -6,7 +6,7 @@ SV39多级页表机制:OS实现
|
|||
--------------------------
|
||||
|
||||
|
||||
本节我们将讲述OS是如何实现页表的支持的。在深入本章的内容之前,大家一定要牢记,完成虚拟地址查询页表或TLB转换成物理地址的过程是由硬件,也就是CPU来完成的。我们在框架之中实现的地址转换函数是为了我们在某些函数中自己计算虚拟地址到物理地址转换使用的。OS负责对页表进行建立、更改等处理,真正在程序运行时,CPU对指令、数据虚拟地址会十分机械地按照下面讲述的方法使用os创建好的页表进行地址转换。
|
||||
本节我们将讲述OS是如何实现页表的支持的。在深入本章的内容之前,大家一定要牢记,完成虚拟地址查询页表或TLB转换成物理地址的过程是由硬件,也就是CPU来完成的(MMU)。我们在框架之中实现的地址转换函数是为了我们在某些函数中自己计算虚拟地址到物理地址转换使用的。OS负责对页表进行建立、更改等处理,真正在程序运行时,CPU对指令、数据虚拟地址会十分机械地按照下面讲述的方法使用os创建好的页表进行地址转换。
|
||||
|
||||
地址相关的数据结构抽象
|
||||
-----------------------------------
|
||||
|
|
|
@ -9,6 +9,4 @@
|
|||
2address-space
|
||||
3sv39-implementation-1
|
||||
4sv39-implementation-2
|
||||
5kernel-app-spaces
|
||||
6multitasking-based-on-as
|
||||
7exercise
|
||||
5exercise
|
||||
|
|
|
@ -7,8 +7,4 @@
|
|||
0intro
|
||||
1fs-interface
|
||||
2fs-implementation
|
||||
3using-easy-fs-in-kernel
|
||||
4cmdargs-and-redirection
|
||||
5exercise
|
||||
|
||||
最晚灭绝的“霸王龙”操作系统
|
||||
3exercise
|
||||
|
|
Loading…
Reference in New Issue