ARM64カーネルスタック、ユーザスタック、レジスタコンテキスト

1.カーネルスタック割り当て、すなわちthread_info割り当てはdo_fork-> dup_task_struct中に(デフォルトでは2ページ)で割り当て、及びtask_struct->スタックに割り当てられています。

2. 2つの方法のユーザ・スタック・アロケーション:まず、pthreadのMMAP割り当てユーザスタックを進める良い作成、do_fork-> copy_thread、ユーザスタック開始アドレスがpt_regs-> SPに割り当てられる渡さ、第二フォークは、親から借りたときでありますスレッドスタックプロセス、ret_from_user exec-> do_execuveat_common-> exe_binprm-> search_binary_handler-> load_elf_binary-> set_arg_pages、再割当てユーザスタックを呼び出した後、その後、start_thread設定pt_regsを呼び出す場合。

カーネルモード(SVCモード)3.レジスタコンテキスト保存場所:スレッド部材はタイプstruct thread_structのtask_struct。

カーネル・スタックの底:4.ユーザーモード(非例外モード)コンテキスト格納位置を登録します。スタックメンバーの構造体task_struct点構造体thread_info、thread_infoは、エンドアドレス構造体pt_regsある固定サイズ(2ページ)、pt_regsすなわちカーネルスタック、thread_info +カーネルスタックの先頭アドレスである:従って(task_pt_regs(task_struck))を取得することができますユーザ・モード・コンテキストを記憶するための位置レジスタと

メンバー向けタスクtask_struct構造thread_info 5。

要約すると、長いtask_structノウハウなどとして、あなたはカーネルスタック(すなわちthread_info = task_struct->スタック)の先頭アドレスを知っているだけでなく、カーネル・モード・レジスタの内容を知ることができる(すなわちtask_struct->スレッド>コンテキスト);同時に、また知っていますユーザ・モード・コンテキスト・レジスタ(すなわちtask_struct->スタック+ kthread_stack_size-のsizeof(pt_regs))、ユーザはスタックの現在のアドレスを知っていること(すなわちpt_regs-> SP)

 

おすすめ

転載: www.cnblogs.com/zengjianrong/p/11974351.html