WangFuJie Blog

路在脚下,心向远方

自制操作系统 - 定时器

定时器

加入内核定时器机制,使得任务可以在一定时间之后执行特定的功能。比如:任务睡眠、蜂鸣器超时、阻塞超时。我们通过链表实现定时器,当任务sleep或阻塞产生一个定时器加入链表,在每次时钟中断都去判断是否有任务需要被唤醒。

自制操作系统 - CSI控制序列

CSI控制序列

控制序列是指由一些非控制字符构成的一个特殊字符序列,终端在收到这个序列时并不是将它们直接显示在屏幕上,而是采取一定的控制操作,比如:移动光标、删除字符、删除行、插入字符、插入行等。

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

init进程与内核内存保护

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

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

C 运行时环境

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

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

输入输出重定向与管道

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