操作系统复习(十八)——操作系统接口

用户接口

操作系统向用户提供了两类接口:用户接口和程序接口。

用户接口是为了方便用户使用计算机资源所建立的用户和计算机之间的联系。也就是说用户并没有直接使用计算机资源的权限,而操作系统有这个权限,操作系统可以向用户提供命令、系统调用、图形等形式的接口,完成用户提交的各类任务。

程序接口由一组系统调用命令组成,这是操作系统提供给编程人员的接口。用户通过在程序中使用系统调用命令来请求操作系统提供服务。每一个系统调用都是一个能完成特定功能的子程序。

Shell命令语言

在linux或Unix系统中,一般把简单命令分为两类:

  1. 系统提供的标准命令,包括调用各种语言处理程序、实用程序等,系统管理员可以增添新的系统标准命令。
  2. 用户自定义的命令。

根据命令是否包含在shell内部,即是否常驻内存,而分为内部命令和外部命令两类:

  1. 内部命令:少数标准命令,例如改变工作目录命令cd等,是包含在shell内部,作为内部命令常驻内存。
  2. 外部命令:大多数命令,如拷贝命令cp,移动命令rm等,均保存于外存上,即每个命令是存于文件系统中某个目录下的单独程序。此举好处在于,可以很大程度节省内存空间。

简单命令根据功能不同,分为五类:

  1. 进入与退出系统:用户进入与退出过程是系统直接调用Login及Logout程序完成的。
  2. 文件操作命令:显示文件内容cat,复制文件副本cp,已有文件改名mv,撤销文件rm,确定文件类型file。
  3. 目录操作命令:建立目录mkdir,撤销目录rmdir,改变工作目录cd。
  4. 系统访问命令:访问当前日期和时间date,询问系统当前用户who,显示当前目录路径名pwd。

重定向与管道命令:
重定向符号“<”和“>”分别表示输入转向与输出转向。
例:cat file1 > file2 表示把文件file1的内容打印输出到文件file2上。
wc < file3 表示把文件file3中读出的行中的字和字符进行技术。
管道命令符“|”用来连接两条命令,使其前一条命令的输出作为后一条命令的输入。
例: cat file | wc 将使命令cat把文件file中的数据作为wc命令的计数输入。

通信命令:

  • 信箱通信命令mail -(r/q/p)
  • 对话通信命令write user[ttyname]
  • 允许或拒绝接收消息命令mesg [-n][-y],选项n表示拒绝对方的写许可,即拒绝接受消息;选项y指示恢复对方的写许可。

系统调用的概念和类型

系统态和用户态
在实际运行过程中,处理机会在系统态和用户态间切换。相应地,现代多数OS将CPU的指令集分为特权指令和非特权指令两类。
(1)特权指令。特权指令是指在系统态运行的指令,它对内部空间的访问范围基本不受限制,不仅能访问用户空间,也能访问系统空间。
(2)非特权指令。非特权指令是运行在用户态的指令。应用程序所使用的都是非特权指令,它只能完成一般性的操作和任务,不能对系统中的硬件和软件直接进行访问,对内存的访问范围也局限于用户空间。

系统调用
系统调用本质上是应用程序请求OS内核完成某功能时的一种过程调用,它与一般的过程调用的几个差别:

  1. 运行在不同的系统状态。一般的过程调用其调用程序和被调用程序运行在相同的状态——系统态或用户态,而系统调用最大的差别是:调用程序是运行在用户态,而被调用程序是运行在系统态。
  2. 状态的转换。由于系统调用的调用和被调用过程是工作在不同的系统状态,因而不允许由调用过程直接转向被调用过程,需要通过软中断机制,先由用户态转换为系统态,经内核分析后,才能转向相应的系统调用处理程序。
  3. 返回问题。在采用了抢占式(剥夺)调度方式的系统中,在被调用过程执行完成后,要对系统中所有要求运行的进程做优先权分析。当调用进程仍具有最高优先级时,才返回到调用进行继续执行;否则,将引起重新调用,以便优先权最高的进程优先执行。
  4. 嵌套调用。像一般过程一样,系统调用也可以嵌套进行,即在一个被调用过程的执行期间,还可以利用系统调用命令去调用另一个系统调用。

中断机制: 系统调用是通过中断机制实现的,并且一个操作系统的所有系统调用,都通过同一个中断入口来实现。

系统调用的类型
对于一般通用的OS而言,系统调用分为三大类:

  1. 进程控制类系统调用
    主要用于对进程控制的系统调用有:
    (1)创建和终止进程的系统调用。
    (2)获得和设置进程属性的系统调用。进程的属性包括有进程标识符,进程优先级,最大允许执行时间等。
    (3)等待某事件出现的系统调用。
  2. 文件操纵类系统调用
    (1)创建和删除文件
    (2)打开和关闭文件的系统调用
    (3)读和写文件的系统调用
  3. 进程通信类系统调用
    在单机处理系统中,OS经常采用消息传递方式和共享存储区方式。
    当采用消息传递方式时,通信前需先打开一个连接。为此,应由源进程发出一条打开连接的系统调用,而目标进程则应利用接受连接的系统调用表示同意进行通信;然后,在源和目标进程之间便开始通信。可以利用发送消息的系统调用或者用接收消息的系统调用来交换信息。通信结束后,还须再利用关闭连接的系统调用结束通信。
    用户在利用共享存储区进行通信之前,须先利用建立共享存储区的系统调用来建立一个共享存储区,再利用建立连接的系统调用将该共享存储区连接到进程自身的虚地址空间上,然后便可以利用读和写共享存储区的系统调用实现相互通信。

UNIX系统调用

进程控制:

  • 创建进程 fork 是 UNIX 中产生进程的唯一途径。 fork 生成调用进程的一个副本,新生成的进程称为子进程,创建它的进程称为父进程, fork 调用完成后,子进程立即执行,在最初阶段将和父进程共享 CPU 。子进程还得到父进程的部分进程信息的副本,包括环境,打开的文件,真实和有效用户标识,掩码,当前工作目录和信号。
  • 终止进程exit。一个进程可以利用exit实现自我终止。通常在父进程创建紫禁城是,在子进程的末尾安排一条exit系统调用,如此操作可以使子进程在完成规定的任务后,便可进行自我终止。
  • 执行一个文件exec。exec可使调用者进程的进程映像(包括用户程序和数据等)被一个可执行的文件覆盖,即改变调用者进程的进程映像。
  • 等待子进程结束wait。wait用于将调用者进程自身挂起,直至它的某一子进程终止为止。父进程可以利用wait使自身的执行与子进程的终止同步。
  • 获得进程ID。getp-id获得调用进程的标识符,getpgrp获得调用进程组ID,getppid获得调用进程的父进程ID。
  • 获得用户ID。getuid用于获得真正的用户ID,geteuid用于获得有效用户的ID,getgid用于获得真正用户组ID等。
  • 进程暂停pause。将调用进程挂起,直到它收到一个信号为止。

文件操纵:

  • 创建文件creat。
  • 打开文件open。
  • 关闭文件close。
  • 文件的读和写,read和write。
  • 连接link。
  • 去连接unlink。

进程通信和信息保护: Unix中提供了一个用于进程间通信的软件包IPC,它由消息机制、共享存储器机制和信号量机制三部分组成。

系统调用的实现

linux系统在CPU的环境保护模式下提供了四个特权级别,目前内核都只用到了其中的两个特权级别,分别是“特权级0”(内核态)与“特权级3”(用户态)。用户对系统调用不能任意拦截和修改,以保证内核的安全性。

系统调用是linux内核为用户态程序提供的主要功能接口。通过系统调用,用户态进程能够临时切换到内核态,使用内核态才能访问的硬件和资源完成特定功能。系统调用由linux内核和内核模块实现,内核在处理系统调用时还会检查系统调用请求和参数是否正确,保证对特权资源和硬件访问的正确性。通过这种方式,linux在提供内核和硬件资源访问接口的同时,保证了内核和硬件资源的使用正确性和安全性。

每个系统调用由两部分组成:

  • 内核函数:是实现系统调用功能的内核代码,作为操作系统的核心驻留在内存中,是一种共享代码,运行在内核态,数据也存放在内核空间,通常它不能再使用系统调用,也不能使用应用程序可用的库函数。
  • 接口函数:是提供给应用程序的API,以库函数形式存在linux的lib.a中,该库中存放了所有系统调用的接口函数的目标代码,用汇编语言书写。主要功能是:把系统调用号、入口参数地址传送给相应的核心函数,并使用户态下运行的应用程序陷入核心态。

系统调用控制程序的工作流程为:

  1. 取系统调用号,检验合法性。
  2. 执行int 80h产生中断。
  3. 进行地址空间的转换,以及堆栈的切换,进入内核态。
  4. 进行中断处理,根据系统调用号定位内核函数地址。
  5. 根据通用寄存器内容,从用户栈中取入口参数。
  6. 核心函数执行,吧结果返回应用程序。
  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值