本文简要介绍一下在Unix系统中的一些概念,这是Advanced Programming in Unix Enviroment 这本书的第一章的内容
Files
1、在Unix中创建一个新directory的时候,会自动创建两个filenames,即.(called dot) and ..(called dot-dot)。
2、每一个file都有一个File Descriptor。File descriptors are normally small non-negative integers that the kernel uses to identify the files being accessed by a particular process.
Program & Process
3、A program is an executable file residing on disk in a directory. A program is read into memory and is executed by the kernel as a result of one of the six exec functions.
An executing instance of a program is called a process.
The UNIX System guarantees that every process has a unique numeric identifier called the process ID. The process ID is always a non-negative integer.
对于硬盘上的一个程序(program)来说,当它在运行的时候,就叫做进程(process)。这个程序每次运行Unix都会分配给它一个process ID。
$ ./a.out hello world from process ID 851 $ ./a.out hello world from process ID 854
4、There are three primary functions for process control: fork, exec, and waitpid.
Signal
5、信号(signal)是Unix系统中一个重要的概念。Unix使用信号来告诉系统中的进程(Process)某些情况发生了。做个比喻,一个工人正在往仓库里搬东西,这时候仓库管理员告诉这个工人说仓库里没有地方了,让他歇一会儿。这个工人就是一个进程(Process),这个仓库管理员就是Unix系统,仓库管理员告诉工人时所说的话就是信号(Signal)。
6、如果一个进程接收到某种信号,它可以采取下面几种操作:
· 忽略这个信号。
· 进行默认的处理。
· 我们自己提供一个函数,当一个信号发生时,我们就调用这个函数进行相应的处理。
7、kill 指令可以由一个进程向另外的进程传递信号。
8、Ctrl-C 被称为 interrupt key, 用来中断正在执行的程序。
Ctrl-backslash (\) 被称为 quit key,用来退出正在执行的程序。
Ctrl-D 则是EOF的标记,即文件结束的标记,它在新的一行开始,之前没有任何字符。
Time Value
9、Unix系统中有两种类型的时间值:
· Calendar Time:这种时间值用在文件的标记上,表明这个文件是什么时候创建和修改的。它是从1970年1月1日 00:00:00开始算起,一直到现在的时间值,单位是秒。
· Process Time: 这也叫做CPU时间。它是用来测量一个Process在CPU上运行了多长时间的一个标记。它的单位是clock ticks。通常,在Unix系统中,每一秒会有50、60或者100个clock ticks。
10、对于一个进程在CPU上运行的时间来说,Unix系统用三个量来表示它们:
· Clock Time: 我们通常也叫它Wall Clock Time,就是说,你看着墙上的表,从这个程序开始运行,一直到这个程序结束,你看看墙上的表一共走了多长时间,就用这个值表示。这通常与当时Unix系统中是否有其他程序在运行有关。
· User CPU Time: 就是这个程序在CPU运行时,它所执行的用户指令占了多长时间。
· System CPU Time: 指这个程序在CPU运行时,它所执行的kernel 指令占了多长时间。
Unix Manual Pages
11、这个可以通过在Linux终端运行man man 命令查看。会看到MAN(1)显示在右上角。这个数字有特殊含义:
· 1 Executable programs or shell commands
· 2 System calls (functions provided by the kernel)
· 3 Library calls (functions within program libraries)
System calls & Labrary functions
12、在 经典的Unix构架图 中,我们可以看到在Unix内核之上有System Calls 和 Labrary routines 两个层次。那么它们之间有什么区别呢?
· System Calls离内核更近,提供的接口比较有限,在Linux系统上通常是240~260个 System Calls 。
· Labrary Routines 运行在 System Calls之上,有可能调用一个或多个System Calls,也可能一个也不调用。
· 我们有时候可以更改Labrary中的函数,但是却无法更改System Calls。
13、常见的 system calls 有:fork, exec, wait, sbrk。
常见的 labrary routines有: system, popen, malloc