8. 9
VFS
“/”d
rootfsm
d “dev” d “init” d “proc” d “system” d “sys”
d “console”
d “/”
tmpfsm
d “pts”
d “data
d “/”
ext4m
d “/”
procm
d “/”
ext4m
d “/”
sysfsm
d “/”
devptsm
d “bin”
d “sh”
20. 24
Rootfs
fopiopi
“/”d
rootfsm
fopiopi
d “dev”
fopiopi
d “init”
fopiopi
d “proc”
fopiopi
d “system”
fopiopi
d “sys”
fopiopi
d “console”
fopiopi
d “/”
tmpfsm
fopiopi
d “pts”
fopiopi
d “data
fopiopi
d “/”
devptsm
1. 掛載 rootfs
2. 根據 initramfs 建檔
3. 根據 ramdisk 建檔
4. init 預設行為
a. mount tmpfs
b. mkdir pts
c. mount devpts
21. 25
Rootfs
fopiopi
“/”d
rootfsm
fopiopi
d “dev”
fopiopi
d “init”
fopiopi
d “proc”
fopiopi
d “system”
fopiopi
d “sys”
fopiopi
d “console”
fopiopi
d “/”
tmpfsm
fopiopi
d “pts”
fopiopi
d “data
fopiopi
d “/”
procm
fopiopi
d “/”
devptsm
1. 掛載 rootfs
2. 根據 initramfs 建檔
3. 根據 ramdisk 建檔
4. init 預設行為
a. mount tmpfs
b. mkdir pts
c. mount devpts
d. mount proc
22. 26
Rootfs
fopiopi
“/”d
rootfsm
fopiopi
d “dev”
fopiopi
d “init”
fopiopi
d “proc”
fopiopi
d “system”
fopiopi
d “sys”
fopiopi
d “console”
fopiopi
d “/”
tmpfsm
fopiopi
d “pts”
fopiopi
d “data
fopiopi
d “/”
procm
fopiopi
d “/”
sysfsm
fopiopi
d “/”
devptsm
1. 掛載 rootfs
2. 根據 initramfs 建檔
3. 根據 ramdisk 建檔
4. init 預設行為
a. mount tmpfs
b. mkdir pts
c. mount devpts
d. mount proc
e. mount sysfs
23. 27
Rootfs
fopiopi
“/”d
rootfsm
fopiopi
d “dev”
fopiopi
d “init”
fopiopi
d “proc”
fopiopi
d “system”
fopiopi
d “sys”
fopiopi
d “console”
fopiopi
d “/”
tmpfsm
fopiopi
d “pts”
fopiopi
d “data
fopiopi
d “/”
procm
fopiopi
d “/”
sysfsm
fopiopi
d “/”
devptsm
1. 掛載 rootfs
2. 根據 initramfs 建檔
3. 根據 ramdisk 建檔
4. init 預設行為
a. mount tmpfs
b. mkdir pts
c. mount devpts
d. mount proc
e. mount sysfs
5. init 根據 init.rc 行為
“init.rc”
24. 28
Rootfs
fopiopi
“/”d
rootfsm
fopiopi
d “dev”
fopiopi
d “init”
fopiopi
d “proc”
fopiopi
d “system”
fopiopi
d “sys”
fopiopi
d “console”
fopiopi
d “/”
tmpfsm
fopiopi
d “pts”
fopiopi
d “data
fopiopi
d “/”
ext4m
fopiopi
d “/”
procm
fopiopi
d “/”
sysfsm
fopiopi
d “/”
devptsm
1. 掛載 rootfs
2. 根據 initramfs 建檔
3. 根據 ramdisk 建檔
4. init 預設行為
a. mount tmpfs
b. mkdir pts
c. mount devpts
d. mount proc
e. mount sysfs
5. init 根據 init.rc 行為
a. mount data
25. 29
Rootfs
fopiopi
“/”d
rootfsm
fopiopi
d “dev”
fopiopi
d “init”
fopiopi
d “proc”
fopiopi
d “system”
fopiopi
d “sys”
fopiopi
d “console”
fopiopi
d “/”
tmpfsm
fopiopi
d “pts”
fopiopi
d “data
fopiopi
d “/”
ext4m
fopiopi
d “/”
procm
fopiopi
d “/”
ext4m
fopiopi
d “/”
sysfsm
fopiopi
d “/”
devptsm
1. 掛載 rootfs
2. 根據 initramfs 建檔
3. 根據 ramdisk 建檔
4. init 預設行為
a. mount tmpfs
b. mkdir pts
c. mount devpts
d. mount proc
e. mount sysfs
5. init 根據 init.rc 行為
a. mount data
b. mount system
26. 30
Rootfs
fopiopi
“/”d
rootfsm
fopiopi
d “dev”
fopiopi
d “init”
fopiopi
d “proc”
fopiopi
d “system”
fopiopi
d “sys”
fopiopi
d “console”
fopiopi
d “/”
tmpfsm
fopiopi
d “pts”
fopiopi
d “data
fopiopi
d “/”
ext4m
fopiopi
d “/”
procm
fopiopi
d “/”
ext4m
fopiopi
d “/”
sysfsm
fopiopi
d “/”
devptsm
app bin xbin
sh su
1. 掛載 rootfs
2. 根據 initramfs 建檔
3. 根據 ramdisk 建檔
4. init 預設行為
a. mount tmpfs
b. mkdir pts
c. mount devpts
d. mount proc
e. mount sysfs
5. init 根據 init.rc 行為
a. mount data
b. mount system
27. 31
Rootfs
fopiopi
“/”d
rootfsm
fopiopi
d “dev”
fopiopi
d “init”
fopiopi
d “proc”
fopiopi
d “system”
fopiopi
d “sys”
fopiopi
d “console”
fopiopi
d “/”
tmpfsm
fopiopi
d “pts”
fopiopi
d “data
fopiopi
d “/”
ext4m
fopiopi
d “/”
procm
fopiopi
d “/”
ext4m
fopiopi
d “/”
sysfsm
fopiopi
d “/”
devptsm
fopiopi
d “bin”
fopiopi
d “sh”
app xbin
1. 掛載 rootfs
2. 根據 initramfs 建檔
3. 根據 ramdisk 建檔
4. init 預設行為
a. mount tmpfs
b. mkdir pts
c. mount devpts
d. mount proc
e. mount sysfs
5. init 根據 init.rc 行為
a. mount data
b. mount system
c. /bin/sh
su
kernel 行為
userspace 行為
28. 32
Rootfs
fopiopi
“/”d
rootfsm
fopiopi
d “dev”
fopiopi
d “init”
fopiopi
d “proc”
fopiopi
d “system”
fopiopi
d “sys”
fopiopi
d “console”
fopiopi
d “/”
tmpfsm
fopiopi
d “pts”
fopiopi
d “data
fopiopi
d “/”
ext4m
fopiopi
d “/”
procm
fopiopi
d “/”
ext4m
fopiopi
d “/”
sysfsm
fopiopi
d “/”
devptsm
fopiopi
d “bin”
fopiopi
d “sh”
app xbin
1. 掛載 rootfs
2. 根據 initramfs 建檔
3. 根據 ramdisk 建檔
4. init 預設行為
a. mount tmpfs
b. mkdir pts
c. mount devpts
d. mount proc
e. mount sysfs
5. init 根據 init.rc 行為
a. mount data
b. mount system
c. /bin/sh
su
fopiopi
d “/”
debugfsm
fopiopi
d “/”
devtmpfsm
fopiopi
d “/”
sockfsm
fopiopi
d “/”
pipefsm
48. 52
Create
parent
fop
iop
i
d “parent”
memory storage
d “child”
1. 查找 path & 建立 dentry
2. 執行 dir 自帶 create( )/mkdir( )/symlink( )/mknod( )
mknod( )
symlink( ) for link
for dirmkdir( )
create( ) for file
for char/block
49. 53
Create
parent
fop
iop
i
d “parent”
memory storage
1. 查找 path & 建立 dentry
2. 執行 dir 自帶 create( )/mkdir( )/symlink( )/mknod( )
a. 建立 inode, 安裝 ops
mknod( )
symlink( ) for link
for dirmkdir( )
create( ) for file
for char/block
fop
iop
i
d “child”
50. 54
Create
parent
fop
iop
i
d “parent”
memory storage
1. 查找 path & 建立 dentry
2. 執行 dir 自帶 create( )/mkdir( )/symlink( )/mknod( )
a. 建立 inode, 安裝 ops
b. 找地方放” target path”, if symlink
mknod( )
symlink( ) for link
for dirmkdir( )
create( ) for file
for char/block
fop
iop
i
d “child”
51. 55
Create
parent
fop
iop
i
d “parent”
memory storage
1. 查找 path & 建立 dentry
2. 執行 dir 自帶 create( )/mkdir( )/symlink( )/mknod( )
a. 建立 inode, 安裝 ops
b. 找地方放” target path”, if symlink
c. 建立 dirent
mknod( )
symlink( ) for link
for dirmkdir( )
create( ) for file
for char/block
fop
iop
i
d “child” child
52. 56
Create
parent
fop
iop
i
d “parent”
memory storage
1. 查找 path & 建立 dentry
2. 執行 dir 自帶 create( )/mkdir( )/symlink( )/mknod( )
a. 建立 inode, 安裝 ops
b. 找地方 (e.g. page) 放” target path”, if symlink
c. 建立 dirent
d. 關聯 dentry/inode
mknod( )
symlink( ) for link
for dirmkdir( )
create( ) for file
for char/block
fop
iop
i
d “child” child
57. 61
Delete
1. 查找 path
2. 執行 parent inode 自帶 unlink( ) 或 rmdir( )
a. 移除 dirent
b. inode nlink--
c. 移除 child dentry
parent
rmdir( )
fop
iop
i
d “parent”
memory storage
unlink( ) for file/link/char/block
for dir
fop
iop
i
69. 79
Read/Write
fop
iop
address
space
p pp p p p p p
file
descriptor
table
file ino
file ino
read( )
aio_read( )
write( )
aio_write( )
userspace
buffer
storage
write read