打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
一步步编写操作系统 42 用c语言编写内核(之前我们一直用汇编语言直接与机器对话高级语文编译器和操作系统达成了诸多约定并提供了很多便利使代码编译成可执行文件)
   【【郑大刚子】一步步编写操作系统 42 用c语言编写内核】https://toutiao.com/group/6707882089611526670/?app=explore_article&timestamp=1561815482&req_id=2019062921380201001802415317985B0&group_id=6707882089611526670&tt_from=copy_link&utm_source=copy_link&utm_medium=toutiao_ios&utm_campaign=client_share 


     (之前我们一直用汇编语言直接与机器对话高级语文编译器和操作系统达成了诸多约定并提供了很多便利使代码编译成可执行文件)




在这之前,我们一直用汇编语言直接与机器对话,如果大家不知道这个世界上有高级语言的话,我想大家也不会觉得写汇编代码的过程很辛苦,哈哈,幸福确实是比较出来的。相对于汇编语言,用c 语言写内核是非常爽的事,马上我们就要步入内核实践中啦,所以现在和大伙儿聊聊c语言写内核的体会。

通常,我们写的代码都是直接编译成可执行文件,那是因为我们是在写用户程序,操作系统为咱们提供了很多便利,所以编译和链接一气呵成,不需要咱们单独再指定什么,编译器也和操作系统达成了诸多约定,默默在后面为咱们做了大量的工作,比如程序编译出来的虚拟起始地址通常是0x8048000左右。在有操作系统为咱们撑腰时,我们确实不需要关注这些与业务逻辑无关的东西,只要专注于自己的工作就好啦。可如今,我们要用c语言写脱离操作系统的程序,这回咱们就不能再这么省心了,必须要自己指定程序的入口地址。

另外,我们之前开发用户程序,有大量的标准库可以用,标准库一般是系统调用的封装,所以,表面上通过标准库访问系统资源,本质上是用系统调用来实现的。当然如果大伙儿愿意,在用户程序中也可以直接调用“系统调用”,在功能上这是允许的,因为中断描述符表中系统调用对应的中断描述符,它的权限是用户程序可以访问的,否则就无法实现系统调用啦。就拿linux来说,它的系统调用是先往eax寄存器中写入系统调用号,然后通过0x80中断来实现的。我们可以用汇编语言写一个系统调用的代码,用c 语言去调用它或者干脆直接在c语言中内嵌汇编代码。无论是采用哪种形式,汇编语言的部分都是诸如先用mov eax,xx的形式在eax寄存器中指定系统调用的功能号,然后紧跟着使用中断指令int 0x80来引发0x80中断,从而触发0x80对应的中断处理程序,由该中断处理程序根据eax的内容去执行相应的系统调用。虽然可以直接调用“系统调用”的功能,但不推荐这样做,毕竟标准库中为咱们考虑了很多优化策略,通过标准库访问系统资源比直接用系统调用效率更高。也许有同学不信这个邪,非要整出个效率更高的库,当然这是非常可能的,可是标准库考虑的不仅是效率,还有很多兼容规范在里面,所以它可能会为了规范而牺牲效率。除非为了某些个性化的应用咱们才去写自己的库,否则还是不要企图颠覆标准库啦。标准库可以说是由世界上成千上万的超级大脑完成的,以咱们个人之力去和全世界的极客拼脑细胞,这是不科学的,不如把精力放在其它方面,好啦,我知道话又说多啦^_^。

对于系统调用这些平时我们认为理所当然的功能,如今已经成为了咱们的奢望。首先咱们本身是在写操作系统而不是用户程序,操作系统不应该再依赖于其它系统的功能,所以不能在咱们的程序(操作系统)中再调用宿主操作系统的系统调用功能。其次,同一时刻只能有一个操作系统在运行,咱们即使调用了0x80中断,中断描述符表里0x80对应的中断处理程序是咱们提供的,再也不存在宿主系统的代码,相当于咱们在调用自己的中断处理程序,而此时我们可能尚未准备好相应的中断处理程序。如果系统调用不能用,也更不能用c标准库啦,所以只能用c语言原生支持的语法结构。不过以后我们会在实现内核的过程中建立咱们自己的库,库中会通过咱们自己的系统调用实现某些功能。

以上多说了几句有关系统调用的实现,其实我是怕无法满足好奇心强的同学,很担心仅仅一句“在脱离操作系统下写程序不能使用系统调用”让更多的同学感到不解。如果我解释得还不够,咱们以后会在实现系统调用的时候有所了解。

【再续】

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
posix是什么都不知道,还好意思说你懂Linux?
最基础的编程语言有哪些
鸿蒙系统用什么语言开发?鸿蒙OS开发平台编程用什么软件?
这篇文章让你明白华为最新研发的鸿蒙系统是什么?
CH08 系统软件
嵌入式Linux系统及如何开发自己的嵌入式Linux系统
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服