内核态 用户态
内核态
操作系统内核运行的模式, 控制计算机的硬件资源, 为上层应用提供运行环境
用户态
用户应用程序运行的状态, 需要依托于内核态运行. 用户态权限受限, 避免误操作导致系统奔溃
系统调用
操作系统为用户态提供的能够访问到内核态的资源的接口, 通过系统调用, 可以将进程由用户态切换到内核态
用户态切换到内核态的方法
-
系统调用
-
异常
用户态进程出现异常后, 会切换到处理该异常的内核程序中
-
硬件设备中断
硬件设备完成请求后, 会向CPU发送中断信号, CPU会暂停当前的线程, 转而执行中断信号对应的中断处理程序
Linux文件系统
Linux和Unix系统中, 一切资源都是文件
硬盘
硬盘的最小读取单位是块(block), 常见大小4KB
硬盘的最小存储单位是扇区(sector), 每个512B=0.5B
每次读取一个块, 通常包含8个扇区
文件的元数据metadata(uid, gid, 创建时间, 最近访问/更改时间, 权限,大小, 文件类型等), 存在Inode中, 每个Inode有编号, 用来区分不同的文件.
文件类型
普通文件
目录文件
存储了目录下的文件即指向它们的指针
链接文件
-
硬链接文件
与源文件有相同Inode, 即为同一个文件. 把Inode相同的所有文件都删除才算该Inode的文件被删除
-
软链接(符号链接)
保存源文件的链接. 是一个不同Inode文件
设备文件
字符设备文件
按字节/字符访问数据, 顺序存取数据的设备, 通常不支持随机存取, 如键盘,串口等
块设备文件
可随机存取数据的设备, 可以访问块设备上任意一块位置, 不支持字符方式寻址???. 如硬盘,软盘,光盘等
管道文件
用于进程间通信的文件, 使用mkfifo可以创建
Socket套接字文件
用于网络通信的文件, 可能本机之间或不同机器