x01.os.14: 时间都去哪儿了
时间都去哪儿了
老帕的“花儿为什么这样红”,三分钟引起六次欢呼,却败给了张碧晨。试想一下,如果是人气更高的陈冰,即使唱得和张碧晨一模一样,可能仍然不敌老帕,为什么张碧晨就能取胜呢?有这么个笑话:一人弹琴无人听,但一老妇人听得却潸然泪下。原来她的亡夫是弹棉花的!这虽是个笑话,却一语道破玄机。歌声动人,除了唱功,还有感情因素在里面。假如老帕的”花儿为什么这样红“是 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: 时间都去哪儿了的更多相关文章
- x01.os.13: 文件系统
停了两天电,忽然得空闲.找来破吉他,已然不成弦. 丁丁当当敲,敲到电来到.为把时间捡,熬夜三四点. 从我的置顶随笔 x01.Lab.Download 中下载 x01.os.12.t ...
- x01.os.9: 进程切换
进入内核后,当然不能无所事事.先创建三个进程,分别打印 A,B,C.虽然只是简单的打印,但却是一切扩展的基础,不可等闲视之. 进程切换,涉及一系列的寄存器需要保护,于是,就有了 ProcessStac ...
- x01.os.8: 加载内核
在 x01.os.7 中,借助 freedos,学习了保护模式.但操作系统必须完成引导:boot, 加载内核:loader,kernel,进而管理process,memory,file等. 引导比较简 ...
- x01.os.7: 傻子一样的等
傻子一样的等 昨日出差,办完事后,下午 2:30,准备进长途汽车站买票回家,被一人拦住,说可以带我进去,车马上就要开了,买票来不及.我以为是汽车司机,就跟了进去.进去后,他打了个电话,说 3:30 车 ...
- x01.os.20: compile linux-0.11 on the ubuntu
为什么学习 linux 正如不能依靠美国的 GPS 为我们的导弹指示目标一样,很难想像用运行 windows 的电脑去同美国进行信息战.而朝鲜的网络崩溃,再次警示国人,信息战.网络战离我们并不遥远.l ...
- x01.os.18: MBR
硬盘不同于软盘,它是要分区的.这时,mbr(master boot record)便不可少了.安装 os 硬盘的第一扇区,开始有一小段不多于 446 字节的程序,然后是分区表 512-446-2 字节 ...
- x01.os.16: 添加功能
准备工作 1.确保是 win xp,如是 win 8,运行 nasm 需按提示同意安装组件. 2.确保 src 和 z_tools 在同一目录下,nasm 已包含在 z_tools 文件夹中. ...
- x01.os.12: 在 windows 中写 OS
在 windows 中写操作系统,需要一系列的辅助工具.在此,要感谢川谷秀实!所有工具,都在 z_tools 文件夹中.有了大师的帮助,不妨也来尝试在 windows 中写一把 OS. 源代码及工具可 ...
- x01.os.19: linux 0.0
linux 0.0 是一个丢失的版本,但赵炯老师又在 linux 0.11 的基础上,使它起死回生.www.oldlinux.org 有大量资源可供下载,值得一看. 1.要编译运行,首先需安装:sud ...
随机推荐
- 泛函编程(35)-泛函Stream IO:IO处理过程-IO Process
IO处理可以说是计算机技术的核心.不是吗?使用计算机的目的就是希望它对输入数据进行运算后向我们输出计算结果.所谓Stream IO简单来说就是对一串按序相同类型的输入数据进行处理后输出计算结果.输入数 ...
- Spark集群 + Akka + Kafka + Scala 开发(2) : 开发一个Spark应用
前言 在Spark集群 + Akka + Kafka + Scala 开发(1) : 配置开发环境,我们已经部署好了一个Spark的开发环境. 本文的目标是写一个Spark应用,并可以在集群中测试. ...
- GJM : 基于Actor模式的c#网络游戏服务器的实现和Unity游戏客户端的连接 [转载]
感谢您的阅读.喜欢的.有用的就请大哥大嫂们高抬贵手"推荐一下"吧!你的精神支持是博主强大的写作动力以及转载收藏动力.欢迎转载! 版权声明:本文原创发表于 [请点击连接前往] ,未经 ...
- 客观评价C#的优点和缺点
对于C#,coder中可以分为2类:一类是C#死忠,对它赞赏到极点:另一类刚好相反,对它极度排斥. 本文将以全面.客观的方式评价这门语言,特别是语法方面. 其实很多人评价一门语言是带着一种感情色彩的. ...
- 【今日推荐】移动 Web 开发的10个最佳 JavaScript 框架
选择正确的 JavaScript 框架,对于开发移动 Web 应用程序是至关重要的,也是移动应用程序开发的一项重要任务.开发人员可以使用框架实现的功能高效地达到他们的开发目标.这些预实现的组件采用优秀 ...
- Shapely中的几何图形操作
Geometric Objects object.area Returns the area (float) of the object. object.bounds Returns a (minx, ...
- openlayers方法总结
openlayers中的一些方法:OpenLayers.Layer::initialize:创建层Div,注册事件:destroy:注销:clone:克隆当前层:setName:设置层name:add ...
- linux集群运维工具:pssh
由于需要安装hadoop集群,有10台机器需要安装,一开始打算用SCP复制,后来觉得不可接受(实际现场可能数倍的机器集群,就是10台也不想干).后来在网上找了,发现了clustershell和pssh ...
- BT5 & Kali Linux 网卡选择
[需要注意的几点]: 芯片类型 知否支持外接天线 网卡固件版本 支持的无线协议 网卡功率 BT5/Kali RC3支持网卡: RTL8187, R8187 (Realtek) 功率高.兼容性好 Ra ...
- Android属性之build.prop生成过程分析
Android的build.prop文件是在Android编译时刻收集的各种property(LCD density/语言/编译时间, etc.),编译完成之后,文件生成在out/target/pro ...