发表时间:2022-03-26来源:网络
说实话,对于一个OS新手来说,我建议「从零“抄”一个内核」,说实话,完全从零写有点难。
除非你有基础,从零写意味着你需要懂操作系统理论、C语言、汇编、内联汇编,弄清指令集,写引导程序,写内核程序,写调度程序,写进程管理,写文件管理等等。
门槛有点高了。
我的建议是跟着书或者公开课,在提供部分参考的代码的情况下,自己去读懂,再写一遍,甚至自己增加一些有趣的功能。
推荐两份资料:
《操作系统真象还原》-- 真的太细了,足够你从零写一个操作系统MIT 6.828(现在叫6.s081?)XV6 ,这是它的文档:另外,你还需要一些前置依赖知识,否则估计会被很多硬件、汇编知识劝退:
首先给大家推荐一份我整理硬核CS书单,包括OS各种理论、实践书籍,大家可以在这里获取,对于学习计算机的同学帮助非常大,且十分系统:
书单:书单推荐,少即是多(含下载方式)
筑基内功-- 需要学习计算机原理、C语言(需要熟练运用)、数据结构课程工欲善其事,必先利其器,掌握以下Linux 下常用命令行: pwd、cd、find等,1-2 款趁手的编辑器,推荐掌握 vim 的基本操作 gcc、gdb、ld、make等编译构建链、objdump、nm、readif、dd 等 ELF 文件分析、烧录工具。这里只推荐一本我看过的书《操作系统真象还原》,作者实在太好了,所有需要前置依赖的部分他都会简单的写个教程,照着这本书就能撸一个属于自己的 os。
如何自制OS?
我当时应该是看了不少网课,然后自己跟着教程”抄了“一个 mini os。
学习操作系统一定不要去死看书,最好跟着那种有配套实验完成一个os的课程或者书。
就像这种:

比如我当时看完了网易云课堂上李治军老师的课程,他的课程最大的特点就是理论结合实践,比如讲线程切换,那就会拿出linux 0.11的代码带我们一起去看具体的实现,栈、上下文、寄存器是如何切换的。


接下来给大家讲讲我推荐的操作系统学习方法吧:
来源: 个人公众号「编程指北」,推荐关注! 原文:编程指北--计算机科班学习 OS 的正确姿势!实际上操作系统发展到今天,已经非常复杂了,像 Windows、Linux 任意一个都是几千万行代码级别,想靠个人完全搞懂,几乎是不可能的了。
所以需要先明确一下我们学习的目的,不同的学习目的,适用不同的方法,这里我仅仅列一下作为一名开发人员,我们掌握 OS 的几种目标:
第一种:
知晓 OS 基本概念: 看在线课程原理部分的视频或者看《现代操作系统》之类的书,可大致知道OS的概念;
第二种:
理解OS基本原理: 在1的基础上,完成与 OS 相关的课程练习题,可进一步理解 OS 基本原理,练习题可以参考学堂在线清华OS课程的练习题:

第三种:
掌握 OS 部分核心功能实现(细节):在 2 的基础上,能够通过编程完成类似 xv6 的几个 lab ,
比如 xv6 就会涉及以下模块:
Booting a PCMemory ManagementMultitaskingFile system, Spawn and ShellNetwork Driver每个模块代码量都不会很多,但是麻雀虽小,五脏俱全,通过自己动手实现 thread、spinlock、semaphore 这些东西,会让你理解更加深刻。
当然,在往上走就是去研究最新 Linux Kernel,研究一些子模块了,有些还需要阅读最新的 System 领域论文。
最新的 Linux Kernel 里有很多新的算法、研究结果不断的加入。
当然,这就超出了我所能掌握的范畴了哈哈。
不过说实话,如果你还在校大二大三,我真的墙裂建议你去做一些国外的计算机 lab,比如OS、Network。
等到毕业了,几乎就不太可能从头开始系统学习那些基础知识了,除非你能自己闭关两三年,啥也不做,待在一个地方专心修炼。
好好珍惜在学校大把的空闲时间,做一些让在专业上让自己受益一生的事情。
这里我可以列举几个,国内不少喜欢 System 的同学都会去跟 MIT、CMU、UCB 这些计算机名校的课程。
比如 MIT 的 6.824 Distributed System、6.830 Database Systems、MIT 6.828 Operating System Engineering .....
小北也搜集了很多操作系统硬核的实验和lab,大家可以看下这篇文章,结合lab学习一定会事半功倍:
6.828 就是今天要介绍的主角:
MIT6.828: Operating System Engineering
官网主页:https://pdos.csail.mit.edu/6.828/2020/index.html
在官网,包含了Schedule、Labs、xv6-book 等等。
尤其是 xv6-lab 包含了操作系统中最为核心的模块:
每个模块都搭好了框架,留下最为核心的部分给我们去实现,你可以把这个看做一种「完形填空」:
System Call、Page tablesTrapsLazy allocation、Copy On-WriteMultithreading、LockFile System、mmpanetwork driver如果想看视频的话可以去 Youtube 或者 B站:
MIT 6.828: Operating System Engineering : https://www.bilibili.com/video/BV1px411E7ST
如果你想找一个国内的类似 xv6 的 lab,那么这里推荐清华大学 ucore OS。
它其实也是起源于MIT CSAIL PDOS课题组开发的 xv6 & jos、哈佛大学开发的 OS161教学操作系统、以及Linux-2.4 内核。
然后清华的老师在这个基础上,增加、调整了一些代码,为清华大学 OS 课程设计的一个lab。
另外,这个课程的很多资料、文档都是中文的,还有清华老师的配套视频课程。
清华大学-操作系统:https://www.xuetangx.com/course/THU08091000267/5883104
顺便推荐几本经典的书籍吧:
书名(英文):Operating Systems : Design and Implementation (3rd Edition) 书名(中文):操作系统:设计及实现 (第三版) 原作者:Andrew S. Tanenbaum / Albert S. Woodhull 翻译者:王鹏、尤晋元、朱鹏、敖青云 Operating System (操作系统) 书名(英文):Operating System Concepts (7th Edition) 书名(中文):操作系统概念 (第七版) 原作者:Abraham Silberschatz / Peter Baer Galvin / Greg Gagne另外还有诸如《现代操作系统》、《Operating Systems: Three Easy Pieces》之类的。
尤其是 《Operating Systems: Three Easy Pieces》,阅读体验比较好,讨论问题由浅入深。
而书名也是很有意思,Three Easy Piece是为了致敬费曼的关于物理学的书籍:《Six Easy Pieces: Essentials Of Physics Explained By Its Most Brilliant Teacher》。
用作者的话说,操作系统只有物理学一半难,那就叫 《Three Easy Pieces》好了。
Three 也是指代本书三个部分:
虚拟化(Virtualization)并发(Concurrency)持久化(Persistence)操作系统这门课,易学难精,但是掌握到日常编程和面试够用还是比较容易的。
那么毕业生或者说你去准备校招面试应该达到怎样的水平:
OS 四大模块的理论知识: 进程与线程管理、内存管理、IO与文件系统、设备管理了解 Linux 内核部分实现原理,如内存管理、进程管理、虚拟文件系统等了解和熟悉常用的系统调用已经 System API其中内存、进程、IO 是重点,这几块也是和编程关系最密切的,这里推荐先挑本偏理论的书看看,了解操作系统的全貌:
《现代操作系统》《操作系统—精髓与设计原理》不必全看,两者任选一本都不错,我自己是仔细看了第二本,因为是我们教材,同时挑着看了现代操作系统部分章节。
这部分看完你应该对下面这些话题有一个清晰认知了:
操作系统由哪些构成进程的状态、切换、调度进程间通信方式(共享内存、管道、消息)进程和线程的区别线程的实现方式(一对一、多对一等)互斥与同步(信号量、管程、锁)死锁检测与避免并发经典的问题:读者写者、哲学家就餐问题为什么需要虚拟内存,MMU 具体如何做地址转换的内存为什么分段、分页页面置换算法文件系统是如何组织的虚拟文件系统(VFS)是如何抽象的...操作系统,最好的实践就是看下 Linux 内核是怎么实现的,当然不是叫你直接去啃 Linux 源码,那不是一般人能掌握的。
最好的方式是看书,书的脉络给你理得很清晰。
书籍推荐:
《Linux内核设计与实现》 这本书恰到好处,即讲清楚了内核实现的要点,又不会通篇源码。这本书重点关注「第 3 章进程管理」、「第 5 章系统调用」、「第12章内存管理」、「第13章虚拟文件系统」、「第 15 章进程地址空间」
这些章节属于操作系统核心部分,其它如中断处理、块 IO、设备管理根据你自己兴趣选择看下就可以了。
基本上做到这里,操作系统就没什么大问题了。
小北也搜集了很多操作系统硬核的实验和lab,大家可以去这篇文章下载,结合lab学习一定会事半功倍
觉得不错的话,记得帮我 @编程指北 点个赞哟,祝大家新年快乐!
上一篇:c语言四个开发步骤
下一篇:c语言程序开发的4个步骤
皓盘云建最新版下载v9.0 安卓版
53.38MB |商务办公
ris云客移动销售系统最新版下载v1.1.25 安卓手机版
42.71M |商务办公
粤语翻译帮app下载v1.1.1 安卓版
60.01MB |生活服务
人生笔记app官方版下载v1.19.4 安卓版
125.88MB |系统工具
萝卜笔记app下载v1.1.6 安卓版
46.29MB |生活服务
贯联商户端app下载v6.1.8 安卓版
12.54MB |商务办公
jotmo笔记app下载v2.30.0 安卓版
50.06MB |系统工具
鑫钜出行共享汽车app下载v1.5.2
44.7M |生活服务
2022-03-26
2022-03-26
2022-03-26
2022-03-26
2022-03-26
2022-03-26
2022-03-26
2022-03-26
2022-02-15
2022-02-14