84669 Lernen von Personen
152542 Lernen von Personen
20005 Lernen von Personen
5487 Lernen von Personen
7821 Lernen von Personen
359900 Lernen von Personen
3350 Lernen von Personen
180660 Lernen von Personen
48569 Lernen von Personen
18603 Lernen von Personen
40936 Lernen von Personen
1549 Lernen von Personen
1183 Lernen von Personen
32909 Lernen von Personen
在知乎上看到类似的问题
目前正在follow这个github项目制作操作系统
希望听到SF的亲历者说说你们的操作系统制作历程
学习是最好的投资!
你需要一些C语言知识和汇编知识,需要明白操作系统是如何工作的,可以看看《现代操作系统》,如果体验过LFS就更好了,编写一个玩具操作系统并不难,推荐本讲的很全面的书:
http://book.douban.com/subject/11530329/
所需要的基本知识: CPU的指令集和体系结构,这一步很重要。CPU cache是什么东西,CPU和内存间的交互是怎么通过cache来加速的。
就x86而言,需要了解机器从最开始加电到载入内核的整个流程是什么样子。一般来说整个过程可以用grub来完成,并且grub已经帮你切换到了保护模式,所以还省去内核切换到保护模式的过程。然后内核需要建立打开paging,设置好最初的虚拟内存到物理内存的映射,然后内核自己就可以运行在虚拟地址上了。下一步内核会初始化各种需要硬件的和CPU状态,安装中断处理程序,设置用来产生ticks的时钟,如果是多个处理器,内核还会通过inter processor interrupt去唤醒其他的处理器。其实有很多繁琐的工作要做。内核初始化好了以后,就会读取要运行的第一个用户态的程序,为这个程序建立所必需的运行环境,然后从内核态切换到用户态来运行这个程序。
这里面涉及到各种体系结构的细节,一般来说大部分代码是可以用c完成的,但是与普通编写应用程序不同,内核的c代码基本上是自给自足的,因为没法调用任何系统调用。有一些核cpu打交到的需要通过汇编或者内连汇编来完成,比如设置cpu状态寄存器的值。C语言的函数调用约定也比较重要,那些值是通过寄存器传递的,那些是通过堆栈传递的。不同的体系结构是不一样的,x86-32和x86-64都不一样。
内核的调度算法,就是说内核怎么来确定下一个要运行的程序,根据优先级还是最简单的固定的时间片。物理内存怎么管理。这些都是很需要思量的地方。
接下里是很多设备的驱动,这个就是读不同设备的文档了。 先想到这么多,有空再补充。
你需要一些C语言知识和汇编知识,需要明白操作系统是如何工作的,可以看看《现代操作系统》,如果体验过LFS就更好了,编写一个玩具操作系统并不难,推荐本讲的很全面的书:
http://book.douban.com/subject/11530329/
所需要的基本知识:
CPU的指令集和体系结构,这一步很重要。CPU cache是什么东西,CPU和内存间的交互是怎么通过cache来加速的。
就x86而言,需要了解机器从最开始加电到载入内核的整个流程是什么样子。一般来说整个过程可以用grub来完成,并且grub已经帮你切换到了保护模式,所以还省去内核切换到保护模式的过程。然后内核需要建立打开paging,设置好最初的虚拟内存到物理内存的映射,然后内核自己就可以运行在虚拟地址上了。下一步内核会初始化各种需要硬件的和CPU状态,安装中断处理程序,设置用来产生ticks的时钟,如果是多个处理器,内核还会通过inter processor interrupt去唤醒其他的处理器。其实有很多繁琐的工作要做。内核初始化好了以后,就会读取要运行的第一个用户态的程序,为这个程序建立所必需的运行环境,然后从内核态切换到用户态来运行这个程序。
这里面涉及到各种体系结构的细节,一般来说大部分代码是可以用c完成的,但是与普通编写应用程序不同,内核的c代码基本上是自给自足的,因为没法调用任何系统调用。有一些核cpu打交到的需要通过汇编或者内连汇编来完成,比如设置cpu状态寄存器的值。C语言的函数调用约定也比较重要,那些值是通过寄存器传递的,那些是通过堆栈传递的。不同的体系结构是不一样的,x86-32和x86-64都不一样。
内核的调度算法,就是说内核怎么来确定下一个要运行的程序,根据优先级还是最简单的固定的时间片。物理内存怎么管理。这些都是很需要思量的地方。
接下里是很多设备的驱动,这个就是读不同设备的文档了。
先想到这么多,有空再补充。