# HG changeset patch # User okud # Date 1613284834 -32400 # Node ID 82407e7fefd97b5ca1434671d6fb9bd55348f7e5 # Parent 101c076a190ba75346a9f8119d672e807d8707ce fix diff -r 101c076a190b -r 82407e7fefd9 paper/chapter/bibitem.tex --- a/paper/chapter/bibitem.tex Sat Feb 13 02:11:40 2021 +0900 +++ b/paper/chapter/bibitem.tex Sun Feb 14 15:40:34 2021 +0900 @@ -1,11 +1,15 @@ \begin{thebibliography}{99} \bibitem{IntelNews} Intel/Unified EFI Forum, https://www.uefi.org ,2017/11/3. -\bibitem{CbC} 宮城光希,河野慎治.CbC言語によるOS記述.琉球大学工学部情報工学科平成29年度学位論文(学士),2017. +\bibitem{CbC} 清水隆博,河野慎治..xv6の構成要素の継続の分析.情報処理学会研究報告,2020. \bibitem{gcc} GNU Compiler Collection (GCC) Internals,https://gcc.gnu.org/onlinedocs/gccint/ \bibitem{llvm} Clang: a C language family frontend for LLVM,https://clang.llvm.org. \bibitem{singularity} https://sylabs.io/singularity/ -\bibitem{Gears} 清水隆博,河野真治.GearsOSのメタ計算.琉球大学工学部情報工学科令和3年度学位論文(修士),2021. +\bibitem{Gears} 東恩納 琢偉,河野真治.Gears OSでモデル検査を実現する手法について.情報処理学会研究報告2020 \bibitem{xv6} Russ Cox, M Frans Kaashoek, and Robert Morris. Xv6, a simple unix-like teaching operating system,2012. \bibitem{raspi} https://www.raspberrypi.org \bibitem{uefi} https://wiki.osdev.org/UEFI +\bibitem{edk2} https://github.com/tianocore/tianocore.github.io/wiki/EDK-II +\bibitem{gnu} https://sourceforge.net/projects/gnu-efi + + \end{thebibliography} \ No newline at end of file diff -r 101c076a190b -r 82407e7fefd9 paper/chapter/chapter2.tex --- a/paper/chapter/chapter2.tex Sat Feb 13 02:11:40 2021 +0900 +++ b/paper/chapter/chapter2.tex Sun Feb 14 15:40:34 2021 +0900 @@ -2,7 +2,7 @@ \section{Continuation based C(CbC)} -Continuation based C(CbC)\cite{CbC}は、当研究室で開発されているプログラミング言語である。 +Continuation based C(CbC)\cite{CbC}は、当研究室で開発を行っているプログラミング言語である。 CbCは、C言語の下位言語であり、関数呼び出しではなく継続を導入している。 CbCでは、関数の代わりにCodeGearという単位でプログラミングを行う。 CodeGearは入力と出力を持ち、CbCでは引数が入出力になっている。 @@ -47,28 +47,26 @@ \section{CbC on GCC CrossCompile } -Singularityで環境を作成するためにファイル\ref{src:cbc_gcc_cross}を作成する。 +Singularityで環境を作成するためにソースコード\ref{src:cbc_gcc_cross}を作成する。 -\renewcommand{\lstlistingname}{ファイル} +\renewcommand{\lstlistingname}{ソースコード} \lstinputlisting[language=Bash, numbers=left, breaklines=true, basicstyle=\ttfamily\footnotesize, frame=single, caption=CbC\_gcc\_cross.def, label=src:cbc_gcc_cross]{file/cbc_gcc_cross.def} defファイルが作成できたらsingularity buildを下記のように行う。 -\renewcommand{\lstlistingname}{コマンド} \begin{lstlisting}[frame=lrbt,label=sif build,caption={singularity build}] - singularity build --fakeroot cbc_gcc_cross.sif cbc_gcc_cross.def + $ singularity build --fakeroot cbc_gcc_cross.sif cbc_gcc_cross.def \end{lstlisting} -buildで生成されたsifファイル\ref{code:cbc_gcc_arm_cross}でCrossCompileを行う。 +buildで生成されたsifソースコード\ref{code:cbc_gcc_arm_cross}でCrossCompileを行う。 例としてソースコード\ref{src:hello_cbc}を動かす。 -\renewcommand{\lstlistingname}{ファイル} \begin{lstlisting}[frame=lrbt,label=code:cbc_gcc_arm_cross,caption={singularity上でCrossCompile}] singularity shell cbc_gcc_cross.sif Singularity> arm-linux-gnueabihf-gcc src/hello.cbc Singularity> file a.out a.out: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-armhf.so.3, for GNU/Linux 3.2.0, not stripped \end{lstlisting} -CrossCompileにより生成されたa.outはRaspberry Piで実行することができる。 +CrossCompileにより生成されたa.outがARM PlatformのRaspberry Piで実行することができる。 -\renewcommand{\lstlistingname}{ソースコード} + \lstinputlisting[language=Bash, numbers=left, breaklines=true, basicstyle=\ttfamily\footnotesize, frame=single, caption=hello.cbc, label=src:hello_cbc]{file/hello.cbc} diff -r 101c076a190b -r 82407e7fefd9 paper/chapter/chapter3.tex --- a/paper/chapter/chapter3.tex Sat Feb 13 02:11:40 2021 +0900 +++ b/paper/chapter/chapter3.tex Sun Feb 14 15:40:34 2021 +0900 @@ -3,10 +3,10 @@ \section{GearsOS} -GearsOS\cite{Gears}は当研究室で信頼性と拡張性をテーマに開発されているOSである。 +GearsOS\cite{Gears}は当研究室で信頼性と拡張性をテーマに開発を行っているsOSである。 GearsOSはContinuation based C(CbC)によって記述されている。 当研究室では、GearsOSの信頼性とCbCの有効性を示すために、基本的な機能を揃えたOSであるxv6をCbCで置き換えを行っている。 -これにより、OSのここのシステムコールを持つ状態を明確にすることができると考えている。 +これにより、OSの個々のシステムコールが持つ状態を明確にすることができると考えている。 CbCで書き換えられたxv6をRaspberry Piに搭載することでハードウェア上でのメタレベルの計算や並列実行を行える様になる。 \section{xv6} @@ -17,7 +17,7 @@ シンプルで学習しやすい。 \section{Raspberry Pi} -Raspberry Pi\cite{raspi}は、ARMプロセッサを搭載したシングルコンピュータ。 +Raspberry Pi\cite{raspi}は、ARMプロセッサを搭載したシングルコンピュータである。 Raspberry Piにはいくつか種類があり、本研究ではRaspberry Pi 3 Model Bを仕様する。 Raspberry Pi 3 Model Bには、USB2.0コネクタが4つ、microSDカードスロット、HDMI出力、40ピンGPIOなどがついている。 CPUは、ARMアーキテクチャのCortex-A53でCPUクロックは1.4GHzでメモリは1GBある。 @@ -31,8 +31,8 @@ この時、HDMIでディスプレイに接続しておく。 Mac側では、USBシリアルケーブルのドライバをインストールしてRaspberry Piと接続すると、 devディレクトリ直下にtty.usbserialとして認識される。 -Mac側でコマンド\ref{screen}を使い、シリアル通信を行うと、Macのキーボードから入力を行える様になる。 -この時、コマンド\ref{screen}を打ってから、Raspberry Piに電源を入れないと正常に起動しない。 +Mac側でソースコード\ref{screen}を使い、シリアル通信を行うと、Macのキーボードから入力を行える様になる。 +この時、ソースコード\ref{screen}を打ってから、Raspberry Piに電源を入れないと正常に起動しない。 \begin{figure}[H] \begin{center} @@ -44,5 +44,5 @@ \renewcommand{\lstlistingname}{コマンド} \begin{lstlisting}[frame=lrbt,label=screen,caption={screenコマンド}] - screen /dev/tty.usbserial-143130 1152000 + $ screen /dev/tty.usbserial-143130 1152000 \end{lstlisting} \ No newline at end of file diff -r 101c076a190b -r 82407e7fefd9 paper/chapter/chapter4.tex --- a/paper/chapter/chapter4.tex Sat Feb 13 02:11:40 2021 +0900 +++ b/paper/chapter/chapter4.tex Sun Feb 14 15:40:34 2021 +0900 @@ -36,7 +36,7 @@ \subsection{メモリ空間} 16bitCPUのメモリのアドレス空間は2の16乗で64KBであった。 つまり、16bitBIOSでは、64KBの16倍である1MBまでしか使えない。 -UEFIでは、32bitなら2の32乗bitで4GB、64bitなら2の64乗bitで256TBまでメモリを潤沢に使える。 +UEFIでは、32bitなら2の32乗bitで4GB、64bitなら2の64乗bitで16EBまでメモリを潤沢に使える。 これにより、セキュリティを含めたシステム機能の強化が可能になった。 \subsection{BOOT} @@ -59,10 +59,33 @@ 一方、UEFIではUSBが主流なため、デバイスの規格は基本的にUSBであることが多い。 \section{UEFI Application} -aaa -\section{UEFI Hello World} -UEFIを開発する際に + UEFIの内部構造は図\ref{uefiapps}になっている。 +赤い点線で囲まれている部分がUEFIのApplicationの部分になる。 +UEFI Boot Managreがロード、実行するプログラムのことをUEFI Applicationと呼ぶ。 +UEFI仕様に適合するUEFI実装はEFI Byte Codeを含んでいるため全てのプロセッサ、アーキテクチャと互換性がある。 +つまりUEFI Applicationにも互換性がある。 +また、UEFI ApplicationはC言語で記述することが可能なので、個人で開発することが可能である。 +UEFI Applicationはefiという拡張子でC言語で書かれたコードをコンパイルするとUEFI Applicationになる。 +UEFI OS LoaderはUEFI Applicationの一種であり、これを使えばbootloaderも開発が可能になる。 + +\begin{figure}[H] + \begin{center} + \includegraphics[width=150mm]{fig/uefiapp.png} + \end{center} + \caption{UEFI Application} + \label{uefiapps} +\end{figure} + +\section{UEFI 開発環境} + UEFIを開発するにあたって使われる開発環境が2つ存在する。 + Intelのtianocore EDK2\cite{edk2}とGNU-efi\cite{gnu}である。 +Tianocoreは、独自のビルドシステムをもつ大規模で複雑な環境で、 +CrossCompilerとしてGCC、MinGW、Microsoft Visual C++などが使用できる。 +UEFI Application のコンパイルだけでなくBIOS ROMにフラッシュするUEFIファームウェアのコンパイルにも利用できる。 + Gnu-efiは、システムのネイティブGCCでUEFIアプリケーションをコンパイルするためのライブラリとヘッダのセットである。 +UEFI ファームウェアのコンパイルには使用できない。UEFI Applicationをリンクするためのライブラリがいくつかあり、 +UEFI Applicationの開発に特化している。 \section{Raspberry Pi上のUEFI} -a + \section{QEMU 上の UEFI} \ No newline at end of file diff -r 101c076a190b -r 82407e7fefd9 paper/chapter/chapter5.tex --- a/paper/chapter/chapter5.tex Sat Feb 13 02:11:40 2021 +0900 +++ b/paper/chapter/chapter5.tex Sun Feb 14 15:40:34 2021 +0900 @@ -1,6 +1,16 @@ \chapter{Boot Loader} -\section{bootloader} +\section{Boot Loader} +Boot Loaderは、OSをLoadしてBootさせる役割をもつプログラムである。 +図\ref{bootloader}は、UEFIとPlatformの関係を表したもので、赤い円の部分がBootLoaderである。 +図\ref{bootloader}のようにBootLoaderはBootManagerから起動され、OSをLoadし、bootさせる。 + -aaa \ No newline at end of file +\begin{figure}[H] + \begin{center} + \includegraphics[width=150mm]{fig/bootloader.png} + \end{center} + \caption{bootloader} + \label{bootloader} +\end{figure} \ No newline at end of file diff -r 101c076a190b -r 82407e7fefd9 paper/chapter/introduction.tex --- a/paper/chapter/introduction.tex Sat Feb 13 02:11:40 2021 +0900 +++ b/paper/chapter/introduction.tex Sun Feb 14 15:40:34 2021 +0900 @@ -2,10 +2,10 @@ \pagenumbering{arabic} %ページ番号の表記方法 \section{要旨} -2017年にIntel社が2020年までにLegacy BIOSとUEFIへの互換を非推奨とし、互換モジュールのCSMを削除すると発表した。\cite{IntelNews} +2017年、Intel社は2020年までにLegacy BIOSとUEFIへの互換を非推奨とし、互換モジュールのCSMを削除すると発表した。\cite{IntelNews} Legacy BIOSは長年に渡り16bitパソコンの時代からの資産を引き継いできたため、16bitモードでしか動作しない。 そのためPCの進化に伴い、致命的な問題点が発生する。 -問題点として、拡張性がないことがあげられる。EthernetやUSBにつながるでディスクなど、新たにブートデバイスが追加されるたびに, +問題点の一つとして、拡張性がないことがあげられる。EthernetやUSBにつながるディスクなど、新たにブートデバイスが追加されるたびに, OSのブートローダを変更しなければならない。またマザーボードごとに、ファームウェアをアセンブラで開発する必要がある。 また、1MBのメモリ制限により、セキュリティを含めたシステム機能の強化が困難であるためセキュリティにも問題がある。 これらの問題を解決するためにUEFIが開発された。 diff -r 101c076a190b -r 82407e7fefd9 paper/chapter/thanks.tex --- a/paper/chapter/thanks.tex Sat Feb 13 02:11:40 2021 +0900 +++ b/paper/chapter/thanks.tex Sun Feb 14 15:40:34 2021 +0900 @@ -1,6 +1,11 @@ \chapter*{謝辞} -感謝します。 +本研究の遂行及び本論文の作成にあたり御多忙にもかかわらず終始懇切丁寧に御指導と御教授を賜りました +河野真治准教授に深く感謝します。 +本研究の遂行及び本論文の作成にあたり数々の貴重な御助言と細やかな御配慮を戴いた並列信頼研究室の +清水隆博さん、東恩納琢偉さん、一木貴裕君さん、安田亮君さん、城後 明慈さんに深く感謝します。 + また一年間共に研究を行い、数々の御助言並びに細かな御配慮を戴いた宮平賢君、上地悠斗君、大蔵海人君 +並びに並列信頼研究室の皆様と毎週ゼミでお世話になったハリーズさんに深く感謝します。 \thispagestyle{empty} diff -r 101c076a190b -r 82407e7fefd9 paper/fig/bootloader.png Binary file paper/fig/bootloader.png has changed diff -r 101c076a190b -r 82407e7fefd9 paper/fig/uefi.png Binary file paper/fig/uefi.png has changed diff -r 101c076a190b -r 82407e7fefd9 paper/fig/uefiapp.png Binary file paper/fig/uefiapp.png has changed diff -r 101c076a190b -r 82407e7fefd9 paper/final_thesis.pdf Binary file paper/final_thesis.pdf has changed diff -r 101c076a190b -r 82407e7fefd9 slide/images/CbC.png Binary file slide/images/CbC.png has changed diff -r 101c076a190b -r 82407e7fefd9 slide/slide.md --- a/slide/slide.md Sat Feb 13 02:11:40 2021 +0900 +++ b/slide/slide.md Sun Feb 14 15:40:34 2021 +0900 @@ -48,26 +48,73 @@ - CPUなどの機種依存性を避けることができる - GearsOSはCbC(Continuation based C)で記述されていて、CPUやデバイスに影響されない - 様々な組み込みシステムに対してGearsOSを応用できる様になる -- --- # CbC(Continuation based C) +- 並列信頼研究で開発されているプログラミング言語 +- C言語の下位言語 +- 関数呼び出しではなく継続(goto) +- 関数の代わりにCodeGearという単位でプログラミングを行う。 + +--- + + +![CbCの遷移](images/CbC.png) + + + --- # GearsOS - +- 並列信頼研究で開発されているOS +- 信頼性と拡張性がテーマ +- CbCによって記述されている +- x.v6をCbCで書き直して実装している --- # UEFI +- Unified Extensible Firmware Interfaceの略 +- OSとプラットフォームファームウェアの間のソフトウェアインタフェースを定義する仕様 +- Intel、AMD、Apple、Microsoftなどの企業からなるUnified EFI Forumの元で開発 +- BIOSの後継 +--- + +# UEFIのここがすごい +- CPUやドライバに依存しない +- 2TBを超える大きなディスクからBootできる +- ネットワークにつながる +- メモリも64bitなら理論上16EB +- 高速でBoot +- 仕様だから開発が簡単 --- # UEFI Application +- UEFI Boot Managreがロード、実行するプログラムのこと +- C言語で記述可能 +- OSがなくてもプログラムを書ける +- CPUやドライバに依存しない --- # UEFI 開発環境 +- EDK2 +- gnu-efi + +--- + +# EDK2 +- 独自のビルドシステムをもつ大規模で複雑な環境 +- CrossCompilerとしてGCC、MinGW、Microsoft Visual C++などが使用できる +- UEFI Application のコンパイルだけでなくBIOS ROMにフラッシュするUEFIファームウェアのコンパイルにも利用できる + +--- + +# gnu-efi +- システムのネイティブGCCでUEFIアプリケーションをコンパイルできる +- UEFI Applicationをリンクするためのライブラリがある +- UEFI Applicationの開発に特化している ---