千家信息网

自主操作系统LMOS-00.04发布啦

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,更多的信息请访问我的CU博客恍恍然三个月过去了,也三个月没写点什么了,这三个月我倒是写了不少代码,是时侯把lmos拿出来说说了,这将是lmos的第四个开发版。今年的三个月已经完了,又只有9个月了,时间
千家信息网最后更新 2026年11月02日自主操作系统LMOS-00.04发布啦

更多的信息请访问我的CU博客

恍恍然三个月过去了,也三个月没写点什么了,这三个月我倒是写了不少代码,是时侯把lmos拿出来说说了,这将是lmos的第四个开发版。今年的三个月已经完了,又只有9个月了,时间紧迫的孩纸们要抓紧啦,其实开发操作系统内核就是要足够的时间,时间越多越好,可往往不如我愿,时间总是不够用。
先来说说lmos第四个开发版有什么新的特性吧。
1、从这个版本开始,lmos不在支持32位x86体系结构了,而是支持更先进那么一点点的64位x86体系结构了,它的名字叫AMD64。
2、lmos这个版本开始拥有虚拟内存了。这个说起来很复杂,那就等会儿在说。
3、lmos从这个版本开始,支持从U盘启动了,当然有个前提,那就是你的计算机主板必须支持从U
盘这类USB介质引导你的计算机,这点给想要在物理机上验证和捣鼓lmos的朋友提供了方便。
为什么lmos从32位突然之间就变成全64位的了,是因为我开发虚拟内存管理器在32位下受到了严重的局限性。后来一想以后反正要支持64位的,不如趁早,以免日后麻烦。其实现在物理机的内存容量已经超过4GB了。x86--64体系结构是AMD公司最先定义出来的,这就是为什么叫AMD64的原因。实现AMD64体系结构的时候,他们的工程师被要求这样,要保证原有32位的os和app,能够不经过任何修改就能运行在AMD64体系结构上。64位的OS能够执行未经修改的32位app。在这些保证下还要尽量改进x86.你不得不惊叹搞x86的工程师们有多伟大、有多痛苦,呵呵。其实AMD64体系结构改得还是不错的。段 几乎不起作用了,TSS的作用也改变了,中断的栈也更加规范了,寄存器全64位了而且寄存器还多了不少,看来他们也知道x86的寄存器太少了,页表也是4层了,支持4KB,2MB,1GB这几种大小的页面。LMOS是全64位的内核,同时也要求应用程序和驱动也是64位的,LMOS不会兼容32位的程序。AMD64的寄存器虽然是64位的,但并不代表它可以访问0~0xffffffffffffffff之间所有的物理地址,事实上在当前的AMD64体系结构的CPU上只有48根地址线,甚至更少。那么它是怎么做的呢,它要求64位寄存器从48位开始用符号位扩展,也就是说CPU只能访问这两个区间的地址:0~0x00007fffffffffff和
0xffff800000000000~0xffffffffffffffff,如果你访问
0x800000000000~0xffff800000000000之间的地址CPU会产生异常。但这一实现非常有利于日后的扩展,我这有幅图大家可以看看:

这一改变佐证了LMOS的可移植性,因为LMOS内核有硬件抽象层的概念,我只花了几个周的时间写了个64位的硬件抽象层,然后把这个层和上层硬件无关的层链接起来就完事儿了。也就是说我要把LMOS移植到ARM体系结构上,只要写个ARM的硬件抽象层外加少许改动就行了,这种设计使lmos成为通用操作系统变成可能。
在来看看这一版本中lmos的虚拟内存管理器。虚拟内存在操作系统理论书籍中只花很少篇幅介绍了那么一点点,实际中虚拟内存可谓重中之重,可谓是操作系统内核的内核。先看看LMOS这一版本中虚拟内存管理器的总框架图,我画的很简陋,大家看看吧:

为什么虚拟内存管理是内核的内核,我举个例子吧。比如操作系统要描述一个线程,那么就必须要定义一个数据结构来表示一个线程,(说句题外话,我现在才真正明白,C语言书前面那句话:"程序=数据结构+算法")好了回来,这个表示线程的数据结构只有在内存中有了真正的实例,程序(内核)才能工作。内核为支持多线程那么这种数据结构的实例就需要很多,比如可能有2000个线程你总不能静态的定义2000个这种数据结构的数组,这样确实能够工作,但是这样使用内存太低效了,太不智能了,因为有可能有时系统中只有两三个线程,这时就浪费了内存,如果有时系统中超过2000个线程时,这时你没办法了。类似这种数据结构系统中是非常多的,通常只有几10字节、几100字节到1KB之间。既然静态的不行,就只有用动态的方法,那就是:要用的时侯就分配并初始化一个数据结构实例,不要时就释放这个实例所占用的内存空间。LMOS这个版本重新实现了一个更为先进的内存池,来处理这种问题,先说了这种数据结构只有10字节、几100字节到1KB之间。你总不能一次就分配一个页面,这叫浪费。内存池就是为解决这个问题的。
现代意义的操作系统,好像都有保护、安全这种类概念,这些概念是怎么实现的呢,CPU提供了一些机制。把一部分关键指令规定为特权指令,把程序里出现的访存地址规定为虚拟地址,要通过地址映射部件映射之后,才能访问真正的物理内存。这两套机制形成了编写现代操作系统的基石。这使得每个进程都有一个独立的地址空间,而这个空间由于权力不同,可以被分为,用户空间和内核空间。这样就形成了一个"保护"的概念。这些概念在lmos中是如何利用的呢,这有个图:

由上可知,x86--64下 只能访问两个区间的地址,既然硬件都是这么实现的,而且这种实现有利于扩展,那么我也没什么好改的了,0~0x00007fffffffffff的虚拟地址区间为进程的用户空间,这个空间是每个进程私有的,其它别的进程不能访问,而且这个区间有虚拟内存管理器分配和映射物理内存。0xffff800000000000~0xffffffffffffffff的虚拟地址区间为LMOS内核空间,这个空间是所有进程共享的,在x86上好像只能这样了没有别的选择,我试过很多种别的空间分配法都没法成立。只能是上图那样的。
LMOS这个版本支持U盘启动了,为了让更多的人,能够在物理机上捣鼓和验证LMOS内核,我这次重写了lmos内核的引导程序,以便能从U盘启动lmos,大家也更能相信LMOS是个真正的玩意儿。U盘也不用很大,32MB就行啦,但是使用前请备份好你U盘中的数据。LMOS会删除U盘上所有的数据。如果你想捣鼓一下的话,请在linux下插入U盘,然后到/dev目录下查看你U盘的设备文件名,一般可能是sd(x)这样的名字,括号中的X是变化的,如果你有两块硬盘的话,你就会在/dev目录下看到:sda、sdb、这样的设备文件名,当你在插入U盘时,就会看到sdc,找到且确认是U盘的设备文件名后,在终端下切换到放lmos内核文件的目录下,执行sudo make U_DSK=/dev/sdb,(我的linux下,我的U盘设备文件名是 sdb 所以才能这样,如果你的不是或者不能确定是不是,千万别执行上面那条命令),否则造成的数据丢失,本人一概不负责。
虚拟机中安装,我推荐大家使用这种方式,这样既不需要另的一块空U盘,也不需要大家的宿主操作系统是LINUX。大家首先确保你的宿主操作系统中安装有Oracle VM VirtualBox 虚拟机软件。如果没有请大家自行下载相关操作系统版本的Oracle VM VirtualBox并安好。安装好后,先新建个虚拟机,然后下载(点此下载)本人提供的虚拟机硬盘镜像。并挂载在虚拟机上,启动虚拟机即可运行LMOS。这次我还提供了VMDK格式的硬盘镜像。方便使用VM虚拟机的朋友。
最后说说这次的shell,我提供了几条极为简单的命令:
r 重启计算机 如下图

t 查看lmos内部的进程、线程数 如下图

m 查看计算机物理内存的使用情况 如下图

p 查看计算机内部的pci总线和设备 如下图

LMOS内核镜像包下载

内存 结构 内核 系统 地址 数据 操作系统 空间 体系 体系结构 数据结构 版本 线程 支持 只有 物理 程序 进程 之间 区间 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 苏州找大状互联网科技有限公司 互联网科技官网 互联网属科技 金融科技与互联网金融 互联网的科技创新 中国 科技 互联网 百单互联网科技有限公司 成都仁贤领冠互联网科技有限公司 天速互联网络科技有限公司 互联网大会黑科技排名 中国航天科技大学国际工业互联网 注册互联网科技公司经营范围大全 晋城互联网科技 科技大学互联网 银行科技岗属于互联网吗 产业互联网科技服务公司 互联网科技数字货币 广州有谷有贝互联网科技有限公司 江苏互联网智能科技产品出厂价 保山浩联互联网科技有限公司 科技金融是不是互联网金融 互联网科技公司华为 互联网与科技发展 互联网科技未来 亿策互联网科技 广州恒生互联网科技有限 湖南一路畅行互联网科技 中国科技创新与世界互联网大会 广州梦谷互联网科技有限公司领导 长沙易易互联网科技有限公司
0