操作系统和用户程序之间的接口被定义为一组拓展指令也就是被我们所熟知的系统调用,要想理解操作系统是如何
工作的必须更细致地考察这些接口。系统调用随操作系统的不同而不同。这里集中讨论Minix3系统的接口,这样可以
让我们更深入了解操作系统如何工作,该操作系统基于POSIX标准。
Minix3中的系统调用粗略的分为两类:处理进程和处理文件。
进程
A process is basically a program in execution.和一个进程紧密联系的是它的address space。
address space is a list of memory locations from some mimimum(usually 0) to some maximum,
which the process can read and write.这个address space中包含进程的可执行程序,程序的数据,
以及程序的栈。同时和一个进程有关联的是一组寄存器和运行这个程序所需要的信息。
在分时系统中(multiprogramming systems)操作系统周期性地中止一个进程和开始另一个进程,for
example,because the first one has had more than its share of CPU time in the past second.
一个进程被暂时中止(挂起),他之后必须被以中止时的状态重启。这就意味着在暂停的这段时间里进程的所有信息
都应该被精确地保存在某个位置。在一些操作系统中,除了进程的address space 中的内容外的其他关于该
进程的信息被保存在一个操作系统表(operating system table)中,这个表也叫做process table,它是一
个数组或者是链表。
因此一个被挂起的进程包含两个方面:它的address space(经常叫做它的core image)以及它的进程表项(process table entry )。
重要的进程管理的系统调用是用来建立和结束进程。考虑一个例子:一个叫shell(or command interpreter)从终端度到一条指令
比如要求编译一个程序。这个shell必须创建一个进程来运行compiler,当这个进程结束编译它必须执行系统调用来中止他自己。
一个进程如果可以创建一个或更多的进程(叫child process)同时这些被创建出来的进程也可以轮流创建进程,那么我们就得到了
一个进程树。合作完成某项工作的相关进程之间需要进行交流来使他们的行为一致,这就需要interprocess communication 其他的process system calls 可以用来申请更多内存(或释放无用的内存),等待一个child process终止或者用一个新的程序覆盖这个child process中的程序。
每个Minix3的合法用户被分配一个UID被系统管理员,每一个被发起的进程都有一个和发起人相同的UID,一个child process和它父进程有相同的UID,每一个
使用者可以是一个用户组的一员,这个用户组中每个使用者有一个GID。有一个UID叫超级用户(superuser)有违反一些保护规则的权力。
文件
操作系统需要能够创建,移除,读写文件,一个文件读完了之后需要关闭。
Minix提供目录(directory)的概念来提供一个地方保存文件,这样之后系统调用需要能够创建和移除目录,把一个文件加入一个目录中,从一个目录中移除文件
这种文件管理模型生成了一种分层系统——也就是文件系统。文件系统也是树的结构。进程的树的分层通常比较浅,存在时间短,文件系统中的树比较深,存在时间长。物主身份(Ownership)和保护机制对于树和文件也是不同的。