通常操作系统提供的主要功能都是由内核程序实现的,处理机在运行上层程序时,能进入操作系统内核运行的唯一途径就是中断或者异常。
中断和异常基本概念
中断(Interruption):也称外中断,指来自处理机执行指令以外的事件发生。
异常(Exception):也称内中断、例外、自陷(trap),指源自处理机执行指令内部的事件。
常见中断类型:
中断:I/O中断,时钟中断。
异常:系统调用(具体指系统调用当中的自陷指令),缺页异常,断点指令,其他程序性异常(如:算术溢出)
中断: 与正执行指令无关,可以屏蔽;
异常: 与正执行指令有关,不可屏蔽
中断屏蔽:指禁止处理机响应中断或禁止中断出现.
中断屏蔽有两种方法:
1.硬件实现(由软件置处理机优先级,硬件按系统设计时的约定,屏蔽那些低优先级中断);
2.软件实现(由软件按操作系统优先级约定,设置屏蔽寄存器)。
系统调用
系统调用:操作系统内核程序和用户态运行程序之间的接口。
凡是涉及操作系统核心管理资源的操作必须由系统调用实现。
1.主要系统调用
进程管理:
- 创建进程 pid=fork( )
- 终止进程 exit(status)
- 等待子进程结束 pid=waitpid(pid,…)
- 替换进程映像 s=execve(name,…)
文件管理:
- 创建文件 fd=creat(name,…)
- 打开文件 fd=open(name,…)
- 读文件 n=read(fd,buffer,nbyte)
- 写文件 n=write(fd,buffer,nbyte)
- 移动文件指针 pos=lseek(fd,offset,…)
- 关闭文件 s=close(fd)
存储管理:动态申请/释放存储空间等;
其他:设置/获得时间等。
2.自陷指令(trap)
系统调用是一种特殊形式的转子程序方法,它导致处理机态的变化,为了方便编程,一般提供系统调用库,由其中的子程序来组织系统调用,用户程序调系统调用库的子程序。
参数传递的一般形式如下:
1)用寄存器传递参数。
2)Trap指令自带参数。Trap指令是一条长指令,内核通过断点pc值加偏移获得参数。