• 想带着学生做一个操作系统,可行性有多大?


    有知乎网友提问如下:

    想带着学生做一个操作系统,可行性有多大?

    个人觉得可行性非常大,如果只是做着来玩,让学生了解操作系统时如何实现的话。但是,如果你打算今后商业化的话,那就另当别论了。就算你能做出来,没有人用,那也是然并卵。

    国内之所以没有发展出自己的操作系统,不是技术不行,是你没有这个生态。任你强大如某菊花品牌,先不论是否是套壳,你想让其他手机生产商都埋堆?你没发使用gms也是然并卵。你走不了海外,难道我要跟着你一锅熟?我当然还是要走gms生态。如此之类的吧。

    不扯远,回到题主问题。

    由头到脚做个玩具版的操作系统,不基于任何linux内核,其实难度远没有一些朋友想象中那么难。当然,这里要还要看不同的人对操作系统的理解。

    比如,如果你只是想写个Hello world级别的操作系统,在系统开机之后直接跑你自己的写的程序,打印个Hello World什么的,估计你都用不了30分钟,参考下我以前推荐过的李渊写的《自己动手写操作系统》的第一章,用汇编写十来行代码,编译烧录到一个镜像,然后让虚拟机从该镜像启动就能看到效果。

    以下是该书第一章的目录:
    在这里插入图片描述
    对应的那十来行代码在此:

    	org	07c00h			; 告诉编译器程序加载到7c00处
    	mov	ax, cs
    	mov	ds, ax
    	mov	es, ax
    	call	DispStr			; 调用显示字符串例程
    	jmp	$			; 无限循环
    DispStr:
    	mov	ax, BootMessage
    	mov	bp, ax			; ES:BP = 串地址
    	mov	cx, 16			; CX = 串长度
    	mov	ax, 01301h		; AH = 13,  AL = 01h
    	mov	bx, 000ch		; 页号为0(BH = 0) 黑底红字(BL = 0Ch,高亮)
    	mov	dl, 0
    	int	10h			; 10h 号中断
    	ret
    BootMessage:		db	"Hello, OS world!"
    times 	510-($-$$)	db	0	; 填充剩下的空间,使生成的二进制代码恰好为512字节
    dw 	0xaa55				; 结束标志
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    然后怎么编译,怎么烧录到软盘或者镜像,以及系统从启动,到自检,到读取启动盘mbr记录,加载引导代码bootloader之类的,这里就不详谈了,书上都有,或者自己到csdn之类的搜索下就出来了。

    这里我只是想表达下,操作系统的也是可以有Hello World版本的,入门也就30分钟的难度而已。所谓万事开头难,只要你开了个头,那你带领学生继续写的信心就会更大了。

    但是

    我们上面这个操作系统其实充其量也只能算个boot loader而已,其实boot loader也还算不上,因为它没有去load任何东西。

    这往下的其实就是要实现的操作系统相关的更多功能了,相关的模块或者知识点我相信应该包含这些方面:

    • 保护模式的跳转。这个你肯定得教给你学生的吧?毕竟,这是个非同寻常的跳转。这里gdt,ldt这些知识点肯定要涉及的了

    • 内存管理。你分页也好,分段也好,分页+分端也好,只要你不是实模式的,那么虚拟内存和真实内存映射,用户态和和心态这些你是跑不掉的,否则你跑个应用分分钟访问到操作系统的内存去了。

    • 进程管理。基本的cpu调度算法总要有吧,就算你只是个简单的写死的没有抢占式的时间片调度算法。

    就教学来说,我觉得上面这些实现了估计也差不多了。

    其实对于微内核来说,文件系统这些往往没有放到操作系统内核中去,而是作为应用层应用的,比如minix上就是这样做的。

    如果还有精力的,那可以继续下面这些方面:

    • 设备管理。简单的块设备和字符设备支持上就好
    • 文件系统

    其实《自己动手写操作系统》这本书我当时看的时候它刚出来,好多好多年前了,当时它还么有实现文件系统这一块的。设备管理好想也没有实现太多东西。

    所以在这上面你应该能借鉴的不多。但是你可以参考我们大学时候的教程《操作系统设计与实现》,里面用到的是教学用的minix操作系统,完全足够你用了。

    相关的一些细节以及上面提及的书籍,我在之前的回到中有说到,这里就不赘述了,先到这吧

    Linux内核代码大佬们如何观看的?

    我是@天地会珠海分舵,能力一般,水平有限,觉得我说的还有那么点道理的不妨点个赞关注下!

  • 相关阅读:
    使用Docker部署Java应用:从入门到实践
    基于ssm的智慧农贸信息化管理平台-计算机毕业设计源码
    计算机毕设(附源码)JAVA-SSM基于中职学校的校医务室管理系统
    【多线程】常见的锁策略
    面向OLAP的列式存储DBMS-6-[ClickHouse]的常用DDL操作
    HIVE 3 使用 MR 引擎多表关联 (JOIN) 导致丢数的问题复现、问题根源及解决方案 (附代码)
    ubuntu20.04 安装 matlab R2023b
    elementui的el-dialog组件与el-tabs同时用导致浏览器卡死的原因解决
    并发包中的原子类
    【Java面试】为什么引入偏向锁、轻量级锁,介绍下升级流程
  • 原文地址:https://blog.csdn.net/zhubaitian/article/details/127796263