【Linux】親プロセス内のタイマで同期しながら子プロセスと周期的な通信をする
夜桜,綺麗だね 前回の記事では,パイプを使った基本的なプロセス間通信をまとめた. 今回は,そのパイプによる通信を周期的に行うために,タイマ割込みを使ってみた. 具体的には,親プロセスでタイマ用のスレッドを作り,定期的にメインスレッドにシグナルを送ってもらう. メインスレッド側ではシグナルを待機しておき,シグナルが来たらパイプに書き込む. だが,私はマルチスレッド/マルチプロセスのプログラムについては素人なので,この実装が適切なのかは分からないことを先に断っておく. なお,環境はUbuntu 22.04 LTSである. タイマ用スレッド サンプルプログラム タイマ用スレッド 一定時間ごとにメイン…
もう梅が咲いてるね 少しOSよりの技術を勉強する機会があったので,備忘録的に残そうと思う. 今回はC/C++で親プロセスと子プロセス間をパイプで通信する方法をまとめる. 子プロセスの生成 パイプによるプロセス間通信 サンプルプログラム 子プロセスの生成 子プロセスを作るには,forkシステムコールを使う. fork()を呼び出すと,呼び出したプロセスのコピーが作られ,呼び出したプロセスが親プロセス,新しく作られたプロセスが子プロセスとなる. このとき,子プロセスのためのアドレス空間が新たに確保される. 子プロセスは親プロセスのコピーなので,fork()後も同じプログラムを実行する. 子プロセス…
St. Valentine's Day C++からYAMLファイルを読み込む必要があり,色々調べたのでまとめる. 以下,環境はmacOS Sequoia(バージョン15.2)である. yaml-cppのインストール 簡単なYAMLファイルの読込み 階層的なYAMLファイルの読込み yaml-cppのインストール まず,C++からYAMLを扱うためのライブラリをインストールする. いくつかあるらしいが,情報が多かったyaml-cppというライブラリをインストールした. macOSではHomebrewでインストールできる. $ brew install yaml-cpp 簡単なYAMLファイルの読…
2025年も無難に過ごせますように 以下,アラサー博士号取得者のこれまでの振返りと今年の抱負(ただのポエム)である. 同じような博士人生を歩んでいる人,これから歩む人,歩もうか迷ったり悩んでいる人にとって,「あ,こんな人もいるんだな〜」と思ってもらえたら嬉しい. 早いもので,私が博士号を取得してから数年が経った. 大学の学部に入学したときは,まさか自分が博士になるとは思ってもみなかった. その後,学部4年生から始めた研究が楽しくて,修士,博士とそのまま進み,大学には9年もお世話になった. 博士課程に在籍中は生活費などを自分で出していて,すごく貧乏な学生だった. 学振DCにM2の時から毎年応募し…
もう肌寒いけどRustといったらカニ 前回の記事では,Rustの構造体などを学んだ. 今回はジェネリック型というものについて学ぶ.C++のテンプレートに少し似ている. ジェネリック型 Option型 Result型 Result型を返すmain関数 ジェネリック型 構造体や列挙型で任意の型を受け取れるようにしたもの.自動で型推論してくれるし,::<T>を使って明示的に型を指定することもできる. struct Rectangle<T> { x: T, y: T } fn main(){ let rec_int = Rectangle{x:2, y:5}; let rec_float = Rect…
【2024年11月】Linuxカーネルをビルドしてパッケージ化してみた
秋はホットコーヒー片手に論文だよね Linuxカーネルをソースからビルドして,パッケージ化するところまでのメモ. 以下,Ubuntu 22.04 LTSで実験済み. 準備 Linuxカーネルのソースコードをダウンロード カーネルコンフィグの設定 .configファイルの修正 .configファイルをビルド対象カーネルに合わせる カーネルのビルド カーネルパッケージの作成 カーネルパッケージのインストール GRUBの設定 参考にしたwebサイト 準備 まず,必要なものをaptでインストールする. build-depを動かすためには,/etc/apt/sources.listのファイルでdeb-s…
カニ可愛い,そして美味い 前回の記事では,Rustの変数や基本型,制御構文を勉強した. 今回は,構造体などのデータ構造を学ぶ. 構造体 タプル構造体 ユニット構造体 メソッド 列挙型 構造体 Rustの構造体はC言語とそんなに変わらないように見える. データの配置もメモリ上に隣り合っているとのこと. 構造体の要素のことをフィールドといい,オブジェクトのフィールドには.演算子でアクセスできる. 構造体をインスタンス化する際は,各フィールドを束縛する必要がある. このとき,可変のインスタンスを作成すると,全てのフィールドが可変となる. #![allow(dead_code)] struct Hum…
Rustのマスコットキャラって何でカニなの 前回の記事で,私のmacOS上にRustの開発環境構築し,HelloWorldまで確認した. 今回はTour of Rustというチュートリアル的なものを動かしながら,Rustという言語への理解を深めていきたい. なお,Rustの公式ドキュメントもあるので,合わせて参照していきたい. 変数 変数宣言 可変/不変な変数 基本の型 型の変換 定数 配列 関数 複数の戻り値 空の戻り値 制御構文 if式 loop式 while式 for式 match式 おわりに 変数 変数宣言 変数宣言は次のようにletを使う.これは関数型言語でいう変数への値の束縛に相当…
【macOS】Rust開発環境構築からHelloWorldまでやってみた【2024年11月】
Rustといったらカニ 今更になってRustに興味を持ち始めた. それはこんなニュースを目にしたからだ. あのDARPAがC言語からRustへの変換ツールを作るらしい. 似たようなc2rustは既にあるが,より高精度にメモリ安全なコードを出力したいということだろうか. 何事もHello, Worldから始めるので,とりあえず環境構築してやってみよう. 私の環境は,以下の通りである. macOS Sequoia (バージョン15.1) Apple M2 チップ rustupのインストール cargoでHelloWorldプロジェクトの作成 まとめ rustupのインストール Rustはrustu…
【Linux Tips】シンボリックリンクの作成と削除コマンド
静かでゆっくりできるカフェ行きたい 普段からUbuntuを使っているが,ちょくちょく忘れるのでメモ. シンボリックリンクの作成コマンド シンボリックリンクを作りたいときは,以下のコマンドを実行する. ln -s path/to/file path/to/link シンボリックリンクの削除コマンド シンボリックリンクを削除するときは以下のようにunlinkコマンドを実行する. unlink path/to/link シンボリックリンクの変更 シンボリックリンクを変更したいときは,以下のようにlnコマンドにオプションを付ける. 変更対象がファイルかディレクトリかでオプションが異なるので注意すること…
Intel oneAPI Construction KitをインストールしてRISC-Vのリファレンス実装を動かしてみた
ホットコーヒーが美味しい季節 SYCLについて調べていく中で,oneAPI Construction Kitというものがあると知ったのでインストールして動かしてみた. oneAPI Construction Kit (OCK)とは OCKをインストールする準備 必須ライブラリのインストール LLVM 17のインストール oneAPIサンプルプログラムのダウンロード OCKのダウンロードとインストール サンプルプログラムの実行 まとめ oneAPI Construction Kit (OCK)とは OCKはDPC++コンパイラと自前のアーキテクチャを繋ぐためのもの. つまり,SYCLのカーネルを…
SYCLコンパイラをソースコードからビルドしてサンプル実行までやってみた
カフェでまったりビルド 最近,SYCLについて少し調べているので,以下にまとめる. SYCLとは SYCLコンパイラのインストール githubからソースコードをダウンロード ソースコードをビルド インストールの確認 サンプルプログラムを実行 まとめ SYCLとは SYCLはKhronosグループが策定している規格で,ヘテロジーニアス環境においてGPUやFPGA,DSP(Digital Signal Processor)などを扱いやすくするもの. 言語はC++で記述し,一つのソースファイルにホスト側とデバイス側の処理を記述する. 2024年8月時点では,SYCL 2020 revision 9…
「ブログリーダー」を活用して、Doctor’s Doodlesさんをフォローしませんか?