一步步编写操作系统 2 部署工作环境 2

1.22汇编语言编译器新贵,NASM

"新"是相对于旧来说的,老的汇编器MASM和TASM已经过时了,从名称上可以看出字母n是在m之后,其功能必然有所超越才会被大家接受。

请用一句话概括NASM优势在哪里?免费+语法简洁使人舒适+支持linux平台。这里所说的任何一个理由都是其它同类产品不具备的,敏锐的同学是不是察觉到了什么。。。哈哈,怎么给人的感觉是:其它编译器不是花钱就是语法怪异让人不爽,要么就不支持linux,看上去选择nasm是没得可选了?我就不自问自答了,反正NASM语法很接近咱们当初学的intel语法,我是用得很爽呢。这里就不再比较其优越性了,大家若感兴趣还是自行查阅吧。

同样是为了抒发一下对这位新贵的爱慕之情,简要的介绍还是要的:

NASM是一个为可移植性与模块化而设计的一个80x86的汇编器。它支持相当多的目标文件格式,包括Linux和'NetBSD/FreeBSD','a.out','ELF','COFF',微软16位的'OBJ'和'Win32'。它还可以输出纯二进制文件。它的语法设计得相当的简洁易懂,和Intel语法相似但更简单。它支持'Pentium','P6','MMX','3DNow!','SSE' and 'SSE2'指令集,

介绍完了之后,咱们讨论下为什么要用汇编语言开发系统呢?就目前来看,无论再怎么要求开发过程简单,也避免不了用汇编语言,尤其是开发操作系统这类底层软件。越底层的软件就越要与硬件直接打交道,这就要求在语言层面上给开发人员提供访问端口寄存器的方法。显然,目前的高级语言都做不到这一点,像C语言这类偏底层的语言都不支持修改寄存器,用汇编语言则是不可避免的事了。

包括我在内的很多同学一听要用汇编了,都有一种小小的恐惧感,认为这是一种不好掌握的东西(我没有称之为语言而是称之为东西,是因为曾经有个女同学都不知道汇编是什么),而且程序编写起来特别麻烦,要考虑的东西太多了,代码逻辑写起来不够直接,似乎总是在迂回…以至于我们经常被汇编语言“搞定”。我个人的感觉是,当我熟悉了汇编语言后,甚至觉得有一点亲切呢,当然了,任何陌生的事物经过熟悉的过程后都会变得有亲切感,关键是咱们得扛到对它熟悉为止,不能让心里的畏惧战胜自己。用汇编语言和cpu直接对话,想想就有点小兴奋呢。

不过好在我们需要用汇编的地方只是一些硬件访问、中断调用、端口读写、线程切换之类(怎么看上去好多…),我们可以写出一些通用的代码来减少汇编的枯燥。总之,只有不得不用时我们才会向汇编语言屈服(其实也没那么悲壮啦^_^)。

1.3操作系统的宿主环境。

操作系统虽然是软件,但其可不是一般的软件。我们平时写出来的程序都是基于操作系统之上,程序本身是由操作支持的,开发人员只要专注于自己这块业务逻辑就好了,很多复杂的问题是不需要开发人员考虑的。而操作系统这个软件靠谁来支持呢?是靠你自己…这是用一身老骨头扛出来的,现在明白为什么linux之父linus那么强壮了吧,不是谁都能随随便便成功的,所以,写操作系统那可是要有个好身板,要多锻炼身体才能熬得住,看完这章赶紧出去跑步吧^_^,玩笑玩笑。如果一般应用软件能称得上鱼香肉丝的话,那操作系统得相当于龙虾鲍鱼,这可是硬菜,不出去跑个几公里都啃不下来呢。哈哈,其实也没那么夸张,现在有很多计算机大牛写了好多开源软件帮助我们调试操作系统。话说,自从有了虚拟机,我再也用不着锻炼身体了,每次出现bug时不需要重启真机了,只需要重启虚拟机就好。

1.31什么是虚拟机

虚拟机在当今已经不是陌生的概念了,要是在几年前,我还得搬出个概念放在这给大家看看。个人觉得,要解释一个东西是什么,不如直接解释这个东西解决了哪些问题,这样大家自然就从本质上真正理解了它是什么。

没有虚拟机的时候,一台机器只有交给一个用户使用,而且一个人根本无法将这台机器的性能完全发挥出来,造成了极大的浪费不算,还有很多人正等着用呢。于是出现了虚拟机的需求:将一台物理机通过软件逻辑分割成几个虚拟的计算机,每个计算机之间互不干涉,即使一台虚拟计算机崩溃了也只是影响了它自身,不会让整个物理机瘫痪,安全可靠,可以自由测试而不必担心损伤物理机。这不仅在硬件投入上节省了大笔开销,还让更多的人同时使用了计算机资源。

现在很多厂商都在搞虚拟化,如域名的虚拟空间,还有如火如荼的阿里云、这是虚拟机的应用。虚拟机就是用软件来模拟硬件。虚拟机只是一个普通的进程,该进程模拟了硬件资源,在虚拟机中运行的程序其所做出的任何行为都先被虚拟机检查,由虚拟机分析后,代为向操作系统申请。

上面对虚拟机的解释是主观上的理解,我可不愿意说概念了,因为概念是对事物的抽象。抽象就意味着不易理解,容易把简单的事复杂化。我举个简单的例子来说明什么是虚拟机。

假设V是虚拟机进程,U是普通的用户程序。程序运行起来才叫进程,进程是要有pcb的,程序老实的放在磁盘上不动,那可不叫进程。虚拟机跑起来后,就形成了进程V,在它被调度期间,cpu执行的是此进程中的指令。让虚拟机执行U程序,有如解释器进程在解析脚本文件一样,此时的U程序是被当作参数传给了V程序,U程序就像文章一样由V进程阅读。还是拿解释型语言举例子,比如python语言,其脚本从来就没有直接作用于cpu上,而是其字节码交给了python解释器,这个解释器将通过python虚拟机来代为完成python脚本中的代码行为。

让我们说得再具体一点,比如在linux平台上,写了一个python脚本文件file.py,其中有这样一句代码:fh=open(“hello.txt”,'w'),这是在用可写的方式打开hello.txt文件,将其句柄返回给fh。自此操作文件句柄fh,便是操作了文件hello.txt。python虚拟机是一个进程,它是直接作用在硬件之上的。当它分析python脚本file.py中上面的那句代码时,发现有关键字open(当然关键字得是python解释器支持的,此解释器为它们而生才行),于是执行了open(“hello.txt”,'w')函数,其内部是封装的系统调用(系统调用这方面内容以后咱们在自己的系统中细说。),通过系统调用,python虚拟机替python脚本完成了打开hello.txt的工作。

选择虚拟机的一个原因;

  1. 1.运行方便。

它在宿主系统上只是一个进程,在宿主系统如linux眼里,它与一般的用户进程是没任何区别的。进程咱们都可以随意启动,虚拟机也是一样的,在这一点保证了使用上的方便性。

  1. 2.保护计算机

如果您有一般的软件开发经验,就会了解,很少有程序能一下就编译通过。当然,如果您的编程经验无比丰富,代码无比规范,无比了解编译器,确实不需要虚拟机来调试了,编写完成后直接就能运行。以上我用了三个“无比”,打造了似乎没有人能达到这种水平的假象,其实是有的。不知道大家听说过Jon Skeet大神没有,他是谷歌软件工程师,《c# In Depth》就是他的神来之笔。看看别人对他是怎样评价的,看完之后您就知道我说的并不夸张了:

“他并不需要调试器,只要他盯着代码看几眼,bug自己就跑出来了”。

“他根本不需要什么编程规范,他的代码就是规范”

还有还有,这个最威武霸气…

“如果他的代码没有通过编译,编译器厂商就会道歉”

为了表示对大神的崇拜,我刻意把上面空出一行。每次看到第三个评论,我的血液中就会流淌一些让我振奋的东西,我深知自己还差得很远,以至于每次贪睡的时候,心灵深处总会传来一句充满爱的关怀:还特么不起来看书。

如果咱们都不能保证写出这样质量出色的代码,咱们还是老老实实的装虚拟机吧(土豪随意)。因为如果要把操作系统装在真机器上,每次调试的时候,无论代码是否崩溃,都是要重启计算机的。为了保护咱们的爱机,虚拟机必装不可。不知道你们心疼电脑吗,反正我要是一天开电脑三次以上,我就会很自责,不知道这种性格和水瓶座有没有关系。

说了虚拟机的好处,那咱们有哪些虚拟机可用呢。一般的有qemu、bochs、virtualBox、xen和vmware等。

我们要用的就是bochs.选择bochs的理由如下:

  1. 开源,有感于作者的奉献精神,我们要支持作者(当然qemu也是)。
  2. 支持调试,不仅原生支持调试,还支持gdb远程调试(当然qemu也是)。
  3. 我只会这个。

对于虚拟机的选择,能工作能调试够用就行了,遇到问题时再寻求新方案也不迟,毕竟咱们的重点是后面的写操作系统,学太多的虚拟机也没啥用。

介绍一下bochs吧,怎么也得让大家有个初步的印象。下面的内容是我从维基百科翻译过来的,其实就是从繁体中文翻译成了简体中文^_^,而且只有几个繁体字,哈哈。

Bochs(发音:box)是一个以LGPL许可证发放的开放源代码的x86、x86-64IBM PC兼容机模拟器和调试工具。它支持处理器(包括保护模式),内存,硬盘,显示器,以太网,BIOS,IBM PC兼容机的常见硬件外设的仿真。

许多客户操作系统能通过该仿真器运行,包括DOS,Microsoft Windows的一些版本,AmigaOS 4,BSD,Linux,MorphOS,Xenix和Rhapsody (Mac OS X的前身)。Bochs能在许多主机操作系统运行,例如Windows、Windows Mobile、 Linux、Mac OS X、iOS和PlayStation 2。

Bochs主要用于操作系统开发(当一个模拟操作系统崩溃,它不崩溃主机操作系统,所以可以调试仿真操作系统)和在主机操作系统运行其他来宾操作系统。它也可以用来运行不兼容的旧的软件(如电脑游戏)。

它的优点在于能够模拟跟主机不同的机种,例如在Sparc系统里模拟x86,但缺点是它的速度却慢得多。

介绍完了,不知道您看了吗,不看也行,反正以后咱们实际应用时还会细说的。

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

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

相关文章

Apollo进阶课程 ⑧ | 高精地图的格式规范

目录 高精地图规范格式分类 NDS格式规范 Open DRIVE格式规范 原文链接:Apollo进阶课程 ⑧ | 高精地图的格式规范 上周阿波君为大家详细介绍了「Apollo进阶课程⑦高精地图的采集与生产」。 高精地图采集过程中需要用到的传感器有GPS、IMU和轮速计。 无论是哪种传感…

Casbin初识

Casbin中文文档 环境 go:1.15casbin:v2mysql:5.7 代码 package mycasbinimport ("fmt""github.com/casbin/casbin/v2""github.com/casbin/casbin/v2/model"gormAdapter "github.com/casbin/gorm-adapter/v3""gorm.io/driver/…

Apollo进阶课程 ⑨ | 业界的高精地图产品

目录 高精地图的格式规范-OpenDRIVE HERE HD LIve Map HERE HD LIVE MAP-MAP COLLECTION HERE HD Live Map-Crowdsourced Update HERE HD Live Map-Learning HERE HD Live Map-Product MobileEye MobileEye-Pillars of Autonomous Driving MobileEye-Map as back-up s…

【 HDU - 3062】Party(2-sat)

题干: 有n对夫妻被邀请参加一个聚会,因为场地的问题,每对夫妻中只有1人可以列席。在2n 个人中,某些人之间有着很大的矛盾(当然夫妻之间是没有矛盾的),有矛盾的2个人是不会同时出现在聚会上的。…

微博API接入初识【cxn专用】

微博API官方文档 本文介绍 本文环境成为微博开发者通过鉴权获取单条微博内容 环境 WindowsPython 3.8.10sinaweibopy3-1.3 (pip3 install sinaweibopy3)requests 成为微博开发者 微博官方新手教程 (cxn可以跳过,用博主的即可…

一步步编写操作系统3 部署工作环境 3

盗梦空间般的开发环境,虚拟机中再装个虚拟机。 很多同学电脑的系统都是windows,个别的是mac os,还有的同学用的是linux。做为一名Linux粉丝,我的开发环境必然建立在Linux平台下。那对于其它系统的用户,你们可以自己部署相应平台的…

Apollo进阶课程⑩ | Apollo地图采集方案

目录 TomTom的高精地图和RoadDNA APOLLO地图采集流程 基站搭建 Apollo地图采集硬件方案 地图数据服务平台 原文链接:进阶课程⑩ | Apollo地图采集方案 上周阿波君为大家详细介绍了「Apollo进阶课程⑨业界的高精地图产品」。 出现在课程中的业界制作高精地图的厂…

【HDU - 2665】Kth number(区间第K大,主席树,模板)

题干&#xff1a; Give you a sequence and ask you the kth big number of a inteval. Input The first line is the number of the test cases. For each test case, the first line contain two integer n and m (n, m < 100000), indicates the number of integers …

一步步编写操作系统4 安装x86虚拟机 bochs

Bochs下载安装 在完成了linux发行版的安装后&#xff0c;现在到了安装bochs的环节&#xff0c;这是我们的操作系统最终的宿主机。 由于我的工作是运维&#xff0c;所以练就了任何软件包都要从源码安装的“陋习”&#xff0c;从来不信任任何软件包。因为只有从源码安装的版本才…

用Python写Shell

环境 ubuntu: 18.04python: 3.6.9xnosh: 0.11.0 下载 pip3 install xonsh 简单使用 # 开启xonsh xonsh # 下载小工具&#xff08;也可不下&#xff09;:高亮提示、智能补全 xpip install -U xonsh[full]# 随便下载一个包 pip3 install moneyimport money m1 money.Money(…

Apollo进阶课程⑪ | Apollo地图生产技术

目录 高精地图生产流程 数据采集 数据处理 元素识别 人工验证 全自动数据融合加工 基于深度学习的地图要素识别 人工验证生产 地图成果 原文链接&#xff1a;进阶课程⑪ | Apollo地图生产技术 高精地图是自动驾驶汽车的「千里眼」和「透视镜」。 摄像头、激光雷达、传…

一步步编写操作系统 5 配置bochs

配置bochs 安装完成后该配置bochs了&#xff0c;它是通过配置文件完成的。要说这个配置文件&#xff0c;它有点类似bios。我们在开机时按下的del、或者esc、或者F2键&#xff0c;各个机型进入bios方式有所不同&#xff0c;但差不多就那几种方式。Bios中会显示各种硬件的信息&a…

【HDU - 4417】Super Mario(查询区间小于K的数的个数,主席树)

题干&#xff1a; Mario is world-famous plumber. His “burly” figure and amazing jumping ability reminded in our memory. Now the poor princess is in trouble again and Mario needs to save his lover. We regard the road to the boss’s castle as a line (the l…

Jenkins初识

Jenkins是啥 官方文档 Jenkins是一款开源 CI&CD 软件&#xff0c;用于自动化各种任务&#xff0c;包括构建、测试和部署软件。 Jenkins 支持各种运行方式&#xff0c;可通过系统包、Docker 或者通过一个独立的 Java 程序。CI(Continuous integration&#xff0c;持续集成…

Apollo进阶课程 ⑫ | Apollo高精地图

目录 Apollo高精地图表征元素 Apollo车道模型 UTM坐标系 84坐标系 Track坐标系 Apollo opDRIVE规范 HDMAP引擎 高精地图在政策方面的挑战 原文链接&#xff1a;进阶课程 ⑫ | Apollo高精地图 高精地图与普通地图不同&#xff0c;高精地图主要服务于自动驾驶车辆&#…

一步步编写操作系统 6 启动bochs

运行bochs 终于安装完成了&#xff0c;虽然这过程中有可能会出现各种各样的问题&#xff0c;但还是值得庆祝的&#xff0c;对Linux不熟的朋友第一次就搞定了这么个硬货&#xff0c;我理解您此时的喜大普奔之情&#xff0c;哈哈&#xff0c;给大家点赞。顺便说一句&#xff0c;…

Apollo技能图谱2.0焕新发布 更新7大能力91个知识点

阿波君 Apollo开发者社区 2月26日 过去的一年里&#xff0c;Apollo发展迅速&#xff0c;向智能交通不断渗透。从2.5到3.5版本&#xff0c;无论控制系统的升级、高清地图的泛用和车路协同技术服务的推进&#xff0c;无不在推动自动驾驶技术从开源向开辟商业化新格局位移。 在开…

【HDU - 4348】To the moon(主席树,区间更新)

题干&#xff1a; Background To The Moon is a independent game released in November 2011, it is a role-playing adventure game powered by RPG Maker. The premise of To The Moon is based around a technology that allows us to permanently reconstruct the memo…

一步步编写操作系统 07 开机启动bios

bios是如何苏醒的 bios其实一直睡在某个地方&#xff0c;直到被唤醒……前面热火朝天的说了bios的功能和内存布局&#xff0c;似乎还没说到正题上&#xff0c;bios是如何启动的呢。因为bios是计算机上第一个运行的软件&#xff0c;所以它不可能自己加载自己&#xff0c;由此可…

0.《沉浸式线性代数》:前言

今天介绍一本新书《immersive linear algebra》&#xff1a;世界上第一本具有完全交互式图形的线性代数书。本书目前已经更新完毕。 作者是&#xff1a;JacobStrm&#xff0c;Kallestrm和Tomas Akenine-Mller&#xff0c;全文共包含11个部分&#xff1a;前言和10个正文章节。内…