程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程解疑 >> c語言-系統調用和C語言庫函數

c語言-系統調用和C語言庫函數

編輯:編程解疑
系統調用和C語言庫函數

最近學習操作系統,有些東西不是很明白。c語言的庫函數有些是利用系統調用實現的,有些不是.我就想問下不是利用系統調用的那部分,在執行時硬件是怎麼知道的呢?最後語言代碼被編譯成二進制,執行時仍然是由寄存器硬件什麼執行的吧,既然沒利用系統調用,alu這些東西是怎麼懂這些庫函數要求的操作是干嘛的啊?不是說系統調用是軟硬件的接口嗎?還有系統調用和驅動程序的關系是什麼?

最佳回答:


調用系統調用,代碼跳入內核態,可以執行任何指令,包括 受保護的指令
在用戶態,很多指令是受保護的,不能直接執行,或者執行會出錯。
例如 286 以上的X86 系列及兼容CPU
IO指令,就是受保護的。
實際上,硬件之間是通過總線相連的,並通過,IO讀寫指令,內存讀寫指令,DMA 方式,等等相互通訊。
程序代碼,被CPU取到,然後逐一執行
你寫的代碼,加載到內存後,操作系統用一個跳轉指令(call,jump,ret,iret 等等,都屬於跳轉類指令)
轉到你的代碼中執行的

除非受到保護的指令,都是可以在用戶態執行的,例如加法指令
數學庫
math.h,的函數
string.h
就大部分代碼都屬於,非保護指令

而 IO庫中的許多函數
例如
stdio.h
io.h
中的很多函數,都會調用系統調用的

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved