WangFuJie Blog

路在脚下,心向远方

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

C 运行时环境

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

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

输入输出重定向与管道

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

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

串口设备驱动

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

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

用户程序加载与执行

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

自制操作系统 - 映射内存系统调用mmap&munmap

映射内存系统调用mmap&munmap

mmap 是 Linux/Unix 系统中非常重要的一个系统调用,它的作用是将文件或设备映射到进程的虚拟内存空间中。用来实现虚拟内存的映射,实现这个系统调用需要调整内存部署,用户映射内存开始位置调整到128M,栈顶放到256M的位置。