# HG changeset patch
# User tobaru
# Date 1519234310 -32400
# Node ID 3a99fc0296ce2379c6f038255a67e1a1da9f66c6
# Parent 0aabd94a01263dd7f72bc01e53bea7aab52cfc93
mindmap slide 修正
diff -r 0aabd94a0126 -r 3a99fc0296ce MindMap/GearsOS on Raspberry Pi.mm
--- a/MindMap/GearsOS on Raspberry Pi.mm Wed Feb 21 15:39:20 2018 +0900
+++ b/MindMap/GearsOS on Raspberry Pi.mm Thu Feb 22 02:31:50 2018 +0900
@@ -1,16 +1,18 @@
diff -r 0aabd94a0126 -r 3a99fc0296ce proceeding/last-proceeding.log
--- a/proceeding/last-proceeding.log Wed Feb 21 15:39:20 2018 +0900
+++ b/proceeding/last-proceeding.log Thu Feb 22 02:31:50 2018 +0900
@@ -1,4 +1,4 @@
-This is e-pTeX, Version 3.14159265-p3.7-160201-2.6 (utf8.euc) (TeX Live 2016) (preloaded format=platex 2017.5.28) 21 FEB 2018 11:03
+This is e-pTeX, Version 3.14159265-p3.7-160201-2.6 (utf8.euc) (TeX Live 2016) (preloaded format=platex 2017.5.28) 22 FEB 2018 02:23
entering extended mode
restricted \write18 enabled.
file:line:error style messages enabled.
@@ -247,4 +247,4 @@
929 hyphenation exceptions out of 8191
27i,15n,43p,451b,369s stack positions out of 5000i,500n,10000p,200000b,80000s
-Output written on last-proceeding.dvi (2 pages, 12280 bytes).
+Output written on last-proceeding.dvi (2 pages, 12288 bytes).
diff -r 0aabd94a0126 -r 3a99fc0296ce proceeding/last-proceeding.pdf
Binary file proceeding/last-proceeding.pdf has changed
diff -r 0aabd94a0126 -r 3a99fc0296ce proceeding/last-proceeding.synctex.gz
Binary file proceeding/last-proceeding.synctex.gz has changed
diff -r 0aabd94a0126 -r 3a99fc0296ce proceeding/last-proceeding.tex
--- a/proceeding/last-proceeding.tex Wed Feb 21 15:39:20 2018 +0900
+++ b/proceeding/last-proceeding.tex Thu Feb 22 02:31:50 2018 +0900
@@ -119,7 +119,7 @@
メモリ& コア & 時間 & 速度比較 \\ \hline \hline
1GB & 4Core & 15時間11分06秒 & 1.00倍 \\ \hline
16GB & 12Core& 2時間16分06秒 & 6.69倍 \\ \hline
- 756GB & 72Core & 2分26秒 & 374.42倍 \\ \hline
+ 756GB & 36Core & 2分26秒 & 374.42倍 \\ \hline
\end{tabular}
}
\caption{make時間の比較}
diff -r 0aabd94a0126 -r 3a99fc0296ce slide/images/maketime.pdf
Binary file slide/images/maketime.pdf has changed
diff -r 0aabd94a0126 -r 3a99fc0296ce slide/thesis.html
--- a/slide/thesis.html Wed Feb 21 15:39:20 2018 +0900
+++ b/slide/thesis.html Thu Feb 22 02:31:50 2018 +0900
@@ -86,7 +86,7 @@
@@ -103,6 +103,17 @@
+
実装までの流れ
+
+ - RaspberryPi上にGearsOSを実装するために、まずはCbCコンパイラをRaspberryPi(ARM)用に作成する
+ - その後に、CbCをを使ってxv6というOSを参考にRaspberryPiで動くGearsOSを作る
+ - xv6 とは ANIX V6 とい う OS を ANSI-C に書き換え、x86 に移植した OS である。xv6 は Raspberry Pi で動かす事ができる。
+
+
+
+
+
+
RaspberryPi上でCbCのmake
- Raspberry Pi 1 のメモリは 256MB と小さいため、 CbC を make することができない。
@@ -117,7 +128,7 @@
@@ -135,17 +146,80 @@
+
OSX CrossCompile
+
+ - OSX上でCbCを実装を試みた
+ - OSX上でCrossCompileを行うとMach-Oのバイナリが生成される。
+ - Mach-oのローダーを作らなければならず、実装は困難である。
+
+
+
+
+
+
Linux CrossCompile
- Linux環境でCbCを動かす際にCrossCompileを行なう方法がある。
- - RaspberryPiはARMのコードを生成するので、LinuxでもCrossCompileによってARMのコードを生成すればRaspberry Pi でも実行可能なファイルを作ることができる。
- - C言語で書かれた簡単なファイルをCrossCompileしたコマンドを示す。
+ - RaspberryPiはARMのコードを生成するので、CrossCompileによってARMのコードを生成すればRaspberry Pi でも実行可能なファイルを作ることができる。
+
+
+
+
+
+
+
LLVM/Clang
+
+ - CbC には、LLVM/Clang 上に実装したものと、GCC で実装したものがある。
+ - LLVM とは任意のプログラミング言語の静的コンパイルと 動的コンパイルの両方をサポートできる事を目的としたプロ ジェクトから始まった、モジューラと再利用可能な コンパイラ とツールチェーン技術の集まりである。
+ - Clang は高速なコンパイルを目的とした LLVM をバック エンドとした、C/C++/Objective-C の コンパイラ である。
+
+
+
+
+
+
+
LLVM CrossCompile
+
+ - Makefile に変更を加えることで LLVM/Clang 上に実装 された CbC で Raspberry Pi で実行できる ARM の コードを生成できるようにCrossCompilerを作ったが、動作していない
+ - LLVMかxv6のどちらに修正が必要なのか分かってないのでデバッガを使って調査していく
-
./bin/clang -target arm-linux-gnueabi -mfpu=neon-fp16 -marm
--I /net/open/Linux/arm/gcc-arm-none-eabi-7-2017-q4-major/arm-none-eabi/include/
- hello.c -c -mfloat-abi=hard
-
+
+
+
+
+
KVM
+
+ - ARM版のxv6をデバッグするためにKVMを使用する。
+ - KVMとは完全仮想化を実現できる機能の事である。
+ - 完全仮想化なので、kernelに変更を加えなくても別のOSを動かせるメリットがある。
+ - KVMはqemuによって操作を行う。
+ - qemu-system-armはRaspberryPiをサポートしていなかったが、KVMを立ち上げるために使うxmlファイルにarch=’armv7l’ machine=’versatileab’を指定する事で、解決した。
+
+
+
+
+
+
+
GCC CrossCompile
+
+
+
+
+
+
+
今後の課題
+
+ - LLVMで実装されたLLVMで作成したxv6が動作しない原因をKVMを用いて調べる。
+ - 必要であれば、xv6またはLLVMを修正していく。
+ - xv6kernelの構文に沿ってCbCで書き換える部分を考察する。
+
@@ -176,29 +250,8 @@
-
xv6
-
- - マサチューセッツ工科大の大学院生向け講義の教材として使うために、UNIX V6 とい う OS を ANSI-C に書き換え、x86 に移植した Xv6 OS である。Xv6 は Raspberry Pi に 移植する事ができる。ANSI-C で書かれている Xv6 を CbC に書き直す事で、Raspberry Pi で CbC を動かせるようになる。
-
-
-
-
-
-
-
LLVM/Clang
+
LLVM CrossCompile Makefile
- - CbC には、LLVM/Clang 上に実装したものと、GCC で実装したものがある。
- - LLVM とは任意のプログラミング言語の静的コンパイルと 動的コンパイルの両方をサポートできる事を目的としたプロ ジェクトから始まった、モジューラと再利用可能な compiler とツールチェーン技術の集まりである。
- - Clang は高速なコンパイルを目的とした LLVM をバック エンドとした、C/C++/Objective-C の compiler である。
-
-
-
-
-
-
-
LLVM CrossCompile
-
- - Makefile に変更を加えることで LLVM/Clang 上に実装 された CbC で Raspberry Pi で実行できるような ARM の コードを生成できるように実装した。
- makefileの一部を下に示す。
- CCはコンパイラで、すでにmakeしたCbCのコンパイラを指定している。
- AS(アセンブラ)やLD(リンカー)はarm-linux-gnuに続くコマンドを指定する。
@@ -229,15 +282,98 @@
-
GCC CrossCompile
-
- - GCC は C/C++/Objective-C などを様々な言語をコンパイルすることのできるコンパイラである。
- - GCCで実装されたCbCについてもARMのコードを生成するようにMakefileを実装した。
+LinuxのCPUコア
+
+ - CPUごとのコア数 18
+ - 論理プロセッサー 72
+
+
+dalmore+one grep cpu.cores /proc/cpuinfo | sort -u
+cpu cores : 18
++dalmore+one grep processor /proc/cpuinfo | wc -l
+72
+
+
+
+
+
+
+
OSXコア数
+
+firefly+one system_profiler SPHardwareDataType
+Hardware:
+
+ Hardware Overview:
+
+ Model Name: Mac Pro
+ Model Identifier: MacPro5,1
+ Processor Name: 6-Core Intel Xeon
+ Processor Speed: 2.66 GHz
+ Number of Processors: 2
+ Total Number of Cores: 12
+ L2 Cache (per Core): 256 KB
+ L3 Cache (per Processor): 12 MB
+ Memory: 16 GB
+ Processor Interconnect Speed: 6.4 GT/s
+ Boot ROM Version: MP51.007F.B03
+ SMC Version (system): 1.39f11
+ SMC Version (processor tray): 1.39f11
+ Serial Number (system): YM20300FGWR
+ Serial Number (processor tray): J515201PEBH8C
+ Hardware UUID: F6CA8AEA-6A98-53A9-826F-B3A3D465F23B
+
+
+
+
+
+
+
arm1.xml
+
<domain type='qemu' id='22'>
+ <name>arm1</name>
+ <uuid>8028f71a-1db8-40a4-94fa-5a4a42014273</uuid>
+ <memory>131072</memory>
+ <currentMemory>131072</currentMemory>
+ <vcpu>1</vcpu>
+ <os>
+ <type arch='armv7l' machine='versatileab'>hvm</type>
+ <kernel>/var/lib/libvirt/images/zImage-versatile-2.6.24-rc7.armv5tel</kernel>
+ <cmdline>"root=0800"</cmdline>
+ <boot dev='hd'/>
+ </os>
+ <features>
+ <acpi/>
+ </features>
+ <clock offset='utc'/>
+ <on_poweroff>destroy</on_poweroff>
+ <on_reboot>restart</on_reboot>
+ <on_crash>restart</on_crash>
+ <devices>
+ <emulator>/bin/qemu-system-arm</emulator>
+ <disk type='file' device='disk'>
+ <driver name='qemu' type='raw'/>
+ <source file='/var/lib/libvirt/images/arm1.img'/>
+ <target dev='hdc' bus='scsi'/>
+ </disk>
+ <input type='mouse' bus='ps2'/>
+ <graphics type='vnc' port='-1' autoport='yes' listen='0.0.0.0' passwd='43u@khii'>
+ <listen type='address' address='0.0.0.0'/>
+ </graphics>
+ <video>
+ <model type='cirrus' vram='16384' heads='1' primary='yes'/>
+ </video>
+ </devices>
+</domain>
+
+
+
+
+
+
+
+
GCC CrossCompile makefile
+
- CC にarm-linux-gnu-gccを指定することでARMのコードを生成できるようになる
- AS(アセンブラ)やLD(リンカー)はarm-linux-gnuに続くコマンドを指定する。
-
-
QEMU = qemu-system-arm
+QEMU = qemu-system-arm
include makefile.inc
CC = arm-linux-gnu-gcc
@@ -261,14 +397,6 @@
-S -O binary --prefix-symbols="_binary_$@" $@.out $@, " OBJCOPY $(TARGET_DIR)$@")
-
-
-
-
-
今後の課題
-
-
Xv6 で CbC が動くようになれば、Raspberry Pi 以外のハードウェアでの実装も容易に なるので、Linux 上での実装を目指して研究を進めていく。xv6 で CbC が動けば、続け て Linux 上で Gears OS の実装も行なっていく。
-
diff -r 0aabd94a0126 -r 3a99fc0296ce slide/thesis.md
--- a/slide/thesis.md Wed Feb 21 15:39:20 2018 +0900
+++ b/slide/thesis.md Thu Feb 22 02:31:50 2018 +0900
@@ -8,6 +8,11 @@
- メタレベルの処理では、メモリ管理、スレッド管理、CPU や GPU の資源管理を記述 することができる。
- 本研究では、ARM で動くシングルボードコンピュータである Raspberry Pi で Gears OS を動かせるようになる事で、ハードウェア上でもメタレベルの処理、並列実行ができるプログラミングを記述できるようになる事を目指している。
+# 実装までの流れ
+- RaspberryPi上にGearsOSを実装するために、まずはCbCコンパイラをRaspberryPi(ARM)用に作成する
+- その後に、CbCをを使ってxv6というOSを参考にRaspberryPiで動くGearsOSを作る
+- xv6 とは ANIX V6 とい う OS を ANSI-C に書き換え、x86 に移植した OS である。xv6 は Raspberry Pi で動かす事ができる。
+
# RaspberryPi上でCbCのmake
- Raspberry Pi 1 のメモリは 256MB と小さいため、 CbC を make することができない。
@@ -17,7 +22,7 @@
- ninja-buildはコア数を調べて実行するので使わない場合と比べてmakeが高速になる。
# make 時間の比較
-
+
# CrossCompile
- CrossCompile を行うことで make 時間の問題を解決する方法がある。
@@ -25,23 +30,72 @@
- Raspbian 以外の OS 環境であらかじめ Raspberry Pi で CbC が動くように CrossCompile を行い、その コードを Raspberry Pi に移す事で、実行できるようになる。
- Raspberry Pi の OS である Rasbian は qemu によるメモリの拡張もできないので、別の手法で Raspberry Pi 上に CbC を実装する方が好ましい。
+
+# OSX CrossCompile
+- OSX上でCbCを実装を試みた
+- OSX上でCrossCompileを行うとMach-Oのバイナリが生成される。
+- Mach-oのローダーを作らなければならず、実装は困難である。
+
+
# Linux CrossCompile
- Linux環境でCbCを動かす際にCrossCompileを行なう方法がある。
-- RaspberryPiはARMのコードを生成するので、LinuxでもCrossCompileによってARMのコードを生成すればRaspberry Pi でも実行可能なファイルを作ることができる。
-- C言語で書かれた簡単なファイルをCrossCompileしたコマンドを示す。
+- RaspberryPiはARMのコードを生成するので、CrossCompileによってARMのコードを生成すればRaspberry Pi でも実行可能なファイルを作ることができる。
+
+
+%# T図形
+% - CbC を Raspberry Pi で動かすためのアプローチの手法をを、I と T の形をした図の組み合わせによって説明を行う。
+% - I の上部分に cbclang や Xv6 などのソースコード名を、下部分にその機能の記述言語を記してある
+% - T の上部分は左に入力されるファイル、右に出力されるその機能によって出力されるファイルが記され、下部分にその機能の記述言語が記されている。
+%
+%
+
+% # Linux上でのCbCの実装
+% - OSX上に立ち上げられたLinux で CbC のCrossCompileを行う過程を図に示す。
+% - CbCは C によって記述されているため、CからARM形式の.oファイルを生成し、.oからARMのa.outを出力する。
+% - これらはARM形式なのでRaspberryPiで実行できるファイルである。
+%
+
+
+
+# LLVM/Clang
+- CbC には、LLVM/Clang 上に実装したものと、GCC で実装したものがある。
+- LLVM とは任意のプログラミング言語の静的コンパイルと 動的コンパイルの両方をサポートできる事を目的としたプロ ジェクトから始まった、モジューラと再利用可能な コンパイラ とツールチェーン技術の集まりである。
+- Clang は高速なコンパイルを目的とした LLVM をバック エンドとした、C/C++/Objective-C の コンパイラ である。
-```c
-./bin/clang -target arm-linux-gnueabi -mfpu=neon-fp16 -marm
--I /net/open/Linux/arm/gcc-arm-none-eabi-7-2017-q4-major/arm-none-eabi/include/
- hello.c -c -mfloat-abi=hard
-```
+# LLVM CrossCompile
+- Makefile に変更を加えることで LLVM/Clang 上に実装 された CbC で Raspberry Pi で実行できる ARM の コードを生成できるようにCrossCompilerを作ったが、動作していない
+- LLVMかxv6のどちらに修正が必要なのか分かってないのでデバッガを使って調査していく
+
+
+# KVM
+- ARM版のxv6をデバッグするためにKVMを使用する。
+- KVMとは完全仮想化を実現できる機能の事である。
+- 完全仮想化なので、kernelに変更を加えなくても別のOSを動かせるメリットがある。
+- KVMはqemuによって操作を行う。
+- qemu-system-armはRaspberryPiをサポートしていなかったが、KVMを立ち上げるために使うxmlファイルにarch='armv7l' machine='versatileab'を指定する事で、解決した。
+
+
+# GCC CrossCompile
+- GCC は C/C++/Objective-C などを様々な言語をコンパイルすることのできるコンパイラである。
+- GCCで実装されたCbCについてはARMのコードを生成するようにMakefileを作成した。
+% - LLVMと同様に動作していなかったが、GCCで実装されたCbCコンパイラのバージョンをあげる事で、 動作させる事に成功した。
+- Linux上でARMのコードを生成するためのツールチェーンであるgcc-linux-gnuを使う事でxv6をKVM上で動作させる事に成功した。
+
+
+
+# 今後の課題
+- LLVMで実装されたLLVMで作成したxv6が動作しない原因をKVMを用いて調べる。
+- 必要であれば、xv6またはLLVMを修正していく。
+- xv6kernelの構文に沿ってCbCで書き換える部分を考察する。
+
# T図形
-- CbC を Raspberry Pi で動かすためのアプローチの手法をを、I と T の形をした図の組み合わせによって説明を行う。
-- I の上部分に cbclang や Xv6 などのソースコード名を、下部分にその機能の記述言語を記してある
-- T の上部分は左に入力されるファイル、右に出力されるその機能によって出力されるファイルが記され、下部分にその機能の記述言語が記されている。
+ - CbC を Raspberry Pi で動かすためのアプローチの手法をを、I と T の形をした図の組み合わせによって説明を行う。
+ - I の上部分に cbclang や Xv6 などのソースコード名を、下部分にその機能の記述言語を記してある
+ - T の上部分は左に入力されるファイル、右に出力されるその機能によって出力されるファイルが記され、下部分にその機能の記述言語が記されている。
+
+
-
# Linux上でのCbCの実装
- OSX上に立ち上げられたLinux で CbC のCrossCompileを行う過程を図に示す。
@@ -49,24 +103,14 @@
- これらはARM形式なのでRaspberryPiで実行できるファイルである。
-
-
-# xv6
-- マサチューセッツ工科大の大学院生向け講義の教材として使うために、UNIX V6 とい う OS を ANSI-C に書き換え、x86 に移植した Xv6 OS である。Xv6 は Raspberry Pi に 移植する事ができる。ANSI-C で書かれている Xv6 を CbC に書き直す事で、Raspberry Pi で CbC を動かせるようになる。
-
-# LLVM/Clang
-- CbC には、LLVM/Clang 上に実装したものと、GCC で実装したものがある。
-- LLVM とは任意のプログラミング言語の静的コンパイルと 動的コンパイルの両方をサポートできる事を目的としたプロ ジェクトから始まった、モジューラと再利用可能な compiler とツールチェーン技術の集まりである。
-- Clang は高速なコンパイルを目的とした LLVM をバック エンドとした、C/C++/Objective-C の compiler である。
-
-# LLVM CrossCompile
-- Makefile に変更を加えることで LLVM/Clang 上に実装 された CbC で Raspberry Pi で実行できるような ARM の コードを生成できるように実装した。
+# LLVM CrossCompile Makefile
- makefileの一部を下に示す。
- CCはコンパイラで、すでにmakeしたCbCのコンパイラを指定している。
- AS(アセンブラ)やLD(リンカー)はarm-linux-gnuに続くコマンドを指定する。
- CFLAGS にターゲットオプションで arm-linux-gnueabihfを指定することで、ARMのコードを生成することができる。
- libgcc
+
```c
QEMU = qemu-system-arm
@@ -87,13 +131,84 @@
LIBS =/net/open/RaspberryPi/rasbian-img/usr/lib/gcc/arm-linux-gnueabihf/6/libgcc.a
```
+# LinuxのCPUコア
+- CPUごとのコア数 18
+- 論理プロセッサー 72
+```c
++dalmore+one grep cpu.cores /proc/cpuinfo | sort -u
+cpu cores : 18
++dalmore+one grep processor /proc/cpuinfo | wc -l
+72
+```
-# GCC CrossCompile
-- GCC は C/C++/Objective-C などを様々な言語をコンパイルすることのできるコンパイラである。
-- GCCで実装されたCbCについてもARMのコードを生成するようにMakefileを実装した。
+# OSXコア数
+```c
++firefly+one system_profiler SPHardwareDataType
+Hardware:
+
+ Hardware Overview:
+
+ Model Name: Mac Pro
+ Model Identifier: MacPro5,1
+ Processor Name: 6-Core Intel Xeon
+ Processor Speed: 2.66 GHz
+ Number of Processors: 2
+ Total Number of Cores: 12
+ L2 Cache (per Core): 256 KB
+ L3 Cache (per Processor): 12 MB
+ Memory: 16 GB
+ Processor Interconnect Speed: 6.4 GT/s
+ Boot ROM Version: MP51.007F.B03
+ SMC Version (system): 1.39f11
+ SMC Version (processor tray): 1.39f11
+ Serial Number (system): YM20300FGWR
+ Serial Number (processor tray): J515201PEBH8C
+ Hardware UUID: F6CA8AEA-6A98-53A9-826F-B3A3D465F23B
+```
+
+# arm1.xml
+```c
+
+ arm1
+ 8028f71a-1db8-40a4-94fa-5a4a42014273
+ 131072
+ 131072
+ 1
+
+ hvm
+ /var/lib/libvirt/images/zImage-versatile-2.6.24-rc7.armv5tel
+ "root=0800"
+
+
+
+
+
+
+ destroy
+ restart
+ restart
+
+ /bin/qemu-system-arm
+
+
+
+
+
+
+
+
+
+
+
+
+
+```
+
+# GCC CrossCompile makefile
- CC にarm-linux-gnu-gccを指定することでARMのコードを生成できるようになる
- AS(アセンブラ)やLD(リンカー)はarm-linux-gnuに続くコマンドを指定する。
-
```c
QEMU = qemu-system-arm
@@ -120,10 +235,4 @@
```
-# 今後の課題
-Xv6 で CbC が動くようになれば、Raspberry Pi 以外のハードウェアでの実装も容易に なるので、Linux 上での実装を目指して研究を進めていく。xv6 で CbC が動けば、続け て Linux 上で Gears OS の実装も行なっていく。
-
-
-
-
diff -r 0aabd94a0126 -r 3a99fc0296ce slide/thesis.pdf.html
--- a/slide/thesis.pdf.html Wed Feb 21 15:39:20 2018 +0900
+++ b/slide/thesis.pdf.html Thu Feb 22 02:31:50 2018 +0900
@@ -70,7 +70,7 @@
@@ -87,6 +87,17 @@
+
実装までの流れ
+
+ - RaspberryPi上にGearsOSを実装するために、まずはCbCコンパイラをRaspberryPi(ARM)用に作成する
+ - その後に、CbCをを使ってxv6というOSを参考にRaspberryPiで動くGearsOSを作る
+ - xv6 とは ANIX V6 とい う OS を ANSI-C に書き換え、x86 に移植した OS である。xv6 は Raspberry Pi で動かす事ができる。
+
+
+
+
+
+
RaspberryPi上でCbCのmake
- Raspberry Pi 1 のメモリは 256MB と小さいため、 CbC を make することができない。
@@ -101,7 +112,7 @@
@@ -119,17 +130,80 @@
+
OSX CrossCompile
+
+ - OSX上でCbCを実装を試みた
+ - OSX上でCrossCompileを行うとMach-Oのバイナリが生成される。
+ - Mach-oのローダーを作らなければならず、実装は困難である。
+
+
+
+
+
+
Linux CrossCompile
- Linux環境でCbCを動かす際にCrossCompileを行なう方法がある。
- - RaspberryPiはARMのコードを生成するので、LinuxでもCrossCompileによってARMのコードを生成すればRaspberry Pi でも実行可能なファイルを作ることができる。
- - C言語で書かれた簡単なファイルをCrossCompileしたコマンドを示す。
+ - RaspberryPiはARMのコードを生成するので、CrossCompileによってARMのコードを生成すればRaspberry Pi でも実行可能なファイルを作ることができる。
+
+
+
+
+
+
+
LLVM/Clang
+
+ - CbC には、LLVM/Clang 上に実装したものと、GCC で実装したものがある。
+ - LLVM とは任意のプログラミング言語の静的コンパイルと 動的コンパイルの両方をサポートできる事を目的としたプロ ジェクトから始まった、モジューラと再利用可能な コンパイラ とツールチェーン技術の集まりである。
+ - Clang は高速なコンパイルを目的とした LLVM をバック エンドとした、C/C++/Objective-C の コンパイラ である。
+
+
+
+
+
+
+
LLVM CrossCompile
+
+ - Makefile に変更を加えることで LLVM/Clang 上に実装 された CbC で Raspberry Pi で実行できる ARM の コードを生成できるようにCrossCompilerを作ったが、動作していない
+ - LLVMかxv6のどちらに修正が必要なのか分かってないのでデバッガを使って調査していく
-
./bin/clang -target arm-linux-gnueabi -mfpu=neon-fp16 -marm
--I /net/open/Linux/arm/gcc-arm-none-eabi-7-2017-q4-major/arm-none-eabi/include/
- hello.c -c -mfloat-abi=hard
-
+
+
+
+
+
KVM
+
+ - ARM版のxv6をデバッグするためにKVMを使用する。
+ - KVMとは完全仮想化を実現できる機能の事である。
+ - 完全仮想化なので、kernelに変更を加えなくても別のOSを動かせるメリットがある。
+ - KVMはqemuによって操作を行う。
+ - qemu-system-armはRaspberryPiをサポートしていなかったが、KVMを立ち上げるために使うxmlファイルにarch=’armv7l’ machine=’versatileab’を指定する事で、解決した。
+
+
+
+
+
+
+
GCC CrossCompile
+
+
+
+
+
+
+
今後の課題
+
+ - LLVMで実装されたLLVMで作成したxv6が動作しない原因をKVMを用いて調べる。
+ - 必要であれば、xv6またはLLVMを修正していく。
+ - xv6kernelの構文に沿ってCbCで書き換える部分を考察する。
+
@@ -160,29 +234,8 @@
-
xv6
-
- - マサチューセッツ工科大の大学院生向け講義の教材として使うために、UNIX V6 とい う OS を ANSI-C に書き換え、x86 に移植した Xv6 OS である。Xv6 は Raspberry Pi に 移植する事ができる。ANSI-C で書かれている Xv6 を CbC に書き直す事で、Raspberry Pi で CbC を動かせるようになる。
-
-
-
-
-
-
-
LLVM/Clang
+
LLVM CrossCompile Makefile
- - CbC には、LLVM/Clang 上に実装したものと、GCC で実装したものがある。
- - LLVM とは任意のプログラミング言語の静的コンパイルと 動的コンパイルの両方をサポートできる事を目的としたプロ ジェクトから始まった、モジューラと再利用可能な compiler とツールチェーン技術の集まりである。
- - Clang は高速なコンパイルを目的とした LLVM をバック エンドとした、C/C++/Objective-C の compiler である。
-
-
-
-
-
-
-
LLVM CrossCompile
-
- - Makefile に変更を加えることで LLVM/Clang 上に実装 された CbC で Raspberry Pi で実行できるような ARM の コードを生成できるように実装した。
- makefileの一部を下に示す。
- CCはコンパイラで、すでにmakeしたCbCのコンパイラを指定している。
- AS(アセンブラ)やLD(リンカー)はarm-linux-gnuに続くコマンドを指定する。
@@ -213,15 +266,98 @@
-
GCC CrossCompile
-
- - GCC は C/C++/Objective-C などを様々な言語をコンパイルすることのできるコンパイラである。
- - GCCで実装されたCbCについてもARMのコードを生成するようにMakefileを実装した。
+LinuxのCPUコア
+
+ - CPUごとのコア数 18
+ - 論理プロセッサー 72
+
+
+dalmore+one grep cpu.cores /proc/cpuinfo | sort -u
+cpu cores : 18
++dalmore+one grep processor /proc/cpuinfo | wc -l
+72
+
+
+
+
+
+
+
OSXコア数
+
+firefly+one system_profiler SPHardwareDataType
+Hardware:
+
+ Hardware Overview:
+
+ Model Name: Mac Pro
+ Model Identifier: MacPro5,1
+ Processor Name: 6-Core Intel Xeon
+ Processor Speed: 2.66 GHz
+ Number of Processors: 2
+ Total Number of Cores: 12
+ L2 Cache (per Core): 256 KB
+ L3 Cache (per Processor): 12 MB
+ Memory: 16 GB
+ Processor Interconnect Speed: 6.4 GT/s
+ Boot ROM Version: MP51.007F.B03
+ SMC Version (system): 1.39f11
+ SMC Version (processor tray): 1.39f11
+ Serial Number (system): YM20300FGWR
+ Serial Number (processor tray): J515201PEBH8C
+ Hardware UUID: F6CA8AEA-6A98-53A9-826F-B3A3D465F23B
+
+
+
+
+
+
+
arm1.xml
+
<domain type='qemu' id='22'>
+ <name>arm1</name>
+ <uuid>8028f71a-1db8-40a4-94fa-5a4a42014273</uuid>
+ <memory>131072</memory>
+ <currentMemory>131072</currentMemory>
+ <vcpu>1</vcpu>
+ <os>
+ <type arch='armv7l' machine='versatileab'>hvm</type>
+ <kernel>/var/lib/libvirt/images/zImage-versatile-2.6.24-rc7.armv5tel</kernel>
+ <cmdline>"root=0800"</cmdline>
+ <boot dev='hd'/>
+ </os>
+ <features>
+ <acpi/>
+ </features>
+ <clock offset='utc'/>
+ <on_poweroff>destroy</on_poweroff>
+ <on_reboot>restart</on_reboot>
+ <on_crash>restart</on_crash>
+ <devices>
+ <emulator>/bin/qemu-system-arm</emulator>
+ <disk type='file' device='disk'>
+ <driver name='qemu' type='raw'/>
+ <source file='/var/lib/libvirt/images/arm1.img'/>
+ <target dev='hdc' bus='scsi'/>
+ </disk>
+ <input type='mouse' bus='ps2'/>
+ <graphics type='vnc' port='-1' autoport='yes' listen='0.0.0.0' passwd='43u@khii'>
+ <listen type='address' address='0.0.0.0'/>
+ </graphics>
+ <video>
+ <model type='cirrus' vram='16384' heads='1' primary='yes'/>
+ </video>
+ </devices>
+</domain>
+
+
+
+
+
+
+
+
GCC CrossCompile makefile
+
- CC にarm-linux-gnu-gccを指定することでARMのコードを生成できるようになる
- AS(アセンブラ)やLD(リンカー)はarm-linux-gnuに続くコマンドを指定する。
-
-
QEMU = qemu-system-arm
+QEMU = qemu-system-arm
include makefile.inc
CC = arm-linux-gnu-gcc
@@ -245,14 +381,6 @@
-S -O binary --prefix-symbols="_binary_$@" $@.out $@, " OBJCOPY $(TARGET_DIR)$@")
-
-
-
-
-
今後の課題
-
-
Xv6 で CbC が動くようになれば、Raspberry Pi 以外のハードウェアでの実装も容易に なるので、Linux 上での実装を目指して研究を進めていく。xv6 で CbC が動けば、続け て Linux 上で Gears OS の実装も行なっていく。
-