IO 学习笔记
Posted RelievedAbility
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IO 学习笔记相关的知识,希望对你有一定的参考价值。
虚拟文件系统、文件描述符、IO重定向
一切皆文件,进程隔离
操作系统宏观介绍
-
常用的IO设备有哪些? 磁盘、网卡
-
Linux 中物理盘是怎么映射到操作系统中的? Kernel 中VFS(Virtual File System)
-
在Linux中如果两个程序都去加载同一个文件,那么内存中会有几份?1份。文件在打开的时候会有一个inode id,程序在访问文件的时候VFS首先会判断当前文件有没有在pagecache中被加载过,没有的话触发缺页就会加载对应inode id 对应的源数据,然后再内存中开辟pagecache(默认4k) 给当前文件,后续的如果发现pagecache里面已经加载了就直接返回了。
-
延伸:
1:当多个程序操作同一个文件,其中一个程序修改了文件,对应pagecache的变化和什么时候会同步到磁盘? 1)首先会吧pagecache里面标记为dirty状态 2)然后会通过flush同步到磁盘(flush的方式取决于IO模型,OLD IO flush后并非直接刷新到磁盘,而是需要等待kernel调度, NIO 调用了flush 则是会直接调用kernel将数据刷新到磁盘) 2:程序最终是通过什么访问文件的? 1)fd (file descriptor) 文件描述符 2)指针seek (偏移量)对应文件的不同位置
虚拟文件系统
-
Linux 中如何查看kernel维护的目录树结构? df 命令
-
Linux 中swap 分区的作用? 当系统运行当前进程内存不足时会把暂时用不到的进程转移到swap 分区,然后把当前需要执行的进程资源放入内存。
-
Linux 中常见的文件类型有哪些?
-
-:普通文件 lsof 中TYPE 为REG
-
d:目录
-
b:块设备 延伸 : 如何创建块文件,使用dd 命令
dd if=/dev/zero of=mydisk.img bs=1048576 count=100
-
c:字符文件 lsof 中TYPE 为CHR
-
s:socket
-
p:pipeline
-
l:链接
ln #创建硬链接 ln -s #创建软链接延伸 软链接和硬链接区别? 共同点: 修改链接文件和源文件中任何一个互相都能看到修改后的内容。 不同点 硬链接类似java里面的多个引用指向一个对象,删除其中一个对另一个并没有影响。 软链接更像是windows 中应用的桌面快捷方式,如果删除源文件,则软链接就会报错,类似windows 中应用程序被删了,桌面快捷方式没有被清理,然后点击桌面快捷方式的情景。
-
文件描述符nodeid、脏读
Linux 中一切皆文件,进程对应的文件目录是哪里?
/proc
/proc/$$ #当前bash的目录
KaTeX parse error: Can't use function '$' in math mode at position 15: 当前bash的pid,它和$̲BASHPID 有什么区别? 的优先级高于管道,$BASHPID 则没有管道优先级高,所以下面两个命令执行的结果会不同
echo $$ | cat
echo $BASHPID | cat
-
Linux 中如何查看一个进程打开了多少文件?(查看所有的文件描述符)
lsof -op $$ #查看所有的文件描述符细节 /proc/$$/fd #查看所有的文件描述符
延伸:开发过程中如何查看8080端口被那个进程占用
lsof -i :8080
-
每个程序都会有标准输入输出吗?
是的,那么对应的文件描述符是什么? 0 标准输入,1标准输出,2标准错误输出 u 表示可以读写
当前进程的用到的文件描述符目录是什么?
cd /proc/$$/fd #查看所有的文件描述符 ls -al
-
如何查看一个文件的Inode 号
stat /test.txt
延伸命令,read 只会读到换行符
exec 8< test.txt read a 0<& 8
socket pipeline
-
如何查看进程使用pagecahe 的情况
pcstat -pid $$
-
如何查询当前脏页
cat /proc/vmstat | grep dirty #延伸,查询当前脏页的刷新时间 sysctl -a | grep dirty
-
Socket 文件怎么创建?
exec 8<> /dev/tcp/www.baidu.com/80 cd /proc/$$/fd ll lsof -op $$
-
重定向是什么?
重定向是一种机制,注意不是命令。< 输入重定向 > 输出重定向
ls . 1> ~/test/t.txt #将当前目录的文件列出,重定向输出到t.txt中 cat 0< text.txt 1> cat.out #将cat的输入,输出分别重定向 ls ./ /dddosl 1>04.txt 2>& 1 #文件描述符的时候一定是2>& 1 要带&,如果是文件名则不需要
以上是关于IO 学习笔记的主要内容,如果未能解决你的问题,请参考以下文章