• 01.UNIX基础知识


    1、UNIX体系结构

    什么叫做内核?

    内核是一种软件,它控制计算机硬件资源,并提供程序的运行环境。

     

    什么叫操作系统?

    在广义上,操作系统包括了内核和一些其他软件,这些软件使得计算机能够发挥作用,如可以向用户提供服务之类的。

     

    什么是系统调用?

    内核的接口被称为系统调用。公用函数库构建在系统调用接口上,应用软件既可使用公用函数库,也可使用系统调用。

     

    2、文件和目录

    创建新目录的时候会自动创建两个文件名:.和..。

    在根目录下,这两个文件是同一个文件。

     

    目录是一个包含许多目录项的文件,在逻辑上,可以认为每个目录项都包含一个文件名。(参考《鸟哥的私房菜》)

    UNIX文件系统的大多数实现并不在目录项中存放属性,这是因为当一个文件具有多个硬链接时,很难保持多个属性副本之间的同步。

     

    以斜线开头的路径名称为【绝对路径】,否则则为【相对路径】。

    根文件的名字/是一个特殊的绝对路径名,它不含文件名。

     

    stdin、stdout和stderr都属于文件,所以可以使用fgets(buf,MAXLINE,stdin);从标准输入中读入一行。

     

    3、输入和输出

    文件描述符是一个小的非负整数,内核用它标识一个特定进程正在访问的文件。

     

    按惯例,每当运行一个程序时,所有的shell都为其打开三个文件描述符:标准输入、标准输出以及标准出错。一般情况,这三个描述符都链向终端,但shell也提供一种方法,使其中任何一个或所有三个描述符都能重新定向到某个文件,例如:

    ls > file.list

    即标准输出到file.list文件,而非终端。

     

    函数open、read、write、lseek以及close提供了不用缓冲的I/O,这些函数都使用了文件描述符。

    例子:

    	#define BUFFSIZE        4096
    
    	int main()
    	{
    		int n;
    		char buf[BUFFSIZE];
    
    		while((n = read(STDIN_FILENO,buf,BUFFSIZE)) > 0) {
    			if(write(STDOUT_FILENO,buf,n) != n) {
    				printf("write error!");
    				exit(1);
    			}
    
    			if(n < 0) {
    				printf("read error!");
    				exit(1);
    			}
    		}
    
    		exit(0);
    	}

    或者

    相对于不带缓冲的I/O函数而言,标准I/O函数提供了带缓冲的接口。

    【原文:The standard I/O functions provide a buffered interface to the unbuffered I/O functions.】

    	int main()
    	{
    		char c;
    
    		while((c = getc(stdin)) != EOF) {
    			if(putc(c,stdout) == EOF) {
    				printf("output error!");
    				exit(1);
    			}
    
    			if(ferror(stdin)) {
    				printf("input error!");
    				exit(1);
    			}
    		}
    
    		exit(0);
    	}

    在运行终端上:

    ./test < infile > outfile

    此时STDIN_FILENO描述符表示infile,STDOUT_FILENO描述符表示outfile。

     

    4、程序和进程

    程序是存放在磁盘上,处于某个目录中的一个可执行文件。使用6个exec函数中的一个由内核将程序读入存储器,并使其执行。

     

    在一个进程内的所有县城共享同一个地址空间、文件描述符、栈以及进程相关的属性。因为它们能访问同一存储区,所以各县城在访问共享数据时需要采取同步措施以避免不一致性。

    与进程相同,线程也用ID标识。但是,线程ID只在它所属进程内起作用。一个进程中的线程ID在另一个进程中并无意义。

     

    5、用户标识

    用户ID为0的用户为根或超级用户。

     

    6、信号

    信号是通知进程已发生某种情况的一种技术。

     

    7、时间值

    进程时间。也称为CPU时间,用以度量进程使用的中央处理机资源。

    当度量一个进程的执行时间时,UNIX系统使用三个进程时间值:

    a、时钟时间。

    b、用户CPU时间。

    c、系统CPU时间。

    时钟时间是进程运行的时间总量。

    用户CPU时间是执行用户指令所用的时间。

    系统CPU时间是为该进程执行内核程序所经历的时间(系统调用所耗时间)。例如read或write,在内核内执行所花费的时间就计入该进程的系统CPU时间。

    用户CPU时间和系统CPU时间之和常被称为CPU时间。

     

    8、系统调用和库函数

    系统调用和库函数都以C函数的形式出现。必要时我们可以替换库函数,而通常却不能替换系统调用。

    系统调用和库函数之间的一个差别是:系统调用通常提供一种最小接口,而库函数通常提供比较复杂的功能。

  • 相关阅读:
    【Linux技术】常用的Linux系统调用
    【Linux技术】Windows与Linux系统下的库·初探
    【C/C++】嵌入式程序员应该知道的0X10个C语言问题
    【C/C++】struct探索·extern "C"含义探索 ·C++与C的混合编程·C 语言高效编程的几招
    【Acm】八皇后问题
    【驱动】linux设备驱动·扫盲
    【驱动】linux设备驱动·字符设备驱动开发
    【教程】ubuntu下配置nvc详细教程
    【教程】InstallShield使用完全教程
    【ARM】2410裸机系列-流水灯
  • 原文地址:https://www.cnblogs.com/sheshiji/p/3682899.html
Copyright © 2020-2023  润新知