sgu*_*pta 8 architecture kernel arm rtos
一点介绍,
我目前正在编写一个小的(读取微小的)RTOS内核,它应该与内核中的大多数内容单片.但是我找不到下面列出的一些事情的很多信息,这将是非常有用的,除此之外,它实际上不是某种大学项目,而是我正在按照自己的意愿行事.
回答所有问题的一个更好的选择是,如果你可以向我推荐一个免费提供的RTOS(甚至免费书籍),最好是实现用户空间并且是可抢占的(但不像linux那样复杂).Linux有一些我迄今为止看过的最糟糕的文档(我确实尝试过从linux代码中解决问题,但是只有大量的定义分散在一百万个文件和函数钩子中,并且有很多名字,每个版本都会重命名有时感动...)
"抢占"和"上下文切换"有什么区别?
抢占式和非抢占式内核之间的主要区别是什么?程序员需要做什么工作才能使内核抢占先机?
如何创建和使用用户模式?
ARM文档说,在用户模式下,任何切换到特权模式的指令都将被视为未定义指令.
如果是这样,用户空间程序使用内核代码的唯一方法是系统调用?
内核如何响应用户空间或与之交互?
这是否意味着启动后(在一个简单的系统中)唯一的内核线程将是空闲线程?
如果在切换到用户进程时取消映射内核代码和数据所在的页面,那么在系统调用或中断时,内核代码如何在不映射到虚拟地址空间的情况下执行?
"可抢占的内核"是否仅仅意味着内核的设计方式使得在执行内核代码期间进行上下文切换是安全的?或者它是否需要做更多的工作?
哦,如果这里不允许这么多问题,抱歉,找不到任何相关的内容.
Kev*_*eer 13
Mat写道,这可能是不合理的范围.但是,我会尽可能多地关注问题的总和,就像我对一个合理范围的问题一样,希望这将有助于你开始研究.
1"抢占"和"上下文切换"有什么区别?
抢占是在没有参与的情况下中断流程的行为.在这种情况下,这可能意味着定时器中断将被触发.这个词来自先发制人的法律概念:在他人之前或偏好他人之前主张或购买的行为或权利. 出于您的目的,这意味着当定时器中断触发时,中断服务例程(ISR)优先于先前运行的代码.这根本不需要涉及内核; 您可以在任何ISR中运行代码,这些代码将抢先运行.
当OS代码(抢先运行)改变一个进程或线程的上下文与另一个进程或上下文之间的处理器状态(寄存器,模式和堆栈)时,会发生上下文切换.处理器的状态可以是一个线程中的特定代码行.它将在寄存器中有临时数据,在某个存储区域有一个堆栈指针,以及其他状态信息.抢占式操作系统可以存储此状态(静态内存或进程的堆栈)并加载先前进程的状态.这称为上下文切换.
2抢占式内核和非抢占式内核之间的主要区别是什么?程序员需要做什么工作才能使内核抢占先机?
在抢占式内核中,中断可以在任意两个汇编指令之间触发(称为"序列点").在非抢占式内核中,正在运行的进程必须调用一个yield()
函数以允许其他线程运行.抢占式内核更复杂,但提供了更好的并发错觉.非premptive内核可以非常简单地完成setjmp.h
,但每个线程必须定期调用yield()
或其他线程不会运行.
调用类似函数时yield()
,将自动存储处理器的状态.如果要使操作系统处于抢占状态,则必须手动存储此信息.
3如何创建和使用用户模式?
ARM文档说,在用户模式下,任何切换到特权模式的指令都将被视为未定义指令.
正确.但是,他们还说任何中断都会自动以特权模式运行.在ARM系统上,您可以使用该svc
指令生成软件中断.然后,SVC代码(操作系统的一部分)将能够以特权模式运行.
4如果是这样,用户空间程序使用内核代码的唯一方法是系统调用?
正确.至少,这是唯一安全或正确的方法.
5然后内核如何响应用户空间或与之交互?
在ARM上,SVC指令可以获得8位值.这可用于生成256个系统调用,例如yield,启用中断,禁用中断或任何您需要的内容.如果需要,您也可以选择创建共享内存或消息传递交互机制.
6这是否意味着启动后(在一个简单的系统中)唯一的内核线程是空闲线程?
这完全取决于您如何设计系统.如果您选择仅在创建所有线程后启动内核,则可能更简单 - 这样您无需担心动态分配线程.或者,您可以从空闲线程开始并稍后添加其他线程(通过远程shell?我认为您希望至少一个用户线程始终运行...)
7如果在切换到用户进程时取消映射内核代码和数据所在的页面,那么在系统调用或中断时,如何在不映射到虚拟地址空间的情况下执行内核代码?
正如内核模式代码在特权模式下运行一样,即使代码先前在用户模式下执行,内核模式代码也将从主堆栈指针(MSP)运行,即使进程代码使用不同的地址空间也是如此.
8"可抢占内核"是否仅表示内核的设计方式是在执行内核代码期间进行上下文切换是安全的?或者它是否需要做更多的工作?
我认为这意味着内核可以抢占用户代码,而不是内核本身可以被抢占.任何中断内核都是困难和不寻常的.这需要更多的工作,我很难理解为什么你想要它.