作者 主題: system call  (閱讀 8822 次)

0 會員 與 1 訪客 正在閱讀本文。

ohmygod

  • 活潑的大學生
  • ***
  • 文章數: 210
    • 檢視個人資料
system call
« 於: 2004-05-07 10:22 »
1.一般所謂的系統呼叫,是不是說在我的程式原始碼裡邊有將作業系統所提供
的函式寫在裡邊,當我執行此程式時,就是透過這個函式來通知核心,並取得相關
資訊?比如uname()。那又跟在/usr/lib/  及 /lib 裡邊的分享函式庫有關聯嗎?
2.另外呼叫函式有核心提供的系統呼叫及函式庫裡的函式呼叫,兩者差在哪?

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17465
    • 檢視個人資料
    • http://www.study-area.org
system call
« 回覆 #1 於: 2004-05-07 10:59 »
我對 programming 不是很熟,就我的理解是:
library 可算是程式的一部份,只是已經寫好供調用而已。
system call 則是請求 kernel 工作的。

elleryq

  • 區域板主
  • 鑽研的研究生
  • *****
  • 文章數: 908
  • 性別: 男
    • 檢視個人資料
    • Thinking more...
system call
« 回覆 #2 於: 2004-05-07 13:48 »
1.有關聯
2.簡單說,層次不同,作的工也不同~~有可能 library 是幫你做包裝及檢查,然後再往下丟給系統呼叫,讓 kernel 幫你作;也有可能 library 自己做掉~~不過不管怎麼樣,或多或少都會把工作往下丟給 kernel ~~
Plan your work, then work your plan.
我的首頁:http://blog.elleryq.idv.tw
351899by http://counter.li.org

ohmygod

  • 活潑的大學生
  • ***
  • 文章數: 210
    • 檢視個人資料
system call
« 回覆 #3 於: 2004-05-07 14:43 »
有什麼關聯能指導一下嗎?
比如說uname() 是一個函式,當我執行uname 指令時可透過uname()取得相關系統資訊,
而這個uname()函式與/usr/lib 或/lib 底下那些xx.so 的library 是有怎樣的關聯性呢?

markc

  • 可愛的小學生
  • *
  • 文章數: 8
    • 檢視個人資料
system call
« 回覆 #4 於: 2004-05-07 17:37 »
就我所瞭解
使用.so(shared library)的好處在於如果你的程式有呼叫uname
當uname的實作方式改變,你只要將其所屬的.so複製到你的系統
程式不用重新編譯,一樣可以執行

AD

  • 懷疑的國中生
  • **
  • 文章數: 38
    • 檢視個人資料
system call
« 回覆 #5 於: 2004-05-09 09:50 »
代碼: [選擇]

ad@machine ~ $ ldd /bin/uname
        libc.so.6 => /lib/libc.so.6 (0x40028000)
        /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)


這顯示 uname 這個程式用到了 libc.so.6 與 ld-linux.so.2 這兩個
動態函式庫,也許這兩個函式庫都會再呼叫核心的 system call,但
是在這邊看不出來。

那 system call 與一般的函式呼叫有何不同?

就我所知道的一點,linux 為了安全的理由,不希望讓使用者能隨意
的存取硬體。但是一個 OS 如果不能存取硬體,那這個 OS 還有人要
用嗎 :D 於是 linux 提供一些介面(也就是 system call),讓使用
者(這邊的使用者指的是 programmer)能夠藉由這些 system call
來做到硬體的控制,例如像是讀取硬碟中的檔案等等。

deanlin

  • 可愛的小學生
  • *
  • 文章數: 17
    • 檢視個人資料
system call
« 回覆 #6 於: 2004-06-10 15:01 »
所有的 OS 都有所謂的 System call.

System call 主要就是 Kernel 和你寫的程式之間的介面.

例如: 在 MS-DOS 的 INT 21H 之類的..
        在 Linux 下的... write, read......etc

jan

  • 懷疑的國中生
  • **
  • 文章數: 73
    • 檢視個人資料
system call
« 回覆 #7 於: 2004-06-21 22:36 »
引述: "ohmygod"
有什麼關聯能指導一下嗎?
比如說uname() 是一個函式,當我執行uname 指令時可透過uname()取得相關系統資訊,
而這個uname()函式與/usr/lib 或/lib 底下那些xx.so 的library 是有怎樣的關聯性呢?

/usr/lib 或/lib xx.so都是編譯好的函式,當你在原始碼宣告使用uname(),編譯時即
使用連結器找到/usr/lib 或/lib 找到相關檔案載入執行.
以下是一個簡單C程式碼實作uname
#include <stdio.h>
#include <sys/utsname.h>
main()
{
struct utsname systeminfo;
uname(&systeminfo);
printf("The OS is %s\n" systeminfo.sysname);
..........
........
}

被騎上班的老

  • 酷!學園 學長們
  • 活潑的大學生
  • ***
  • 文章數: 360
    • 檢視個人資料
system call
« 回覆 #8 於: 2004-07-13 00:32 »
這個議題不錯,對於系統的了解很有幫助,不過少了幾個環節。

只要學過 UNIX 的人一定會見過一個幾個同心圓畫成的圖,正中間寫著 KERNEL ,然後外面包著shell ,系統程式跟system calls 。第三圈是使用者程式或者應用程式。

KERNEL 是一個大驅動程式,他負責跟硬體溝通。其次是system calls 和 系統程式,這是操作KERNEL 的程式。何謂系統程式呢?簡單的來說,開機時尚未mount 其他磁碟系統的 root file system 就是了。例如 /bin /lib ,如果你把這幾個目錄放在其他的磁碟系統保證你開不了機。

但是 system calls 實在太難用了,所以有人寫了一些比較人性化的 functions,讓寫程式的人可以輕鬆一下。這些就是 library 或 utilities 的由來。

由於 UNIX 是跨平台設計的,為了要跨平台所以system calls 跟 utilities 有著標準機構在管理這些事情。所以 system calls 跟 utilities 也不是說要新增就可以新增。

簡而言之,就像國文課所說的:聖人說的話稱為 "經"。但是"經"太艱深了,所以有人寫了"傳"來解釋它。但是"傳"還是有點深,又有人出了"注"來解釋"傳"。

轉回來正題,如果你是新手寫寫 shell 還可以。如果有點經驗可以寫寫 C 用點 library。如果你很高竿,你可以直接呼叫 system calls 來寫程式。