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

news2024/12/29 5:26:02

有知乎网友提问如下:

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

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

国内之所以没有发展出自己的操作系统,不是技术不行,是你没有这个生态。任你强大如某菊花品牌,先不论是否是套壳,你想让其他手机生产商都埋堆?你没发使用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				; 结束标志

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

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

但是

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

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

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

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

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

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

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

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

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

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

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

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/4853.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

单片机实验——水塔自动抽水系统设计(基于Proteus仿真)

实验内容及要求 自来水供水是现代生活的一大特点,水塔作为储水装置是自来水系统必不可少的重要设施,让水塔保持一定的水量是自来水不断供的必要条件,本设计模拟自来水系统中水塔的自动抽水机制,设计分为控制系统和虚拟水塔两部分…

若依管理框架-漏洞复现

文章目录 0x00 介绍0x01 默认口令漏洞0x02 SQL注入0x03 Shiro反序列化漏洞0x04 任意文件读取/下载0x05 定时任务0x06 `swagger-ui.html`接口文档泄漏0x07 Druid未授权访问摘抄免责声明0x00 介绍 RuoYi 是一个 Java EE 企业级快速开发平台,基于经典技术组合(Spring Boot、Apa…

黑产工具情报的分析方式浅析

接下来我们以恶意爬虫、抢券工具和注册机三种工具来谈一下黑产工具情报的分析方式。 对于企业方面来说,黑产工具情报可以有效的提高业务安全的攻防效率。通过分析工具利用的业务接口,不仅可以将黑产作恶行为进行有效的追踪,对其进行有效的处…

Java本地搭建宝塔部署实战springboot自动化立体智慧仓库WMS源码

大家好啊,我是测评君,欢迎来到web测评。 本期给大家带来一套Java开发的springboot自动化立体智慧仓库WMS源码。 技术架构 技术框架:SpringBoot layui HTML CSS JS运行环境:jdk8 IntelliJ IDEA maven3 宝塔面板 本地搭建教…

MongoDB入门与实战-第四章-SpringBoot集成MongoDB

目录参考MongoDB 连接java客户端方式引入驱动依赖测试创建客户端创建集合查询文档查询集合大小条件查询排序投影聚合查询复合聚合插入文档批量插入更新文档删除文档SpringDataMongoDB添加依赖配置文件新建实体映射插入文档修改文档删除参考 SpringBoot 整合 MongoDB 实战解说 …

[附源码]java毕业设计濒危物种科普系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

jq获取和设置偏移量:offset()、position()

jq获取和设置偏移量: js获取盒子的偏移量是:offsetLeft、offsetTop;jq获取盒子的偏移量的方法:offset()、position();offset():距离文…

去除有重复的行

【问题】 I have a csv file and I have duplicate as well as unique data getting add to it on a daily basis. This involves too many duplicates. I have to remove the duplicates based on specific columns. For eg: csvfile1: title1 title2 title3 title4 title5…

C++程序开启大地址(虚拟内存),让32位程序使用4G内存的方,虚拟内存概念及寻址范围详解

如何让 32 位程序突破 2G 内存限制 一般情况下,32 位程序的内存大小被限制在了 2G,不过可以通过以下的操作来突破这个限制。 修改操作系统参数 这一步骤只针对 32 位操作系统,64 位操作系统可以跳过 用管理员权限打开一个命令行窗口 执行…

【数据库原理及应用】——安全性与完整性(学习笔记)

📖 前言:随着计算机的普及,数据库的使用也越来越广泛。为了适应和满足数据共享的环境和要求,DBMS要对数据库进行保护,保证整个系统的正常运转,防止数据意外丢失、被窃取和不一致数据产生,以及当…

【Linux】---认识进程

文章目录进程的概念1、什么是进程2、PCB3、查看进程4、初始fork()创建进程5、kill杀死进程进程的状态普适的操作系统下的状态运行阻塞挂起Linux下的状态理解R--运行状态S--睡眠状态D--深度睡眠状态T--暂停状态t--追踪暂停状态X--死亡状态Z--僵尸状态孤儿进程进程优先级进程的其…

先广度后深度,打开编程视野

古人云 “读万卷书,行万里路。” 书籍是人类进步的阶梯、培养阅读习惯,当一个人爱上读书的时候,眼睛都是发光的。 在小编看来,学习理念是【先广度后深度】,先把Java知识体系的东西都了解到,工作上先会用&…

【数据结构与算法】之动态规划经典问题

前言 本文为 【数据结构与算法】动态规划 经典问题相关介绍 ,具体将对最长递增子序列问题,找零钱问题,0-1背包问题相关动态规划算法问题进行详尽介绍~ 📌博主主页:小新要变强 的主页 👉Java全栈学习路线可…

【LeetCode】No.91. Decode Ways -- Java Version

题目链接:https://leetcode.com/problems/decode-ways/ 1. 题目介绍(Decode Ways) A message containing letters from A-Z can be encoded into numbers using the following mapping: 【Translate】: 包含从A到z的字母的消息可…

C++之继承详解(万字讲解)

这里是目录呀前言一、继承的概念及定义1.继承的概念2.继承定义(1)定义格式(2)继承关系和访问限定符(3)继承基类成员访问方式的变化二、继承中的作用域三、基类和派生类对象赋值转换四、派生类的默认成员函数五、继承与友元六、继承与静态成员七.复杂的菱形继承及菱形虚拟继承1.…

暗猝灭剂BHQ-2 氨基,BHQ-2 amine,CAS:1241962-11-7

产品描述 1、名称 英文:BHQ-2 amine 中文:BHQ-2 氨基 2、CAS编号:1241962-11-7 3、所属分类:Other dyes 4、分子量:477.53 5、分子式:C24H27N7O4 6、质量控制:95% 7、储存: …

爱心html制作并部署github

手机也可以观看 效果预览地址 1.网页效果 心形优化 2.网页源码 源码地址 可以改变不同的图片&#xff0c;作者已经改为全局变量 <!DOCTYPE html> <html><head><title></title><script src"js/jquery-1.7.2.js"></script…

高并发,你真的理解透彻了吗?高并发核心编程手册荣登Github榜首

高并发&#xff0c;几乎是每个程序员都想拥有的经验。原因很简单&#xff1a;随着流量变大&#xff0c;会遇到各种各样的技术问题&#xff0c;比如接口响应超时、CPU load升高、GC频繁、死锁、大数据量存储等等&#xff0c;这些问题能推动我们在技术深度上不断精进。 在过往的面…

Spring Cloud Ablibaba 学习系列文章

前言&#xff1a; 最近发现Spring Cloud的应用越来越多了&#xff0c;微服务的概念在一般的互联网公司上面几乎都会使用到&#xff0c;于是准备一套Spring Cloud Alibaba的学习文章&#xff0c;文章写到一定阶段&#xff0c;会进行实战篇&#xff0c;比如搭建注册通信的框架&a…

C. Crossword Validation(字典树)

Problem - C - Codeforces 题意: 你得到了一个在NN网格上完成的填字游戏。每个单元格要么是填有字母的白色单元格&#xff0c;要么是黑色单元格。你还会得到一本包含M个不同单词的字典&#xff0c;其中每个单词都有一个与之相关的分数。网格中的一个横向候选词是在网格的同一行…