2020元旦献礼——从零开始开发一个操作系统
序言
在2019年的最后一天终于完成了整个系统的开发,并给它起名曰——Inios 。就如同文章名字一样,完全是从内核编写,非二次开发,从最初的“hello os”到初次有了系统的样子。主要用C语言编写,部分汇编语言。。整个操作系统完成后的大小为39.6 KB
之所以这么小其实主要是语言的原因,另一个重要原因是在开发中对部分系统代码和字体库以及媒体的压缩。中间进行多次迭代,最终完成整个操作系统的开发Inios。
系统预览
开发环境及主要工具
- win 8.1 x64 :用来开发Inios的“载体”
- qemu 虚拟机:测试Inios
- wxmedit:16进制编辑器
- nsak:汇编器
- Notepad++:代码编辑器
- Git:除了提交代码外,还用来生成特殊文件
系统功能
命令行终端
mem
: 显示内存的使用情况cls
: 清空控制台内容dir
: 列出目录type
:查看文件内容hlt
:运行.hrb可执行程序shift+F1
:强制关闭程序enter
:关闭当前应用程序窗口F11
:将最下面的窗口置顶Tab
:切换窗口鼠标点击
:切换窗口/移动窗口shift+F2
:打开终端/打开另一个终端窗口(支持多个)exit
:关闭当前终端窗口ncst xx
:一个终端可以运行多个程序
保护系统
主要做了“内存访问权限 ”、“异常”和“应用程序存入DS操作系统用的段地址”。
多任务
常用的多任务,如果一个系统只能运行一个程序的话,其实是缺少灵魂的。
文字显示
在原来的基础上,实现了中文显示,用到HZK16.fnt编码库。虽然字体库较大,但是经过压缩后,还是小了一半。
鼠标、键盘控制
一个操作系统常用的功能,需要说明的一点的是,在进行鼠标控制时,用现在的鼠标控制并不好用,可能是更改了协议,不过值得庆幸的是,用笔记本的触摸板进行测试,效果还是不错的。
窗口应用程序
可视化窗口程序支持。
媒体播放
这里的媒体主要是指“音频”,说是音频,其实不如说“蜂鸣器”演奏的好,因为我们的音乐都是用“蜂鸣器”来发声的。
压缩
采用的是作者自己做的压缩工具,前后权衡,既可以保证压缩率,也可保证解压速度——tek
压缩。
图片预览
支持jpg
和bmp
格式图片预览。
初始开发文档
起初是想这每天都会记录,记录包括但不限于开发中的bug及容易忽略的问题和技巧。但是由于时间原因只是写了5天的文档,后面的会后续补充。仔细想想这5天其实也足够了,其中包括开发中所需要的初始流程及工具的介绍和使用。如果您也想试着开发玩玩,不妨看下这个简单的文档。文档链接:说明文档.pdf
写在最后
至此文章写完,虽然每次都进行测试。但难免有所疏漏,如有有问题,欢迎指正,我将不胜感激。项目开源,如果您对此有着兴趣欢迎继续开发。如果可以的话,可以点一个一个star
支持项目地址或点下推荐。这将是对我最大的鼓励,拳拳谢意,无以言表。
参考文献
- 《汇编语言(第三版)王爽著》
- 《操作系统设计与实现 上册 Andrew S.Tanenbaum 著》
- 《30天自制操作系统 川合秀实 著》
2020元旦献礼——从零开始开发一个操作系统相关推荐
- 当前操作系统缺少黑体等字体_从零开始开发一个操作系统
在2019年的最后一天终于完成了整个系统的开发,并给它起名曰--Inios .就如同文章名字一样,完全是从内核编写,非二次开发,从最初的"hello os"到初次有了系统的样子.主 ...
- 如何从零开始开发一个小程序
如何从零开始开发一个小程序 开始 申请账号 开发设置 开发工具 新建小程序 阅读文档 模版语法 项目架构 开始编写 基础语法 wx:for循环 wx:if判断 页面导航 自定义组件引用 样式修改 单行 ...
- react的导出是怎么实现的_从零开始开发一个 React
这个是从零开始开发一个 React 系列的第七篇.想要访问之前的内容可以点击下方的链接进行访问: 最简单的实现,包括 vdom 结构,createElement,ReactDOM.render 增加 ...
- 从零开始开发一个大型网站
从零开始开发一个大型网站 更新:前端代码已全部由TypeScript进行重写 这是本人第一个从零开始开发一个大型网站(前后端+部署代码),是一个内容分享社区,详细信息见github.目前还是开发中后期 ...
- 视频教程-用Java从零开始开发一个物联网项目-物联网技术
用Java从零开始开发一个物联网项目 多年的产品设计和开发经验,带领团队完成多个知名产品.历任多家大型公司的Java架构师,对知名框架的源码均有深入研究.拥有IT一线开发.教学10多年的实战经验,能充 ...
- Android-IM从零开始开发一个即时通讯项目
Android-IM从零开始开发一个即时通讯项目 https://www.jianshu.com/p/dca480006691 关于聊天室项目 聊天室项目,也被称为即时通讯(IM). 其原理是服务器是 ...
- 从零开始开发一个全栈Web应用实录
虽说学习了大半年前端,但是对前端的理解仍然停留在对HTML,CSS,JS,JQuery的概念理解上,并且没有接触过相关的后端开发,所以说,这个项目也可称为从零开始,是新手向的文章,不要害怕有门槛哈. ...
- 从零开始搭建一个操作系统(1):搭建工作模式和环境
配置平台:VMware虚拟机+Ubuntu Linux liuhao-virtual-machine 5.4.0-26-generic #30-Ubuntu SMP Mon Apr 20 16:58: ...
- 如何从零开始开发一个实时联机游戏?
本文作者为明星团队汉家松鼠游戏工作室的CEO成功(CG),他将于11月10日在深圳举办的第四期腾讯游戏学院品鉴会上,分享汉家松鼠旗下<汉家江湖>.<江湖X>等游戏从立项.研发到 ...
最新文章
- DEV-C++设置C++11标准
- 树莓派模拟量输入范围_使用 RPi.GPIO 模块的输入(Input)功能
- python综合作业题目_python作业 1、2、3 题
- collection配置说明
- python编写加密程序_python编写的维吉尼亚密码加解密程序
- spark on yarn提交任务后总是accepted以及通过yarn关闭application
- linux下能运行python,(转)Linux下运行python
- (转) Linux(Centos7)yum安装最新mysql
- 推荐的MyBatis传参方式List、数组等
- Cisco路由器配置命令
- win10虚拟显示器开发
- oracle加索引 oracle,Oracle索引创建及管理
- java jbutton icon 边框_Swing开发JButton图标效果篇
- Charles手机 APP 抓包仅需这三步
- 2007年春节联欢晚会相声《免费电话》李金斗、大兵、赵卫国
- 理财项目中宏涌晟五个投资理财基础知识
- MATLAB中cumsum函数
- creo6.0安装教程
- HDMI转DP带5V供电转接线方案|HDMI转EDP点屏转换方案|CS5801最新电路设计原理图
- js获取url中的主域名
热门文章
- sqlite3数据库的使用
- Springboot WEBOJ项目—— Nginx部署
- 阿里实习生电话面试果断被鄙视
- 是面试官放水,还是公司太缺人?这都能过,字节跳动原来这么容易进...
- conenct的用法(2种方法)
- JS 刷新当前页面 返回上一页并刷新的方法
- tzc 1292 排序
- hbase基于solr配置二级索引
- 解决Please make sure you have the correct access rights and the repository exists 问题
- 此计算机到未能识别网络连接,Win10未识别的网络无法连接到internet如何解决?操作方法...