V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
amiwrong123
V2EX  ›  程序员

学习 Linux 内核前,有必要过一遍《unix 环境高级编程》(APUE)吗?

  •  
  •   amiwrong123 · 266 天前 · 2113 次点击
    这是一个创建于 266 天前的主题,其中的信息可能已经有所发展或是发生改变。
    因为有这么一种说法“如果都不知道 linux 提供了什么功能,又怎么可能看懂它的源代码”。

    我觉得是有一定道理的。我现在个人想深入理解 linux 内核,不过这是一个比较长的计划。所以现在有这些问题:
    - 学习 linux 内核前,过一遍 APUE 是有必要的吗?
    - APUE 的哪些内容,是我应该作为的重点内容?
    12 条回复    2024-04-02 14:54:31 +08:00
    idontnowhat2say
        1
    idontnowhat2say  
       266 天前   ❤️ 1
    我觉得很有必要,过了之后学习 linux 内核感觉更轻松点。
    Noicdi
        2
    Noicdi  
       266 天前 via iPhone
    不回答问题,题外话:
    我觉得过 apue 这种书太累了,所以一般都是碰到什么接口或者问题会去书里定向查;但是书里也有一些很有价值的东西(不是接口说明这种内容),不把书过一遍也不知道能挖到什么宝。
    所以一直处于过书和不过的叠加态。

    再推荐一本《 Linux/unix 系统编程手册》,从系统编程到网络编程,很全面我认为。
    agagega
        3
    agagega  
       266 天前 via iPhone
    更好的选择可能是过一遍 Rust 的 rustix 库,了解类 Unix 系统提供的 API 可以怎么用怎么封装,以及不同系统之间的差别
    ben666
        4
    ben666  
       266 天前
    不需要,但是要有一些基本的操作系统概念,找一个感兴趣的主题看。
    刚开始可以看一些讲 linux kernel 的书
    Understanding the Linux Kernel
    understanding linux network internals

    有一些比较独立的内核模块如四层负载均衡 LVS ,资料比较多,入手比较容易,也比较做实验、方便调试。
    在做实验的时候可以用 dperf 打流 https://dperf.org/
    enchilada2020
        5
    enchilada2020  
       266 天前 via Android
    op 是做系统开发的吗?深入理解 Linux 内核的目的是什么呢?
    aeon113
        6
    aeon113  
       266 天前 via iPhone
    我觉得不需要,apue 的东西太多了,而且 kernel 里很多代码,比如中断,比如 swap ,也不是直接向用户态提供服务的

    相反我觉得先看一遍"现代操作系统"对你理解 kernel 会有很大帮助

    https://csc-knu.github.io/sys-prog/books/Andrew%20S.%20Tanenbaum%20-%20Modern%20Operating%20Systems.pdf
    julyclyde
        7
    julyclyde  
       266 天前
    你确定你需要看内核?
    mioktiar56
        8
    mioktiar56  
       266 天前
    等你看完了这些书,你就发现看这些书是浪费时间
    GeekGao
        9
    GeekGao  
       266 天前
    我觉得如果从来没了解过 unix 、linux 的 C 编程,可以读 apue ,这样能更好的理解 ABI 用户态的编程,打通思路。
    虽然打通思路后也未必能上手 kernel 的代码分析。。。。
    wjx0912
        10
    wjx0912  
       266 天前
    个人觉得没必要,这是一本字典,需要的时候查一查。从头到尾看其实效率很低的
    NessajCN
        11
    NessajCN  
       266 天前
    Linux 提供的是跟硬件交互的功能
    更具体一点它是把硬件抽象成文件,把交互抽象成写入/读取文件
    然后开发者就可以专注于软件对硬件的操控设计,而不用太考虑具体实现方式
    https://makelinux.github.io/kernel/map/
    基本看懂这张图也就够了
    tool2d
        12
    tool2d  
       266 天前
    那个编程艺术作者都说了,书里 90%的问题,正常人一辈子都遇不到。

    看书不如和 GPT 互怼几句,只有先遇到问题,才能被理解和消化为知识积累。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5877 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 01:57 · PVG 09:57 · LAX 17:57 · JFK 20:57
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.