3.操作系统概念
我们之前说过操作系统作为硬件资源调用与硬件资源管理者两方面来讨论操作系统,可以明白的是,凡是提供这两种服务的系统程序就可称之为操作系统,而操作系统所提供的服务最终是被用户所使用的,操作系统必然需要在硬件与用户程序之间提供一系列接口,而这些接口传统上称之为系统调用(System Call),他们实现的方式多种多样。
3.1进程
在Minix3以及常见的操作系统中,一个重要的概念就是就是进程,进程的本质就是一个正在执行的程序。每个进程都有自己的地址空间,如果将内存看成一把直尺,直尺的最大值就是内存的大小,那么进程所属的地址空间就是这把直尺上的某一个线段,比如从2厘米到3厘米这段空间就是进程的地址空间,进程可以读写其中的内容。地址空间中包括可执行程序,程序数据和他的栈,与每个进程相关的还有一组寄存器,其中有程序计数器,栈指针和其他寄存器,以及程序运行所需要的其他所有信息。
在一个分时系统中,系统为每一个程序分配一个时间片段执行该程序,比如系统为每一个程序分配的时间片段是1秒,那么当一个进程已经执行了1秒,系统将要去执行下一个进程时,此进程被暂时挂起,那么后来当他需要重新被CPU执行时,就要求此刻的状态与先前暂停时的状态完全相同。这也意味着当我们要挂起一个进程时,必须保存他的所有信息。举个例子,当一个进程以只读方式打开了一些文件,每一个文件都有一个指针来标识当前的读写位置,当一个进程被挂起,所有的这些指针都需要保存下来,这样,当进程被重新调度执行后,如果它使用read系统调用来读取数据,就可以读到正确的数据。在许多操作系统中,一个进程的所有信息,除了他的地址空间中的内容,其他的都存放在操作系统的一张表中,该表被称为进程表,实质上是一个结构数组(或链表),系统中的每一个进程都要占用其中一个节点。
对于一个被挂起的进程来说,它主要包括两部分内容,一个是进程的地址空间,称为内核映像,二是进程表项,包括寄存器及其他信息。
有时我们需要一个进程与另一台计算机上的某个进程进行通信,他可以通过网络向远程进程发送消息,为了确保消息或者消息的应答不会丢失,发送者可以要求他所在的操作系统在指定的若干时间后给他一个通知,如果他没有接收到应答消息,就可以重发消息。当设定了这个定时器后,该进程就可以去做其他事情。
若进过了指定时间后,操作系统想这个进程发送了一个警报信号,该信号将使进程暂停当前的程序,将寄存器信息保存在栈中,然后运行一个特殊的信号处理程序,比如重传一条丢失的消息。当信号处理程序结束后,在恢复进程运行上下文,除了定时器超时之外,还有比如其他硬件检测出的许多陷阱,如执行非法指令或访问非法地址,都会被转换成信号,发送给进程。
Minix3与linux等一些操作系统对每一个合法用户都会有一个由系统管理员分配用户标识号(UID),对于系统中每一个进程,都记录有启动他的用户的UID,此外每一个用户都可以是一个组的成员,每一个都有一个组标识号(GID)。
3.2文件
在操作系统中的另一大类的系统调用中与文件系统有关,之前提过,操作系统的一个主要功能就是屏蔽磁盘和I/O设备的具体细节,给程序员提供一个简洁方便且与设备无关的文件模型。在现代的操作系统中大多使用了目录(Directory)的概念,其结构如下图所示。
进程与文件都被组织成树状结构,但他们的相似性仅此而已,进程树一般都不会超过3层,而文件树一般为4层5层甚至更深,并且进程之间的层次结构是暂时性的,而目录层次可以是长期性的,一般来说只有父进程可以控制和访问子进程,但对于目录与文件来说,除了所有者之外其他人也可以访问。
目录层次结构中的每一个文件都可以用一个从根目录开始的路径名来标识,这种绝对路径名包含了从根目录到该文件的所有中间目录,在linux中,使用"/"来作为分隔符,在Windows中,可以使用"\"来作为分隔符。
在任意一个时刻,每一个进程都有都有一个当前的工作目录(working directory),在这种目录下,路径名不是以根目录开始的,而是以相对路径开始的,如果当前的工作目录是/Faculty/prof.Brown,那么路径名Courses/CS101和绝对路径名/Faculty/Prof.Brown/Courses/CS101是完全等效的。
对于文件系统中的每一个文件,操作系统提供了一个11位的二进制码来保护,包括3个3位的域,分别描述文件的所有者,同组用户和其他用户,每一个域的3位分别标识rwx位,分别位读权限,写权限与执行权限,下图是一个linux的截图的示例。在对一个文件进行读写操作之前,要先打开这个文件,此时,系统就会进行访问权限检查。如果访问权限是许可的,则返回一个整数,称为文件描述符,在unix中一切皆文件,socket方法也会返回一个文件描述符,因为不管是网卡还是打印机,都会作为一个文件挂载在操作系统中的文件系统中。
Minix3中一个重要的概念就是文件系统的挂装(挂载),对于个人计算机而言就会有磁盘,或者其他可移动设备,如CD-ROM磁盘中也有一个文件系统,他们之间相互独立,为了可以访问,可以将这些设备挂装在操作系统上,如下图所示。
Minix3另一个重要概念是设备文件,提供设备文件的目的是使I/O设备使用起来更像类似于文件。这样对设备的读写操作就可以使用和普通文件相同的系统调用。设备文件分成两类:块设备文件和字符设备文件。块设备文件描述的是以随机访问的数据块位单元的设备,如磁盘。打开一个块设备文件后可以去访问它的某一个数据块,如第四个数据块,而不用考虑文件系统的内部结构。
类似的,字符设备文件指那些义字符流方式进行操作设备如打印机、调制解调器等。一般设备文件都保存在/dev目录下。
1.3命令解释器(Shell)
操作系统是实现系统调用的代码,而编辑器、编译器、汇编程序、链接程序以及命令解释器等都不是操作系统的组成部分,但是它使用了大量操作系统的特性,同时他也是终端用户与操作系统之间的主要接口,除非用户使用的是图形用户界面。
用户登录进入系统是,同时启动一个shell,他以终端作为标准的输入输出。一般都会首先显示一个命令提示符,如下图linux的命令提示符就是$。