UNIX 体系结构
- 操作系统内核:控制计算机硬件资源,提供程序运行环境
- 系统调用(syscall):内核的接口
- shell 命令解释器,读取用户输入,然后执行命令
- 文件和目录
- 目录:包含目录项的文件,具有名称
opendir
,readdir
,closedir
- 路径名:斜线分隔的一个多罗哥文件名构成的序列
- 文件描述符:内核用以标记一个特定进程正在访问的文件,是一个非负整数
- 目录:包含目录项的文件,具有名称
- 程序和进程
- 程序:一个存储在磁盘上某个目录中的可执行文件
- 进程:程序的执行实例
fork
:创建子进程,一次调用两次返回(父进程返回子进程的 pid,子进程返回 0)exec
:用新的程序,替换原来的程序,改变进程的行为waitpid
:等待进程终止
- 错误处理
- errno:负整数,带有特殊含义
- 多线程环境下,每个线程有自己的
local errno
- 规则
- 如果没有出错,值不会被例程清除
- 任何函数都不会将 errno 值设置为 0
- 函数
strerror
将 errno 映射成错误信息字符串perror
基于 errno 当前值,在标准错误上产生一条出错信息,然后返回,通常传当前程序名
- 多线程环境下,每个线程有自己的
- errno:负整数,带有特殊含义
- 信号:通常用于通知进程发生了某种情况,进程中 3 中处理方式
- 忽略信息
- 按系统默认方式处理
- 捕捉信号:提供一个回调函数,收到信号时执行改回调,在回调里处理
- 时间
- 日历时间:当前之间距离 1970 1 1 00:00:00 UTC 的秒数累计值
- 进程时间:CPU 时间,按时钟 tick 计算
- 时钟时间:进程运行的时间总量,又称 wall clock time
- 用户 CPU 时间:执行用户指令所用的时间
- 系统 CPU 时间:执行内核程序所用时间
- 库函数与系统调用
- 库函数通常可以替换,而系统调用无法替换
- 系统调用通常只提供一种最小接口,而库函数通常提供比较复杂的功能