V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
smallseven
V2EX  ›  程序员

求助:想了解学习硬件和计算机的底层原理

  •  
  •   smallseven · 2019-03-08 09:38:52 +08:00 · 7302 次点击
    这是一个创建于 2079 天前的主题,其中的信息可能已经有所发展或是发生改变。

    作为一个程序猿,不仅需要会 coding,还要对底层硬件有一些了解。平时我自己对硬件的东西关注不多,发现这是自己的短板,去除具体的实现原理,就连一些常见的硬件( CPU,GPU,存储器)常识都知之甚少,更别提一些其他的电路板,电子元件了。

    所以希望各位 V 友可以推荐一些好的书籍,网站,blog,公号,视频等,适合学习了解计算机硬件的,科普常识也行。虽然这些东西可能需要时间去积累,但我希望可以将它作为一种兴趣爱好去了解学习更多。

    注:本人学过数模电,数字逻辑,计组,体系结构。。。大家可以多推荐一些偏科普的。谢谢~

    53 条回复    2019-03-10 15:26:06 +08:00
    whypool
        1
    whypool  
       2019-03-08 09:43:19 +08:00
    百度
    sdhzdmzzl
        2
    sdhzdmzzl  
       2019-03-08 09:53:40 +08:00   ❤️ 4
    深入理解计算机系统。
    tcdh
        3
    tcdh  
       2019-03-08 09:54:38 +08:00
    常识的话 CSAPP 就够了,CMU 出品,有书和视频教材。
    crackerJack
        4
    crackerJack  
       2019-03-08 09:56:32 +08:00 via Android
    x 宝视频多的是,资料也多,几块钱买一堆
    ww2000e
        5
    ww2000e  
       2019-03-08 10:03:31 +08:00
    买个 arm 开发板? 或者给 intel 的 cpu 手册通读一遍。。
    cdlixucd
        6
    cdlixucd  
       2019-03-08 10:15:29 +08:00 via Android
    隔壁做开发的 快三十了 集显独显都搞不清
    wyce2007
        7
    wyce2007  
       2019-03-08 10:37:01 +08:00 via iPhone   ❤️ 2
    编码:隐匿在计算机软硬件背后的语言
    从门电路原理开始讲起
    codechaser
        8
    codechaser  
       2019-03-08 10:43:31 +08:00 via Android
    @wyce2007 这本书👍
    ftexplore
        9
    ftexplore  
       2019-03-08 10:45:44 +08:00
    感觉没太大必要,如果是做纯软件的话,还是把精力放在数据结构算法上吧
    lavenderkissyou
        10
    lavenderkissyou  
       2019-03-08 10:48:55 +08:00
    这样的话成本太大 主要是花的时间多 从底层开始的话 真的很费时间 所以 还是不要搞底层吧 除非你是专门想去做硬件
    wangshichang
        11
    wangshichang  
       2019-03-08 10:50:11 +08:00
    不知道这个视频符不符合楼主的意思,今天刚看别人在 TG 分享的视频
    https://www.bilibili.com/video/av21376839
    efsg
        12
    efsg  
       2019-03-08 10:50:16 +08:00 via Android
    @cdlixucd 我相信下载 xcode 都能中招的了
    cdlixucd
        13
    cdlixucd  
       2019-03-08 11:11:22 +08:00
    @efsg 小白吧,关键是人家做了开发很多年了,都是高🐔工程师了 LOL
    abmin521
        14
    abmin521  
       2019-03-08 11:47:37 +08:00 via Android
    @cdlixucd #13 我也不懂 我还不知道 i5 7 代 和 i7 5 代哪个好 丢人了
    Flasky
        15
    Flasky  
       2019-03-08 12:08:21 +08:00 via Android
    可以去学一点单片机,寄存器的操作肯定能让你印象深刻
    Mohanson
        16
    Mohanson  
       2019-03-08 12:17:42 +08:00 via Android   ❤️ 1
    https://github.com/mohanson/pywasm

    webassembly 虚拟机。可以从虚拟机再入手硬件,跨度不会这么大。
    Mohanson
        17
    Mohanson  
       2019-03-08 12:18:55 +08:00 via Android
    最近我准备写 arm7tdmi cpu emulator,很好玩
    lrxiao
        18
    lrxiao  
       2019-03-08 12:21:27 +08:00
    计算机架构 软硬件接口+量化研究方法
    没讲 GPU
    ppcoin
        19
    ppcoin  
       2019-03-08 12:27:27 +08:00 via Android
    不如把手头的东西往死里搞。
    Cat73
        20
    Cat73  
       2019-03-08 12:35:02 +08:00
    《计算机组成 结构化方法》
    我就看的这本
    Cbdy
        21
    Cbdy  
       2019-03-08 13:04:41 +08:00
    CSAPP 挺科普的,可以去看看。我感觉做软件的话,更多的需要关注 OS
    Mistwave
        22
    Mistwave  
       2019-03-08 13:07:49 +08:00 via iPhone
    CSAPP
    Mirana
        23
    Mirana  
       2019-03-08 13:13:35 +08:00
    yangzhezjgs
        24
    yangzhezjgs  
       2019-03-08 13:44:26 +08:00
    zhd173
        26
    zhd173  
       2019-03-08 14:21:00 +08:00
    《 Code 编码:隐匿在计算机软硬件背后的语言》这本也灰常不错哦,比 CSAPP 简单些
    dxgfalcongbit
        27
    dxgfalcongbit  
       2019-03-08 14:26:27 +08:00
    微机原理
    cdlixucd
        28
    cdlixucd  
       2019-03-08 15:00:56 +08:00 via Android
    @abmin521 如果用户级别的肯定看功耗和计算能力吧 其他你还能看出啥
    henglinli
        29
    henglinli  
       2019-03-08 15:16:57 +08:00
    曾經有這想法,但是放棄了.精力有限,盡量朝著少數甚至一個自己感興趣的方向學習才是正途.

    另外,個人認爲應該先學匯編.
    @Mirana 推薦的 osdev 也不錯,可以翻看.
    halfer53
        30
    halfer53  
       2019-03-08 16:19:59 +08:00
    没必要,计算机有不同的领域,每个领域都能挖的很深。但每个人经历有限,不可能每个领域都钻研的很深,专注于你自己的领域做深就是最好的了
    pythondean
        31
    pythondean  
       2019-03-08 16:23:24 +08:00
    @Cat73 小姐姐 73 年的吗
    ZiLong
        32
    ZiLong  
       2019-03-08 16:47:23 +08:00
    @pythondean 有没有可能是 73 岁
    Cat73
        33
    Cat73  
       2019-03-08 18:06:59 +08:00
    @pythondean @ZiLong 并不是,90 后
    fox0001
        34
    fox0001  
       2019-03-08 18:18:10 +08:00 via Android
    不知道这个有没有帮助:中科大计算机课程资源
    https://mp.weixin.qq.com/s/Il56_X1pXuse_H-Njgyqfw
    yplam
        35
    yplam  
       2019-03-08 19:49:44 +08:00 via Android
    简单的就弄个 stm32,至少可以知道寄存器,io 跟代码里变量的关系,中断,堆栈,任务切换原理
    硬核玩家就弄个低端 FPGA,自己去实现各种数字电路,译码器,寄存器,可以执行有限自定义指令集的 mcu
    rus4db
        36
    rus4db  
       2019-03-08 20:20:38 +08:00
    楼主看来你也是科班出身啊……
    既然这样,我推荐《微处理器设计——从设计规划到工艺制造》
    https://book.douban.com/subject/3301308/
    是英特尔的工程师写的。
    既不过分简单,也不会过分纠结于某些细节,深入浅出,有 EECS 专业背景的人读起来应该很轻松。
    可以把它当成是数字电路+体系结构的复习书。
    koebehshian
        37
    koebehshian  
       2019-03-08 23:40:21 +08:00 via Android
    如果模电数电真学会了,应该很容易理解计算机原理
    NEOXIN
        38
    NEOXIN  
       2019-03-09 00:11:56 +08:00 via Android
    EEVBLOG 逼站有熟肉
    feather12315
        39
    feather12315  
       2019-03-09 00:23:41 +08:00 via Android
    计算机系统结构:量化方法,做芯片的必读
    tempdban
        40
    tempdban  
       2019-03-09 02:12:06 +08:00 via Android
    好说,搞一遍性能优化
    dartabe
        41
    dartabe  
       2019-03-09 02:45:17 +08:00
    看下 arm 的基础结构就行了 做软件的把内存 中断看下就行了
    Justin13
        42
    Justin13  
       2019-03-09 07:43:06 +08:00 via Android
    上 sicp。。。。
    mseasons
        43
    mseasons  
       2019-03-09 08:05:30 +08:00
    你学过的这点东西,为啥还要偏科普的东西呀
    cherrycatz
        44
    cherrycatz  
       2019-03-09 08:17:18 +08:00
    bilbili
    guanaco
        45
    guanaco  
       2019-03-09 08:19:38 +08:00 via iPhone
    找个计算机 BIOS 的汇编源码读一下,如果能看懂的话
    Sunly
        46
    Sunly  
       2019-03-09 08:26:06 +08:00
    我是从《编码:隐匿在计算机软硬件背后的语言》这本书开始看的,浅显易懂,很推荐
    kimi0
        47
    kimi0  
       2019-03-09 08:40:41 +08:00
    如果是出于提升工作技能的目的,没必要
    我自己就是从硬件设计 /VERILOG 转过来做后端开发的,硬件的知识在工作中能用到的机会,为 0
    估计做操作系统 /driver 的组会有机会和硬件打交道吧,但一般也就限于 datasheet 这一层了,不会让你去搞明白上升沿 /时钟都是些什么玩意
    BingZ
        48
    BingZ  
       2019-03-09 08:55:34 +08:00
    同样推荐 CSAPP,偏软。简单介绍必要的硬件概念,主要结合现代大型 OS 实现所需的相关内容进行讲解。这些对于上层应用级软件来说,足够了。真要深究,即然楼主有数模电基础,那就从 CPU 的实现入手。可以试试在 FPGA 上构建一个自己的 CPU。
    honeycomb
        49
    honeycomb  
       2019-03-09 08:58:01 +08:00 via Android
    YouTube 有 eth zurich 的 computer architecture,由 onur mutlu 讲课
    xrshi
        50
    xrshi  
       2019-03-09 12:47:17 +08:00 via Android
    minecraft 红石电路。四位和八位 cpu 都有教程。
    https://minecraft.gamepedia.com/Tutorials/Redstone_computers
    txy3000
        51
    txy3000  
       2019-03-09 16:48:48 +08:00 via Android
    以前用 Verilog 写过一个五级流水线的 CPU 带条件预测 forward 你也可以尝试一下 xilinx 仿真的 一下就理解 MIPS 体系的 CPU 的原理了
    xieyudi
        52
    xieyudi  
       2019-03-10 11:38:15 +08:00 via Android
    一步步来嘛。一方面是体系结构,另一方面是数字电路设计。

    体系结构资料就是 Patterson 的那几本书,上面都给出了。CSAPP 还是有些偏软了。数字设计就是从学校里的电路,电子,到大规模集成电路,低功耗设计,etc.

    从 FPGA 上实现 CPU 是个很好的路子。先实现一个教科书式的单个指令多个周期的那种。再上流水线,多发,乱序。还有缓存,TLB/MMU 这些也得慢慢上。我以前没事整天分析 Cortex-A55 /A75 的 RTL,本质上上还是那些东西。

    能通过这个走完架构-设计验证-实现(综合,布局布线,时序分析那些)。等走完这个,差不多能转行了。。。

    我以前算是该软件的。最近也在找专门做 CPU 设计方面的工作。
    RingoTC
        53
    RingoTC  
       2019-03-10 15:26:06 +08:00
    CSAPP 更适合软件工程师看。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5930 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 02:02 · PVG 10:02 · LAX 18:02 · JFK 21:02
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.