想带着学生做一个操作系统,可行性有多大?
创始人
2024-04-06 08:42:15
0

有知乎网友提问如下:

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

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

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

不扯远,回到题主问题。

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

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

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

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

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

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

但是

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

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

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

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

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

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

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

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

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

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

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

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

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

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

相关内容

热门资讯

银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
AWSElasticBeans... 在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
月入8000+的steam搬砖... 大家好,我是阿阳 今天要给大家介绍的是 steam 游戏搬砖项目,目前...
​ToDesk 远程工具安装及... 目录 前言 ToDesk 优势 ToDesk 下载安装 ToDesk 功能展示 文件传输 设备链接 ...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
AWS管理控制台菜单和权限 要在AWS管理控制台中创建菜单和权限,您可以使用AWS Identity and Access Ma...