目录
1.操作系统的运行机制
简单了解程序的运行原理
两种指令:特权指令和非特权指令
两种处理器状态:核心态/内核态/管态和用户态/目态
两种程序:内核程序和应用程序
内核:
如何变态?
2.中断和异常
中断的作用
中断的分类
内中断
外中断
中断机制的基本实现原理
3.系统调用
什么是系统调用?
系统调用与库函数的区别
为什么系统调用是必须的?
什么功能要用系统调用实现?
系统调用的过程
高级语言编写代码—》机器指令
程序运行的过程就是CPU执行一条一条机器指令的过程。在CPU设计和生产的时候就划分了特权指令和非特权指令,因此CPU执行一条指令前就能判断出其类型。
指令就是处理器(CPU)能识别执行的最基本的命令。
”小黑框“是交互式命令接口,与这里的指令不一样。
特权指令:不允许用户直接使用的指令。如内存清零指令。
非特权指令:是指允许用户直接使用的指令。如加法指令和减法指令。
可以理解为CPU内部有一个小开关,当小开关为0时,CPU处于核心态,此时CPU可以执行特权指令,切换到用户态的指令也是特权指令。当小开关为1时,CPU处于用户态,此时CPU只能执行非特权指令。
”管理程序“(内核程序)要执行一些特权指令,而被管理者(应用程序)出于安全考虑不能执行这些特权指令。
内核(Kernel)是操作系统最重要最核心的部分,也是最接近硬件的部分,由很多内核程序组成操作系统的内核。甚至可以说,一个操作系统只要有内核就够了。(eg:Docker(容器)—》仅需Linux内核)
内核态—》用户态:一条修改PSW的特权指令。(将标志位设置为用户态)
用户态—》内核态:由中断引起,硬件自动完成。CPU检测到中断信号后,会立即变为“核心态”,并且停止运行当前的应用程序,转而运行处理中断信号的内核程序。
让操作系统内核强行夺回CPU的控制权,使CPU从用户态变为核心态。
(如果没有”中断“机制,那么一旦应用程序上CPU运行,便会一直运行该应用程序,就没有”并发“多道了)
内中断
(也称异常,例外,与当前执行的指令有关,中断信号来源于CPU内部)
1、陷阱、陷入(trap)【软件中断】
2、故障(fault)【软件中断】
由错误条件引起的,可能被内核程序修复。内核程序修复故障后会吧CPU使用权还给应用程序,让它继续执行下去。如:却也故障,除数为0
3、终止(abort)【硬件中断】
由致命错误引起,内核程序无法修复该错误。因此一般不再将CPU使用权还给引发终止的应用程序,而是直接终止该应用程序。硬件故障 如:控制器出错,存储器检验错等。
例子:
若当前执行的指令是非法的,则会引发一个中断信号。
1、试图在用户态下执行特权指令
2、执行除法指令时发现除数为0
3、有时候应用程序想请求操作系统内核的服务,此时会执行一条特殊的指令——陷入指令,该指令会引发一个内部中断信号。(执行“陷入指令”,意味着应用程序主动地将CPU控制权还给操作系统内核。“系统调用”就是通过陷入指令完成的【是应用程序故意引发的】))
外中断
(也称中断,与当前执行的指令无关,中断信号来源于CPU外部)【硬件中断】
1、时钟中断—由时钟部件(每隔一个时间【如50ms】会给CPU发送一个时钟中断信号)发来的中断信号。
2、I/O中断请求—由输入/输出设备发来的中断信号。
(1)检查中断信号
(2)找到相应的中断处理程序——通过”中断向量表“实现
不同的中断信号需要用不同的中断处理程序来处理。
当CPU检测到中断信号后,会根据信号的类型去查询“中断向量表”,以此来找到相应的中断处理程序在内存中的存放位置。
中断信号类型中断处理程序指针012...3.........显然,中断处理程序一定是内核程序,需要运行在“内核态”。
操作系统对应用程序/程序员提供的接口,可以理解为一种可供应用程序调用的特殊函数,应用程序可以通过系统调用来请求获得操作系统内核的服务。
有的库函数是对系统调用的进一步封装(创建一个新的文件),有的库函数没有使用系统调用(如“取绝对值函数”,math.h)。
普通应用程序可直接进行系统调用,也可使用库函数。有的库函数涉及系统调用,有的不涉及。编程语言向上提供库函数,有时会将系统调用封装成库函数,以隐藏系统调用的一些细节,使程序员编程更加方便。操作系统向上提供系统调用,使上层程序能请求内核的服务裸机
a要打印,b也要打印,他们打印的内容混合在一起了。
解决方法:由操作系统内核对共享资源进行统一的管理,并向上提供“系统调用”,用户进程想要使用打印机这类共享资源,只能通过系统调用向操作系统内核发出请求。内核会对各个请求进行协调处理。
(凡是与共享资源有关的操作,会直接影响到其他进程的操作,就一定需要操作系统介入,就需要通过系统调用来实现)
设备管理:完成设备的请求或释放,以及设备启动等功能。
文件管理:完成文件的读、写、创建及删除等功能。
进程控制:完成进程的创建、撤销、阻塞及唤醒等功能。
进程通信:完成进程之间的消息传递或信号传递等功能。
内存管理:完成内存的分配、回收以及获取作业占用内存区大小和起始地址等功能。
到此这篇操作系统基本作用(操作系统基本作用有哪些)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!
传递系统调用参数—》执行陷入指令(用户态)—》执行相应的内请求核程序处理系统调用(核心态)—》返回应用程序
tip:
1、陷入指令是在用户态执行的,执行陷入指令之后立即引发一个内中断,使CPU进入核心态。
2、发出系统调用请求是在用户态,而对系统调用的相应处理是在核心态下进行。
版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/bcyy/77179.html