时间都去哪儿了

老帕的“花儿为什么这样红”,三分钟引起六次欢呼,却败给了张碧晨。试想一下,如果是人气更高的陈冰,即使唱得和张碧晨一模一样,可能仍然不敌老帕,为什么张碧晨就能取胜呢?有这么个笑话:一人弹琴无人听,但一老妇人听得却潸然泪下。原来她的亡夫是弹棉花的!这虽是个笑话,却一语道破玄机。歌声动人,除了唱功,还有感情因素在里面。假如老帕的”花儿为什么这样红“是 1 分, 那么,张碧晨的父女情为 1 分, ”时间都去哪儿了“为 1 分。2 : 1, 张碧晨胜出也就理所当然了。

shell 的实现

在自己的 os 中运行自己的程序 echo,实现起来,比想象的要简单一些。这得益于文件系统的支持。准备工作,参见 x01.os.7。源代码,可到 x01.Lab.Download 中下载 x01.os.13.tar.gz。解压后由终端进入,make 后 bochs 可看到如下界面:

看来,echo 程序运行的还不错。首先,来看看 echo 程序,代码如下:

 #include "kstd.h"

 int main(int argc, char* argv[]) {
int i;
for (i = ; i < argc; i++) {
printf("%s%s", i == ? "" : " ", argv[i]);
}
printf("\n");
return ;
}

非常简单,但这个 main 函数已经不是我们平时看到的那个了。它要在我们自己的 os 中运行,还需要 start.s 的帮忙,代码如下:

 extern main
extern exit bits [section .text]
global _start _start:
push eax
push ecx
call main
push eax
call exit
hlt

这个 _start 是关键,与 kernnel.s 中的一致。那么,怎么在我们自己的 os 中运行呢?在 mm.c => MM_Exec() 函数中,有这么一句:

g_ProcTable[src].Regs.eip = elf_hdr->e_entry;

echo 的 entry point,正是由这句完成交接。简单而言,就是 fork 一个 Init 的子进程,然后在 shell 中替换为我们自己的程序如 echo。

学习操作系统,如果脑海里有个内存布局,将会事半功倍。为了计算 10 进制到 16 进制的转换,顺手写了个 hex 程序。但要把它运行在自己的 os 中,却又有许多工作要做,作罢。

一个完善的 os,非一人之力,非一时之功。除了大家共同努力,难道还有别的办法吗?

x01.os.14: 时间都去哪儿了的更多相关文章

  1. x01.os.13: 文件系统

    停了两天电,忽然得空闲.找来破吉他,已然不成弦.           丁丁当当敲,敲到电来到.为把时间捡,熬夜三四点. 从我的置顶随笔 x01.Lab.Download 中下载 x01.os.12.t ...

  2. x01.os.9: 进程切换

    进入内核后,当然不能无所事事.先创建三个进程,分别打印 A,B,C.虽然只是简单的打印,但却是一切扩展的基础,不可等闲视之. 进程切换,涉及一系列的寄存器需要保护,于是,就有了 ProcessStac ...

  3. x01.os.8: 加载内核

    在 x01.os.7 中,借助 freedos,学习了保护模式.但操作系统必须完成引导:boot, 加载内核:loader,kernel,进而管理process,memory,file等. 引导比较简 ...

  4. x01.os.7: 傻子一样的等

    傻子一样的等 昨日出差,办完事后,下午 2:30,准备进长途汽车站买票回家,被一人拦住,说可以带我进去,车马上就要开了,买票来不及.我以为是汽车司机,就跟了进去.进去后,他打了个电话,说 3:30 车 ...

  5. x01.os.20: compile linux-0.11 on the ubuntu

    为什么学习 linux 正如不能依靠美国的 GPS 为我们的导弹指示目标一样,很难想像用运行 windows 的电脑去同美国进行信息战.而朝鲜的网络崩溃,再次警示国人,信息战.网络战离我们并不遥远.l ...

  6. x01.os.18: MBR

    硬盘不同于软盘,它是要分区的.这时,mbr(master boot record)便不可少了.安装 os 硬盘的第一扇区,开始有一小段不多于 446 字节的程序,然后是分区表 512-446-2 字节 ...

  7. x01.os.16: 添加功能

    准备工作  1.确保是 win xp,如是 win 8,运行 nasm 需按提示同意安装组件.  2.确保 src 和 z_tools 在同一目录下,nasm 已包含在 z_tools 文件夹中.  ...

  8. x01.os.12: 在 windows 中写 OS

    在 windows 中写操作系统,需要一系列的辅助工具.在此,要感谢川谷秀实!所有工具,都在 z_tools 文件夹中.有了大师的帮助,不妨也来尝试在 windows 中写一把 OS. 源代码及工具可 ...

  9. x01.os.19: linux 0.0

    linux 0.0 是一个丢失的版本,但赵炯老师又在 linux 0.11 的基础上,使它起死回生.www.oldlinux.org 有大量资源可供下载,值得一看. 1.要编译运行,首先需安装:sud ...

随机推荐

  1. 面试问题整理笔记系列 一 Java线程类

    1.sleep()和wait()区别 sleep() 方法:线程主动放弃CPU,使得线程在指定的时间内进入阻塞状态,不能得到CPU 时间,指定的时间一过,线程重新进入可执行状态.典型地,sleep() ...

  2. mongodb-java-driver基本用法

    1.先下载mongodb-java-driver 目前最新版本是2.9.3 2.下面是基本的CRUD示例代码: package com.cnblogs.yjmyzz.cache.test; impor ...

  3. [AngularJS] 使用AngularAMD动态加载Service

    [AngularJS] 使用AngularAMD动态加载Service 前言 「使用AngularAMD动态加载Controller」:这篇文章里介绍如何使用AngularAMD来动态加载Contro ...

  4. 用Phaser来制作一个html5游戏——flappy bird (二)

    在上一篇教程中我们完成了boot.preload.menu这三个state的制作,下面我们就要进入本游戏最核心的一个state的制作了.play这个state的代码比较多,我不会一一进行说明,只会把一 ...

  5. [deviceone开发]-仿微信主界面示例

    一.简介 模仿微信主界面的4个页面,作为一个很常规应用的框架模板,值得参考.另外包括简单的菜单,其中搜索还支持语音录入,不过你需要增加飞讯的语音组件重新打包,才能看到效果 二.效果图 三.相关下载 h ...

  6. [deviceone开发]-cnodejs论坛移动端App

    一. 简介 这个App是利用cnodejs.net的API来实现论坛的移动端,使用了deviceone的官方的js库(github.com/do-js). 从而使代码非常简洁,便于阅读和参考,值得推荐 ...

  7. SAP用户权限解剖及自修改

    通常BASIS会使用PFCG做权限管理,时你保存时会产生一个系统外的profile name,记得SU01时用户有profile 和role两栏位吗?它们的关系如何呢? 首先明白几个概念.1.acti ...

  8. 升级tomcat7的运行日志框架到log4j2,可以打进kafka

    为了让web application能随意使用logging组件而不受web容器自身的影响,从tomcat 6.0开始,tomact默认使用的是java.util.logging framework来 ...

  9. SharePoint Online 创建门户网站系列之图片滚动

    前 言 创建SharePoint Online栏目我们之前已经介绍过了,具体就是内容编辑器方式.自带WebPart方式和JavaScript读取后台数据前台做展示的三种: 但是,对于复杂的展示来说,这 ...

  10. JS魔法堂:jsDeferred源码剖析

    一.前言 最近在研究Promises/A+规范及实现,而Promise/A+规范的制定则很大程度地参考了由日本geek cho45发起的jsDeferred项目(<JavaScript框架设计& ...