UNIX基础知识(unix简介及优缺点)
1、UNIX体系结构
严格意义上,可将操作系统看成一种软件,它控制着计算机硬件资源,提供程序运行环境。
因其相对较小,而且位于环境的核心。称其为内核(kernel)。

系统调用(system calls):内核的接口
shell:特殊的应用程序,为运行其他应用程序提供了一个接口。
公用函数库构建在系统调用接口之上,应用程序既可使用公用函数库,也可使用系统调用。
广义上说,操作系统包括内核和其他一些软件(系统实用程序(system utility)、应用程序、shell以及公用函数库
二、登录
1、用户在登录UNIX系统时,先键入登录名,再键入口令。系统在其口令文件(通常是/etc/passwd文件)中查看登录名。口令文件中的登录项由7个以冒号分割的字段组成。
登录名:加密口令:数字用户ID(205):数字组ID(105):注释字段:起始目录:shell程序
三、文件和目录
1、文件系统
UNIX文件系统是目录和文件的一种层次结构,所有东西的起点是称为根root的目录,其名称就是一个字符‘/’。
目录是一个包含目录项的文件。在逻辑上,可认为每个目录项都包含一个文件名,同时还包含说明该文件属性的信息。文件属性(文件类型、文件大小、文件所有者、文件权限、文件最后修改的时间)。用stat和fstat函数返回包含所有文件属性的一个信息结构。
2、文件名
不能包含空格和斜线(/),斜线用来分割构成路径名的各文件名,空字符用来终止一个路径名。
文件名组成:字母,数字,句点(.),短横线(-),下划线(_)
创建新目录时会自动创建两个文件名:
.(点):指向当前目录
..(点点):指向父目录
根目录中,点和点点相同
3、路径名
由斜线分隔得一个或多个文件名组成的序列构成路径名。
相对路径:相对于当前目录的文件。
绝对路径:以斜线开头的路径名称。
4、ls命令的简要实现
//myls.c

dirent.h文件中包含opendir和readdir的函数原型,以及dirent的结构定义.
cc myls.c //编译
编译结果是生成默认名为a.out的可执行文件中
$ ./a.out /dev //输出dev目录下的文件名
5、工作目录
每个进程都有一个工作目录,进程可以用chdir函数更改其工作目录。
相对路径名doc/memo/joe是指当前目录中的doc目录中的memo目录中的文件joe
路径名/urs/lib/lint是一个绝对路径名,指根目录中的usr目录中的lib目录中的文件lint
四、输入输出
1、文件描述符
通常是一个小的非负整数,内核用以标识一个特定进程正在访问的文件。
2、标准输入,标准输出,标准错误
每当运行一个新程序时,所有的shell都为其打开3个文件描述符标准输入(standard input),标准输出(standard output),标准错误(stardard error),都链接向终端。
大多数shell都提供了一种方法,使其中一个或所有这3个描述符都能重新定向到某个文件。
执行ls命令,其标准输出重新定向到名为file.list的文件。
3、不带缓存的I/O
函数open、read、write、lseek、close提供了不带缓存的I/O。
五、程序和进程
1、程序是一个存储在磁盘上某个目录中的可执行文件。内核使用exec函数将程序读入内存,并执行程序。
程序的执行实例被称为进程,有些操作系统也用任务表示正在执行的程序。
2、程序ID:一个非负整数,进程的唯一标识符
3、进程控制:
三个主要函数:fork、exec、waitpid。
4、线程和线程ID
通常,一个进程只有一个控制线程(thread)——某一时刻执行的一组机器指令。对某些问题,多个控制线程分别作用于它的不同部分,问题解决就容易的多,另外,多个控制线程也可以充分利用多处理器系统的并行能力。
一个进程内的所有线程共享同一个地址控件、文件描述符、栈,以及与进程相关的属性。因为他们能共享同一存储区,所以各线程在访问共享数据时需要采用同步措施以避免不一致性。
线程也用ID标识,只是线程ID只在它所属的进程内起作用。一个进程中的线程ID在另一进程中无意义。
控制线程的函数与控制进程的函数类似,但另有一套。
5、出错控制
当UNIX系统函数出错时,通常会返回一个负值,整型变量errno通常被设置为具有特定信息的值。有大约15种不同的error的值(权限问题,文件不存在)
<errno.h>定义了errno以及可以赋予它的各种常量(都以E开头)。
POSIX和ISO C将errno定义为一个符号,将其拓展为可修改的左值。可以是一个包含出错编号的整数,也可是一个返回出错编号指针的函数。
以前定义:
Linux支持多线程存取errno,其定义为:
对errno应注意:
1、若没有出错,其值不会被例程清除。所以仅当函数的返回值指明出错时,才检验其值。
2、任何函数都不会将errno值设置为0.
六、用户标识
1.用户ID
口令文件登录项中的用户ID是一个数值,向系统标识各个不同的用户。系统管理员在确定一个用户的登录名的同时,确定其用户ID。用户不能修改其用户ID。通常每个用户都有其唯一的用户ID。
用户ID为0的用户为根用户或超级用户,在口令文件中,有个登录项,其登录名为root,即超级用户,超级用户对系统有自由的支配权。
2、组ID
口令文件登录项也包括用户的组ID,是一个数值。组ID也是由系统管理员在指定用户登录名时分配的。允许同组的各个成员之间共享资源。组文件将组名映射为数值的组ID。组文件通常是/etc/group.
3、附属组ID
除在口令文件中对一个登录名指定一个组ID外,大多数UNIX系统版本还允许一个用户属于另外一些组。允许一个用户属于至多16个其他的组
七、信号
信号signal用于通知进程发生了某种情况。
进程有3种处理信号的方式:
1、忽略信号。有些信号表示硬件异常,例如:除以0或访问进程地址空间以外的存储单元等,因为这些异常产生的后果不确定,所以不推荐这种处理方式。
2、按系统的默认方法处理。对于除数0,系统默认终止该进程。
3、提供一个函数,信号发生时调用该函数,被称为捕捉该信号。通过自己编写的函数,我们就能知道什么时候产生了信号,并按期望的方式去处理它。
终端键盘产生信号的方式:
1、中断键(interrupt key):通常是Delete键或Ctrl+C
2、退出键(quit key)通常是Ctrl+\
它们被用于中断当前运行的进程。
调用kill函数也可产生信号。
在一个进程中调用此函数就可向另一个进程发送一个信号。
八、时间值
UNIX系统使用过两种不同的时间值。
1、日历时间。该值是自协调世界时(Coordinated Universal Time,UTC)1970年1月1日00:00:00这个特定时间以来所经历的秒数累计值。这些时间值可用于记录文件最近一次修改的时间。
系统基本数据类型time_t用于保存这种时间值.
2、进程时间。即CPU时间,用以度量进程使用的中央处理器资源。进程时间以滴答计算。每秒钟曾取为50,60,100个时间滴答。
系统基本数据类型clock_t用于保存这种时间值.
UNIX系统为一个进程维护了3个进程时间值:
1、时钟时间。又称墙上时钟时间(wall clock time),进程进行的时间总量,其值与系统中同时运行的进程数有关。
2、用户CPU时间。执行用户指令所用的时间。
3、系统CPU时间。为该进程执行内核程序所经历的时间。
用户CPU时间和系统CPU时间之和称为CPU时间。
time:得到任一进程的时钟时间,用户时间,系统时间。

九、系统调用和库函数
1、从实现者角度看,系统调用和库函数有明显区别。系统调用通常是不能被替换的,库函数可由我们自己编写实现。
2、从用户角度看,区别并不重要,系统调用和库函数 都以C函数的形式出现,两者都为应用程序提供服务。
3、从职责来看,内核中的系统调用分配一块空间给进程,而库函数malloc则在用户这一层次管理这一空间。
4、系统调用通常提供一种最小接口,而库函数通常提供比较复杂的功能。如:sbrk系统调用和malloc库函数之间的差异。
问题:
1、目录.和..除根目录外是不同的

-i用于打印文件或目录的i节点标号,-d用于打印目录信息。可见第二个命令打印出来的i节点编号都为2.是一样的。
以上就是关于《UNIX基础知识(unix简介及优缺点)》的全部内容,本文网址:https://www.7ca.cn/tg/42447.shtml,如对您有帮助可以分享给好友,谢谢。