SlideShare a Scribd company logo
.
.
第 1 回 UNIX V6 読書会
@bobuhiro11
@bobuhiro11 () 第 1 回 UNIX V6 読書会 1 / 24
UNIX V6? (1)
@bobuhiro11 () 第 1 回 UNIX V6 読書会 2 / 24
UNIX V6? (2)
実行プログラム (プロセス) の管理
メモリ管理
ファイルシステム
ファイルと周辺デバイスで共通の I/O
割り込み
端末処理サポート
@bobuhiro11 () 第 1 回 UNIX V6 読書会 3 / 24
PDP11
@bobuhiro11 () 第 1 回 UNIX V6 読書会 4 / 24
動かしてみた
PDP-11 のエミュレータ SIMH を使う.
ディレクトリ移動は chdir
vim,emacs はない.ed のみ
@bobuhiro11 () 第 1 回 UNIX V6 読書会 5 / 24
PDP11
DEC 社が開発したプロセッサ
1 ワード 16 ビット (命令,データを 16 単位で扱う)
デバイスをメモリの上位 8K バイトに割り当て
レジスタ 用途
r0,r1 計算用,関数の戻り値
r2,r3,r4 ローカル処理
r5 フレームポインタ
r6(sp) スタックポインタ
r7(pc) プログラムカウンタ
@bobuhiro11 () 第 1 回 UNIX V6 読書会 6 / 24
プロセス
@bobuhiro11 () 第 1 回 UNIX V6 読書会 7 / 24
仮想アドレス (1)
@bobuhiro11 () 第 1 回 UNIX V6 読書会 8 / 24
仮想アドレス (2)
@bobuhiro11 () 第 1 回 UNIX V6 読書会 9 / 24
APR
@bobuhiro11 () 第 1 回 UNIX V6 読書会 10 / 24
マッピング (1)
@bobuhiro11 () 第 1 回 UNIX V6 読書会 11 / 24
マッピング (2)
@bobuhiro11 () 第 1 回 UNIX V6 読書会 12 / 24
System Call
@bobuhiro11 () 第 1 回 UNIX V6 読書会 13 / 24
K&R C 言語
/* void func(int a,int b) */
void func(a,b)
int a;
int b;
{
...
}
/* a -= 1; */
a =- 1;
@bobuhiro11 () 第 1 回 UNIX V6 読書会 14 / 24
K&R C 言語
// char 1byte
// int 2byte
// void* 2byte
#define SW 0177570
struct{
int integ;
};
p = SW ->integ;
@bobuhiro11 () 第 1 回 UNIX V6 読書会 15 / 24
fork() を使ったプログラム
int main(void){
pid_t pid = fork ();
if( pid == 0)
printf("child [pid:%d] n", getpid ());
else
printf("parent [pid:%d] n", getpid ());
return 0;
}
// $ ./ fork
// parent [pid :39582]
// child [pid :39583]
@bobuhiro11 () 第 1 回 UNIX V6 読書会 16 / 24
C library – fork()
_fork:
mov r5 ,-(sp)
mov sp ,r5
sys fork
br 1f
bec 2f
jmp cerror
1:
mov r0 ,_par_uid
clr r0
2:
mov (sp)+,r5
rts pc
@bobuhiro11 () 第 1 回 UNIX V6 読書会 17 / 24
System Call – fork()
fork ()
{
register struct proc *p1 , *p2;
p1 = u.u_procp;
for(p2 = &proc [0]; p2 < &proc[NPROC ];
p2++)
if(p2 ->p_stat == NULL)
goto found;
u.u_error = EAGAIN;
goto out;
@bobuhiro11 () 第 1 回 UNIX V6 読書会 18 / 24
System Call – fork()
found:
if(newproc ()) {
u.u_ar0[R0] = p1 ->p_pid;
u.u_cstime [0] = 0;
u.u_cstime [1] = 0;
u.u_stime = 0;
u.u_cutime [0] = 0;
u.u_cutime [1] = 0;
u.u_utime = 0;
return;
}
u.u_ar0[R0] = p2 ->p_pid;
out:
u.u_ar0[R7] =+ 2;
}
@bobuhiro11 () 第 1 回 UNIX V6 読書会 19 / 24
System Call
@bobuhiro11 () 第 1 回 UNIX V6 読書会 20 / 24
newproc()
newproc ()
{
int a1 , a2;
struct proc *p, *up;
register struct proc *rpp;
register *rip , n;
p = NULL;
retry:
mpid ++;
if(mpid < 0) {
mpid = 0;
goto retry;
}
for(rpp = &proc [0]; rpp < &proc[NPROC ]; rpp ++) {
if(rpp ->p_stat == NULL && p== NULL)
p = rpp;
if (rpp ->p_pid == mpid)
goto retry;
}
if ((rpp = p)== NULL)
panic("no procs");
@bobuhiro11 () 第 1 回 UNIX V6 読書会 21 / 24
newproc()
rip = u.u_procp;
up = rip;
rpp ->p_stat = SRUN;
rpp ->p_flag = SLOAD;
rpp ->p_uid = rip ->p_uid;
rpp ->p_ttyp = rip ->p_ttyp;
rpp ->p_nice = rip ->p_nice;
rpp ->p_textp = rip ->p_textp;
rpp ->p_pid = mpid;
rpp ->p_ppid = rip ->p_pid;
rpp ->p_time = 0;
for(rip = &u.u_ofile [0]; rip < &u.u_ofile[NOFILE ];)
if(( rpp = *rip ++) != NULL)
rpp ->f_count ++;
if(( rpp=up ->p_textp) != NULL) {
rpp ->x_count ++;
rpp ->x_ccount ++;
}
u.u_cdir ->i_count ++;
@bobuhiro11 () 第 1 回 UNIX V6 読書会 22 / 24
newproc()
savu(u.u_rsav);
rpp = p;
u.u_procp = rpp;
rip = up;
n = rip ->p_size;
a1 = rip ->p_addr;
rpp ->p_size = n;
a2 = malloc(coremap , n);
if(a2 == NULL) {
rip ->p_stat = SIDL;
rpp ->p_addr = a1;
savu(u.u_ssav);
xswap(rpp , 0, 0);
rpp ->p_flag =| SSWAP;
rip ->p_stat = SRUN;
} else {
rpp ->p_addr = a2;
while(n--)
copyseg(a1++, a2++);
}
u.u_procp = rip;
return (0);
}
@bobuhiro11 () 第 1 回 UNIX V6 読書会 23 / 24
まとめ
@bobuhiro11 () 第 1 回 UNIX V6 読書会 24 / 24

More Related Content

What's hot

C/C++プログラマのための開発ツール
C/C++プログラマのための開発ツールC/C++プログラマのための開発ツール
C/C++プログラマのための開発ツール
MITSUNARI Shigeo
 
Bluetooth通信の 仕組みと活用法紹介
Bluetooth通信の仕組みと活用法紹介Bluetooth通信の仕組みと活用法紹介
Bluetooth通信の 仕組みと活用法紹介
Takehiko YOSHIDA
 
ゆるバグ
ゆるバグゆるバグ
ゆるバグ
MITSUNARI Shigeo
 
マイコンロボット実習
マイコンロボット実習マイコンロボット実習
マイコンロボット実習
Takehiko YOSHIDA
 
続・SECDマシン
続・SECDマシン続・SECDマシン
続・SECDマシン
t-sin
 
Intro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみたIntro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみた
MITSUNARI Shigeo
 
Ansibleを使ってローカル開発環境を作ろう ( #PyLadiesTokyo Meetup )
Ansibleを使ってローカル開発環境を作ろう ( #PyLadiesTokyo Meetup ) Ansibleを使ってローカル開発環境を作ろう ( #PyLadiesTokyo Meetup )
Ansibleを使ってローカル開発環境を作ろう ( #PyLadiesTokyo Meetup )
Ai Makabi
 
Unixカーネルの設計 7 プロセスの制御
Unixカーネルの設計 7 プロセスの制御Unixカーネルの設計 7 プロセスの制御
Unixカーネルの設計 7 プロセスの制御
Norito Agetsuma
 
Fpgaでの非同期信号の扱い方とvivadoによるサポート(公開用)
Fpgaでの非同期信号の扱い方とvivadoによるサポート(公開用)Fpgaでの非同期信号の扱い方とvivadoによるサポート(公開用)
Fpgaでの非同期信号の扱い方とvivadoによるサポート(公開用)
marsee101
 
Xbyakの紹介とその周辺
Xbyakの紹介とその周辺Xbyakの紹介とその周辺
Xbyakの紹介とその周辺
MITSUNARI Shigeo
 
golang binary hacks
golang binary hacksgolang binary hacks
golang binary hacks
yaegashi
 
GoogleのSHA-1のはなし
GoogleのSHA-1のはなしGoogleのSHA-1のはなし
GoogleのSHA-1のはなし
MITSUNARI Shigeo
 
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgen
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgenIntel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgen
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgen
MITSUNARI Shigeo
 
Sounds Like Common Lisp - ゼロからはじめるサウンドプログラミング
Sounds Like Common Lisp - ゼロからはじめるサウンドプログラミングSounds Like Common Lisp - ゼロからはじめるサウンドプログラミング
Sounds Like Common Lisp - ゼロからはじめるサウンドプログラミング
t-sin
 
about Tcpreplay
about Tcpreplayabout Tcpreplay
about Tcpreplay
@ otsuka752
 
HPC Phys-20201203
HPC Phys-20201203HPC Phys-20201203
HPC Phys-20201203
MITSUNARI Shigeo
 
X tapp lecture_20140226_tapioca
X tapp lecture_20140226_tapiocaX tapp lecture_20140226_tapioca
X tapp lecture_20140226_tapiocaxTAPP
 
ret2dl resolve
ret2dl resolveret2dl resolve
ret2dl resolve
sounakano
 
Python で munin plugin を書いてみる
Python で munin plugin を書いてみるPython で munin plugin を書いてみる
Python で munin plugin を書いてみるftnk
 

What's hot (20)

C/C++プログラマのための開発ツール
C/C++プログラマのための開発ツールC/C++プログラマのための開発ツール
C/C++プログラマのための開発ツール
 
Bluetooth通信の 仕組みと活用法紹介
Bluetooth通信の仕組みと活用法紹介Bluetooth通信の仕組みと活用法紹介
Bluetooth通信の 仕組みと活用法紹介
 
ゆるバグ
ゆるバグゆるバグ
ゆるバグ
 
マイコンロボット実習
マイコンロボット実習マイコンロボット実習
マイコンロボット実習
 
続・SECDマシン
続・SECDマシン続・SECDマシン
続・SECDマシン
 
Intro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみたIntro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみた
 
Ansibleを使ってローカル開発環境を作ろう ( #PyLadiesTokyo Meetup )
Ansibleを使ってローカル開発環境を作ろう ( #PyLadiesTokyo Meetup ) Ansibleを使ってローカル開発環境を作ろう ( #PyLadiesTokyo Meetup )
Ansibleを使ってローカル開発環境を作ろう ( #PyLadiesTokyo Meetup )
 
Unixカーネルの設計 7 プロセスの制御
Unixカーネルの設計 7 プロセスの制御Unixカーネルの設計 7 プロセスの制御
Unixカーネルの設計 7 プロセスの制御
 
Fpgaでの非同期信号の扱い方とvivadoによるサポート(公開用)
Fpgaでの非同期信号の扱い方とvivadoによるサポート(公開用)Fpgaでの非同期信号の扱い方とvivadoによるサポート(公開用)
Fpgaでの非同期信号の扱い方とvivadoによるサポート(公開用)
 
Xbyakの紹介とその周辺
Xbyakの紹介とその周辺Xbyakの紹介とその周辺
Xbyakの紹介とその周辺
 
Unix
UnixUnix
Unix
 
golang binary hacks
golang binary hacksgolang binary hacks
golang binary hacks
 
GoogleのSHA-1のはなし
GoogleのSHA-1のはなしGoogleのSHA-1のはなし
GoogleのSHA-1のはなし
 
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgen
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgenIntel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgen
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgen
 
Sounds Like Common Lisp - ゼロからはじめるサウンドプログラミング
Sounds Like Common Lisp - ゼロからはじめるサウンドプログラミングSounds Like Common Lisp - ゼロからはじめるサウンドプログラミング
Sounds Like Common Lisp - ゼロからはじめるサウンドプログラミング
 
about Tcpreplay
about Tcpreplayabout Tcpreplay
about Tcpreplay
 
HPC Phys-20201203
HPC Phys-20201203HPC Phys-20201203
HPC Phys-20201203
 
X tapp lecture_20140226_tapioca
X tapp lecture_20140226_tapiocaX tapp lecture_20140226_tapioca
X tapp lecture_20140226_tapioca
 
ret2dl resolve
ret2dl resolveret2dl resolve
ret2dl resolve
 
Python で munin plugin を書いてみる
Python で munin plugin を書いてみるPython で munin plugin を書いてみる
Python で munin plugin を書いてみる
 

Similar to 0622

ラズパイでデバイスドライバを作ってみた。
ラズパイでデバイスドライバを作ってみた。ラズパイでデバイスドライバを作ってみた。
ラズパイでデバイスドライバを作ってみた。
Kazuki Onishi
 
スタート低レイヤー #0
スタート低レイヤー #0スタート低レイヤー #0
スタート低レイヤー #0Kiwamu Okabe
 
V6 unix in okinawa
V6 unix in okinawaV6 unix in okinawa
V6 unix in okinawa
magoroku Yamamoto
 
Ubuntuで始めるコンテナ技術入門
Ubuntuで始めるコンテナ技術入門Ubuntuで始めるコンテナ技術入門
Ubuntuで始めるコンテナ技術入門
Takenori Matsumoto
 
2011.09.18 v7から始めるunix まとめ
2011.09.18 v7から始めるunix まとめ2011.09.18 v7から始めるunix まとめ
2011.09.18 v7から始めるunix まとめ
Makiko Konoshima
 
Mincs 日本語版
Mincs 日本語版Mincs 日本語版
Mincs 日本語版
Masami Hiramatsu
 
Linux Performance Analysis in 15 minutes
Linux Performance Analysis in 15 minutesLinux Performance Analysis in 15 minutes
Linux Performance Analysis in 15 minutes
Yohei Azekatsu
 
PyOpenCLによるGPGPU入門
PyOpenCLによるGPGPU入門PyOpenCLによるGPGPU入門
PyOpenCLによるGPGPU入門Yosuke Onoue
 
Wiresharkの解析プラグインを作る ssmjp 201409
Wiresharkの解析プラグインを作る ssmjp 201409Wiresharkの解析プラグインを作る ssmjp 201409
Wiresharkの解析プラグインを作る ssmjp 201409
稔 小林
 
8 並列計算に向けた pcセッティング
8 並列計算に向けた pcセッティング8 並列計算に向けた pcセッティング
8 並列計算に向けた pcセッティング
Takeshi Takaishi
 
仮想記憶入門 BSD-4.3を例題に
仮想記憶入門 BSD-4.3を例題に仮想記憶入門 BSD-4.3を例題に
仮想記憶入門 BSD-4.3を例題にmagoroku Yamamoto
 
What is Metasepi?
What is Metasepi?What is Metasepi?
What is Metasepi?
Kiwamu Okabe
 
about DakotagUI
about DakotagUIabout DakotagUI
about DakotagUI
Etsuji Nomura
 
デバドラを書いてみよう!
デバドラを書いてみよう!デバドラを書いてみよう!
デバドラを書いてみよう!
Masami Ichikawa
 
2011.06.11 v7から始めるunix まとめ
2011.06.11 v7から始めるunix まとめ2011.06.11 v7から始めるunix まとめ
2011.06.11 v7から始めるunix まとめMakiko Konoshima
 
2012/03/31 Apacheスタートスクリプト読書会発表資料
2012/03/31 Apacheスタートスクリプト読書会発表資料2012/03/31 Apacheスタートスクリプト読書会発表資料
2012/03/31 Apacheスタートスクリプト読書会発表資料Yasutaka Hamada
 
発表資料 Fortranを用いた高位合成技術FortRockの開発
発表資料 Fortranを用いた高位合成技術FortRockの開発発表資料 Fortranを用いた高位合成技術FortRockの開発
発表資料 Fortranを用いた高位合成技術FortRockの開発
貴大 山下
 

Similar to 0622 (20)

ラズパイでデバイスドライバを作ってみた。
ラズパイでデバイスドライバを作ってみた。ラズパイでデバイスドライバを作ってみた。
ラズパイでデバイスドライバを作ってみた。
 
スタート低レイヤー #0
スタート低レイヤー #0スタート低レイヤー #0
スタート低レイヤー #0
 
Rの高速化
Rの高速化Rの高速化
Rの高速化
 
V6 unix in okinawa
V6 unix in okinawaV6 unix in okinawa
V6 unix in okinawa
 
Ubuntuで始めるコンテナ技術入門
Ubuntuで始めるコンテナ技術入門Ubuntuで始めるコンテナ技術入門
Ubuntuで始めるコンテナ技術入門
 
2011.09.18 v7から始めるunix まとめ
2011.09.18 v7から始めるunix まとめ2011.09.18 v7から始めるunix まとめ
2011.09.18 v7から始めるunix まとめ
 
Mincs 日本語版
Mincs 日本語版Mincs 日本語版
Mincs 日本語版
 
Linux Performance Analysis in 15 minutes
Linux Performance Analysis in 15 minutesLinux Performance Analysis in 15 minutes
Linux Performance Analysis in 15 minutes
 
Subprocess no susume
Subprocess no susumeSubprocess no susume
Subprocess no susume
 
PyOpenCLによるGPGPU入門
PyOpenCLによるGPGPU入門PyOpenCLによるGPGPU入門
PyOpenCLによるGPGPU入門
 
Wiresharkの解析プラグインを作る ssmjp 201409
Wiresharkの解析プラグインを作る ssmjp 201409Wiresharkの解析プラグインを作る ssmjp 201409
Wiresharkの解析プラグインを作る ssmjp 201409
 
8 並列計算に向けた pcセッティング
8 並列計算に向けた pcセッティング8 並列計算に向けた pcセッティング
8 並列計算に向けた pcセッティング
 
仮想記憶入門 BSD-4.3を例題に
仮想記憶入門 BSD-4.3を例題に仮想記憶入門 BSD-4.3を例題に
仮想記憶入門 BSD-4.3を例題に
 
What is Metasepi?
What is Metasepi?What is Metasepi?
What is Metasepi?
 
about DakotagUI
about DakotagUIabout DakotagUI
about DakotagUI
 
デバドラを書いてみよう!
デバドラを書いてみよう!デバドラを書いてみよう!
デバドラを書いてみよう!
 
2011.06.11 v7から始めるunix まとめ
2011.06.11 v7から始めるunix まとめ2011.06.11 v7から始めるunix まとめ
2011.06.11 v7から始めるunix まとめ
 
2012/03/31 Apacheスタートスクリプト読書会発表資料
2012/03/31 Apacheスタートスクリプト読書会発表資料2012/03/31 Apacheスタートスクリプト読書会発表資料
2012/03/31 Apacheスタートスクリプト読書会発表資料
 
Inside winnyp
Inside winnypInside winnyp
Inside winnyp
 
発表資料 Fortranを用いた高位合成技術FortRockの開発
発表資料 Fortranを用いた高位合成技術FortRockの開発発表資料 Fortranを用いた高位合成技術FortRockの開発
発表資料 Fortranを用いた高位合成技術FortRockの開発
 

Recently uploaded

生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI
生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI
生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI
Osaka University
 
Humanoid Virtual Athletics Challenge2024 技術講習会 スライド
Humanoid Virtual Athletics Challenge2024 技術講習会 スライドHumanoid Virtual Athletics Challenge2024 技術講習会 スライド
Humanoid Virtual Athletics Challenge2024 技術講習会 スライド
tazaki1
 
ハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMM
ハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMMハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMM
ハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMM
osamut
 
「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演
「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演
「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演
嶋 是一 (Yoshikazu SHIMA)
 
ロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobody
ロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobodyロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobody
ロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobody
azuma satoshi
 
Generating Automatic Feedback on UI Mockups with Large Language Models
Generating Automatic Feedback on UI Mockups with Large Language ModelsGenerating Automatic Feedback on UI Mockups with Large Language Models
Generating Automatic Feedback on UI Mockups with Large Language Models
harmonylab
 
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
Toru Tamaki
 

Recently uploaded (7)

生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI
生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI
生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI
 
Humanoid Virtual Athletics Challenge2024 技術講習会 スライド
Humanoid Virtual Athletics Challenge2024 技術講習会 スライドHumanoid Virtual Athletics Challenge2024 技術講習会 スライド
Humanoid Virtual Athletics Challenge2024 技術講習会 スライド
 
ハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMM
ハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMMハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMM
ハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMM
 
「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演
「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演
「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演
 
ロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobody
ロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobodyロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobody
ロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobody
 
Generating Automatic Feedback on UI Mockups with Large Language Models
Generating Automatic Feedback on UI Mockups with Large Language ModelsGenerating Automatic Feedback on UI Mockups with Large Language Models
Generating Automatic Feedback on UI Mockups with Large Language Models
 
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
 

0622

  • 1. . . 第 1 回 UNIX V6 読書会 @bobuhiro11 @bobuhiro11 () 第 1 回 UNIX V6 読書会 1 / 24
  • 2. UNIX V6? (1) @bobuhiro11 () 第 1 回 UNIX V6 読書会 2 / 24
  • 3. UNIX V6? (2) 実行プログラム (プロセス) の管理 メモリ管理 ファイルシステム ファイルと周辺デバイスで共通の I/O 割り込み 端末処理サポート @bobuhiro11 () 第 1 回 UNIX V6 読書会 3 / 24
  • 4. PDP11 @bobuhiro11 () 第 1 回 UNIX V6 読書会 4 / 24
  • 5. 動かしてみた PDP-11 のエミュレータ SIMH を使う. ディレクトリ移動は chdir vim,emacs はない.ed のみ @bobuhiro11 () 第 1 回 UNIX V6 読書会 5 / 24
  • 6. PDP11 DEC 社が開発したプロセッサ 1 ワード 16 ビット (命令,データを 16 単位で扱う) デバイスをメモリの上位 8K バイトに割り当て レジスタ 用途 r0,r1 計算用,関数の戻り値 r2,r3,r4 ローカル処理 r5 フレームポインタ r6(sp) スタックポインタ r7(pc) プログラムカウンタ @bobuhiro11 () 第 1 回 UNIX V6 読書会 6 / 24
  • 7. プロセス @bobuhiro11 () 第 1 回 UNIX V6 読書会 7 / 24
  • 8. 仮想アドレス (1) @bobuhiro11 () 第 1 回 UNIX V6 読書会 8 / 24
  • 9. 仮想アドレス (2) @bobuhiro11 () 第 1 回 UNIX V6 読書会 9 / 24
  • 10. APR @bobuhiro11 () 第 1 回 UNIX V6 読書会 10 / 24
  • 11. マッピング (1) @bobuhiro11 () 第 1 回 UNIX V6 読書会 11 / 24
  • 12. マッピング (2) @bobuhiro11 () 第 1 回 UNIX V6 読書会 12 / 24
  • 13. System Call @bobuhiro11 () 第 1 回 UNIX V6 読書会 13 / 24
  • 14. K&R C 言語 /* void func(int a,int b) */ void func(a,b) int a; int b; { ... } /* a -= 1; */ a =- 1; @bobuhiro11 () 第 1 回 UNIX V6 読書会 14 / 24
  • 15. K&R C 言語 // char 1byte // int 2byte // void* 2byte #define SW 0177570 struct{ int integ; }; p = SW ->integ; @bobuhiro11 () 第 1 回 UNIX V6 読書会 15 / 24
  • 16. fork() を使ったプログラム int main(void){ pid_t pid = fork (); if( pid == 0) printf("child [pid:%d] n", getpid ()); else printf("parent [pid:%d] n", getpid ()); return 0; } // $ ./ fork // parent [pid :39582] // child [pid :39583] @bobuhiro11 () 第 1 回 UNIX V6 読書会 16 / 24
  • 17. C library – fork() _fork: mov r5 ,-(sp) mov sp ,r5 sys fork br 1f bec 2f jmp cerror 1: mov r0 ,_par_uid clr r0 2: mov (sp)+,r5 rts pc @bobuhiro11 () 第 1 回 UNIX V6 読書会 17 / 24
  • 18. System Call – fork() fork () { register struct proc *p1 , *p2; p1 = u.u_procp; for(p2 = &proc [0]; p2 < &proc[NPROC ]; p2++) if(p2 ->p_stat == NULL) goto found; u.u_error = EAGAIN; goto out; @bobuhiro11 () 第 1 回 UNIX V6 読書会 18 / 24
  • 19. System Call – fork() found: if(newproc ()) { u.u_ar0[R0] = p1 ->p_pid; u.u_cstime [0] = 0; u.u_cstime [1] = 0; u.u_stime = 0; u.u_cutime [0] = 0; u.u_cutime [1] = 0; u.u_utime = 0; return; } u.u_ar0[R0] = p2 ->p_pid; out: u.u_ar0[R7] =+ 2; } @bobuhiro11 () 第 1 回 UNIX V6 読書会 19 / 24
  • 20. System Call @bobuhiro11 () 第 1 回 UNIX V6 読書会 20 / 24
  • 21. newproc() newproc () { int a1 , a2; struct proc *p, *up; register struct proc *rpp; register *rip , n; p = NULL; retry: mpid ++; if(mpid < 0) { mpid = 0; goto retry; } for(rpp = &proc [0]; rpp < &proc[NPROC ]; rpp ++) { if(rpp ->p_stat == NULL && p== NULL) p = rpp; if (rpp ->p_pid == mpid) goto retry; } if ((rpp = p)== NULL) panic("no procs"); @bobuhiro11 () 第 1 回 UNIX V6 読書会 21 / 24
  • 22. newproc() rip = u.u_procp; up = rip; rpp ->p_stat = SRUN; rpp ->p_flag = SLOAD; rpp ->p_uid = rip ->p_uid; rpp ->p_ttyp = rip ->p_ttyp; rpp ->p_nice = rip ->p_nice; rpp ->p_textp = rip ->p_textp; rpp ->p_pid = mpid; rpp ->p_ppid = rip ->p_pid; rpp ->p_time = 0; for(rip = &u.u_ofile [0]; rip < &u.u_ofile[NOFILE ];) if(( rpp = *rip ++) != NULL) rpp ->f_count ++; if(( rpp=up ->p_textp) != NULL) { rpp ->x_count ++; rpp ->x_ccount ++; } u.u_cdir ->i_count ++; @bobuhiro11 () 第 1 回 UNIX V6 読書会 22 / 24
  • 23. newproc() savu(u.u_rsav); rpp = p; u.u_procp = rpp; rip = up; n = rip ->p_size; a1 = rip ->p_addr; rpp ->p_size = n; a2 = malloc(coremap , n); if(a2 == NULL) { rip ->p_stat = SIDL; rpp ->p_addr = a1; savu(u.u_ssav); xswap(rpp , 0, 0); rpp ->p_flag =| SSWAP; rip ->p_stat = SRUN; } else { rpp ->p_addr = a2; while(n--) copyseg(a1++, a2++); } u.u_procp = rip; return (0); } @bobuhiro11 () 第 1 回 UNIX V6 読書会 23 / 24
  • 24. まとめ @bobuhiro11 () 第 1 回 UNIX V6 読書会 24 / 24