如何从零开始写一个自己的操作系统? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
yiran7324
V2EX    程序员

如何从零开始写一个自己的操作系统?

  •  
  •   yiran7324
    As7324 2018-03-11 00:35:30 +08:00 21673 次点击
    这是一个创建于 2772 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近实在是想做一点别人不能做的事情,除了装逼还想倒逼自己多学习些基础的计算机组成原理。

    1. 现阶段有无详细的教程?

    2. 从学习到完成需要经历多少时间?

    3. MAC 环境下的操作

    第 1 条附言    2018-03-11 23:05:37 +08:00
    ## 忘记表达清楚了,我的意思大概是嵌入式那种,非完完全全从零开始,也没那么多时间啊。。
    64 条回复    2025-02-27 20:20:38 +08:00
    matsuz
        1
    matsuz  
       2018-03-11 00:44:17 +08:00 via iPhone   3
    《 30 天自制操作系统》了解一下
    matsuz
        2
    matsuz  
       2018-03-11 00:48:12 +08:00 via iPhone
    自己照着教程写操作系统并不能倒逼你学会计算机组成原理

    更多的是能给你一种虚无的成就感,因为这个东西做出来其实并没有什么鸟用
    hourann
        3
    hourann  
       2018-03-11 00:56:06 +08:00 via iPhone   3
    问题应改为“如何从零开始抄一个别人的操作系统?”
    Mirana
        4
    Mirana  
       2018-03-11 01:01:49 +08:00   2
    yiran7324
        5
    yiran7324  
    OP
       2018-03-11 01:04:04 +08:00
    @hourann 就是想从零开始抄,但是抄的高效一点。。。
    akira
        6
    akira  
       2018-03-11 01:05:38 +08:00   5
    <<30 天自制操作系统>> https://book.douban.com/subject/11530329/
    <<Orange'S:一个操作系统的实现>> https://book.douban.com/subject/3735649/
    一个专门给类似你这样的人群搭建的 wiki https://wiki.osdev.org/Main_Page

    恭祝楼主早日成功
    cszhiyue
        7
    cszhiyue  
       2018-03-11 01:06:39 +08:00   1
    echoZero
        8
    echoZero  
       2018-03-11 01:11:36 +08:00
    大学有门课程好像就是讲的这个 最后就会有个教程让自己做一个操作系统
    Remember
        9
    Remember  
       2018-03-11 01:15:09 +08:00
    xenix 了解一下
    yiran7324
        10
    yiran7324  
    OP
       2018-03-11 01:15:25 +08:00
    @echoZero 大学应到不了这个程度吧现在的大学
    feather12315
        11
    feather12315  
       2018-03-11 01:15:42 +08:00 via Android
    建议站在巨人的肩膀上,超前看。学习下理论就行了,有兴趣读读 Linux subsystem 相关的文档啥的。
    gtalk
        12
    gtalk  
       2018-03-11 01:28:25 +08:00
    你需要一部固话座机,然后
    010101...
    yhzwy
        13
    yhzwy  
       2018-03-11 01:30:02 +08:00   3
    mit 的 6.828
    youxiachai
        14
    youxiachai  
       2018-03-11 01:31:21 +08:00 via iPad
    @yiran7324 国外的计算机本科课程了解一下。。。。

    国内引进的黑书系列就是老外常春藤用的教科书
    kingcos
        15
    kingcos  
       2018-03-11 01:38:55 +08:00 via iPhone
    先从简单的开始呗,何必画个太大的饼(当然这个也不是很大的饼,但起码从楼主的问题感觉问的挺幼稚)。

    一步一步按步骤来的教程,走下来除了卡壳的地方可能自己会去搜索,其他收获也并没有多少。
    shutongxinq
        16
    shutongxinq  
       2018-03-11 01:51:33 +08:00
    fghjghf
        17
    fghjghf  
       2018-03-11 02:12:01 +08:00
    《 30 天自制操作系统》是本劣质书籍,只适合没啥基础,猎奇的读者。不建议看。
    想做操作系统,商业的就不说了,你 100%做不到。就说做个试验品,也不是一件容易的事。
    有心想做的话建议从基础学起,掌握一定高数基础后,从模电数电开始、到微机接口、组成原理、汇编、编译原理、再到上层的数据结构和算法、设计模式,当然,还有很多衍生学科要你遇到再补的。这些书你去参考豆瓣评分吧。学好了,再看 Intel 的手册,自己实现编译器,自己实现一门编译型语言,然后再以学习为目的做个操作系统。全日制的天天学,全年无休,估计全套下来,没个 5 年左右真不行。
    vegito2002
        18
    vegito2002  
       2018-03-11 02:16:08 +08:00
    找个 Pintos 或者 xv6 的 OS 课程作业做做看再说, 认真做其实已经能学到很多东西了;
    就算是这种高难度 OS 作业, 最后实际上你的内容也只是填空, 实现一些功能增强的代码而已, 基本 OS 的底层框架其实大部分是牛人提供的代码就已经帮你写好了;
    如果想要自己从 0 开始做, 而且不是简单复制别人的, 先确定自己能看懂这些人的底层代码再说. 我作业做完之后看过作者提供的基础代码, 真的是这些人的水平不服不行.
    icekingcy
        19
    icekingcy  
       2018-03-11 03:20:57 +08:00 via iPhone
    @akira 初中时买了 orange's 这本书 哈哈哈哈好久了啊
    20015jjw
        20
    20015jjw  
       2018-03-11 03:36:42 +08:00 via Android
    pintos 可以先做一下
    xupefei
        21
    xupefei  
       2018-03-11 05:34:06 +08:00
    https://www.cs.helsinki.fi/u/kutvonen/index_files/linus.pdf
    这个如何,结构够简单,要点全都有.
    trn4
        22
    trn4  
       2018-03-11 05:41:56 +08:00 via iPhone
    @shutongxinq 巧了,我这学期就上这课
    gbin
        23
    gbin  
       2018-03-11 06:17:54 +08:00 via Android
    战略性马克
    snnn
        24
    snnn  
       2018-03-11 06:23:41 +08:00 via Android
    你先去学怎么写一个 bootloader,怎么从实模式切换到保护模式。至少,把 intel handbook 通读一遍
    zhangxiaogang
        25
    zhangxiaogang  
       2018-03-11 07:52:22 +08:00 via iPhone
    之前也有这样想法,看的是《 Linux 内核完全剖析基于 0.12 内核》 非常不错。
    ynyounuo
        26
    ynyounuo  
       2018-03-11 08:24:36 +08:00 via iPhone
    可以看看 xv6
    网上大把教程
    seaswalker
        27
    seaswalker  
       2018-03-11 09:39:45 +08:00 via iPhone
    @zhangxiaogang 读这本书之前建议先学汇编,从 8086 开始再到 X86 保护模式/div>
    lScarlet
        28
    lScarlet  
       2018-03-11 09:41:03 +08:00 via Android
    000001111111 1111000000
    zjqzxc
        29
    zjqzxc  
       2018-03-11 09:43:31 +08:00
    如果不局限于电脑操作系统,可以先试试做一个嵌入式操作系统嘛
    比如看看 FreeRTOS 的源码什么的,(相对)也不算多,有可能就弃坑了呢

    当然,嵌入式 cpu 结构简单,如果操作系统这门课学得扎实的话,自己对照着芯片手册设计一个简单(简陋\半残)的操作系统也不是没可能。
    当然能不能用另说。反正能实现任务切换就可以说自己是操作系统了呗。
    allenhu
        30
    allenhu  
       2018-03-11 09:44:12 +08:00 via Android
    发帖的时间都搜出不少资料了,你只是闲吧?
    zhujinliang
        31
    zhujinliang  
       2018-03-11 09:49:05 +08:00 via iPhone
    大学时在 51 单片机上实现了一个只读的 FAT 文件系统,具体忘了花了几天了。一个可用的操作系统的话你可能需要实现上百个模块,不敢想
    xpresslink
        32
    xpresslink  
       2018-03-11 09:54:55 +08:00
    一看楼主就是个正常人,开发一套操作系统程序员的三大浪漫之一啊。
    程序员的三大浪漫被认为是操作系统、编译原理和图形学。
    为什么呢,因为都是穷尽个人毕生精力投入未见得有什么摸得着的成果的事业。

    楼主之所以有这个想法,就是因为对这件事缺少了解。
    shutongxinq
        33
    shutongxinq  
       2018-03-11 10:20:06 +08:00
    @xiadong1994 good luck。我二年级的时候给老板说想上这个课,他说如果你上了就做好晚一学期毕业的打算。我有个学弟这周三就因为这个课通宵了。。。
    Mirana
        34
    Mirana  
       2018-03-11 10:26:14 +08:00
    我有个 os 项目做了一年了,从头开始写的
    cielpy
        35
    cielpy  
       2018-03-11 10:37:12 +08:00
    cielpy
        36
    cielpy  
       2018-03-11 10:38:18 +08:00
    还有一个正在开发中的操作系统 https://github.com/redox-os/redox,了解一下?
    yomiko123
        37
    yomiko123  
       2018-03-11 10:50:33 +08:00
    想法不错
    jsun
        38
    jsun  
       2018-03-11 10:51:38 +08:00
    有这样的想法挺好,加油
    noahhhh
        39
    noahhhh  
       2018-03-11 10:53:43 +08:00 via Android
    从前自己有过类似的,想做个游戏 233
    funcman
        40
    funcman  
       2018-03-11 11:05:36 +08:00 via Android
    hi 哥们 一般如果你有比较近的提升自己的想法 还是建议看比较偏应用的东西。
    BruceYuan
        41
    BruceYuan  
       2018-03-11 11:09:08 +08:00
    我抄过一个 mini 的(人家代码写的真的好)。不过我们老师不识货
    jetbillwin
        42
    jetbillwin  
       2018-03-11 11:15:33 +08:00
    m
    cabing
        43
    cabing  
       2018-03-11 11:24:19 +08:00
    以前还想学习写一个,后来工作忙。。就丢下了这个想法了,再后来一直懒得开始了~
    WinMain
        45
    WinMain  
       2018-03-11 11:54:55 +08:00
    当初看了一点点 Linux 开机的流程细节就觉得学到了不少东西,要是真能自己从头到尾设计一个简单的 OS,我觉得不管对于工作还是面试都是自身成长都是很好的。
    kajweb
        46
    kajweb  
       2018-03-11 12:29:08 +08:00
    同样想法,正在收集资料
    EricXuu
        47
    EricXuu  
       2018-03-11 12:35:52 +08:00 via Android
    MIT 的 JOS
    bulldozer
        48
    bulldozer  
       2018-03-11 12:36:35 +08:00 via iPhone
    不如从零开始写个 android 实用…有人干过没?
    kotokz
        49
    kotokz  
       2018-03-11 15:19:56 +08:00
    https://os.phil-opp.com

    这个不错,值得看看
    aminic
        50
    aminic  
       2018-03-11 15:26:21 +08:00 via Android
    楼上的兄弟们太勤快了,copy 一份 bsd 或者 linux 就 ok 了啊
    wlwood
        51
    wlwood  
       2018-03-11 16:21:49 +08:00 via Android
    @xpresslink 不是还有个 AI 吗?(逃
    phoebuss
        52
    phoebuss  
       2018-03-11 17:00:46 +08:00 via Android   1
    我们学校的操作系统课,里面的 kernel project 挺好的,可以一试~
    http://merlot.usc.edu/cs402-s18/
    账密:cs402/kernel
    echoZero
        53
    echoZero  
       2018-03-11 18:41:58 +08:00 via iPhone
    @yiran7324 会吧,有门课好像叫做计算机操作系统来着,就讲这个
    zjsxwc
        54
    zjsxwc  
       2018-03-11 19:02:19 +08:00
    按大学里课程学啊,先学习 8086 处理器以及汇编等硬件知识,然后找本操作系统的教材过一遍,最后自己实现个简单的多进程调度器就行了
    trn4
        55
    trn4  
       2018-03-11 22:11:27 +08:00 via iPhone
    @shutongxinq 现在感觉还行,project 没有我想象中的那种无从下手的难
    zzzz76
        56
    zzzz76  
       2018-03-11 22:31:53 +08:00
    https://chyyuu.gitbooks.io/ucore_os_docs/content/
    清华的大三教程,资源很齐全的~
    fakevam
        57
    fakevam  
       2018-03-12 00:06:18 +08:00
    写个 hypervisor 吧, 这个比写个 os 好玩点
    oroge
        58
    oroge  
       2018-03-12 00:12:52 +08:00 via iPhone
    斯坦福 cs140e 了解一下,用树莓派+rust。看上去符合你需求
    ioth
        59
    ioth  
       2018-03-12 10:25:04 +08:00
    操作系统不只是底层了。
    工资也快成底层了,现在忽悠的是区块链。
    两张纸就可以融资几千万。
    testuserll
        60
    testuserll  
       2018-03-12 10:27:20 +08:00   1
    最近膨胀了,连这种主题都都敢点进来了。
    wangbenjun5
        61
    wangbenjun5  
       2018-03-12 12:40:32 +08:00
    恕我直言,现代操作系统是很多牛人理论+实践共同奋斗了几十年的结果,一个人是不可能完成这个任务的,最多也就弄明白原理,然后山寨一个而已,除了吹牛逼毫无意义。真有这精力还不如把精力放在下一代操作系统的研究上
    nodekey
        62
    nodekey  
       2018-03-12 14:01:25 +08:00
    上学期的时候也有这个想法,听大佬说《操作系统真象还原》不错,然而看了三个月也没看完(当然中间穿插看了一些其他书),除了汇编和一些乱七八糟的知识以外就没什么收获了,搞得我现在春招实习我很尴尬……
    MarkLeeyun
        63
    MarkLeeyun  
       2021-07-08 11:28:31 +08:00
    @fghjghf 5 年都是保守估计。。不过现在比起 dos 那个时代可以参考的书多了许多而已。。。
    Lizhecao
        64
    Lizhecao  
      &nbs;227 天前
    加油!
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1476 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 16:26 PVG 00:26 LAX 09:26 JFK 12:26
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86