2.3 操作系统运行模型
操作系统核心的主要功能模块如下:
- 系统初始化模块:准备系统运行环境,最后为终端创建进程运行命令解释程序。
- 进程管理模块:处理进程类系统调用(如进程创建/结束、进程间通讯等);进程调度。
- 存储管理模块:配合进程管理分配进程内存空间;处理存储类系统调用(如动态增加进程空间);虚存系统缺页时调入页面处理。
- 文件管理模块:处理文件类系统调用。
- 外设管理模块:负责外设驱动,中断处理。
操作系统三种运行模型:
- 独立运行的内核:用户程序与核心程序在分离的运行环境中运行,核心程序作为一个独立的特殊执行体运行,有自己独立的运行栈,用户进程通过中断/陷入机制启动核心程序运行(以情求包方式传递用户请求)
- 嵌入用户进程执行模式(类函数调用):操作系统核心程序通过中断/陷入机制启动运行,但运行于被打断进程的核心栈上,内核程序执行并发性好。
- 微内核模式:核心程序只包含中断处理,系统调用总控,进程调度等功能,其他功能由用户态运行的系统进程实现,这种结构开销很大。
2.4 系统调用
凡是涉及操作系统核心管理资源的操作必须由系统调用实现
一、主要系统调用:
进程管理:
- 创建进程 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)
存储管理:动态申请/释放进程空间等
其它:设置/获得时间等
注:用户编程时不一定直接调用“系统调用”接口函数,而是调用更高层的库函数,如win32的API函数,C库函数等。
二、自陷指令(trap)
- 系统调用是一种特殊形式的转子方法,他导致处理机态的变化,为了方便编程,提供系统调用接口库,由库中的接口函数来组织执行trao用户程序调系统调用库的接口函数。
- 系统调用库接口函数汇编程序包含:
·(传给核心的参数按约定填入寄存器)(决定调用哪个系统调用)(ABI约定)
· trap指令
·(从约定的寄存器中获得核心返回值)
· return
- 处理机执行trap指令会导致控制转到操作系统内核的trap处理程序入口,trap处理程序获得参数,按系统调用入口表散转到各处理程序
- 参数传递的一般形式:①用约定寄存器传递参数 ②trap指令自带参数,trap指令是一条长指令,内核通过断点PC值加偏移获得参数