Unix 基础.

Unix体系结构

1. 由内而外分别为系统内核->(系统调用)->Shell | 库函数->应用软件.

 

2. 用户登录

用户名称在/etc/passwd文件中查看,用户登录后通过Shell终端和系统交互. Shell: bash/ksh/tcsh/csh/sh, 用户登录时候的shell/etc/passwd最后一个字段决定。

3. 系统文件和目录

目录起始点为:root (/), 

4. 输入和输出

4.1. 文件描述符(file descriptor):用来标识一个特定进程正在访问的文件。当内核打开一个已有文件或者创建一个新文件的时候,它返回一个文件描述符。

4.2. 标准输入,标准输出和标准出错:运行一个程序时,这个文件描述符打开。这些文件对应的输入,输出可以重定向。

4.3. 不用缓存的I/O:系统函数:open/read/write/lseek/close unistd.h,直接采用文件描述符。

4.4. 标准I/O:对不用缓冲I/O函数的带缓冲的接口(stdio.h)。不比要担心如何选取最佳的缓存去大小。

5. 程序和进程

5.1. 进程和进程ID:程序的执行实例被称为进程process (task), 每个进程都有一个唯一标志符:进程IDprocessID (getpid).

5.2. 进程控制:fork/exec/waitpid

5.3. 线程和线程ID: 同一进程内的所有线程共享同一地址空间,文件描述符,栈以及与进程相关的属性线程互斥在访问同一共享数据时线程由线程ID标志.

6. 出错处理函数返回值(errno.h)来标志错误类型在多线程中,每个线程都有自己的局部errono,(避免线程干扰),该值不会被其他线程改变,并且不为0Notes: 在用管道运行程序的时候,argv[0]置于输出信息中,可以知道哪个程序产生错误:prog1 <inputfile |prog2 |prog3 > outputfile.

7. 用户标志。用户ID用来标志各个不同的用户。

7.1. 组ID:用户组标志。

7.2. 附加组ID:用户可以多至属于16个组。

8. 信号:Signal。程序根据捕获的信号,做不同的处理。

9. 时间值:1)日历时间。2CPU时间。度量一个进程的执行时间时,3个进程时间值:时钟时间,用户CPU时间 (执行用户指令所用的时间),系统CPU时间(执行内核程序所用的时间)。

10. 系统调用和库函数。