1、文件描述符:由于linux下所有东西都被看成是文件,比如文件(也许叫文档比较合适一点)、目录、进程、网络socket、各种硬件设备等,所以linux下的文件描述符其实就相当于windows下的句柄。
文件句柄:windows下各种对象的标识符,比如文件(也许叫文档比较合适一点)、资源、菜单、光标、位图等。文件句柄和文件描述符类似,它也是一个非负整数,也用于定位文件数据在内存中的位置。
2、系统调用函数和库函数
库函数:系统自带的库文件,是一些特定功能的实现
调用在用户态,实现也在用户态。有些函数需要转调系统调用函数
系统调用函数:操作系统内核提供给外层访问的一些接口函数
调用在用户态,实现在内核态
3、用户态切换到内核态的过程
- 用eax寄存器保存系统调用号
- 出发0x80中断 ---》 根据eax的值在系统调用表中查找内核函数
call sys_cal_table + eax * 4
- 内核函数执行完成,也通过eax将结果返回
其中PCB中记录打开的文件资源的结构体实现:
PCB: struct file *filp[20];//fd是filp的下标
struct file: f_count//句柄数 文件描述符 计数器
f_pos //读写偏移量
Struct m_inode *f_inode; //指向结构体中包含文件的属性信息