我們假設這個呼叫是foo(),返回值型別是void。
linux0.11實現系統呼叫的基本過程如下:
舉例說明:
include/linux/sys.h:
extern
intsys_iam()
;...
, sys_iam}
include/unistd.h:
#define __nr_iam 72
intiam
(const
char
*name)
;
kernel/system_call.s:
nr_system_calls = nr_system_calls+
1
+kernel/who.c:
完成的功能是將字串引數 name 的內容拷貝到核心中儲存下來。要求 name 的長度不能超過 23 個字元。返回值是拷貝的字元數。如果 name 的字元個數超過了 23,則返回 「-1」,並置 errno 為 einval。…
#define __library__
#include
#include
#include
#define max_size 23
char username[max_size+1]
;int
sys_iam
(const
char
*name)
makefile:
objs =..
. who.o..
....
### dependencies:
who.s who.o: who.c .
./include/unistd.h \
../include/
asm/segment.h .
./include/errno.h..
....
從linux0 11看乙個程序的誕生
系統有乙個gdt表。該錶儲存了系統和所有程序的tss和ldt描述符資訊。tss就是我們平時說的程序上下文。每個程序有乙個ldt陣列,裡面儲存了 段和資料段的描述符資訊。首先,從乙個程序的誕生說起。我們知道,通過fork可以建立乙個程序。下面我們來看一下fork的過程都做了什麼事情。先通過find e...
如何新增乙個提醒
下面的說明適合pluto 和 cosmos,在10a1108mp之後的版本上新增乙個提醒。具體步驟如下 1,在 srv reminder type 中新增type 例如 注意,定義的鬧鐘響應完了,需要執行 srv reminder notify finish 來清除定時器。取消alarm,使用srv...
Linux0 11原始碼研讀(1)(一點廢話)
這是第一次寫部落格文章,同時也是第一次在csdn上留下自己的足跡,我希望在大二往後的時間裡,我可以研讀完linux0.11的 同時自己也可以製作乙個簡陋的作業系統,作為研讀 的作業吧。關於linux的 我已經讀了大概1 4左右,從最開始的彙編讀到了c語言 中filesystem的 了,因為我不是順著...