一步步编写操作系统 66 浅析c库函数与系统调用1
本來說好的接下來的工作是要去“豐滿”我們的內核,可咱們這種一步一回頭的學習方式還得繼續啊。其實我了解大家急切寫內核的心情,但本書《操作系統真象還原》(請大家支持正版)的目的不是寫一個操作系統就完事了,而是讓大家明白一個至少能運行的操作系統為什么要這樣寫,所以咱們的學習方式必然是邊學習理論知識邊實踐。如果不給大家交待清楚必要的理論知識,我也對不起自己的良心,我不能為了自己的懶惰而假裝大家都明白了。另外,既然咱們都渴望學習,能了解到更多的混合編程方式不是更好嗎,好啦,不煽情了,開始學習go! go! go!。
開門見山,匯編語言和c語言混合編程可分為兩大類:
本節所說的“匯編語言和c語言混合編程”屬于第1種,第2種的內嵌匯編又稱為內聯匯編,以后咱們會有專門的章節來說的。在內核文件中,有些比較長的匯編代碼真不適合用內聯匯編完成,還是需要專門寫個匯編代碼文件專項專用。
簡單起見,咱們先學習下linux系統調用,利用系統調用能夠幫助簡化演示的模型。
系統調用是linux內核提供的一套子程序,它和windows的動態鏈接庫dll文件的功能一樣,用來實現一系列在用戶態不能或不易實現的功能,比如最常見的讀寫硬盤文件,只有操作系統有權限去訪問硬件,用戶程序是沒有權限的,用戶程序只能向操作系統尋求幫助,故系統調用是供用戶程序來使用的,操作系統權利至高無上,不需要使用自己對外發布的功能接口,即系統調用。
由于是用戶程序想使用操作系統提供的功能,所以系統調用又稱為操作系統功能調用。
系統調用很像bios中斷調用(在很久很久以前咱們有說過bios中斷、dos中斷等內容),只不過系統調用的入口只有一個,是第0x80號中斷,它不像bios中斷那樣,幾乎是一個功能就有一個入口,所以您在bios中斷手冊中會見到那么多的中斷調用啦,比如中斷號 0~0x20都是bios的中斷調用。
為什么系統調用只有一個入口呢?以后咱們學習中斷機制的時候就會明白,中斷的實現是要用到中斷描述符表的,表中很多中斷項(號)是被預留的,不能強占,所以linux就選了一個可用的中斷號做個所有系統調用的統一入口,具體的子功能在寄存器eax中單獨指定。
總之,bios中斷走的是中斷向量表,所以有很多中斷號給它用,而系統調用走的是中斷描述符表中的一項而已,所以只用了第0x80項中斷。
總結
以上是生活随笔為你收集整理的一步步编写操作系统 66 浅析c库函数与系统调用1的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 银行存款利率涨了,利率比储蓄国债还高,1
- 下一篇: 一步步编写操作系统3 部署工作环境 3