WangFuJie Blog

路在脚下,心向远方

自制操作系统 - init进程与内核内存保护

init进程与内核内存保护

osh 和 init应该属于用户程序,但是目前我们直接编译进内核了。到目前我们的系统已经可以执行程序了,因此需要将这两个程序独立出来,作为用户程序放到用户空间去执行。并且目前用户进程是可以访问内核内存的,我们需要对内核内存进行保护,不允许用户进程访问。

自制操作系统 - C 运行时环境

C 运行时环境

前面执行的用户程序都是使用汇编语言编写的。我们写的汇编还主动调用了exit系统调用。但是正常C语言程序不会主动调用exit。因此从execve进入用户程序到退出还是一些细节需要补充。这就是C 运行时环境,它要求在main函数开始和结束后都需要做一些工作。另外用户程序参数应该存放在用户栈中,我们也在本节中进行用户参数和环境变量的拷贝。

自制操作系统 - 输入输出重定向与管道

输入输出重定向与管道

输入输出重定向一般用于将标准输入输出重定向到文件,依赖系统调用dup和dup2完成。管道是一种进程间通信的方式,pipe 系统调用可以返回两个文件描述符,其中前一个用于读,后一个用于写,那么读进程就可以读取写进程写入的内容。管道只能在具有公共祖先的两个进程之间使用。

自制操作系统 - 串口设备驱动

串口设备驱动

串口是一种 IBM-PC 兼容机上的传统通信端口, 目前已经被USB取代。串口驱动对系统开发者来说实现起来要比 USB 简单的多,通常用于调试的目的,无需复杂的硬件操作,可以在操作系统初始化的早期使用串口。我们这里的目的也是把调试的信息放到串口里面。

自制操作系统 - 用户程序加载与执行

用户程序加载与执行

用户程序最终是被编译为ELF文件,然后被操作系统加载执行。本节我们将使用系统对ELF文件进行解析,并通过系统调用进行执行。我们并不使用ELF文件的节头,它一般被用于编译器、调试器等。