不用操作系统写HelloWorld

原因是前些天在杨老师的讨论课上杨老师提出了这个问题:没有操作系统的光板机器,要写一个HelloWorld怎么办?有一个哥们提出了可以用bios的中断写,我也记得于渊的《自己动手写操作系统》一书中提到过,但是忘了具体要怎么办。回到宿舍找到于渊的书,看到了如下的代码,并按书上的方法实验了一下,运行成功了。代码如下:


做一个简单的说明,利用的原理就是bios的10号中断,至于这个10号中断怎么用,可以参考网上手册,还有好多的资料,主要说的是使用10号中断前不同寄存器的含义,比如cx放的是显示字符的长度,ax中是字符串的起始地址等等。

完成以后用nasm 汇编器进行编译 nasm -o boot.bin boot.asm

然后用dd命令放到一个虚拟软驱的镜象中去 dd if=boot.bin of=myimage.img

选一个合适的虚拟机,新建一个机器,用这个虚拟光驱启动,就会在启动界面上显示“Hello” 这几个字符,但是此后就会进入死循环。


这个程序的实质是做了一个512字节的引导扇区,然后放到光驱的第0扇区。在运行的时候什么也不做,只打印一个字符串而已。


通过这个程序,我理解了bios中断的含义,引导扇区的具体含义,对系统引导的第一步有了个大概的理解。但是同时有几个疑问:

第一,是不是在操作系统中所有的最底层操作最后都要转化成bios中断来实现?如果是那样的话,从应用程序到bios中断,确实有一个相当长的路要走。

这个问题我已经有答案了,答案是否。因为在Linux中会用自己的中断代替所有的bios中断,因为bios中断存在一些并发性以及性能方面的弱点,因此只能另写了一套中断放在内存中,所以我们平常看到应用程序中也是要走一个相当长的由上向下的过程,只不过这个过程终点不是bios中断,而是覆写的新中断,但起的作用是一样的,只是功能更强了。


第二,如果不是从软盘启动,而是从硬盘启动,这个过程是怎样的?

现在这个问题我也有答案了,只是想先卖个关子,后面讲到的时候会涉及的。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
操作系统在执行helloworld程序时,首先会接收到用户的请求。用户可以通过命令行或鼠标双击helloworld程序来告知操作系统要执行该程序。操作系统会根据文件名在磁盘上找到该程序的相关信息,并检查该文件是否为可执行文件。 一旦确认该文件为可执行文件,操作系统会根据程序首部信息确定代码和数据在可执行文件中的位置,并计算出对应的磁盘块地址。为了执行这个程序,操作系统会创建一个新的进程,并将helloworld可执行文件的格式映射到该进程,表示由该进程来执行这个helloworld程序。 接下来,操作系统会将控制权交给调度程序。假设调度程序选中了helloworld程序,操作系统会为helloworld程序设置CPU上下文环境,并跳到程序的开始处准备执行程序。 当执行helloworld程序的第一条指令时,可能会发生缺页异常。这是因为程序在执行之前需要将代码和数据读入内存,而helloworld的代码和数据还未被入内存,所以会触发硬件机制中的缺页异常,并将控制权交回给操作系统操作系统的内存管理模块会分配一页空闲的物理内存,并根据之前计算出的磁盘块地址,将helloworld程序的代码从磁盘读入内存。然后,操作系统会继续执行helloworld程序。 接下来,helloworld程序执行puts函数,该函数是一个系统调用,用于在显示器上显示字符串。由于puts函数是一个系统调用,控制权又回到了操作系统操作系统会找到要将字符串送往的显示设备,通常该设备由一个进程控制。操作系统会将要的字符串送给该进程处理。控制设备的进程会告诉窗口系统要显示字符串,并将字符串转换为像素,然后将像素入设备的存储映像区。视频硬件将像素转换成显示器可以接收的一组控制数据信号,最后显示器激发液晶屏,我们就可以在屏幕上看到字符串。 综上所述,操作系统在执行helloworld程序时,根据用户的请求找到程序相关信息,创建新进程并将程序映射到该进程,为程序设置CPU上下文环境,处理缺页异常,并将字符串显示在屏幕上。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值