应用程序执行环境
前面我们已经建立了一个较为完整的内核基础环境。现在,我们要为应用程序提供执行环境,让应用程序可以正常地执行。
应用程序需要运行在用户态,因此我们需要进行内核态到用户态的特权态转换。不过,光从内核态转到用户态是不够的,在一些特定情况下,应用需要内核的服务,如系统调用。比如应用如果想要操作一个文件,其自身是无法完成的,必须由内核完成。关于具体的操作,请参见用户态与内核态切换页面。
在内核态到用户态切换前,我们还需要为用户态建立自身的地址空间,并在内核中记录一些应用的信息。
由于应用程序执行环境相关的内容之间关联性比较高,本章节内容的顺序按照逻辑顺序编排,与写代码的顺序不完全一致,因此建议完整阅读完之后再进行实现,或者在实现功能时预留相关代码的位置。
在我们作业的早期阶段,我们暂时只需要创建单个用户进程。不过,对于一个内核来说,仅仅有一个进程是远远不够的,因此在完成单进程后,我们需要支持多用户进程。我们要求多用户进程必须通过时间片共享 CPU 资源,而不是按照顺序逐个执行任务。
在多用户进程的内核上,除了前面所说的应用地址空间、记录应用信息、用户态与内核态切换以外,我们还需要加入一些管理模块。管理模块包括进程管理(管理应用地址空间及应用信息)、调度模块、驱动模块。