Soumettre la recherche
Mettre en ligne
Basic of virtual memory of Linux
•
10 j'aime
•
11,753 vues
Tetsuyuki Kobayashi
Suivre
written in Japanese
Lire moins
Lire la suite
Technologie
Signaler
Partager
Signaler
Partager
1 sur 39
Télécharger maintenant
Télécharger pour lire hors ligne
Recommandé
Linux KVM環境におけるGPGPU活用最新動向
Linux KVM環境におけるGPGPU活用最新動向
Taira Hajime
InnoDBのすゝめ(仮)
InnoDBのすゝめ(仮)
Takanori Sejima
Ethernetの受信処理
Ethernetの受信処理
Takuya ASADA
BuildKitの概要と最近の機能
BuildKitの概要と最近の機能
Kohei Tokunaga
x86とコンテキストスイッチ
x86とコンテキストスイッチ
Masami Ichikawa
HashiCorpのNomadを使ったコンテナのスケジューリング手法
HashiCorpのNomadを使ったコンテナのスケジューリング手法
Masahito Zembutsu
もう知らずにはいられないGitOpsをArgoCDで学ぶ【WESEEK Tech Conf #3】
もう知らずにはいられないGitOpsをArgoCDで学ぶ【WESEEK Tech Conf #3】
WESEEKWESEEK
Glibc malloc internal
Glibc malloc internal
Motohiro KOSAKI
Recommandé
Linux KVM環境におけるGPGPU活用最新動向
Linux KVM環境におけるGPGPU活用最新動向
Taira Hajime
InnoDBのすゝめ(仮)
InnoDBのすゝめ(仮)
Takanori Sejima
Ethernetの受信処理
Ethernetの受信処理
Takuya ASADA
BuildKitの概要と最近の機能
BuildKitの概要と最近の機能
Kohei Tokunaga
x86とコンテキストスイッチ
x86とコンテキストスイッチ
Masami Ichikawa
HashiCorpのNomadを使ったコンテナのスケジューリング手法
HashiCorpのNomadを使ったコンテナのスケジューリング手法
Masahito Zembutsu
もう知らずにはいられないGitOpsをArgoCDで学ぶ【WESEEK Tech Conf #3】
もう知らずにはいられないGitOpsをArgoCDで学ぶ【WESEEK Tech Conf #3】
WESEEKWESEEK
Glibc malloc internal
Glibc malloc internal
Motohiro KOSAKI
initramfsについて
initramfsについて
Kazuhiro Nishiyama
Docker Compose 徹底解説
Docker Compose 徹底解説
Masahito Zembutsu
tcpdumpとtcpreplayとtcprewriteと他。
tcpdumpとtcpreplayとtcprewriteと他。
(^-^) togakushi
Lxc で始めるケチケチ仮想化生活?!
Lxc で始めるケチケチ仮想化生活?!
Etsuji Nakai
UEFIによるELFバイナリの起動
UEFIによるELFバイナリの起動
uchan_nos
macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~
macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~
NTT Communications Technology Development
Dockerを利用したローカル環境から本番環境までの構築設計
Dockerを利用したローカル環境から本番環境までの構築設計
Koichi Nagaoka
レシピの作り方入門
レシピの作り方入門
Nobuhiro Iwamatsu
コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線
Motonori Shindo
How to run P4 BMv2
How to run P4 BMv2
Kentaro Ebisawa
今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門
Masahito Zembutsu
Interrupt Affinityについて
Interrupt Affinityについて
Takuya ASADA
NW入門
NW入門
Shuntaro Saiba
CXL_説明_公開用.pdf
CXL_説明_公開用.pdf
Yasunori Goto
ARM Trusted FirmwareのBL31を単体で使う!
ARM Trusted FirmwareのBL31を単体で使う!
Mr. Vengineer
Dockerイメージ管理の内部構造
Dockerイメージ管理の内部構造
Etsuji Nakai
SSH力をつかおう
SSH力をつかおう
(^-^) togakushi
Pacemaker 操作方法メモ
Pacemaker 操作方法メモ
Masayuki Ozawa
eStargzイメージとlazy pullingによる高速なコンテナ起動
eStargzイメージとlazy pullingによる高速なコンテナ起動
Kohei Tokunaga
Ext4 filesystem(1)
Ext4 filesystem(1)
Yoshihiro Yunomae
Tips of Malloc & Free
Tips of Malloc & Free
Tetsuyuki Kobayashi
Linux MMAP & Ioremap introduction
Linux MMAP & Ioremap introduction
Gene Chang
Contenu connexe
Tendances
initramfsについて
initramfsについて
Kazuhiro Nishiyama
Docker Compose 徹底解説
Docker Compose 徹底解説
Masahito Zembutsu
tcpdumpとtcpreplayとtcprewriteと他。
tcpdumpとtcpreplayとtcprewriteと他。
(^-^) togakushi
Lxc で始めるケチケチ仮想化生活?!
Lxc で始めるケチケチ仮想化生活?!
Etsuji Nakai
UEFIによるELFバイナリの起動
UEFIによるELFバイナリの起動
uchan_nos
macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~
macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~
NTT Communications Technology Development
Dockerを利用したローカル環境から本番環境までの構築設計
Dockerを利用したローカル環境から本番環境までの構築設計
Koichi Nagaoka
レシピの作り方入門
レシピの作り方入門
Nobuhiro Iwamatsu
コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線
Motonori Shindo
How to run P4 BMv2
How to run P4 BMv2
Kentaro Ebisawa
今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門
Masahito Zembutsu
Interrupt Affinityについて
Interrupt Affinityについて
Takuya ASADA
NW入門
NW入門
Shuntaro Saiba
CXL_説明_公開用.pdf
CXL_説明_公開用.pdf
Yasunori Goto
ARM Trusted FirmwareのBL31を単体で使う!
ARM Trusted FirmwareのBL31を単体で使う!
Mr. Vengineer
Dockerイメージ管理の内部構造
Dockerイメージ管理の内部構造
Etsuji Nakai
SSH力をつかおう
SSH力をつかおう
(^-^) togakushi
Pacemaker 操作方法メモ
Pacemaker 操作方法メモ
Masayuki Ozawa
eStargzイメージとlazy pullingによる高速なコンテナ起動
eStargzイメージとlazy pullingによる高速なコンテナ起動
Kohei Tokunaga
Ext4 filesystem(1)
Ext4 filesystem(1)
Yoshihiro Yunomae
Tendances
(20)
initramfsについて
initramfsについて
Docker Compose 徹底解説
Docker Compose 徹底解説
tcpdumpとtcpreplayとtcprewriteと他。
tcpdumpとtcpreplayとtcprewriteと他。
Lxc で始めるケチケチ仮想化生活?!
Lxc で始めるケチケチ仮想化生活?!
UEFIによるELFバイナリの起動
UEFIによるELFバイナリの起動
macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~
macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~
Dockerを利用したローカル環境から本番環境までの構築設計
Dockerを利用したローカル環境から本番環境までの構築設計
レシピの作り方入門
レシピの作り方入門
コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線
How to run P4 BMv2
How to run P4 BMv2
今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門
Interrupt Affinityについて
Interrupt Affinityについて
NW入門
NW入門
CXL_説明_公開用.pdf
CXL_説明_公開用.pdf
ARM Trusted FirmwareのBL31を単体で使う!
ARM Trusted FirmwareのBL31を単体で使う!
Dockerイメージ管理の内部構造
Dockerイメージ管理の内部構造
SSH力をつかおう
SSH力をつかおう
Pacemaker 操作方法メモ
Pacemaker 操作方法メモ
eStargzイメージとlazy pullingによる高速なコンテナ起動
eStargzイメージとlazy pullingによる高速なコンテナ起動
Ext4 filesystem(1)
Ext4 filesystem(1)
En vedette
Tips of Malloc & Free
Tips of Malloc & Free
Tetsuyuki Kobayashi
Linux MMAP & Ioremap introduction
Linux MMAP & Ioremap introduction
Gene Chang
Simple and efficient way to get the last log using MMAP
Simple and efficient way to get the last log using MMAP
Tetsuyuki Kobayashi
Tricky implementation of Go ARM soft float
Tricky implementation of Go ARM soft float
Tetsuyuki Kobayashi
LinuxのFull ticklessを試してみた
LinuxのFull ticklessを試してみた
Hiraku Toyooka
Linuxのプロセススケジューラ(Reading the Linux process scheduler)
Linuxのプロセススケジューラ(Reading the Linux process scheduler)
Hiraku Toyooka
Using QEMU for cross development
Using QEMU for cross development
Tetsuyuki Kobayashi
Android ipm 20110409
Android ipm 20110409
Tetsuyuki Kobayashi
ARM 64bit has come!
ARM 64bit has come!
Tetsuyuki Kobayashi
x86-64/Linuxに独自メモリ空間を勝手増設
x86-64/Linuxに独自メモリ空間を勝手増設
Minoru Nakamura
Cpu Cache and Memory Ordering——并发程序设计入门
Cpu Cache and Memory Ordering——并发程序设计入门
frogd
Go言語のスライスを理解しよう
Go言語のスライスを理解しよう
Yasutaka Kawamoto
ADB(Android Debug Bridge): How it works?
ADB(Android Debug Bridge): How it works?
Tetsuyuki Kobayashi
2章 Linuxカーネル - メモリ管理1
2章 Linuxカーネル - メモリ管理1
mao999
0章 Linuxカーネルを読む前に最低限知っておくべきこと
0章 Linuxカーネルを読む前に最低限知っておくべきこと
mao999
Linuxカーネル超入門
Linuxカーネル超入門
Takashi Masuda
条件式評価器の実装による管理ツールの抽象化
条件式評価器の実装による管理ツールの抽象化
Takuya Ueda
15 Common Myths you were taught to believe about Cars
15 Common Myths you were taught to believe about Cars
Eason Chan
En vedette
(18)
Tips of Malloc & Free
Tips of Malloc & Free
Linux MMAP & Ioremap introduction
Linux MMAP & Ioremap introduction
Simple and efficient way to get the last log using MMAP
Simple and efficient way to get the last log using MMAP
Tricky implementation of Go ARM soft float
Tricky implementation of Go ARM soft float
LinuxのFull ticklessを試してみた
LinuxのFull ticklessを試してみた
Linuxのプロセススケジューラ(Reading the Linux process scheduler)
Linuxのプロセススケジューラ(Reading the Linux process scheduler)
Using QEMU for cross development
Using QEMU for cross development
Android ipm 20110409
Android ipm 20110409
ARM 64bit has come!
ARM 64bit has come!
x86-64/Linuxに独自メモリ空間を勝手増設
x86-64/Linuxに独自メモリ空間を勝手増設
Cpu Cache and Memory Ordering——并发程序设计入门
Cpu Cache and Memory Ordering——并发程序设计入门
Go言語のスライスを理解しよう
Go言語のスライスを理解しよう
ADB(Android Debug Bridge): How it works?
ADB(Android Debug Bridge): How it works?
2章 Linuxカーネル - メモリ管理1
2章 Linuxカーネル - メモリ管理1
0章 Linuxカーネルを読む前に最低限知っておくべきこと
0章 Linuxカーネルを読む前に最低限知っておくべきこと
Linuxカーネル超入門
Linuxカーネル超入門
条件式評価器の実装による管理ツールの抽象化
条件式評価器の実装による管理ツールの抽象化
15 Common Myths you were taught to believe about Cars
15 Common Myths you were taught to believe about Cars
Similaire à Basic of virtual memory of Linux
TechEd2010_T2-401_EffectiveHyper-V
TechEd2010_T2-401_EffectiveHyper-V
Kuninobu SaSaki
N110 ws12概要 osamut_公開版
N110 ws12概要 osamut_公開版
Osamu Takazoe
Windows Server 2012 のストレージ強化とエンタープライズへの活用
Windows Server 2012 のストレージ強化とエンタープライズへの活用
Daichi Ogawa
Osc2009 Sendai Xen 0124
Osc2009 Sendai Xen 0124
Kazuhisa Hara
Osc2009 Do Xen Hara
Osc2009 Do Xen Hara
Kazuhisa Hara
20120609 cod ws2012概要
20120609 cod ws2012概要
Osamu Takazoe
SaaS/クラウドコンピューティングでのオープンソース活用とセキュリティ
SaaS/クラウドコンピューティングでのオープンソース活用とセキュリティ
Kuniyasu Suzaki
Dbtechshowcasesapporo mysql-turing-for-cloud-0.9.3
Dbtechshowcasesapporo mysql-turing-for-cloud-0.9.3
infinite_loop
Introduction of Rancher at OSC Tokyo 17 Spring
Introduction of Rancher at OSC Tokyo 17 Spring
Go Chiba
コンテナ今昔物語_2021_12_22
コンテナ今昔物語_2021_12_22
勇 黒沢
Java EE7 䛸㻌JCache
Java EE7 䛸㻌JCache
maruyama097
仮想化環境の設計手法 〜プロのテクニック教えます〜
仮想化環境の設計手法 〜プロのテクニック教えます〜
VirtualTech Japan Inc.
仮想マシンにおけるメモリ管理
仮想マシンにおけるメモリ管理
Akari Asai
Awsのクラウドデザインパターンをwindows azureに持ってきてみた
Awsのクラウドデザインパターンをwindows azureに持ってきてみた
Sunao Tomita
SQL Server パフォーマンスカウンター
SQL Server パフォーマンスカウンター
Masayuki Ozawa
A 1-3 awsのクラウドデザインパターンをwindows-azureに持ってきてみた
A 1-3 awsのクラウドデザインパターンをwindows-azureに持ってきてみた
GoAzure
WALをバックアップとレプリケーションに使う方法
WALをバックアップとレプリケーションに使う方法
Takashi Hoshino
【学習メモ#1st】12ステップで作る組込みOS自作入門
【学習メモ#1st】12ステップで作る組込みOS自作入門
sandai
Hyper vを理解する
Hyper vを理解する
Naoki Abe
たのしいNode.js
たのしいNode.js
ishiki-takai
Similaire à Basic of virtual memory of Linux
(20)
TechEd2010_T2-401_EffectiveHyper-V
TechEd2010_T2-401_EffectiveHyper-V
N110 ws12概要 osamut_公開版
N110 ws12概要 osamut_公開版
Windows Server 2012 のストレージ強化とエンタープライズへの活用
Windows Server 2012 のストレージ強化とエンタープライズへの活用
Osc2009 Sendai Xen 0124
Osc2009 Sendai Xen 0124
Osc2009 Do Xen Hara
Osc2009 Do Xen Hara
20120609 cod ws2012概要
20120609 cod ws2012概要
SaaS/クラウドコンピューティングでのオープンソース活用とセキュリティ
SaaS/クラウドコンピューティングでのオープンソース活用とセキュリティ
Dbtechshowcasesapporo mysql-turing-for-cloud-0.9.3
Dbtechshowcasesapporo mysql-turing-for-cloud-0.9.3
Introduction of Rancher at OSC Tokyo 17 Spring
Introduction of Rancher at OSC Tokyo 17 Spring
コンテナ今昔物語_2021_12_22
コンテナ今昔物語_2021_12_22
Java EE7 䛸㻌JCache
Java EE7 䛸㻌JCache
仮想化環境の設計手法 〜プロのテクニック教えます〜
仮想化環境の設計手法 〜プロのテクニック教えます〜
仮想マシンにおけるメモリ管理
仮想マシンにおけるメモリ管理
Awsのクラウドデザインパターンをwindows azureに持ってきてみた
Awsのクラウドデザインパターンをwindows azureに持ってきてみた
SQL Server パフォーマンスカウンター
SQL Server パフォーマンスカウンター
A 1-3 awsのクラウドデザインパターンをwindows-azureに持ってきてみた
A 1-3 awsのクラウドデザインパターンをwindows-azureに持ってきてみた
WALをバックアップとレプリケーションに使う方法
WALをバックアップとレプリケーションに使う方法
【学習メモ#1st】12ステップで作る組込みOS自作入門
【学習メモ#1st】12ステップで作る組込みOS自作入門
Hyper vを理解する
Hyper vを理解する
たのしいNode.js
たのしいNode.js
Plus de Tetsuyuki Kobayashi
some topic of ffmpeg
some topic of ffmpeg
Tetsuyuki Kobayashi
New VIdeo CODEC AV1
New VIdeo CODEC AV1
Tetsuyuki Kobayashi
Try new transport protocol SRT (ver. 2)
Try new transport protocol SRT (ver. 2)
Tetsuyuki Kobayashi
Try new transport protocol SRT
Try new transport protocol SRT
Tetsuyuki Kobayashi
Raspberry Pi Zero とカメラモジュールで作るライブ配信実験機
Raspberry Pi Zero とカメラモジュールで作るライブ配信実験機
Tetsuyuki Kobayashi
WebOS Open Source Edition を試してみた
WebOS Open Source Edition を試してみた
Tetsuyuki Kobayashi
Linuxのユーザーランドをinitから全てまるごとgolangで書く
Linuxのユーザーランドをinitから全てまるごとgolangで書く
Tetsuyuki Kobayashi
組み込みLinuxでのGolangのススメ(Go con版)
組み込みLinuxでのGolangのススメ(Go con版)
Tetsuyuki Kobayashi
組み込みLinuxでのGolangのススメ
組み込みLinuxでのGolangのススメ
Tetsuyuki Kobayashi
Virtual memory 20070222-en
Virtual memory 20070222-en
Tetsuyuki Kobayashi
Patch101
Patch101
Tetsuyuki Kobayashi
Tweaking Google TV emulator
Tweaking Google TV emulator
Tetsuyuki Kobayashi
Inter-process communication of Android
Inter-process communication of Android
Tetsuyuki Kobayashi
Android is NOT just 'Java on Linux'
Android is NOT just 'Java on Linux'
Tetsuyuki Kobayashi
Init of Android
Init of Android
Tetsuyuki Kobayashi
Android On Ubuntu for developer
Android On Ubuntu for developer
Tetsuyuki Kobayashi
Reusing your existing software on Android
Reusing your existing software on Android
Tetsuyuki Kobayashi
Logging system of Android
Logging system of Android
Tetsuyuki Kobayashi
Logging system of Android
Logging system of Android
Tetsuyuki Kobayashi
Froyo DalvikVM JIT
Froyo DalvikVM JIT
Tetsuyuki Kobayashi
Plus de Tetsuyuki Kobayashi
(20)
some topic of ffmpeg
some topic of ffmpeg
New VIdeo CODEC AV1
New VIdeo CODEC AV1
Try new transport protocol SRT (ver. 2)
Try new transport protocol SRT (ver. 2)
Try new transport protocol SRT
Try new transport protocol SRT
Raspberry Pi Zero とカメラモジュールで作るライブ配信実験機
Raspberry Pi Zero とカメラモジュールで作るライブ配信実験機
WebOS Open Source Edition を試してみた
WebOS Open Source Edition を試してみた
Linuxのユーザーランドをinitから全てまるごとgolangで書く
Linuxのユーザーランドをinitから全てまるごとgolangで書く
組み込みLinuxでのGolangのススメ(Go con版)
組み込みLinuxでのGolangのススメ(Go con版)
組み込みLinuxでのGolangのススメ
組み込みLinuxでのGolangのススメ
Virtual memory 20070222-en
Virtual memory 20070222-en
Patch101
Patch101
Tweaking Google TV emulator
Tweaking Google TV emulator
Inter-process communication of Android
Inter-process communication of Android
Android is NOT just 'Java on Linux'
Android is NOT just 'Java on Linux'
Init of Android
Init of Android
Android On Ubuntu for developer
Android On Ubuntu for developer
Reusing your existing software on Android
Reusing your existing software on Android
Logging system of Android
Logging system of Android
Logging system of Android
Logging system of Android
Froyo DalvikVM JIT
Froyo DalvikVM JIT
Dernier
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
Toru Tamaki
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
Toru Tamaki
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
danielhu54
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Yuma Ohgami
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
iPride Co., Ltd.
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
Toru Tamaki
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
sugiuralab
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
Ryo Sasaki
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
taisei2219
Dernier
(9)
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
Basic of virtual memory of Linux
1.
組込みエンジニアのためのLinux入門
仮想メモリ編 2007.2.22 original 2012.10.27 revival 小林哲之 1
2.
注釈 • このスライドは2007年に作成して、CELFテク
ニカルジャンボリーで発表したものです。 • http://tree.celinuxforum.org/CelfPubWiki/JapanTechnicalJamboree13 • 内容的には現在でもほぼ通用するので再演 します。 2
3.
このスライドの対象とする方 • 今までずっと組込み機器のプロジェクト
に携わってきて最近はOSにLinuxを使っ ている方々
4.
このスライドの目的 • Linuxの仮想メモリの仕組みを理解し現
在のプロジェクトに役立てる。 – 仕組みを知らなくてもプログラムは動くが、 性能を引き出すためには仕組みの理解が 重要。 4
5.
まず基本の概念から • 仮想~、論理~ virtual,
logical – 仮想アドレス、論理デバイス、論理セ クタ、仮想マシン – あたかも ... のように扱う • 実~、物理~ real, physical – 実アドレス、物理デバイス、物理セクタ – そのもの、そのまんま 5
6.
仮想化: あたかも・・・ 実は •
あたかも巨大のようだが、実は少ない。 • あたかも平らのようだが、実は凸凹。 • あたかもたくさんのようだが、実はひとつ。 • あたかも占有しているようだが、実は共有。 仮想化は複雑さや個々に依存することを 隠蔽するマジック。 マジックなので種も仕掛けもある。 = 実と仮想の対応付け(マッピング) あたかもそう見えるように変換している。 6
7.
仮想化の代償 • マイナス面よりもプラス面が勝っている
から仮想化を行うわけだが、常にプラス とは限らない。 7
8.
物理メモリと仮想メモリ • いままでの大抵の組込み機器プロジェクトで
は物理メモリしか扱うことがなかった。 • 最近は組み込みシステムの規模の増大化に 伴ってLinuxやWindow CEなどPC向けOSの 流れを持つOSを使用することが多くなってき た。これらのOSは仮想メモリシステムを備え ている。 • このスライドではLinuxについて説明する。 8
9.
物理メモリ • 単一のメモリ空間 • 機器ごとにROM,RAM,I/Oの
ROM 実装アドレスが異なるので それを意識してプログラムする RAM I/O I/O I/O 9
10.
仮想メモリ • 利点 –
ユーザープログラムは実際のメモリマップ(実装アドレス、 実装サイズ)に依存しなくなる。 – 不連続な物理メモリの断片を連続する仮想メモリとして利 用できる。 – メモリ保護:バグによって無関係の部分のメモリが破壊さ れることを防止できる。 • 新しい概念の導入 – アドレス変換 – 多重メモリ空間 – デマンドページング 10
11.
仮想メモリの概念図 出典: フリー百科事典『ウィキペディア(Wikipedia)』
11
12.
アドレス変換 仮想アドレス空間
物理アドレス空間 ROM アドレスy RAM MMU I/O アドレスx Linux kernel I/O がコントロー ル I/O 12
13.
仮想メモリはCPUの中だけ 仮想アドレス空間
物理アドレス空間 ROM アドレスy RAM MMU アドレスx I/O I/O CPU I/O CPUから外にでてくるアドレスバスにのるのは物理アドレスだけ。 ロジアナでは仮想アドレスは観測できない。 13
14.
ユーザープログラムは仮想アドレスだけ 仮想アドレス空間
物理アドレス空間 ROM アドレスy RAM MMU アドレスx I/O I/O CPU I/O 物理アドレスを扱うのはカーネルモードだけ。 つまりカーネル本体とデバイスドライバ。 14
15.
MMUでのアドレス変換
31 22 21 12 11 0 仮想アドレス Directory Index Page Table Index Page Offset Page Directory Base Register Page Directory Directory Page Table Entry No page! ... page fault Page Table Page Entry 物理アドレス 15
16.
TLB
仮想アドレスページ 物理アドレスページ ... • Translation Lookaside Buffers • 仮想アドレスをkeyとして物理アドレスを得る ハッシュテーブルのようなもの • 大抵のアドレス変換はTLBにヒットするので 実際にPage Directory, Page Tableをアクセ スせずに済む。 16
17.
多重メモリ空間 プロセスごとに独立した仮想メモリ空間
物理アドレス空間 ROM RAM I/O I/O 17
18.
デマンドページング •
ページ単位でマッピングされる – ページのサイズはたいていは4Kbytes • 2段階で行われる 1. 仮想メモリの割り当て(mmap) 管理台帳に登録するだけ 2. 実際にアクセスがあったときに初めて そのページに物理メモリが割り当てられる アクセスのないページには物理メモリが割り当てられないので 仮想メモリサイズ >= 実際に必要な物理メモリサイズ 18
19.
デマンドページングの動作例 (1)
仮想アドレス空間 物理アドレス空間 read access 対応する 物理ページが ない! ページフォールト発生 カーネルモードへ 19
20.
デマンドページングの動作例(続) (2)
仮想アドレス空間 物理アドレス空間 DMA転送 マッピング カーネルがデータをロードして物理アドレスをマッピングする。 20
21.
デマンドページングの動作例(続) (3)
仮想アドレス空間 物理アドレス空間 data ユーザーモードに復帰。 ユーザープログラムからは何事もなかったように データが読める。 ... でも実際に時間はかかっている。 21
22.
ページキャッシュ
物理アドレス空間 ディスクからの読んだ内容はメモリに余裕がある限り保持しておく。 シーケンシャルにアクセスされる場合が多いので数ページ分を まとめて先読みを行う。 そのため(2)では毎回ディスクアクセスが発生するとは限らない。 22
23.
ページアウト (2)で物理メモリの空きがなかった場合、使用頻度の低いと思われるページを 解放する。そのページの内容が変更されていなければそのまま破棄。 変更されていればスワップデバイスに掃きだす。
仮想アドレス空間 物理アドレス空間 swap device 掃きだす ただし組込みLinuxではswap deviceを装備していない ページ ことが多い。 23
24.
ページアウト(続) 解放した分のページを使って要求されたページの割り当てを行う。 このような「お手玉」をすることで実際に搭載されている物理メモリサイズ よりも大きなサイズの仮想メモリを扱うことができる。
仮想アドレス空間 物理アドレス空間 DMA転送 no page 24
25.
ページの共有 仮想アドレス空間 プロセスA
物理アドレス空間 同じファイルの同じページは複数の プロセスから共有される。 プロセスB Read onlyのページだけでなく 25 write可のページも。
26.
コピーオンライト
プロセスA Write可でプライベートのページに 書き込みが発生すると・・・ write access r/w private ページフォルト 発生 read only プロセスB 26
27.
コピーオンライト(続)
プロセスA write access read/write copy read only カーネルはコピーしてページの設定を プロセスB read/writeに変更する 27
28.
プロセスのメモリ空間
process A B C 0x00000000 user space ... 1プロセスあたり約3GBのユーザメモリ空間 TASK_SIZE kernel カーネルの空間は各プロセスで共通。 space カーネルの空間はユーザーモードでは 0xffffffff Read/Write/Execute不可。 TASK_SIZEはi386では0xc0000000 プロセス切り替えに伴ってユーザーメモリ ARMでは 0xbf000000 空間が切り替わる。 28
29.
ユーザプロセスのメモリ空間の実例 cat /proc/<PROCESS_ID>/maps 00101000-0011a000
r-xp 00000000 fd:00 15172739 /lib/ld-2.4.so 0011a000-0011b000 r-xp 00018000 fd:00 15172739 /lib/ld-2.4.so 0011b000-0011c000 rwxp 00019000 fd:00 15172739 /lib/ld-2.4.so 0011e000-0024a000 r-xp 00000000 fd:00 15172740 /lib/libc-2.4.so 0024a000-0024d000 r-xp 0012b000 fd:00 15172740 /lib/libc-2.4.so 0024d000-0024e000 rwxp 0012e000 fd:00 15172740 /lib/libc-2.4.so 0024e000-00251000 rwxp 0024e000 00:00 0 08048000-08049000 r-xp 00000000 fd:00 11666681 /home/koba/lab/loop/a.out 08049000-0804a000 rw-p 00000000 fd:00 11666681 /home/koba/lab/loop/a.out b7fef000-b7ff1000 rw-p b7fef000 00:00 0 b7fff000-b8000000 rw-p b7fff000 00:00 0 bffeb000-c0000000 rw-p bffeb000 00:00 0 [stack] アドレス範囲 file offset inode file name r: read device w: write major:minor x: execute s: shared 29 p: private (copy on write)
30.
ユーザプロセスのメモリ空間の実例
(詳細) cat /proc/<PROCESS_ID>/smaps .... 0011e000-0024a000 r-xp 00000000 fd:00 15172740 /lib/libc-2.4.so Size: 1200 kB Rss: 136 kB RSS = 物理メモリサイズ Shared_Clean: 136 kB Shared_Dirty: 0 kB Private_Clean: 0 kB Private_Dirty: 0 kB 0024a000-0024d000 r-xp 0012b000 fd:00 15172740 /lib/libc-2.4.so Size: 12 kB Rss: 8 kB Shared_Clean: 0 kB Shared_Dirty: 0 kB Private_Clean: 0 kB Private_Dirty: 8 kB 0024d000-0024e000 rwxp 0012e000 fd:00 15172740 /lib/libc-2.4.so Size: 4 kB Rss: 4 kB Shared_Clean: 0 kB Shared_Dirty: 0 kB Private_Clean: 0 kB Private_Dirty: 4 kB 30 ....
31.
システムコールmmap #include <sys/mman.h> void *mmap(void
*start, size_t length, int prot, int flags, int fd, off_t offset); int munmap(void *start, sizt_t length); • ファイルやデバイスをメモリにマップ/アンマップする • 引数 prot – PROT_NONE または PROT_EXEC, PROT_READ, PROT_WRITEのOR演算 • 引数 flags – MAP_FIXED, MAP_SHARED, MAP_PRIVATE, MAP_ANONYMOUS, ... 31
32.
mmapのtips • MAP_FIXEDを指定しなければカーネルが空
いているページをさがしてくれる。 • MAP_FIXEDを指定したときに既存のページ と重なっていたら、そのページは内部的に munmapされる。 – なのでこのオプションは通常は使用しない。 • ファイルのオフセットはページサイズの整数 倍でなければならない。 • mmapとmunmapのアドレス、サイズは一致 していなくてもよい。 32
33.
mmapの使い方(1) • 巨大サイズのmallocの代用 –
コンパクションなどデータのコピーが発生しない。 – malloc/freeと違ってmunmapするときのaddr, size はmmapで確保したときと異なっていてもよい。 • まとめて1回のmmapで確保して少しづつ分割し てmunmapで返却するのもあり。 – glibcのmallocの実装ではある一定以上のサイズ のmallocはmmapを呼び出す。 • DEFAULT_MMAP_THRESHOLD = (128*1024) 33
34.
mmapの使い方(2) • 高速なファイルアクセス –
read, writeのシステムコールでは内部で物 理ページにバッファリングしている。そこか らユーザの指定した配列にコピーしている 。 – mmapを使うことで直接ページにアクセス できるようになるのでデータのコピーを減ら すことができる。 – Java1.4の java.nio.MappedByteBuffer 34
35.
mmapの使い方(3) • プロセス間の共有メモリ –
複数のプロセスから同じファイルをR/W可 sharedでマッピングする。 – IPCの共有メモリのシステムコール (shmget, shmat,..)は内部で同様のことを 行っている。 35
36.
mmapの使い方(4) • 物理メモリ、I/Oポートのアクセス –
デバイスファイル /dev/mem をマッピング することでユーザーモードで物理メモリ空 間をread/writeすることが可能。 – /dev/memをアクセスするにはrootの権限 が必要。 36
37.
まとめ • 仮想メモリの使用量と物理メモリの使用
量は異なる。実際に問題になるのは物 理メモリの使用量。 • 仮想メモリのオーバーヘッドはいつ発生 するのかを意識する。 – TLBミス – ページフォルト • システムコールmmapの活用。 37
38.
参考文献 • Linux kernel
ソース http://www.kernel.org/ • GNU C ライブラリのソース http://www.gnu.org/software/libc/ • “詳解LINUXカーネル 第2版” オライリージャパン • “Linuxカーネル2.6解読室” SoftBank Creative • Linux manコマンド • その他たくさんのWEB検索結果 38
39.
2007年当時
おまけ:最近の話題 • CELFのBootTimeResourcesより – KernelXIP NORフラッシュが – ApplicationXIP 使われなくなったため あまり聞かなくなった。 – (DataReadInPlace) • CELFのMemoryManagementResoucesより – Huge/large/superpages – Page cache compression → zramの名前でメインライン 化。 3.8ではstaging卒業の見込 み。 39
Télécharger maintenant