自己写最简单的操作系统

合集下载

自己动手写操作系统(一)

自己动手写操作系统(一)

⾃⼰动⼿写操作系统(⼀) 借着本来现在就在上操作系统内核课的机会,在图书馆借了本于渊的《⾃⼰动⼿写操作系统》,准备⾃⼰亲⾃动⼿写⼀下,提⾼⾃⼰对操作系统的理解。

开篇技术博客来记录⼀下⾃⼰的学习历程。

⼩弟第⼀次写博客,有什么不到的地⽅还请⼤家海涵。

⾃⼰选择的平台是Ubuntu14和Bochs。

具体的Bochs的安装教程见/art/201407/446838_all.htm,这⾥就不做具体的介绍。

第⼀个程序当然是hello world这个经典的⼊门程序,不过这次是使⽤汇编语⾔来编写的⼀个bootloader级别的hello world,根据⾃⼰的操作流程,我把⾃⼰⼤体的步骤说⼀下,以便⼤家有⼀个清晰的认识: ⼀、安装bochs。

⼆、进⼊bochs的安装⽬录使⽤“./bximage”命令制作⼀张空的软盘。

三、在⾃⼰的⼯程⽬录下写⾃⼰的源⽂件(boot.asm),并使⽤下⾯命令将源⽂件进⾏编译得到镜像。

nasm boot.asm -o boot.bin 四、将第三部制作的软盘a.img(默认名字)拷贝到当前⼯程⽬录下。

五、写⼊系统镜像。

dd if=你的镜像路径(即编译得到的boot.bin的路径) of=a.img 六、写⾃⼰的配置⽂件(bochsrc)。

七、按照⾃⼰的配置⽂件执⾏bochs。

bochs -f bochsrc 完成之后的⼯程⽬录⾥⾯应该有⼀下的⼏个⽂件: 下⾯是执⾏完第七步的操作之后的界⾯ c 直接按ENTER,会出现下⾯界⾯,⿊乎乎的,什么也没有 但是在终端中输⼊C就会正确的显⽰出我们想要的东西了 下⾯将上述操作中所涉及到的源⽂件代码贴出来,以便⼤家可以⾃⼰轻松的在⾃⼰的机⼦上轻松的演⽰; 下⾯是我的Bochs配置⽂件,bochsrc1 ###############################################################2 # Configuration file for Bochs3 ###############################################################45 # how much memory the emulated machine will have6 megs: 3278 # filename of ROM images9 romimage: file=/usr/share/bochs/BIOS-bochs-latest10 vgaromimage: file=/usr/share/vgabios/vgabios.bin1112 # what disk images will be used13 floppya: 1_44=a.img, status=inserted1415 # choose the boot disk.16 boot: floppy1718 # where do we send log messages?19 # log: bochsout.txt2021 # disable the mouse22 mouse: enabled=02324 # enable key mapping, using US layout as default.25 #keyboard_mapping: enabled=1, map=/usr/share/bochs/keymaps/x11-pc-us.mapView Code boot.asm的源码内容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, 0 ; 将DL中的ASCII码显⽰到屏幕,将'\0'送到DL中,并显⽰int 10h ; 10h 号中断ret ; 返回到调⽤处BootMessage: db "Hello, OS world!"times 510-($-$$) db 0 ; 填充剩下的空间,使⽣成的⼆进制代码恰好为512字节dw 0xaa55 ; 结束标志View Code 这次就到这⾥,主要是介绍⼀下环境以及有⼀个直观的认识。

如何让Win10编程自己定制的系统?

如何让Win10编程自己定制的系统?

如何让Win10编程自己定制的系统?如何让Win10编程自己定制的系统?相信许多用户都在使用着微软Win10的电脑,这款操作系统可以说是当前用户最多的操作系统了,那么我详细你肯定不知道如何定制一个属于自己的电脑操作系统,下面我就带着大家一起看一下吧!操作方法:1、在任务栏搜索框中搜索regedit,然后单击顶部结果打开注册表编辑器。

2、浏览以下路径:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion提示:在Windows 10上,现在可以将路径复制并粘贴到注册表的地址栏中,以快速跳转到目的地。

3、双击RegisteredOwner字符串,然后指定注册的所有者信息。

4、双击RegisteredOrganization字符串,然后指定组织信息,例如,用户的"家庭'或用户的组织名称。

提示:如果找不到字符串,可能需要创建。

通过右键单击CurrentVersion键,选择"新建',选择"字符串值'选项,并分别相应地选择每个字符串"RegisteredOwner'和"RegisteredOrganization',即可完成此操作。

5、重新启动计算机。

完成这些步骤后,使用Windows + R键盘快捷键,然后在"运行'命令中键入winver,单击"确定'按钮,修改后的信息出现在"关于Windows'页面中。

除了更改所有者和组织详细信息,还可以修改其他信息,包括带有"DisplayVersion'字符串的Windows 10版本,带有"EditionID'的版本,带有"CurrentBuild'和"CurrentBuildNumber'的内部版本号、字符串等等。

自己动手精简一个属于自己的win10系统(win7win8都可以)

自己动手精简一个属于自己的win10系统(win7win8都可以)

⾃⼰动⼿精简⼀个属于⾃⼰的win10系统(win7win8都可以)⼀、准备⼯具
1.系统镜像(ISO格式)
2.精简⼯具(已打包好在下⽅链接)
⼆、操作流程
1.准备系统镜像并解压到⾮中⽂⽬录的硬盘上
2.打开精简⼯具点击左上⾓的映像添加我们已经解压好的镜像⽂件夹
3.选择你要精简的系统版本然后点击加载(我这边就⼀个专业版,可以参考下,选择⾃⼰要的版
本)
4.加载好后出现以下界⾯,然后就可以根据需求删除不必要的组件功能之类的
5.像图下这样有默认的但是要改的话,只需双击默认就可以更改了。

PS:⼯具的删除⽅式和⼀般软件不同,勾选表⽰保留,未勾选才是删除。

需要特别注意,如果⽆法更改状态即为系统必备组件,⽆法删除!
6.全部设置完后,点击应⽤,在保存模式这⾥选择你要的版本(多版本情景下),创建ISO打上
钩。

输⼊⽂件名。

然后再输⼊⼀个卷标名。

7.最后⼀步了,确认⽆误后点击左上⾓的开始按钮,跳出提⽰选择是。

(后⾯跳出的提⽰都选
择是)注意:在开始后千万别点取消,不然你前⾯的功夫都⽩忙了,如果真的取消了,需要删
除第⼀步解压的镜像,再重新来过。

8.完成啦,我们来看下精简后的对⽐,明显镜像⼩了(本次实验并没有细化精简所以不是很明
显)这些⼤家参考⼀下就⾏,毕竟是制作⾃⼰专属的,应该由⾃⼰来决定。

最小的Linux操作系统制作过程详解

最小的Linux操作系统制作过程详解

最小的Linux操作系统制作过程详解一,什么是BabyLinuxBabyLinux不是一个完整的发行版,他是利用原有的一套完整的linux系统的内核原代码和编译工具,利用busybox内建的强大功能,在一张软盘上做的一个很小的linux系统。

他具备一个linux系统的基本特征,支持linux系统最常用的一百多个命令,支持多种文件系统,支持网络等等,你可以把他当做一张linux 起动盘和修复盘来用,你也可以把他当做一个静态路由的路由器软件,当然,你也可以把他当做一个linux玩具,向你的朋友炫耀linux可以做的多么小。

我把他叫做BabyLinux因为他很小巧,小的很可爱,像一个刚刚出生的小baby。

二.为什么要作这样一个linux先说说我一开始的想法,当我一开始接触linux的时候,看到书上说,linux 通常安装只需要60M左右的空间,但是我发现装在我硬盘上的Redhat 6.0确要占据好几百M的空间。

为什么我的linux这么大呢? 后来我发现,装在我机器上的那么多东西只有不到30%是我平时常用的,还有30%是我极少用到的,另外的40%基本上是不用的。

于是,我和大多数初学者一样,开始抱怨,为什么linux 不能做的精简一点呢?于是,我萌发了自己裁减系统的想法。

可惜那个时候我还没有听说过有LFS和Debain。

等到我积累了足够的linux知识后,我开始制作这样一个小系统。

制作这样一个小系统最大的意义在于,你可以通过制作系统了解linux的启动过程,学会ramdisk的使用,让你在短时间内学到更多的linux知识。

当然,你会得到很大的乐趣。

这个项目只是做一个具有基本特征的linux系统,如果你想自己做一个具有完整功能的linux,请阅读Linux From Scratch (LFS)文档。

三,什么人适合读这篇文档如果你是一个linux爱好者,并且很想了解linux的启动过程和系统的基本结构,而且是一个喜欢动手研究小玩意的人,那么这个文档可以满足你的需求。

自己动手写一个简易操作系统(基于51单片机)

自己动手写一个简易操作系统(基于51单片机)

自己动手写一个简易操作系统(基于51单片机)背景介绍大一学了51单片机,对于单片机的一些常用外设有了一定的了解。

之后,大家都在说当前最流行的单片机是stm32,所以我抽出了暑假的时间的时间学习了stm32单片机,刚开始学的时候真的很痛苦,在坚持了一个星期之后,我慢慢找到了自信,stm32单片机实际上和51是一样的,只是需要配置的寄存器多了一点。

在刚开始学的时候,经常在配置的时候无法配置完全,导致无法得到预期的实验效果,但是实际上,大家没必要过分纠结于配置,完全可以直接参考别人使用该功能的配置方式。

我们应该将心思放在功能的开发上,而不是纠结于前期简单的配置。

在熟悉使用stm32之后,开始接触操作系统ucos,过程中一直觉得自己似懂非懂,所以我在想为什么我自己不利用51写一个简易操作系统,来加深自己的理解。

初期写出的操作系统不用考虑通信等高级功能,只需要写出可以调度多个任务的操作系统即可,下面给大家介绍一下我自己写的操作系统(写的不太好,仅供大家参考)。

系统实现实现简易操作系统,主要需要实现三个函数:1.创建任务函数(将定义的任务的执行入口保存起来,供调度使用)2.任务延时函数(每一个任务执行后,都需要加入延时函数,否则低优先级的任务没有机会执行)3.中断调度函数(提供时间片调度)1 创建任务函数介绍int OSTaskCreate(unsigned int Task, unsigned char* pStack, unsigned char TaskID){unsigned char i = 0, j = 0;*pStack++ = Task & 0xFF; //低八位地址(51单片机入栈向上,出栈向下)*pStack = Task >> 8; //高八位地址os_enter_critical();TaskCB[TaskID].OSTaskStackButtom = (unsigned char)pStack + 13;TaskCB[TaskID].OSWaitTick = 0;TASK_READY(TaskID); //将该优先级的任务在全局变量中标记为就绪os_exit_critical();return 0;}入口参数:unsigned int Task ---- 任务函数的入口地址unsigned char* pStack ---- 任务函数的堆栈,主要用来保存现场参数unsigned char TaskID ----- 任务优先级2 任务延时函数void OSTimeDly(unsigned int time){TaskCB[CurrentTaskID].OSWaitTick = time; //将任务的延时时间赋值给任务控制块task_sw(); //任务调度}static void task_sw(){os_enter_critical();TASK_BLOCK(CurrentTaskID); //将当前任务的就绪状态取消#pragma asm //将现场的关键参数存入堆栈PUSH ACCPUSH BPUSH DPHPUSH DPLPUSH PSWMOV PSW,#00HPUSH AR0PUSH AR1PUSH AR2PUSH AR3PUSH AR4PUSH AR5PUSH AR6PUSH AR7#pragma endasmTaskCB[CurrentTaskID].OSTaskStackButtom = SP ; //将当前任务的堆栈位置保存,用于下次恢复该任务CurrentTaskID = Task_High(); //找出处于就绪态的最高优先级的任务SP = TaskCB[CurrentTaskID].OSTaskStackButtom;#pragma asmPOP AR7POP AR6POP AR5POP AR4POP AR3POP AR2POP AR1POP AR0POP PSWPOP DPLPOP DPHPOP ACC#pragma endasmos_exit_critical(); //离开时会把SP的当前位置的值送入PC指针,所以最高优先级的任务得以运行}3 中断调度函数void TF0_isr() interrupt 1{TH0 = 56320/256;TL0 = 56320%256;TaskCB[CurrentTaskID].OSTaskStackButtom = SP; //被中断的任务的现场已经压入堆栈,所以只需保存SPCurrentTaskID = T ask_Ready_High(); //取出就绪中优先级最高的任务SP = TaskCB[CurrentTaskID].OSTaskStackButtom;#pragma asmPOP AR7POP AR6POP AR5POP AR4POP AR3POP AR2POP AR1POP AR0POP PSWPOP DPLPOP DPHPOP BPOP ACC#pragma endasm}总结:以上三个函数就是一个简易操作系统的关键函数,大家可以自己动手实现一下。

怎样写一个简单的操作系统

怎样写一个简单的操作系统

怎样写一个简单的操作系统写一个简单的操作系统需要涉及到多个层面的知识和技能,包括计算机体系结构、汇编语言、系统编程、驱动程序开发等等。

由于篇幅限制,下面我将以几个主要步骤简要介绍一个简单的操作系统的开发过程。

1.设计操作系统的结构和功能首先,你需要明确你的操作系统要实现的功能和为哪种类型的硬件系统提供服务。

然后,你可以设计出操作系统的基本结构和模块,例如核心内核、文件系统、进程管理和用户界面等。

2.学习汇编语言和体系结构计算机操作系统的底层是依托机器语言编写的,所以你需要了解机器的体系结构并学习汇编语言编程。

汇编语言是一种直接操作硬件的语言,理解它将有助于你编写底层驱动和实现系统调用等操作系统的核心功能。

3.编写启动代码和引导扇区操作系统运行时需要加载到计算机的内存中,所以你需要编写一个引导扇区代码来启动和加载操作系统。

引导扇区是计算机启动时加载的第一个扇区,它的任务是读取操作系统的其他部分并将其加载到内存中。

4.实现内核功能在操作系统的内核中,你需要实现一些核心功能,如中断处理、进程管理、内存管理、文件系统等。

对于每个模块,你需要编写对应的代码,并确保它们能够相互协调工作。

5.开发驱动程序驱动程序是操作系统与硬件之间的桥梁,它们负责管理和控制硬件设备的工作。

你需要了解硬件的特性和接口规范,并编写对应的驱动程序来支持所需硬件设备。

6.编写用户界面和应用程序7.测试和调试在完成操作系统的开发后,你需要对其进行测试和调试,确保系统的稳定性和性能。

你可以编写一些测试用例来验证系统的功能,并对可能出现的错误进行调试和修复。

需要注意的是,编写一个完整和稳定的操作系统是一个庞大的工程,仅用1200字无法详尽地讲述所有的细节。

以上只是一个简要的介绍,如果你对操作系统开发感兴趣,建议你深入学习相关领域的知识,并参考相关书籍和教程进行进一步的学习和实践。

如何做电脑系统范文

如何做电脑系统范文

如何做电脑系统范文做电脑系统可以按照以下步骤进行:1.确定系统需求:首先要确定需要构建的电脑系统的用途、功能和性能需求。

例如,是用于游戏、办公还是科学计算等。

根据不同需求,选择适合的硬件和软件配置。

2.选择硬件组件:根据系统需求,选择合适的硬件组件,包括中央处理器(CPU)、主板、内存、存储设备、显卡、电源等。

需要注意的是确保组件之间的兼容性和性能匹配。

3.组装硬件:根据硬件组件的安装手册或者参考其他可靠的资源,进行硬件组装。

确保正确连接各个组件、插卡和接线,避免误操作导致硬件损坏。

4. 安装操作系统:选择合适的操作系统安装介质(如Windows、macOS或Linux等),按照安装步骤进行操作系统的安装。

在安装过程中,可以选择合适的分区方式、设置用户帐号等。

5.驱动程序安装:安装适配于硬件的驱动程序,以确保硬件能够正常工作。

通常这些驱动程序都有专门的安装程序,可以根据提示进行安装。

6.安装常用软件:根据个人需求,安装常用的软件,如办公软件、浏览器、音视频播放器等。

可以根据自己的使用习惯和需求进行选择和安装。

7.硬件和软件优化:根据个人需求和电脑系统的性能表现,可以对硬件和软件进行优化。

例如,清理无用的文件和程序、定期进行系统优化和更新、安装防病毒软件等。

8.数据备份和恢复:为了防止数据丢失,定期进行数据备份是很重要的。

可以使用外部硬盘、云存储等方式进行数据备份。

同时,也要了解如何进行系统恢复,以应对系统故障、损坏或病毒攻击等情况。

9.系统维护和更新:定期进行系统维护和更新,包括清理垃圾文件、删除无用程序、查杀病毒等。

同时,及时更新操作系统和应用程序的补丁和更新,确保系统的安全性和稳定性。

10.故障排除和维修:如果遇到硬件故障或者系统问题,需要进行故障排除和维修。

可以根据具体问题,参考相关的技术文档或者寻求专业人员的帮助。

总结起来,搭建电脑系统需要确定需求、选择硬件、组装、安装操作系统和驱动程序、安装软件、优化、备份和恢复数据、定期维护和更新,并且要能够进行故障排除和维修。

原创计算机操作系统有哪些

原创计算机操作系统有哪些

原创计算机操作系统有哪些引言计算机操作系统是一种系统软件,它管理和控制计算机的硬件和软件资源,为用户和应用程序提供统一的接口。

在计算机科学领域中,有许多原创的计算机操作系统。

本文将介绍几个原创的计算机操作系统,包括它们的特点和应用范围。

1. UNIXUNIX是一种原创的多用户、多任务操作系统,最早由贝尔实验室研发。

UNIX的主要特点是可移植性强、稳定性高以及充分发挥各种硬件设备的性能。

UNIX操作系统广泛应用于服务器、超级计算机以及嵌入式系统领域。

2. WindowsWindows是由微软公司开发的原创操作系统,它是世界上使用最广泛的操作系统之一。

Windows操作系统有多个版本,包括桌面版和服务器版。

Windows操作系统在用户友好性、图形用户界面和良好的兼容性方面具有很大优势,广泛应用于个人电脑和企业级应用。

3. LinuxLinux是一种由林纳斯·托瓦兹创建的原创操作系统。

它是一个开源的操作系统,具有高度的可定制性和稳定性。

Linux广泛应用于服务器、嵌入式系统、移动设备以及个人电脑。

它有许多不同的发行版,如Ubuntu、Fedora和Debian等,适用于各种使用场景。

4. macOSmacOS是由苹果公司开发的一种原创操作系统,用于其旗下的Mac电脑。

macOS操作系统在稳定性、安全性和性能方面有很大优势。

它提供了优秀的用户体验和独特的图形用户界面,广泛应用于创意、媒体和设计领域。

5. AndroidAndroid是一个开源的原创操作系统,用于移动设备,最初由Android公司开发,后来被谷歌收购。

Android操作系统是基于Linux内核的,具有良好的可定制性和广泛的应用生态系统。

它是全球最流行的移动操作系统,被广泛应用于智能手机和平板电脑等设备上。

6. iOSiOS是苹果公司专为其移动设备(如iPhone和iPad)开发的原创操作系统。

iOS操作系统具有出色的性能、安全性和用户体验。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Api
开发
所谓开发操作系统,就是想办法制作一张“含有操作系统的能够自动启动的存储介质”。
工具
1.一台已安装os的计算机
2.CPU指令参考手册
3.BIOS中断参考手册
4.GNU等系统开发工具
步骤(略去系统安装程序,即直接从介质中运行操作系统)
1.编写IPL
2.用C写系统核心组件
3.编译所有代码
4.打包成映像文件
参看
《自己动手写操作系统》
《30天自制操作系统》
需要的软件
1.虚拟机VM/VirtualBox/bochs
2.映像编辑工具:FloppyWriter,EasyBoot,UltraISO
3.汇编工具:yasm/nasm/masm
基本思路:所谓开发操作系统,就是想办法制作一张“含有操作系统的能够自动启动的存储介质”。
并且所有开发工作都是基于另一台已有的计算机。
编写只显示helloworld!的操作系统就不再讲了。
接下来写真正的IPL(启动程序装载器)
首先来说一说安装系统和运行系统的区别。
我们是开发操作系统,即没有任何已有的可启动设备,我们现在要写的IPL就是装载真正的操作系统的,虽然它现在存在于软盘中,如何自定义安装路径是以后的问题了
步骤:
1.编写boot.asm汇编源文件2.通过来自编器得到boot.bin二进制文件
3.通过映像读写工具将二进制文件写入存储介质。
//Boot.asm
org 07c00h
mov ax,cs
mov ds,ax
mov es,ax
call DispStr
jmp $
DispStr:
mov ax,BootMessage
mov bp,ax
mov cx,16
mov ax,01301h
mov bx,000ch
mov dl,0
int 10h
ret
BootMessage:db "Hello world!"
times 510-($-$$) db 0
dw 0xaa55
真正开发操作系统
前面说过,所谓开发操作系统,就是想办法制作一张“含有操作系统的能够自动启动的存储介质”。【至少也是适用于某一介质的映像文件】
中断(IDT)
PIC
FIFO缓存区
按键编码
激活鼠标控制
鼠标解读/显示鼠标动作
内存管理
叠加处理
窗口
PIT和定时器
多任务
……
分析
1.安装
设置bios启动顺序,启动安装介质
安装系统
2.运行已安装系统
bios启动到系统分区
IPL把Kenel装入内存
执行init进程
3.功能
键盘和命令行
鼠标和GUI、多任务
文件系统
5.写入映像文件到启动介质
注意我们的IPL和os是处在同一映像文件之中的。启动的时候,bios读取软盘(操作系统安装介质)的第0扇区到内存并执行,然后通过这一段程序装载真正的os。
完成IPL之后,我们就可以转用C语言开发os了
从实模式到保护模式。
保存bios的一系列信息到BOOT_INFO
一些前期准备
调色板
字体
鼠标指针
GDT
相关文档
最新文档