星野歯科駒沢クリニック

HOSHINO DENTAL KOMAZAWA CLINIC

プログラミング && 歯科治療

2025.03.12

①プログラミング && 歯科治療

$$(AND制御演算子)

プログラミング && 歯科治療
左項のコマンドが成功した時、右項のコマンドを実行する。左項のコマンドが失敗した時は、右項のコマンドを実行しない。

if(分岐制御条件式)

&&をif文で書き直すと
if プログラミング then 歯科治療 fi
ワンライナーのコマンドにすると
if プログラミング; then 歯科治療; fi

②論理的思考法 -プログラミング的思考-

論理的思考法とは、物事を順序立てて考え、計画的に目的を実行できる事、問題解決力を向上させる思考法。プログラミング教育の目的として、安易な即応的思考ではなく、知識・経験から論理的に考え判断する事を学ぶ。又、目的の解決法は一つではない事も学ぶ。逆に論理的ではない思考を簡単に言うと、「分からないから、面倒だから、これでいいや」と物事を直ぐに対応してしまう事。安易なその場しのぎな対応の事。
もし歯科医が論理的ではない思考で治療をすると、どうなってしまうのか?治療の失敗につながります。

③より良い治療を受けるために -隠れた常識-

患者さんがより良い治療を受けるためには、医療設備・歯科医のスキルは必要条件として当然です。他に隠れた条件もあります。それは実益がある問題解決力です。治療に問題が生じた場合に、適切かつ正確に判断できているのか。これは治療で非常に重要な事になるでしょう。一本の歯の治療でも問題解決力は必要ですが、一口腔単位の治療(矯正治療など)は、期間も長く、審美と機能の両立を考えるなど問題解決力が重要となります。

患者さんが「歯科医の思考判断力が優れているのか判断する」のは難しいと思います。しかし最近では、「プログラミング的思考を学ぶという事が、問題解決力を養うのに役立っている」という事が分かってきました。患者さんの状態は個人差があり、条件が異なるため、問題解決のプロセスが見えてくるまで熟考し、安易な治療が行われないようにするべきです。
歯科医が論理的思考の上で、専門知識を最大限に活かせる事が、より良い治療につながると思います。

④プログラミングの基礎知識

1.プログラミング言語

プログラミング言語は数多く存在します。例えばFORTRAN,C言語,C++,C#,JavaScript,Ruby,PHP,VBA,Bash,Swift,GO,Assembly,Python,SQL,Perl などがあります。
その言語の規則に基づいた形式で、プログラムを記述し、コンピュータに処理を指示します。

2.言語処理系

プログラミング言語で書かれたテキストファイル(ソースコード)を動かすには、処理系というプログラムが必要です。

コンパイル言語
Compile(コンパイル)とは、ソースコードを実行可能ファイルに変換する事。実行可能ファイルとは、コンピュータが直接実行できるバイナリーコード(機械語命令列)。ソースコードでは動かないので、コンパイルをして実行可能ファイルに変換して実行します。
C言語など

インタプリタ言語
コンパイルは必要なく、インタプリタによって内部形式に変換され実行されます。スクリプト言語とも呼ばれています。
Bash,Pythonなど

3.ノイマン型コンピュータ

現在のコンピュータは、フォン・ノイマンが提唱した「ノイマン型」と呼ばれる構造になっています。ノイマン型コンピュータとは、演算装置・制御装置
・記憶装置・入力装置・出力装置で構成されています。プログラムは、記憶装置に格納されてから実行されます。

4.GUI/CUI

GUI(グラフィカル・ユーザ・インタフェース)
ウインドウ、アイコンなどをマウスで操作する。

CUI(キャラクタ・ユーザ・インタフェース)
キーボードから文字(コマンド)を入力して操作する。別名 CLI(コマンドライン・インタフェース)

5.文字コードと符号化方式

文字コードの基本は、ASCII(英文字)です。日本語ではJISコード、全世界の文字を集めたUnicodeがあります。
・ASCII
・JIS
・Unicode
文字とビット組み合わせの対応規則(文字コード)を定義して、符号化方式を用いて利用します。
・Shift_JIS
・EUC-JP
・UTF-8
1.文字コード
① ASCII
・米国標準コード
・英数字、記号、制御文字
・1バイトコード(7ビット)
② ASCII各国版
・ISO/IEC 646
・JIS X 0201
・カタカナ(半角)
・1バイトコード(8ビット)
③ ASCII拡張版
・ISO/IEC 2022
・JIS X 0208
・漢字、カタカナ、平仮名(全角)
・2バイトコード(7,8ビット)
・JIS X 0213
・JIS X 0208拡張版
・JIS 2000,JIS 2004
④ Unicode
・国際符号化文字集合(UCS)
・ISO/IEC 10646
・JIS X 0221
・マルチバイト

※ ISO(国際規格) JIS(日本規格)
2.符号化方式

1バイトコードのASCII、JIS X 0201は、2バイトコードのJIS X 0208と併用する符号化方式で、Shift_JIS、EUC-JPがあります。Unicodeは UTF-8、UTF-16、UTF-32があります。
① Shift_JIS
・JIS X 0201 + JIS X 0208
・Windows環境依存文字
・CP932
・Windows-31J
・MS932
・2バイトコード(8ビットコード)
② EUC-JP
・ASCII + JIS X 0208
・Extended Unix Code
・2バイトコード(8ビットコード)
③ UTF-8
・8ビット単位、1~4バイトコード
・ASCII互換

⑤プログラムの基本

1.プログラムの基本構造
・順次処理 (sequential)
・選択処理 (select)
・反復処理 (loop)
順次処理 : プログラムを順番に実行する
選択処理 : 条件によって処理内容を変える
反復処理 : 同じ処理を繰り返し実行する
1)プログラムユニット
サブルーチン (subroutine) : モジュール
・ 手続き (procedure) : 動作の実行
・ 関数 (function) : 戻り値生成
サブルーチン基本形
・ 引数
仮引数 : 定義時の引数 (parameter)
実引数 : 呼出し時の引数 (argument)
・ 戻り値 (return value)
実行結果を呼出し元へ返す値
2)プログラムの作成
1.ソースコード (C言語)
2.プリプロセス (preprocessor)
インクルード : include
ヘッダファイル : header file
ライブラリ定義
3.コンパイル (compiler)
CPU固有のアセンブリ言語に変換
① 字句解析 : lexical analyzer
② 構文解析 : parser
③ コード生成 : code generator
4.アセンブル (assembler)
アセンブリ言語を機械語に変換
オブジェクトファイル
5.リンク (linker)
ライブラリ、オブジェクトファイルを結合
ダイナミックリンク (実行時に参照)
6.実行可能プログラム
2.プログラムの実行
プログラムの実行は CPUが行います
CPU : 中央処理装置
・ OSがプログラムをメモリに転送
・ メモリからCPUに転送し、解読をして実行
CPU処理の基本
① Fetch : 命令をレジスタに読み込む
② Decode : レジスタの命令を解読
③ Execute : 演算、制御など命令を実行
CPUの構成
・ 制御装置
・ 演算装置 (ALU)
・ 記憶装置 (レジスタ)
スレッドの生成
・ プログラムを実行 (プロセス生成)
・ プロセス内部でスレッド生成
スレッド : Thread
・ コードを実行する実体
・ 関数、サブルーチンから生成
・ コード、データ、レジスタ値(コンテキスト)
・ スレッドが無いとプロセスのプログラムは実行できない
プロセス : Process
・ メモリに展開された実行中のプログラム
・ スレッドを含むリソースコンテナ
・ リソースはメモリ、ファイルアクセスなどスレッド実行に必要
・ OSが管理する実行中のプログラムの単位
3.CPUアーキテクチャ
設計構想の分類
① RISC : Reduced Instruction Set Computer
縮小命令セット (単純な命令の組み合わせで実行)
② CISC : Complex Instruction Set Computer
複合命令セット (複雑な処理も1つの命令で実行)
命令セット : CPUで使用する命令の集合と動作の規定
CPU基本機能の拡張分類
① x86
・IA-32アーキテクチャ
・CISC
・32 bit
・リトルエンディアン
・i386
② x86_64
・IA-32拡張版
・CISC
・64 bit
・リトルエンディアン
・AMD64
バイトオーダー : メモリのデータ格納方式
① ビッグエンディアン : 0x12, 0x34
② リトルエンディアン : 0x34, 0x12
※ 0x1234 (2バイト以上)
4.データ構造
メモリのデータ配置
Data Structure: C
・変数 : variable
・配列 : array[]
・構造体: struct
1)変数
・データとしてメモリ確保
・型がメモリサイズ決定
・メモリ空間での名前参照
・データ型
int型 : 4バイト(整数型)
char型: 1バイト (整数型/文字型)
・定義(宣言)
int s;
int a,b;
・代入
s = 10;
・初期化(宣言+代入)
int x = 2;
int y = {3};
・文字: character
char x = ‘A’;
2)配列
・連続したメモリ配置
・要素は同じ型
・文字列: char型配列
char x[4] = “ABC”;
char y[4] = {‘A”B”C’,’¥0′};
終了文字=’¥0′: ASCII 0x00(NUL)
・int型
int z[3] = {1,2,3};
・main関数への引数(コマンドライン)
int main(int argc, char *argv[]);
argc: argument count
argv: argument vector
char *argv[]: 配列の先頭要素へのポインタ
(文字列の先頭アドレス)
*argv[] と**argv は同じ
argc: argvの要素数
argv[0], argv[1], argv[2] -> 3
argv[0]: プログラム名
argv[1]: 引数1
argv[2]: 引数2
vector: ベクタ
・複数の文字列を格納するデータ構造
・char *型の配列
・(char *)0が最後の要素
3)構造体
・配列と異なり連続したメモリの配置ではない
・メモリ配置は境界調整のためパディング
・要素は複数の型、複数のデータ
・構造体タグ(型の名前)
struct ABC (struct ABC型)
struct: 構造体宣言(キーワード)
・構造体を格納する変数
struct ABC x;
(struct ABC型の変数x)
・構造体メンバ(データ定義)
struct ABC {}x;
ブロック内でメンバ定義
{int i, char d[5];}
・typedef: 型に別名を付ける
type name(型名)-> define(定義)
typedef struct list list;
struct list -> list
構造体タグ名と型名は名前空間が異なるので同名でも可
・名前空間: C
・変数名、関数名、型名
・構造体タグ名、共用体タグ名

5.プロセスの生成

UNIX/Linux
arch/x86(IA-32,x86_64)

・プログラムを実行 ➝ プロセスの生成

・プロセスはカーネルが管理 プロセスID

・カーネル

  OS本体のプログラム
  プログラムの実行はカーネルモードで実行

・CPU特権レベルの変更

  ユーザモード ➝ カーネルモード
  ユーザ空間からシステムコール

・システムコール

  OS内部の機能を関数として呼び出す
  カーネル空間(メインメモリ)で実行

・カーネル処理へのイベント

  ① ソフトウェア割り込み (int $0x80)
  ② システムコール (sysenter, syscall)
  ③ ハードウェア割り込み

6. Linuxプログラミング

 ・C言語
 ・アセンブリ言語
 ・スクリプト言語

 1)C言語 
    コード ➝ ビルド ➝ 実行

  ・プログラム ➝ ライブラリ関数 ➝ システムコール
  ・プログラム ➝ システムコール

  ・関数
    1.System call
    ・カーネルが提供する関数
    ・fork, execve, …

    2.Library call
    ・ライブラリに含まれる関数
    ・execv, execl, …

    ・戻り値 関数(引数)

  ・システムコール
    1.fork
     #include
     pid_t fork(void);

    ・プロセスのコピーを生成

    ・pid_t 型
      符号付整数 (int)
      プロセスID
      ライブラリ定義データ型
      typedef: 型名定義(別名)

    ・include: ヘッダファイル取り込み
    ・ヘッダファイル: ライブラリを定義したファイル

    2.execve
     #include
     int execve(const char *path, char *const argv[], char *const envp[]);

    ・指定プログラムの実行

    ・実行するプログラムの
      path: パス名
      argv: 引数(配列)
      envp: 環境(配列)

    ・env: 環境変数の設定

  ・ライブラリ関数
    ・execv
    ・execvp
    ・execl
    ・execle
    ・execlp

     #include

    ・指定プログラムの実行

     int execv(const char *path, char *const argv[]);

    ・execv
      path: パス名
      argv: 引数(配列)

    ・exec
      v: vector(配列)引数
      l: list(リスト)引数
      e: env(環境変数)
      p: path(検索パス)

  2)アセンブリ言語
    コード ➝ アセンブル(リンク)➝ 実行

  ・オペコード、オペランド
  ・マシン語命令と1対1対応

  ・システムコール(CPU命令)
    x86: sysenter
    x64: syscall

  3)スクリプト言語
    コード ➝ シェル ➝実行

  ・シェルプログラミング
    bash (Linux shell)

  ・端末エミュレータ ➝ シェル起動
  ・ユーザ ➝ シェル ➝ カーネル

  ・shell(シェル)

   ・interpreter
     コマンドインタプリタ
     コマンド解釈実行
   ・interactive
     対話的
     キーボード入力
   ・shell script
     シェルスクリプト
     ファイル入力

  ・プログラム
    シェルコマンド(ビルトイン)
    実行ファイル(外部コマンド)

   1.shell command
     シェル内部コマンド
     cd, pwd, export, …

   2.executable program
     シェル外部コマンド(PATH)
     /bin/ls, /usr/bin/cal, …
     スクリプトファイル(テキスト➝インタプリタ)
     バイナリファイル(C言語➝コンパイル)

   ・コマンドの判別
     type コマンド名

   ・コマンド実行(構文)
     command option argument
     コマンド オプション 引数

   ・シェルスクリプト
     コマンドを記述したテキストファイル

   ・シェルスクリプト実行
     ① bash(コマンド)の引数
       bash ./file.sh
     ② カレントシェルで実行
       . ./file.sh
       source ./file.sh
     ③ 実行ファイル
       #!/bin/bash
       chmod +x file.sh
       ./file.sh

   3.Shell Script

    ① command argument
      ・command: コマンド(実行ファイル)として実行
      ・argument: 別のコマンドの引数として実行

    ② shell
      ・current: シェル変数、環境変数
      ・sub:   シェル変数、環境変数
      ・child:  環境変数

    ③ process
      ・parent: forkを実行したプロセス
      ・child: forkを実行したプロセスのコピー

    ④ variable
      ・local: シェル変数
      ・environment: 環境変数

    ⑤ environment
      ・PATH=$PATH:/パス
      ・export PATH
      ・~/.bashrc

      ・PATH設定なし➝./file.sh
      ・PATH設定あり➝ file.sh

    ⑥ .,source
      ・カレントシェルでファイル読み込み

    ⑦ file permission
      ・chmod +x 実行許可
      ・実行ファイル

    ⑧ shebang
      ・#!/bin/bash
      ・インタプリタの指定

    ・サブシェル (fork)
      (cmd)
    ・カレントシェル (exec)
      { cmd;}

    ・fork
      ・親プロセスとコード共有
      ・データ、スタックはコピー
      ・コピー領域の変更は親プロセスに影響しない

    ・shell command
      ・current shell
      ・ビルトインコマンド

    ・executable program
      ・child(shell,process)
      ・外部コマンド

7.プロセス間通信

IPC: InterProcess Communication

・親子プロセス
・任意プロセス
・ネットワーク上のプロセス
・プロセスにシグナル送信

1)パイプ
・親子プロセス間
・コマンド(出力➝入力)
・ls | wc (fork)
・単方向

2)名前付きパイプ
・任意プロセス間
・p: ファイル
・named pipe (FIFO)
・mkfifo (mknod)

3)ソケット
・ネットワーク通信
・s: ファイル
・soket, bind

4)シグナル
・プロセスにシグナル送信
・端末制御文字
・killコマンド

・シグナル
・stty -a
・kill -l
・受信時の動作

①シグナル

・SIGINT :終了 ^C interrupt
・SIGQUIT :終了 ^\ core dump
・SIGTSTP :中断 ^Z
・SIGTERM :終了
・SIGKILL :終了

②stty -a(端末環境)

制御文字設定
・intr = ^C
・quit = ^\
・susp = ^Z
・eof = ^D

・^C = Ctrl + C
・端末入力の^CをSIGINTに変換し送信

・^D: end of file (logout, exit)

③kill -l (シグナル一覧)

シグナル番号、シグナル名
・2) SIGINT
・3) SIGQUIT
・9) SIGKILL
・15)SIGTERM
・18)SIGTSTP

kill: 指定プロセスにシグナル送信
kill -INT PID

④シグナル受信時の動作

1)デフォルト動作
2)シグナルハンドラ起動
3)シグナル無視

・trap:シグナルハンドラの設定

・シグナル受信時の動作変更
trap コマンド シグナル名

・シグナル無視
trap ” INT TERM

View数

337

カテゴリーアーカイブ
月別アーカイブ
ランキング

クリニックについて

CLINIC OVERVIEW

料金表

PRICE LIST