Submit Search
Upload
xv6のコンテキストスイッチを読む
•
3 likes
•
5,198 views
M
mfumi
Follow
第2回APASEC+第2期サイボウズ・ラボユース合同勉強会 (2013/3/29) 発表資料
Read less
Read more
Technology
Report
Share
Report
Share
1 of 31
Download now
Download to read offline
Recommended
Glibc malloc internal
Glibc malloc internal
Motohiro KOSAKI
ARM CPUにおけるSIMDを用いた高速計算入門
ARM CPUにおけるSIMDを用いた高速計算入門
Fixstars Corporation
30分で分かる!OSの作り方
30分で分かる!OSの作り方
uchan_nos
いまさら聞けないarmを使ったNEONの基礎と活用事例
いまさら聞けないarmを使ったNEONの基礎と活用事例
Fixstars Corporation
プログラムを高速化する話
プログラムを高速化する話
京大 マイコンクラブ
Intro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみた
MITSUNARI Shigeo
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門
Norishige Fukushima
SSII2022 [TS2] 自律移動ロボットのためのロボットビジョン〜 オープンソースの自動運転ソフトAutowareを解説 〜
SSII2022 [TS2] 自律移動ロボットのためのロボットビジョン〜 オープンソースの自動運転ソフトAutowareを解説 〜
SSII
Recommended
Glibc malloc internal
Glibc malloc internal
Motohiro KOSAKI
ARM CPUにおけるSIMDを用いた高速計算入門
ARM CPUにおけるSIMDを用いた高速計算入門
Fixstars Corporation
30分で分かる!OSの作り方
30分で分かる!OSの作り方
uchan_nos
いまさら聞けないarmを使ったNEONの基礎と活用事例
いまさら聞けないarmを使ったNEONの基礎と活用事例
Fixstars Corporation
プログラムを高速化する話
プログラムを高速化する話
京大 マイコンクラブ
Intro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみた
MITSUNARI Shigeo
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門
Norishige Fukushima
SSII2022 [TS2] 自律移動ロボットのためのロボットビジョン〜 オープンソースの自動運転ソフトAutowareを解説 〜
SSII2022 [TS2] 自律移動ロボットのためのロボットビジョン〜 オープンソースの自動運転ソフトAutowareを解説 〜
SSII
明日使えないすごいビット演算
明日使えないすごいビット演算
京大 マイコンクラブ
第 1 回 Jetson ユーザー勉強会
第 1 回 Jetson ユーザー勉強会
NVIDIA Japan
第1回ROS勉強会発表資料 ROS+Gazeboではじめるロボットシミュレーション
第1回ROS勉強会発表資料 ROS+Gazeboではじめるロボットシミュレーション
akio19937
研究者のための Python による FPGA 入門
研究者のための Python による FPGA 入門
ryos36
Deep Dive into the Linux Kernel - メモリ管理におけるCompaction機能について
Deep Dive into the Linux Kernel - メモリ管理におけるCompaction機能について
NTT DATA Technology & Innovation
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分け
モノビット エンジン
Yoctoで綺麗なkernel configを作る
Yoctoで綺麗なkernel configを作る
shimadah
UnityとROSの連携について
UnityとROSの連携について
UnityTechnologiesJapan002
Marp Tutorial
Marp Tutorial
Rui Watanabe
条件分岐とcmovとmaxps
条件分岐とcmovとmaxps
MITSUNARI Shigeo
0章 Linuxカーネルを読む前に最低限知っておくべきこと
0章 Linuxカーネルを読む前に最低限知っておくべきこと
mao999
【Unity】 Behavior TreeでAIを作る
【Unity】 Behavior TreeでAIを作る
torisoup
ゼロから始める自作 CPU 入門
ゼロから始める自作 CPU 入門
Hirotaka Kawata
lsh
lsh
Shunsuke Aihara
C++でできる!OS自作入門
C++でできる!OS自作入門
uchan_nos
Rust で RTOS を考える
Rust で RTOS を考える
ryuz88
x86とコンテキストスイッチ
x86とコンテキストスイッチ
Masami Ichikawa
カスタムメモリマネージャと高速なメモリアロケータについて
カスタムメモリマネージャと高速なメモリアロケータについて
alwei
不遇の標準ライブラリ - valarray
不遇の標準ライブラリ - valarray
Ryosuke839
STMとROSをシリアル通信させて移動ロボットを作る
STMとROSをシリアル通信させて移動ロボットを作る
mozyanari
あなたの知らないネットワークプログラミングの世界
あなたの知らないネットワークプログラミングの世界
Ryousei Takano
An other world awaits you
An other world awaits you
信之 岩永
More Related Content
What's hot
明日使えないすごいビット演算
明日使えないすごいビット演算
京大 マイコンクラブ
第 1 回 Jetson ユーザー勉強会
第 1 回 Jetson ユーザー勉強会
NVIDIA Japan
第1回ROS勉強会発表資料 ROS+Gazeboではじめるロボットシミュレーション
第1回ROS勉強会発表資料 ROS+Gazeboではじめるロボットシミュレーション
akio19937
研究者のための Python による FPGA 入門
研究者のための Python による FPGA 入門
ryos36
Deep Dive into the Linux Kernel - メモリ管理におけるCompaction機能について
Deep Dive into the Linux Kernel - メモリ管理におけるCompaction機能について
NTT DATA Technology & Innovation
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分け
モノビット エンジン
Yoctoで綺麗なkernel configを作る
Yoctoで綺麗なkernel configを作る
shimadah
UnityとROSの連携について
UnityとROSの連携について
UnityTechnologiesJapan002
Marp Tutorial
Marp Tutorial
Rui Watanabe
条件分岐とcmovとmaxps
条件分岐とcmovとmaxps
MITSUNARI Shigeo
0章 Linuxカーネルを読む前に最低限知っておくべきこと
0章 Linuxカーネルを読む前に最低限知っておくべきこと
mao999
【Unity】 Behavior TreeでAIを作る
【Unity】 Behavior TreeでAIを作る
torisoup
ゼロから始める自作 CPU 入門
ゼロから始める自作 CPU 入門
Hirotaka Kawata
lsh
lsh
Shunsuke Aihara
C++でできる!OS自作入門
C++でできる!OS自作入門
uchan_nos
Rust で RTOS を考える
Rust で RTOS を考える
ryuz88
x86とコンテキストスイッチ
x86とコンテキストスイッチ
Masami Ichikawa
カスタムメモリマネージャと高速なメモリアロケータについて
カスタムメモリマネージャと高速なメモリアロケータについて
alwei
不遇の標準ライブラリ - valarray
不遇の標準ライブラリ - valarray
Ryosuke839
STMとROSをシリアル通信させて移動ロボットを作る
STMとROSをシリアル通信させて移動ロボットを作る
mozyanari
What's hot
(20)
明日使えないすごいビット演算
明日使えないすごいビット演算
第 1 回 Jetson ユーザー勉強会
第 1 回 Jetson ユーザー勉強会
第1回ROS勉強会発表資料 ROS+Gazeboではじめるロボットシミュレーション
第1回ROS勉強会発表資料 ROS+Gazeboではじめるロボットシミュレーション
研究者のための Python による FPGA 入門
研究者のための Python による FPGA 入門
Deep Dive into the Linux Kernel - メモリ管理におけるCompaction機能について
Deep Dive into the Linux Kernel - メモリ管理におけるCompaction機能について
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分け
Yoctoで綺麗なkernel configを作る
Yoctoで綺麗なkernel configを作る
UnityとROSの連携について
UnityとROSの連携について
Marp Tutorial
Marp Tutorial
条件分岐とcmovとmaxps
条件分岐とcmovとmaxps
0章 Linuxカーネルを読む前に最低限知っておくべきこと
0章 Linuxカーネルを読む前に最低限知っておくべきこと
【Unity】 Behavior TreeでAIを作る
【Unity】 Behavior TreeでAIを作る
ゼロから始める自作 CPU 入門
ゼロから始める自作 CPU 入門
lsh
lsh
C++でできる!OS自作入門
C++でできる!OS自作入門
Rust で RTOS を考える
Rust で RTOS を考える
x86とコンテキストスイッチ
x86とコンテキストスイッチ
カスタムメモリマネージャと高速なメモリアロケータについて
カスタムメモリマネージャと高速なメモリアロケータについて
不遇の標準ライブラリ - valarray
不遇の標準ライブラリ - valarray
STMとROSをシリアル通信させて移動ロボットを作る
STMとROSをシリアル通信させて移動ロボットを作る
Viewers also liked
あなたの知らないネットワークプログラミングの世界
あなたの知らないネットワークプログラミングの世界
Ryousei Takano
An other world awaits you
An other world awaits you
信之 岩永
Kernel vm study_2_xv6_scheduler_part1_revised
Kernel vm study_2_xv6_scheduler_part1_revised
Toshiaki Nozawa
πολλαπλασιασμοι ενοτητα 11
πολλαπλασιασμοι ενοτητα 11
Γιαννόπουλος Γιάννης
とある帽子の大蛇料理Ⅱ
とある帽子の大蛇料理Ⅱ
Masami Ichikawa
Bish Bash Bosh & Co
Bish Bash Bosh & Co
Bish Bash Bosh & Co
100Gbpsソフトウェアルータの実現可能性に関する論文
100Gbpsソフトウェアルータの実現可能性に関する論文
y_uuki
User-space Network Processing
User-space Network Processing
Ryousei Takano
デバドラを書いてみよう!
デバドラを書いてみよう!
Masami Ichikawa
I/O仮想化最前線〜ネットワークI/Oを中心に〜
I/O仮想化最前線〜ネットワークI/Oを中心に〜
Ryousei Takano
Disruptive IP Networking with Intel DPDK on Linux
Disruptive IP Networking with Intel DPDK on Linux
Naoto MATSUMOTO
クラウド環境におけるキャッシュメモリQoS制御の評価
クラウド環境におけるキャッシュメモリQoS制御の評価
Ryousei Takano
DPDKを拡張してみた話し
DPDKを拡張してみた話し
Lagopus SDN/OpenFlow switch
Async deepdive before de:code
Async deepdive before de:code
Kouji Matsui
continuatioN Linking
continuatioN Linking
Kouji Matsui
これからの「async/await」の話をしよう
これからの「async/await」の話をしよう
Kouji Matsui
async/awaitダークサイド is 何
async/awaitダークサイド is 何
Kouji Matsui
Xeon dとlagopusと、pktgen dpdk
Xeon dとlagopusと、pktgen dpdk
Masaru Oki
Dpdk環境の話
Dpdk環境の話
Masaru Oki
async/await不要論
async/await不要論
bleis tift
Viewers also liked
(20)
あなたの知らないネットワークプログラミングの世界
あなたの知らないネットワークプログラミングの世界
An other world awaits you
An other world awaits you
Kernel vm study_2_xv6_scheduler_part1_revised
Kernel vm study_2_xv6_scheduler_part1_revised
πολλαπλασιασμοι ενοτητα 11
πολλαπλασιασμοι ενοτητα 11
とある帽子の大蛇料理Ⅱ
とある帽子の大蛇料理Ⅱ
Bish Bash Bosh & Co
Bish Bash Bosh & Co
100Gbpsソフトウェアルータの実現可能性に関する論文
100Gbpsソフトウェアルータの実現可能性に関する論文
User-space Network Processing
User-space Network Processing
デバドラを書いてみよう!
デバドラを書いてみよう!
I/O仮想化最前線〜ネットワークI/Oを中心に〜
I/O仮想化最前線〜ネットワークI/Oを中心に〜
Disruptive IP Networking with Intel DPDK on Linux
Disruptive IP Networking with Intel DPDK on Linux
クラウド環境におけるキャッシュメモリQoS制御の評価
クラウド環境におけるキャッシュメモリQoS制御の評価
DPDKを拡張してみた話し
DPDKを拡張してみた話し
Async deepdive before de:code
Async deepdive before de:code
continuatioN Linking
continuatioN Linking
これからの「async/await」の話をしよう
これからの「async/await」の話をしよう
async/awaitダークサイド is 何
async/awaitダークサイド is 何
Xeon dとlagopusと、pktgen dpdk
Xeon dとlagopusと、pktgen dpdk
Dpdk環境の話
Dpdk環境の話
async/await不要論
async/await不要論
More from mfumi
MMDs 12.3 SVM
MMDs 12.3 SVM
mfumi
MMDs10.6-7
MMDs10.6-7
mfumi
IA16 2
IA16 2
mfumi
IA16
IA16
mfumi
IA14
IA14
mfumi
木を綺麗に描画するアルゴリズム
木を綺麗に描画するアルゴリズム
mfumi
MMDs Chapter 9
MMDs Chapter 9
mfumi
グラフを奇麗に描画するアルゴリズム
グラフを奇麗に描画するアルゴリズム
mfumi
Algorithms Introduction 9章
Algorithms Introduction 9章
mfumi
MMDs 6.3-6.5
MMDs 6.3-6.5
mfumi
MMDs Chapter 5.1 PageRank
MMDs Chapter 5.1 PageRank
mfumi
ファイルの隠し方
ファイルの隠し方
mfumi
More from mfumi
(12)
MMDs 12.3 SVM
MMDs 12.3 SVM
MMDs10.6-7
MMDs10.6-7
IA16 2
IA16 2
IA16
IA16
IA14
IA14
木を綺麗に描画するアルゴリズム
木を綺麗に描画するアルゴリズム
MMDs Chapter 9
MMDs Chapter 9
グラフを奇麗に描画するアルゴリズム
グラフを奇麗に描画するアルゴリズム
Algorithms Introduction 9章
Algorithms Introduction 9章
MMDs 6.3-6.5
MMDs 6.3-6.5
MMDs Chapter 5.1 PageRank
MMDs Chapter 5.1 PageRank
ファイルの隠し方
ファイルの隠し方
Recently uploaded
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
sn679259
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
CRI Japan, Inc.
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
CRI Japan, Inc.
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
atsushi061452
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
Toru Tamaki
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
WSO2
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
Toru Tamaki
Recently uploaded
(10)
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
xv6のコンテキストスイッチを読む
1.
xv6のコンテキストスイッチを読む
@mfumi2
2.
自己紹介 ●
セキュリティキャンプ2012OS組
3.
最近こんな本が出ました
はじめてのOSコードリーディング 青柳隆宏著 おすすめ! でも...
4.
UNIX V6 を読む上で大変なところ ●
PDP11 ● Cの記法が古い (pre K&R) ● アセンブラの記法が特殊 ● デフォルトが8進数 ● etc...
5.
xv6とは ●
MITで開発された教育用OS http://pdos.csail.mit.edu/6.828/2012/xv6.html ● UNIX V6 を x86 向けに書き直したもの ● 解説書有り http://pdos.csail.mit.edu/6.828/2012/xv6/book- rev7.pdf
6.
xv6の特徴 ●
x86 ● マルチプロセッサ対応 ● バイナリはELF ● スワッピング機能はなし ● qemu+gdb で動作可
7.
コンテキストスイッチ ●
プロセスのコンテキストを切り替える ● コンテキスト … – メモリ空間 → cr3 レジスタを切り替える – スタック → %esp を切り替える – 各種レジスタ → プロセスごとのスタックに退避&スタックから復帰
8.
xv6のコンテキストスイッチ • switch.S
void swtch(struct context **old, struct context *new); • proc.h
9.
xv6のコンテキストスイッチ
• switch.S void swtch(struct context **old, struct context *new); メモリ % % % ★ % %esp %eip(swtchの戻り先) new(%edx) %edi %esi %ebx %ebp %eip(swtchの戻り先)
10.
xv6のコンテキストスイッチ
• switch.S void swtch(struct context **old, struct context *new); メモリ %edi %esi %ebx %esp ★ %ebp %eip(swtchの戻り先) new(%edx) %edi %esi %ebx %ebp %eip(swtchの戻り先)
11.
xv6のコンテキストスイッチ
• switch.S void swtch(struct context **old, struct context *new); メモリ %edi %esi %esp %ebx ★ %ebp %eip(swtchの戻り先) new(%edx) %edi %esi %ebx %ebp %eip(swtchの戻り先)
12.
xv6のコンテキストスイッチ
• switch.S void swtch(struct context **old, struct context *new); メモリ %edi %esp %esi %ebx %ebp ★ %eip(swtchの戻り先) new(%edx) %edi %esi %ebx %ebp %eip(swtchの戻り先)
13.
xv6のコンテキストスイッチ
• switch.S void swtch(struct context **old, struct context *new); メモリ %esp %edi %esi %ebx %ebp %eip(swtchの戻り先) ★ new(%edx) %edi %esi %ebx %ebp %eip(swtchの戻り先)
14.
xv6のコンテキストスイッチ
• switch.S void swtch(struct context **old, struct context *new); メモリ %esp %edi *old(%eax) %esi %ebx %ebp %eip(swtchの戻り先) ★ new(%edx) %edi %esi %ebx %ebp %eip(swtchの戻り先)
15.
xv6のコンテキストスイッチ
• switch.S void swtch(struct context **old, struct context *new); メモリ *old(%eax) %edi %esi %ebx %ebp %eip(swtchの戻り先) %esp new(%edx) ★ %edi %esi %ebx %ebp %eip(swtchの戻り先)
16.
xv6のコンテキストスイッチ
• switch.S void swtch(struct context **old, struct context *new); メモリ *old(%eax) %edi %esi %ebx %ebp %eip(swtchの戻り先) new(%edx) %edi %esp %esi %ebx ★ %ebp %eip(swtchの戻り先)
17.
xv6のコンテキストスイッチ
• switch.S void swtch(struct context **old, struct context *new); メモリ *old(%eax) %edi %esi %ebx %ebp %eip(swtchの戻り先) new(%edx) %edi %esi %esp %ebx %ebp ★ %eip(swtchの戻り先)
18.
xv6のコンテキストスイッチ
• switch.S void swtch(struct context **old, struct context *new); メモリ *old(%eax) %edi %esi %ebx %ebp %eip(swtchの戻り先) new(%edx) %edi %esi %ebx %esp %ebp %eip(swtchの戻り先) ★
19.
xv6のコンテキストスイッチ
• switch.S void swtch(struct context **old, struct context *new); メモリ *old(%eax) %edi %esi %ebx %ebp %eip(swtchの戻り先) new(%edx) %edi %esi %ebx %ebp %esp %eip(swtchの戻り先) ★
20.
xv6のコンテキストスイッチの流れ ユーザプロセス1
ユーザプロセス2 タイマ割り込み iret 割り込みハンドラ スケジューラ 割り込みハンドラ swtch() swtch()
21.
(1) 割り込みの発生 ●
xv6では100msごとにタイマ割り込みが発生 ● 割り込みが発生すると – 特権レベルが3から0に移行 – スタックがカーネルスタックに切り替わる (TSSからカーネル用%espと%ssを読み込む) – スタックに%ss, %esp, %eflags, %cs, %eip を積む (現在実行していたプロセスの状態を積む) – 対応する割り込みハンドラに移行
22.
(1) 割り込みの発生
xv6では ● vectors.S (vectors.plから生成される) 内に定義してあ る vector$i() ($iは割り込み番号) が呼び出される (割り込みハンドラの設定は trap.c の tvinit(), idtinit(), いずれも main.c のmain()から呼ばれる ) ● vector$i から trapasm.S の alltraps() に飛ぶ
23.
(2) 割り込みハンドラの処理 ●
trapasm.S alltraps ・自動に退避されないレジスタを退避 ・カーネル用セグメントの設定 ・最終的に trap.c の trap()を呼ぶ
24.
(2) 割り込みハンドラの処理 ●
trap.c の trap() でそれぞれの処理に応じた割り込み処 理をおこなう (割り込みハンドラごとに処理をおこなっていない) ● タイマ割り込みの場合 CPU 時間切れなら proc.c の yield()を呼ぶ ● yield()からさらに proc.cの shced()が呼ばれる タイマ割り込み → vectors.S#vector$i() → trapasm.S#alltraps() → trap.c#trap() → proc.c#yield() → proc.c#shced()
25.
(2) 割り込みハンドラの処理 ●
proc.c の sched() スケジューラプロセスにコンテキストスイッチする ・proc‥現在のプロセスの情報をも つ構造体 ・cpu‥各CPUが持つCPUの情報を もつ構造体 それぞれproc.h で定義 コンテキストの切り替え •swtch()からの戻り先 (cpu->scheduler.eip) は proc.c の scheduler()
26.
(3) スケジューラの処理
proc.c scheduler() 次に実行するプロセス を探す(ラウンドロビン) メモリ空間の切り替え 選択したプロセスにswtch() ★ sched()のswtch()から の戻り先 メモリ空間をカーネル用 に切り替え
27.
(3) スケジューラの処理 ●
何故sched()のswtch()からscheduler()に戻るのか? → ブートローダから呼ばれることになる main.c の main()でinitプロセス(proc[0])を起動後shceduler()を呼 ぶため
28.
(4) 割り込みハンドラの処理(後半)
● proc.c の sched() scheduler() から swtch() によって選択されたプロセスの再開 ★ ここから処理が再開
29.
(4) 割り込みハンドラの処理(後半) ●
最終的にalltrap() まで return し,そこで iret して割り込み終了 ● iret でスタックからプロセスの状態を復帰させる.このとき特権レ ベルも3に戻る スタックが切り替わっているので別のプロセス状態に戻る trapasm.S メモリ %eip %cs %eflags %esp %ss
30.
xv6のコンテキストスイッチの流れ(再掲) ユーザプロセス1
ユーザプロセス2 タイマ割り込み iret 割り込みハンドラ スケジューラ 割り込みハンドラ swtch() swtch()
31.
まとめ ●
PDP11がいやな人はxv6読んでみたらどうでしょうか ● いろいろと改造のしどころ有り
Download now