ユニバーサル機能
1、抽象化の工程
(1)インターフェース:など何をすべきかのモジュールを指定し、識別子/種類、機能は、.H、関数呼び出し元が
(2)を実現:インタフェースモジュールを指定する方法は、複数のインターフェイス(可能)を完成します。 C、関数の実装
(3)署名関数:関数名、パラメータ、パラメータ・タイプのその数は、戻り値は注意を含んでいません。異なる人物を識別するために使用される署名と同様に、異なる機能を識別するための関数のシグネチャ。キーは、パラメータの数と種類です。
2、シングルスレッド
の同時実行:並行プログラムレベル-同時プロセス機能の部門-スレッド
第二に、実験
1、[表示]メニュー
このシステムは、Ubuntuの私の元の画像の下のユーザーのHadoop Linuxカーネルにダウンロード良いメニューをダウンロードし、メニューに入り、test.cのを見ています
コンパイルするとき、問題が発生します:
情報へのアクセスを通じ、それが理由で、十分なメモリであってもよい:
メモリーを変更します。
、rootfsのを作るの成功を実施します:
2つのコマンドを実行します。
2、GDBブラックボックス関数呼び出しSYS_TIMEを使用して追跡システム
カーネルを起動します。
コマンド-S -s GDBデバッグのための
gdbデバッガへ:リモートターゲット:1234 MenuOSをデバッグする必要に接続するために
、なぜそれが1234ですか?-sは、ポート1234上のgdb-サーバーを作成することであるため
図赤のボックスに示すようにGDB、セットブレークポイントを入力した後、なぜ、特定のファイルの行に設定されていません。
:ダウン続行
ブレークポイントカードは
、リストを使用し、将来的に続け、エラー、解決策はありません
SYSTEM_CALL実行を続行するためにcキーを使用して、ブレークポイントを設定するには、命令が実行された時刻を見ることができます。
time_asmを実行すると、応答がありません。
カーネルコードの呼び出しでは第三に、システムプロセス
図1に示すように、システム初期化呼び出し機構
\ INIT \ main.cのstart_kernel trap_initがあります()
\ ARC \ X86 \カーネルの\ traps.c
IFDEF CONFIG_X86_32
set_system_trap_gate(SYSCALL_VECTOR,&system_call); //系统调用的中断向量,system_call代表汇编代码入口,set_system_trap_gate用来绑定中断向量0x86和system_call中断服务程序入口。
set_bit(SYSCALL_VECTOR,used_vectors)
ENDIF
システムコールは、中断の特別ポイント(またはいわゆるソフト割り込み)システムコールを処理するコードのSYSTEM_CALLこのセクションでは、コードのこの作品は、サイトSAVE_ALLサイトrestore_allの保存と復元のプロセスです。一方、system_call_tableテーブルがシステムコールである、システムコール番号は、EAXレジスタを送信し、それは、EAXレジスタに応じて対応するシステムコールカーネル・ハンドラを起動するときに、ユーザを呼び出します。
ENTRYは(SYSTEM_CALL)
RING0_INT_FRAME
ASM_CLAC
pushl_cfi%eaxに#システムコール番号保存
SAVE_ALL#シーンを保存し、スタックにすべてのCPUレジスタを保存するために使用される
構造thread_info現在のプロセスのアドレスを格納するために使用さGET_THREAD_INFO(%EBP)#ebp
、testlする$ _TIF_WORK_SYSCALL_ENTRY TI_flags(場合%ebp)
JNZ syscall_trace_entry
CMPL $(NR_syscalls)、%eaxに#検査システムコール番号(システムコール数がNR_syscalls未満でなければならない)
、違法なジェジュンsyscall_badsys#例外処理にジャンプ
syscall_call:
コール* sys_call_table(、%eaxに、4) #など、多数のシステムを呼び出すことにより、システムコールテーブル内の適切なシステムコールコア処理機能を見つけるSYS_TIME
MOVL%eaxに、スタックにPT_EAX(%ESP)#戻り値
syscall_exit:
testlする$ _TIF_ALLWORK_MASK、タスクの%ECXの#チェック対処する必要があり
、ここで、syscall_exit_workを入力する必要があり、最も一般的なプロセスのスケジューリング機会のあるJNE syscall_exit_work#
RESTORE_ALL:
TRACE_IRQS_TRET#復旧サイトの
irq_returnを:
INTERRUPT_RETURNの#iret
int型のX80(トリガ・システム・コールは)すぐにシステムコール番号、最も一般的なsyscall_exit_workプロセスのスケジューリング時間による位置SYSTEM_CALL(玄関システムコール)がsys_call_tableテーブル(システム・コール・テーブル)を見て、エントリにジャンプします。SYSCALL_VECTORは、ベクター0x80のシステムコールを中断します。
IVの概要
今週は、インターネット上で解決策を見つけるために、この問題を少し実験を行いましたが、あまりの関連情報は、彼らは解決策を知りませんでした。今週の研究では、カーネルのシステムコールの学習プロセス。