所有操作系统都为它们所运行的程序提供服务。
可将操作系统定义为一种软件,它控制计算机硬件资源,提供程序运行环境。这种软件叫内核(kernel)
- 内核的接口成为系统调用(system call)
- 公共函数库构建在系统调用接口上,应用程序既可以使用公共函数库,也可以使用系统调用
- shell 是一个特殊应用程序,为运行其他应用程序提供一个接口
shell是一种命令行解释器,它读取用户的输入,然后执行命令。shell的用户输入通常来自于终端,有时则来自于文件(shell脚本)。
UNIX文件系统是目录和文件的一种层次结构,所有的东西的起点是称为根
(root)的目录,这个目录的名称是一个字符"/"。
目录中的各个名称称为文件名
(filename)。只有斜线(/)和空字符这两个字符不能出现在文件名中。/
是用来分割构成路径名的各文件名,空字符则用来终止一个路径名。
POSIX推荐将文件名限制在:字母(a-z,A-Z),数字(0-9),句点(.),短横线(-)和下划线(_)
创建新目录时会自动创建两个文件名:.
和..
。点是指向当前目录,点点指向父目录。在最高层次的根目录中,点点和点相同。
由斜线分割的一个或多个文件名组成的序列,构成路径名,以斜线开头的路径名成为绝对路径
,否则称为相对路径
。相对路径名指向相对于当前目录的文件。文件系统根的名字(/)是一种特殊的绝对路径名,它不包含文件名。
每个进程都有一个工作目录
(working directory),有时称其为当前工作目录
(current working directory)。所有相对路径都是从工作目录开始解释。进程可以用chdir函数更改其工作目录。
登陆时,工作目录设置为起始目录(home directory),该起始目录从口令文件中相应用户的登陆项中获得
文件描述符
(file descriptor)通常是一个非负整数,内核用以标识一个特定进程正在访问的文件。当内核打开一个现有文件或者创建一个新文件时,它都返回一个文件描述符。在读,写文件时,可以使用这个文件描述符。
每运行一个新程序,所有的shell都为其打开3个文件描述符,即标准输入
,标准输出
,标准错误
。
是一个存储在磁盘上的某个目录中的可执行文件。内核使用exec
函数,将程序读入内存,并执行程序。
程序的执行实例被成为进程
。
UNIX系统确保每个进程都有一个唯一的数字标识符,称为进程ID
。进程ID总是一个非负整数。
一个进程只有一个控制线程——某一时刻执行的一组机器指令。
一个进程内的所有线程共享同一地址空间,文件描述符,栈以及进程相关的属性。因为它们能访问同一存储区,所以各线程在访问共享数据时需要采用同步措施避免不一致性。
当UNIX系统函数出错时,通常会返回一个负值,而且整数变量errno通常被设置为具有特定信息的值。例如open函数如果成功则返回一个非负文件描述符,如出错则返回-1。