UNIX基础知识
操作系统简介
所有的操作系统都为它们所运行的程序提供服务,包括:执行新程序、打开文件、读写文件、分配存储区等。
严格意义上说,操作系统也是一种软件,它控制计算机硬件资源,提供程序运行环境。通常将这种软件称为内核
。内核的接口被称为系统调用
,公用函数库
建立在系统调用接口之上,shell
则是一种特殊的应用程序,为其它应用程序提供接口。
Linux是GNU操作系统使用的内核。
每一个进程都有一个工作目录
,所有的相对路径都从工作目录开始解释。
文件描述符
文件描述符
是内核用以标识一个特定进程正在访问的文件,进程读写文件时使用。
每运行一个新程序时,所有的shell都为其打开3个文件描述符:标准输入0
、标准输出1
、标准错误2
。如果不做特殊处理,则所这3个描述符都将链接向终端。大多数shell都提供将这3个描述符重定向的方法,如bash
$ ls > out.txt
参考
程序
程序是一个存储在磁盘上某个目录中的可执行文件。内核使用exec
函数将程序读入内存并执行。
程序的执行实例称为进程
。每个进程都有一个唯一的数字标符,称为进程ID。进程可以在前台运行,将输出显示在屏幕上,也可以在后台运行。内核控制着系统如何管理运行在系统上的所有进程。
信号
信号
用于通知进程发生了某种情况。进程接收到信号后会进行相应的处理。
很多情况都会产生信号。如在终端键盘上可以通过中断键(Ctrl-C)
和退出键(Ctrl-\)
产生相应的信息,用于中断当前运行的进程。如在另一个进程中可通过kill
函数向另一个进程发送一个信号中断其运行。
时间
日历时间
其值为自协调世界时(UTC)
。
进程时间
也称CPU时间
,用以度量进程使用的中央处理器资源。有3个进程时间值:
- 时钟时间:进程运行的时间总量
- 用户CPU时间:执行用户指令所用的时间量
- 系统CPU时间:为该进程执行内核程序所经历的时间
系统调用和库函数
所有的操作系统都提供多种服务的入口点,由此程序向内核请求服务。这些入口点即称为系统调用
。
系统调用的接口是用c语言定义的,与具体系统如何执行该系统调用的实现技术无关。
通用库函数
可能会调用一个或多个内核的系统调用,也可能不会,但它们并不是内核的入口点。从实现来看,库函数与系统调用之间有着本质区别。但从用户角度看,这区别并不重要——系统调用和库函数都是以c函数的形式出现。
系统内存管理
内核通过硬盘上的存储空间来实现虚拟内存,这块区域称为交换空间
。内核不断地在交换空间和实际的物理内存之间反复交换虚拟内容中的内容,使得系统以为它拥有比物理内存更多的可用内存。
UNIX标准及实现
UNIX标准
- ISO C
- IEEE POSIX
- SUS(Signle UNIX Spcification)
UNIX系统的实现
- SVR4
- FreeBSD
- Linux
- Max OS X
- Solaris
其中,虽然只有Max OS X和Solaris能够称之为是一种UNIX系统,但它们都实现了UNIX标准并提供了UNIX的编程环境。