1.操作系统可被定义为一种软件,它控制计算机硬件资源,提供程序运行环境。通常称为内核(kernel)。
2.内核的接口被称为系统调用。公共函数库建在系统调用接口之上,应用程序既可使用公共函数库,也可使用系统调用。shell是一个特殊的应用程序,为运行其他应用程序提供一个接口.
3.Unix文件系统是目录和文件的一种层次结构,所有东西的起点是称为根(root)的目录,该目录的名称是”/”。目录是一个包含目录项的文件。在逻辑上,可以认为每个目录项都包含一个文件名,同时还包含说明该文件属性的信息。文件属性包括文件类型,文件长度,文件所有者,文件的访问权限和修改时间等。
4.目录中的各个名字称为文件名。不能出现在文件名中的字符只有两个,斜线( / )和空操作符(n u l l)。创建新目录时会自动创建两个文件名:.(点)和 ..(点点)。点指向当前目录,点点指向父目录。在根目录中,点和点点相同。
5.路径名分为绝对路径和相对路径。以斜线(/)开头的称为绝对路径,否则为相对路径。
6.在APUE中,许多程序都包含头文件apue.h,它定义了许多常量和函数原型,在使用书中的代码之前,需要进行一些配置。
7.每个进程都有一个工作目录,有时称为当前工作目录。所有相对路径名都从工作目录开始解释。进程可以用c h d i r函数更改其工作目录。
8.登录时,工作目录设置为起始目录,该起始目录从口令文件中的登录项中取得。
9.文字描述符是一个小的非负整数,内核用以标识一个特定进程正在存访的文件。当内核打开一个现存文件或创建一个新文件时,它就返回一个文件描述符。当读、写文件时,就可使用它。
10.每当运行一个新程序时,所有的shell都为其打开三个文件描述符:标准输入、标准输出以及标准出错。如果像简单命令l s那样没有做什么特殊处理,则这三个描述符都连向终端。
11.函数open、read、write、lseek、以及close提供了不带缓冲的I/O。这些函数都用文件描述符进行工作。
12.标准I/O函数提供一种对不用缓存的I/O函数的带缓存的界面。使用标准I/O可无需担心如何选取最佳的缓存长度。另一个使用标准I/O函数的优点与处理输入行有关(常常发生在UNIX的应用中)。例如,fgets函数读一完整的行,而另一方面,read函数读指定字节数。我们最熟悉的标准I/O函数是printf。在调用printf的程序中,总是包括 stdio.h头文件。
13.程序是一个存储在磁盘上某个目录中的可执行文件。内核使用exec函数(7个exec函数之一),将其读入内存,并执行。
14.程序的执行实例被称为进程。UNIX系统确保每个进程都有一个唯一的非负的数字标识符,称为进程ID,可用getpid()得到。
15.进程控制的三个主要函数为:fork、exec和waitpid。
16.通常进程只有一个控制线程——某一时刻执行的一组机器指令。对于某些问题,如果有多个控制线程分别作用于它的不同部分,解决起来容易的多。多线程也可以充分利用多处理器系统的并行能力。一个进程的所有线程共享同一地址空间、文件描述符、栈以及进程相关的属性。因次,各线程访问共享数据时需要进行同步。线程也有ID,它只在进程内部有意义。
17.当UNIX函数出错时,往常返回一个负值,而且整型变量errno通常设置为具有特定信息的一个值。例如,open函数如成功执行则返回一个非负文件描述符,如出错则返回-1。在open出错时,有大约1 5种不同的errno值(文件不存在,许可权问题等)。某些函数并不返回负值而是使用另一种约定。例如,返回一个指向对象的指针的大多数函数,在出错时,将返回一个null指针。文件errno. h中定义了变量errno以及可以赋与它的各种常数。
18.口令文件登录项中的用户ID(user ID)是个数值,它向系统标识各个不同的用户。系统管理员在确定一个用户的登录名的同时,确定其用户ID。用户不能更改其用户ID。通常每个用户有一个唯一的用户ID。用户I D为0的用户为根( root)或超级用户( superuser )。口令文件登录项也包括用户的组I D(group ID),它也是一个数值。组ID也是由系统管理员在确定用户登录名时分配的。一般来说,在口令文件中有多个记录项具有相同的组ID。在UNIX下,组被用于将若干用户集合到课题或部门中去。这种机制允许同组的各个成员之间共
享资源(例如文件)。
19.信息是通知进程已发生某种条件的一种技术。进程如何处理信号有三种选择:
- (1)忽略该信号。有些信号表示硬件异常,如除以0或访问进程地址空间以外的单元等。因为这些异常产生的后果不确定,所以不推荐使用这种处理方式。
- (2)按系统默认方式处理。对于0除,系统默认方式是终止该进程。
- (3)提供一个函数,信号发生时则调用该函数。使用这种方式,我们将能知道什么时候产生了信号,并按所希望的方式处理它。
很多条件会产生信号。有两种键盘方式,分别称为中断键(interrupt key,通常是delete键或Ctrl- C )和退出键(quit key,通常是Ctrl - \ ),它们被用于中断当前运行进程。另一种产生信号的方法是调用名为kill的函数。在一个进程中调用此函数就可向另一个进程发送一个信号。当然这样做也有些限制:当向一个进程发送信号时,我们必需是该进程的所有者。
20.日历时间,可用于记录文件最近一次的修改时间等。进程时间。这也被称为CPU时间,用以度量进程使用的中央处理机资源。当度量一个进程的执行时间时,UNIX系统使用三个进程时间值:时钟时间、 用户CPU时间、 系统CPU时间。进程运行的时间总量,其值与系统
中同时运行的进程数有关。用户CPU时间是执行用户指令所用的时间量。系统CPU时间是为该进程执行内核所经历的时间。
21.从执行者的角度来看,系统调用和库函数之间有重大区别,但从用户角度来看,其区别并不非常重要。在本书中系统调用和库函数都以C函数的形式出现,两者都对应用程序提供服务,但是应当理解,如果希望的话,我们可以替换库函数,但是通常却不能替换系统调用。应用程序可以调用系统调用或者库函数,而很多库函数则会调用系统调用。系统调用和库函数之间的另一个差别是:系统调用通常提供一种最小界面,而库函数通常提供比较复杂的功能。
UNIX环境高级编程学习笔记(一)UNIX基础知识
最新推荐文章于 2022-11-13 21:51:50 发布