babyos2(0)——从零开始

起因

读硕士时曾尝试写一个玩具内核,取名babyos,不料剑走偏锋,玩起了在裸机上绘图,而忽视了操作系统学习中真正精华的部分,后来求职、答辩、毕业、工作,就放下了。然而心里一直记着这回事。

近两年对围棋比较有兴趣,本科毕设做过中国象棋AI,自然对Alpha Go很感兴趣。前一阵子Alpha Go Zero刷爆了各种圈,就想学点深度学习的东西,好自己写一个围棋AI玩,当然目标定的比较低,能下过我就可以了。但是动工之前,却又记起了babyos,决定先把她做完了再学深度学习。虽然没啥逻辑,但确确实实是因为“狗蛋”让我决定重写babyos。
既然是从0开始,就重新命名为babyos2。到今天为止,已经完成了一些有趣的东西,决定整理出来,方便查阅。

计划

虽然64位已是主流,但简单起见,还是先做32位保护模式,目标还是Intel i386处理器。如果后面顺利,可能会尝试64位。
这次计划会尝试做简单的分页,进程,调度,中断,异常处理,系统调用,用户态的shell,简单的文件系统等。主要参考xv6, linux早期版本。
当然最终做出个什么样的东西来并不重要,重要的是把知识搞清楚,学习的过程和学习带来的乐趣才是主要的~

QQ群:733473199

Git:https://github.com/guzhoudiaoke/babyos2

列表

01.boot & loader
02.load elf format kernel
03.console, kprintf
04.memory ranges by int 0x15, eax=0xe820
05.mm - paging
06.idt, interrupt, exception
07.8259a,keyboard,timer, rtc
08.hard disk
09.syscall
10.process, fork, exec,schedule, usermode
11.physical memory manage,buddy
12.vmm, vm_area,page fault,mmap
13.fork, COW(copy on write)
14.user stack and expand,load elf
15.bug fix 1
16.sleep, wakeup
17.exit, wait
18.signal,kill,do_signal,sig_return
19.simple file system (1), fs struct, super block, inode, bitmap, namei
20.simple file system (2), file, open, close, read, write
21.simple file system (3), mkdir, link, unlink
22.shell (1), mknod, console read, write
23.shell (2), load elf from file, args for exec, ls
24.shell (3), printf, cd, mkdir, ln, rm, cp, mv, cat
25.block dev, semaphore,sleep when wait for hard disk
26.simple file system (4), lock
27.pipe
28.strange problem, strange solve
29.socket(AF_LOCAL), IPC
30.APIC, local APIC, I/O APIC
31.multi-processor configuration
32.multi-processor,startup APs,mp schedule
33.bug fix 2 - bug on mp
34.PCI Config space and Enumerating PCI buses
35.network(1) – simple RTL8139 nic driver
36.network(2) – ethernet layer, send, receive
37.network(3) – arp, request and reply
38.network(4) – ipv4, transmit, receive, checksum, arp retry
39.network(5) – icmp echo request, reply, receive
40.network(6) – sock_raw, ping
41.network(7) – udp, dns resolve
42 network(8) – udp, SOCK_DGRAM, gethostbyname
43.network(9) – tcp, sock_stream

/

现代操作系统必备的几个要素:
1.64位 (未进行)

2.multi-processor (实现了一个简易版本)
1)apic
2)MP config
3)MP boot
4)MP schedule
目前多个核参与了调度,但除时钟中断外,一个类型的中断只有一个核处理。

3.网络 (做了一些基本功能)
1)simple network card driver, RTL 8139网卡(完成)
2)socket, AF_INET(基础功能版本完成)
1> SOCK_RAW
2> SOCK_DGRAM, UDP
3> SOCK_STREAM, TCP
3)simple TCP/IP
1> ethernet(完成)
2> ARP(完成)
3> IP(完成子网内发送,不支持分片、重组)
4> ICMP echo (完成发送,回复和接收,验证IP数据包可发送到外网)
5> ping, socket SOCK_RAW (实现了一个简单版本,暂时只支持ICMP,能ping外网)
6> UDP, socket SOCK_DGRAM (实现简单的发UDP包,DNS解析,UDP echo, gethostbyname)
7> TCP, socket SOCK_STREAM(实现一个简单的UDP收发包,sock_stream只支持有限功能,TCP协议实在略微复杂了点,先这样吧…)

从git提交记录看,第一次提交是2017-10-21, 到今天2018-05-12,花费了半年多的业余时间,代码量17700余行,blog 44篇。v1.0先这样吧。

几个截图:
这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值