Linux 0 11 系統呼叫學習

2021-04-09 10:13:53 字數 1438 閱讀 2131

通過增加乙個系統呼叫來了解系統呼叫的實現原理。(增加

int fun(void))1

.在include->unistd.h

中加入#define __nr_fun72

;加入系統函式呼叫宣告『

int fun(void);

2.

在include->linux->sys.h

加入系統函式宣告

extern int sys_ fun ();

在指標陣列

fn_ptr sys_call_table

初試化中加入

sys_ fun項3

.int sys_ fun ()

可在任意檔案中實現。

4.在需要呼叫

int fun(void)

的地方宣告

static inline _syscall0(int, fun)

然後就可以呼叫

fun();

補充:

1.typedefint (*fn_ptr)();

2.sched.c

中的sched_ini

中set_system_gate(0x80,&system_call)

;設定系統呼叫

0x80

中斷。其它的一些中斷設定在

traps.c

中的void trap_init(void)

中。例set_trap_gate(0,÷_error); 3

.c

與彙編(

at&t

)混合程式設計

1)在彙編中定義

c函式。

例如在traps.c

中宣告int nmi(void)

中, set_trap_gate(0,& nmi); 在

a**.s

中實現:

_nmi:

pushl $_do_nmi

jmp no_error_code/

2)

在彙編中呼叫

c函式。先將c

函式需要的引數壓棧,然後

call

、jmp

函式。函式名前面也要_.

pushl %ecx

call _do_signal3)在

c中嵌入彙編

#define _syscall0(type,name) /

type name(void) /

3.在每次系統呼叫處理函式(通過

call _sys_call_table(,%eax,4)

呼叫)執行完後,、

a.檢查當前程序是否就緒,時間片是否用完,否則執行

_schedule

(重新排程)

b.檢查是否有訊號,若有,則呼叫

_do_signal

(將訊號處理函式位址和其他

ax值放到使用者堆疊中),待中斷退出後立即執行訊號處理程式。

Linux 0 11 系統呼叫原理

一 概述 系統呼叫是乙個軟中斷,中斷號是0x80,它是上層應用程式與linux系統核心進行互動通訊的唯一介面。通過int 0x80,就可使用核心資源。不過,通常應用程式都是使用具有標準介面定義的c函式庫間接的使用核心的系統呼叫,即應用程式呼叫c函式庫中的函式,c函式庫中再通過int 0x80進行系統...

Linux0 11學習記錄

最近在學習linux0.11,遇到了一些編譯和執行的問題,好在最終能順利執行,在此作一下記錄,以方便自己和他人參考 我的編譯環境 linux bogon 3.16.0 4 686 pae 1 smp debian 3.16.39 1 deb8u2 2017 03 07 i686 gnu linux ...

Linux0 11學習筆記

目前狀態 中斷程式已設定,第乙個任務 init task已初始化 sched.c main 函式裡通過move to user mode 進入到task 0。目的 手工建立第二個任務 task 1,並和task 0不停切換。做法 在sched.c 建立第二個任務結構,所有值採用第乙個 union t...