参赛前言 & 系列文规划

大家好,我是 Ian,因为一些原因,我在年初的时候接触到嵌入式系统开发与系统软件实作。在这一年来也写了许多文章记录学习历程,希望这篇系列文可以激起读者对 CS 的兴趣 : )

缘起

在 2020 年底,随着推甄告一段落,闲来无事的我看到了一个有趣的东西:由金门大学资工系陈锺诚教授开源的作业系统专案: mini risc-v os 以及麻省理工学院开发的 xv6 os。
在尝试阅读专案原始程序码时,我发现自己对计算机科学领域的认知与 C 语言程序能力都有严重的不足。
Jserv 也曾说过本科生的定义:

不要强调自己「非本科」,在这个世纪只要没强度都是非本科。

我想,这世界上最可怕的事情莫过於知道自己的不足却坐以待毙
就算自己在大学时并不是正资工系也不能作为逃避的藉口,因此我买了几本书并参考大量文献,在空闲时研读、整理成笔记,实践 Teach Yourself Computer Science 的精神。

主题

本系列文名为计算机科学之美,所以它包含了非常广大的领域,主要应该包含了:

  • 数位逻辑: 逻辑闸、数值系统、补数概念。
  • 计算机组织: 管线、 CPU 快取、 MMIO 、中断与异常、冒险 (hazards) 、组合语言。
  • 作业系统: 中断、排程、内文交换、执行绪、档案系统...。
  • 资工人必须会用的基本工具: gdb, Makefile, gcc, vim, git 等。

其中,作业系统是一门综合性的 CS 学科。我想,比起直接阅读,修读过资料结构与演算法和计算机概论、计算机组织後再来研读会有更深的感触。
本系列文会围绕在 RISC-V 上建构,介绍导读作业系统原始程序码所需要的工具、 RISC-V ISA 介绍、作业系统原始程序码导读,在介绍 RISC-V 以及计算机组织的相关知识时也会用到 rv32emu 的原始程序码方便解说。

受众

目标读者需要有以下条件:

  • 熟悉 C 语言:
    • 指标操作 (记忆体概念)
    • 前置处理器
    • C 语言的物件导向概念
  • 喜爱计算机科学并对其有一定的认知
  • 熟悉最基本的资料结构
  • 了解发问的正确起手式

目录

本系列文采取先理论後实作的策略,先补足计算机科学的基本知识,再探讨作业系统设计并尝试研读开源专案的原始程序码。

知己知彼百战百胜

学习 System programming 以及 Operation system 之前,我们需要对计算机有更进一步的认知:

ISA 是什麽? 能吃吗?

RISC-V 是由 UC Berkeley 发展的 ISA,其官方规格书仅有 200 多页的长度,相比 ARM 以及 MIPS,是更容易学习的 ISA,本系列文将利用 RISC-V 让读者对计算机组织有更深入的了解。

必须要会的实用工具

受到微中子的拯救资工系学生的基本素养影响,我也整理了一些文章来教大家资工人必须要会的基本工具/技巧。

学习作业系统,从自干开始!

以自干作业系统为目标,学习作业系统的导论并阅读作业系统的专案原始程序码理解实作原理。

并行程序设计 (使用 C 语言)

之前修读学校开的作业系统时,因为作业要求,用了 Node.js 写一个非常基础的多执行绪程序,笔者自认为没有真正的搞懂多执行绪。
刚好藉由这次机会,可以学习多执行绪的同步问题以及使用 POSIX Thread 开发多执行绪程序。

推荐教材 & 好文分享

特别感谢

  • 陈锺诚教授
    感谢陈锺诚教授愿意在平常抽空与我分享作业系统相关的专案,提供了我许多有用的建议。
  • Jserv
    感谢 Jserv 抽出时间阅读小弟的拙作,并针对一些专业术语的翻译提出建议 <(_ _)>
  • ei498
    感谢这位不具名网友协助勘误内文提出的错误论述。
  • 耕铭
    感谢央大电神在我最初开始编写文章时就提醒我修正文章中的错误内容。

关於我

  • AwesomeCS 站长
  • Google DSC Lead @NCTU 2021
  • Deno.tw 版主
  • COSCUP 2021 IT Team lead
  • SITCON/COSCUP/GDG DevFest/六角学院 讲者
  • 热爱计算机科学,略懂网页全端开发、网页安全、区块链,目前尝试将触角延伸到系统程序上,希望在进入职场前具备垂直整合的能力。
  • 因为兴趣接触全端开发以及系统程序,却准备做 5G 研究的硕一新生。

文章相关问题或勘误欢迎留言或是发信到我的信箱: [email protected]


<<:  TypeScript 能手养成之旅 Day 1 出发

>>:  Day 4 该说的还是要先说!

[iT铁人赛Day2]JAVA的设定变数

在JAVA中,可以设定一些的变数,例如:long, int, char, float,...等等 l...

HERE API Example - 使用 Platform Data Extension REST API 显示邮递区号图层

HERE Fleet Telematics Advanced 资料集是一种 REST API,可让您...

Day 4 资讯结构与阶层分析- (main content + footer)

延续上回~~ 四、再往底下看是主要的Main Content,也就是对於使用者来说目光会停留最久的区...

Day24 - 【概念篇】Keycloak使用基本概念 - 第一部分: Client

本系列文之後也会置於个人网站 Client与一些安全相关的设定 在OAuth架构下的Client(...

熟习-使用

在新建立的小试用专案内熟悉所有会使用的UI界面与其功能性,并尝试组成一页界面,用於练习。而编辑程序码...