linux - 写一个简单的操作系统需要经过哪些步骤和流程?
PHPz
PHPz 2017-04-17 11:40:04
0
2
593

在知乎上看到类似的问题

目前正在follow这个github项目制作操作系统

希望听到SF的亲历者说说你们的操作系统制作历程

PHPz
PHPz

学习是最好的投资!

Antworte allen(2)
伊谢尔伦

你需要一些C语言知识和汇编知识,需要明白操作系统是如何工作的,可以看看《现代操作系统》,如果体验过LFS就更好了,编写一个玩具操作系统并不难,推荐本讲的很全面的书:

http://book.douban.com/subject/11530329/

Peter_Zhu

所需要的基本知识:
CPU的指令集和体系结构,这一步很重要。CPU cache是什么东西,CPU和内存间的交互是怎么通过cache来加速的。

就x86而言,需要了解机器从最开始加电到载入内核的整个流程是什么样子。一般来说整个过程可以用grub来完成,并且grub已经帮你切换到了保护模式,所以还省去内核切换到保护模式的过程。然后内核需要建立打开paging,设置好最初的虚拟内存到物理内存的映射,然后内核自己就可以运行在虚拟地址上了。下一步内核会初始化各种需要硬件的和CPU状态,安装中断处理程序,设置用来产生ticks的时钟,如果是多个处理器,内核还会通过inter processor interrupt去唤醒其他的处理器。其实有很多繁琐的工作要做。内核初始化好了以后,就会读取要运行的第一个用户态的程序,为这个程序建立所必需的运行环境,然后从内核态切换到用户态来运行这个程序。

这里面涉及到各种体系结构的细节,一般来说大部分代码是可以用c完成的,但是与普通编写应用程序不同,内核的c代码基本上是自给自足的,因为没法调用任何系统调用。有一些核cpu打交到的需要通过汇编或者内连汇编来完成,比如设置cpu状态寄存器的值。C语言的函数调用约定也比较重要,那些值是通过寄存器传递的,那些是通过堆栈传递的。不同的体系结构是不一样的,x86-32和x86-64都不一样。

内核的调度算法,就是说内核怎么来确定下一个要运行的程序,根据优先级还是最简单的固定的时间片。物理内存怎么管理。这些都是很需要思量的地方。

接下里是很多设备的驱动,这个就是读不同设备的文档了。
先想到这么多,有空再补充。

Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!