Unix 体系结构
- 内核:从严格意义来说,可将操作系统(内核)定义为一种软件,它控制计算机硬件资源,提供程序运行环境。
- shell: 是一个命令行解释器,它读取用户输入,然后执行命令。
函数
系统调用通常提供一种最小的接口,而库函数通常提供比较复杂的功能。
- 系统调用:内核的接口。各种版本的Unix实现都提供良好定义、数量有限、直接进入内核的入口点,这些入口点称为
系统调用
- 公用库函数:封装一些功能,库函数可能会包含很多的系统调用
登录
/etc/passwd
口令文件中保存这用户的登录相关信息。- 由七个以冒号分隔的字段组成:登录名、加密口令、数字用户ID、数字组ID、注释字段、起始目录(
/home/sar
)、shell程序(/bin/ksh
)。
|
|
文件和目录
文件系统
- UNIX 文件系统是目录和文件的一种层次结构,所有东西的起点是称为根(root)的目录,这个目录名称是一个字符
"/"
。 - 目录(directory)是一个包含目录项的文件。
文件名
- 目录中的各个名字称为文件名(filename)。只有斜线(
/
)和空字符不能出现在文件名中。/
:用来分隔构成路径名的各文件名。- 空字符:用来终止一个路径名。
- 创建新目录的时候会自动创建两个文件名:
.
(点)和..
(点点)。在最高层次的根目录中,点点和点相同.
(点):指向当前目录..
(点点):指向父目录
路径名
由斜线分隔的一个或多个文件名组成的序列(也可以斜线开头)构成路径名(pathname),以斜线开头的路径名称称为绝对路径名(absolute pathname),否则称为相对路径名(relative pathname)。
- 文件系统根的名字(
/
)是一个特殊的绝对路径名,它不含文件名。
工作目录
每个进程都有一个工作目录(working directory),有时称其为当前工作目录(current working directory)。所有的相对路径都从工作目录开始解释
起始目录
登录时,工作目录设置为起始目录(home directory),该其实目录从口令文件中相应的用户的登录项中取得。
输入和输出
文件描述符
文件描述符(file descriptor)通常是一个小的非负整数,内核用以标识一个特定进程正在访问的文件。当内核打开一个现有文件或创建一个新文件时,它都返回一个文件描述符。在读、写文件时,可以使用这个文件描述符。
标准输入、标准输出和标准错误
按照惯例,每当运行一个新程序时,所有的shell都为其打开3个文件描述符,即标准输入(standard input)、标准输出(standard output)、以及标准错误(standard error)。
不带缓冲的I/O
函数 open、read、write、lseek以及close提供了不带缓冲的I/O。
标准I/O
标准I/O函数为那些不带缓冲的I/O函数提供了一个带缓冲的接口。使用标准I/O函数无须担心选取最佳的缓冲区大小。
程序和进程
程序
程序(program)是一个存储在磁盘上某个目录中的可执行文件。内核使用exec
函数(7个exec
函数之一),将程序读入内存,并执行程序。
进程和进程ID
程序被执行的实例被称为进程(process)。Unix系统确保每个进程都有一个唯一的数字标识符,称为进程ID(process ID)。进程ID总是一个非负整数
进程控制
有3个用于进程控制的主要函数:fork
、exec
、waitpid
。(exec
函数有七种变体,但经常把它们统称为exec
函数。)
fork
:调用fork用于创建一个新进程。waitpid
: 函数返回子进程的终止状态(status变量)。
线程和线程ID
通常,一个进程只有一个控制线程(thread)——某一时刻执行的一组机器指令。
- 一个线程内的所有线程共享同一地址空间、文件描述符、栈以及与进程相关的属性。因为它们能访问同一存储区,所有各线程在访问共享数据时需要采用同步措施避免不一致性。
- 与进程相同,线程也用ID标识。但是,线程ID只在它所属的进程内起作用。一个进程中的线程ID在另一个进程中没有意义。当在一进程中对某个特定线程进行处理时,我们可以使用该线程的ID引用它。
出错处理
当Unix系统函数出错时候,通常会返回一个负值,而且整形变量errno
通常被设置为具有特定信息的值。
用户标识
用户ID
口令文件登录项中的用户ID(user ID)是一个数值,它向系统标识各个不用的用户
- 用户ID为0的用户为根用户(root)或者超级用户(superuser)。
- 如果一个进程具有超级用户特权,则大多数文件名权限的检查都不再进行。
组ID
组被用于将若干用户集合到项目或部门中去。这种机制允许同组的各个成员之间共享资源(如文件)
这个组管理可以按照(rbac)角色资源管理去理解
口令文件登录项也包含用户的组ID(group ID),它是一个数值。
- 组ID是由系统管理员在指定用户登录名时分配的。
- 在口令文件中有多个登录项具有相同的组ID。
附属组ID
除了在口令文件中对一个登录名指定一个组ID外,大多数UNIX系统版本还允许一个用户属于另外一些组。
信号
信号用于通知进程发生了某种情况。进程有以下三种信号处理方式。
- 忽略信号
- 按系统默认的方式处理。一般是终止该进程
- 提供一个函数,信号发生时调用该函数,这种称为捕捉信号。