UNIX环境高级编程--第一章 UNIX基础知识
第一章 UNIX基础知识
1.2 UNIX体系结构 从严格意义上说,可将操作系统定义为一种软件,它控制计算机硬件资源,提供程序运行环境。我们将这种软件称为内核(kernel),因为 它相对较小,且位于环境的核心。内核的接口被称为系统调用(system call)。公共函数库构建在系统调用接口之上,应用程序既可以使用公共函数库,也可以使用系统调用。shell是一个特殊的应用程序,为运行其他应用程序提供了一个接口。 1.5 输入和输出 1.文件描述符 文件描述符(file description) 通常是一个小的非负整数,内核用以标识一个特定进程正在访问的文件。 当内核打开一个现有文件或新建一个文件时,它都返回一个文件描述符。在读、写文件时,可以用这个文件描述符。 2.标准输入、标准输出和标准错误 按惯例,每当运行一个新程序的时候,所有的shell都为其打开了3个文件描述符,标准输入、标准输出和标准错误。 3.不带缓冲的I/O 函数open、read 、write、lseek、close提供了不带缓冲的I/O。这些函数使用文件描述符。 4 标准I/O 标准I/O为不带缓冲的I/O函数提供了一个带缓冲的接口。使用标准I/O函数无需担心如何选取最佳的缓冲区大小。 1.6 程序和进程 1.程序 程序(program)是一个存储在磁盘上某个目录的可执行文件。内核使用exec函数,将程序读入内存,并执行。 2.进程和进程ID 程序的执行实例被称为进程(process)。某些操作系统用任务(task)表示正在执行的程序。 UNIX系统确保每一个进程均有唯一的一个数字描述符,称为进程ID。进程ID总是一个非负整数。 3.进程控制 3个用于进程控制的函主要函数:fork、exec、waitpid. 4.线程和线程ID 通常,一个进程只有一个控制线程(thread)--某一时刻执行的一组机器指令。 一个进程内的所有线程共享同一地址空间、文件描述符、栈以及与进程相关的属性。因为他们能访问同一存储区, 所以各线程在访问共享数据时需要采取同步措施以避免不一致性。 1.7出错处理 UNIX系统函数出错时,通常会返回后一个负值,而且整型变量errno通常被设置为具有特定信息的值。 两个函数: 1. #include- 忽略信号。
- 按照系统默认方式处理。
- 提供一个函数,信号发生是调用该函数,称为捕捉该信号。
- 时钟时间:进程运行的时间总量,与系统中同时运行的进程数有关。
- 用户CPU时间:执行用户指令所用的时间。
- 系统CPU时间:为该进程执行内存程序所经历的的时间。