计算机操作系统笔记总结:Part1 计算机系统概述(中)

简介: 文章目录写在前面1 操作系统的概念与功能2 操作系统的特征3 操作系统的发展与分类4 操作系统的运行机制4.1 特权指令与非特权指令4.2 内核态与用户态5 中断和异常6 系统调用6.1 什么是系统调用6.2 为什么系统调用是必须的?6.3 系统调用的过程7 操作系统的体系结构8 操作系统的引导9 虚拟机

4.2 内核态与用户态

CPU能判断出指令类型,但是,它是如何区分正在运行的程序是内核程序还是应用程序的呢?


其实,CPU有两种状态,“内核态”和“用户态”。

当CPU处于内核态时,说明此时正在运行的是内核程序,此时可以执行特权指令。

当CPU处于应用态时,说明此时正在运行的是应用程序,此时只能执行非特权指令。


CPU中有一个寄存器叫做 程序状态字寄存器(PSW), 其中有个二进制位,1表示内核态,0表示应用态。


用户态和内核态是如何进行转化的?

内核态->用户态: 执行一条特权指令–修改PSW标志位为“用户态”,这个动作意味着操作系统主动让出CPU使用权;

用户态->内核态: 由“中断”引发,硬件自动完成变态过程, 触发中断信号意味着操作系统将强行夺回CPU的使用权。


5 中断和异常



中断的作用

CPU上会运行两种程序,一种是操作系统内核程序,一种是应用程序。在合适的情况下,操作系统内核会把CPU的使用权主动让给应用程序。

而 “中断”是让操作系统内核夺回CPU使用权的唯一途径。

如果没有“中断”机制,那么一旦应用程序上CPU运行,CPU就会一直运行这个应用程序,就没有并发的一席之地了。


中断的类型


内中断:与当前执行的指令有关,中断信号来源于CPU内部;

外中断:与当前执行的指令无关,中断信号来源于CPU外部。

内中断的实例: 试图在用户态下执行特权指令、执行除法指令时发现除数为0。即:若当前执行的指令是非法的,则会引发一个中断信号。

当然,有时候应用程序想要请求操作系统内核的服务,此时就会执行一条特殊的指令:陷入指令, 该指令会引发一个内部中断信号。

执行陷入指令意味着应用程序主动将CPU控制权还给操作系统内核。系统调用就是通过陷入指令完成的。


外中断的实例: 时钟中断–由时钟部件发来的中断信号。每一条指令执行结束时,CPU都会例行检查是否有外中断信号。



内中断也称异常

分为如下三种:


陷阱、陷入(trap): 由陷入指令引发,是应用程序故意引发的;

故障(fault): 由错误条件引起的,可能被内核程序修复。内核程序修复故障后会把CPU的使用权交还给应用程序,让它继续执行下去,如缺页故障;

终止(abort): 由致命错误引起,内核程序无法修复该错误,因此一般不再将CPU使用权还给引发终止的应用程序,而是直接终止该应用程序。如整数除以0、非法使用特权指令。

中断机制的基本原理

不同的中断信号,需要用不同的中断处理程序来处理。 当CPU检测到中断信号后,会根据中断信号的类型去 查询“中断向量表”, 以此来找到相应的中断处理程序在内存中的存放位置。具体硬件上的实现,将在计算机组成原理中探讨。


6 系统调用

6.1 什么是系统调用

“系统调用” 是操作系统提供给应用程序(程序员/编程人员)使用的接口,可以理解为一种可供应用程序调用的函数,应用程序可以通过系统调用来请求获得操作系统内核的服务。


❓ 系统调用与库函数的区别?

答:系统调用应该是比高级语言的库函数更为底层的接口。不过,并不是所有库函数都涉及到系统调用,比如:取绝对值的函数… …

系统调用与库函数的区别见下图:



6.2 为什么系统调用是必须的?

例子见下图:


那么什么功能需要用到系统调用呢? 王道书给出了如下分类:


设备管理: 完成设备的 请求/释放/启动 等功能

文件管理: 完成文件的 读/写/创建/删除 等功能

进程控制: 完成进程的 创建/撤销/阻塞/唤醒 等功能

进程通信: 完成进程之间的 消息传递/信号传递 等功能

内存管理: 完成内存的 分配/回收 等功能

系统调用相关功能涉及系统资源管理,进程管理等操作,需要特权指令,所以系统调用处理需要由操作系统欸和程序负责完成运行在核心态。用户程序可以执行trap命令发起系统调用,请求OS服务,相当于把CPU使用权交给OS内核程序。用户程序不能直接执行对系统影响很大的操作,必须通过系统调用的方式请求OS执行,以便保证系统稳定性和安全性,防止用户程序随意更改/访问重要的系统资源,影响其他进程执行。


6.3 系统调用的过程

传递系统调用参数->执行陷入指令(用户态)->执行相应的内请求核程序处理系统调用(核心态)->返回应用程序。


OS运行环境理解为:用户通过OS上层程序,而这个程序依赖OS底层管理程序提供服务支持,当需要管理程序服务时,系统则通过硬件中断机制进入核心态,运行管理程序,也可能是程序运行出现异常情况,被动需要管理程序服务,通过异常处理来进入核心态,管理程序运行结束时,用户程序需要继续运行,此时通过响应的保存的程序现场退出中断处理程序/异常处理程序,返回断点处继续执行。


需要注意以下两点:


陷入指令是在用户态执行的,执行陷入指令后立即引发一个内中断,使CPU进入核心态;

发出系统调用请求是在用户态,而 对系统调用的相应处理是在核心态完成的。

7 操作系统的体系结构


操作系统的内核

内核是操作系统最基本、最核心的部分。实现操作系统内核功能的那些程序就是内核程序。


操作系统内核需要运行在内核态;

操作系统的非内核功能运行在用户态。

而内核分为大内核和微内核,具体图示如下:


大内核: 将操作系统的主要功能模块都作为系统内核,运行在核心态。

优点:高性能;缺点:内核代码量大,结构混乱,难以维护。


微内核: 只把最基本的功能保留在内核。

优点:内核功能少,结构清晰,方便维护;

缺点:需要频繁地在核心态和用户态之间切换,性能低。

相关文章
|
14天前
|
存储 安全 固态存储
计算机启动:从插上电源到操作系统启动的全过程
当我们插上电源,计算机从休眠状态苏醒,直至操作系统完全启动,这一系列复杂的过程涉及到硬件和软件的多个层面。本文将详细解析计算机插上电源后操作系统所做的工作,揭示这一过程的技术细节。
23 6
|
4月前
|
存储 算法 网络协议
了解操作系统的基本原理和常见操作,提高计算机使用效率
了解操作系统的基本原理和常见操作,提高计算机使用效率
52 4
|
4月前
|
运维 安全 Linux
计算机架构“寒武纪爆发”,操作系统进化迸发中国浪潮
计算机架构“寒武纪爆发”,操作系统进化迸发中国浪潮
|
6月前
|
Python
Python的`os`模块核心功能概述:通过`os.getcwd()`获取
【6月更文挑战第23天】Python的`os`模块核心功能概述:通过`os.getcwd()`获取、`os.chdir()`改变工作目录;使用`os.mkdir()`, `os.makedirs()`创建目录,`os.rmdir()`, `os.removedirs()`删除;`os.rename()`, `os.renames()`重命名文件或目录;`os.remove()`删除文件;`os.listdir()`列出目录内容;`os.path.exists()`, `os.path.isfile()`, `os.path.isdir()`检查路径;`os.stat()`获取文件属性。
95 4
|
5月前
|
存储 算法 Unix
软考中级之数据库系统工程师笔记总结(三)操作系统
软考中级之数据库系统工程师笔记总结(三)操作系统
42 0
|
5月前
|
Linux 调度
部署02-我们一般接触的是Mos和Wimdows这两款操作系统,很少接触到Linux,操作系统的概述,硬件是由计算机系统中由电子和机械,光电元件所组成的,CPU,内存,硬盘,软件是用户与计算机接口之间
部署02-我们一般接触的是Mos和Wimdows这两款操作系统,很少接触到Linux,操作系统的概述,硬件是由计算机系统中由电子和机械,光电元件所组成的,CPU,内存,硬盘,软件是用户与计算机接口之间
|
6月前
|
运维 安全 Linux
计算机架构“寒武纪爆发”,操作系统进化迸发中国浪潮
计算机架构“寒武纪爆发”,操作系统进化迸发中国浪潮
|
1月前
|
安全 Linux 数据安全/隐私保护
Vanilla OS:下一代安全 Linux 发行版
【10月更文挑战第30天】
48 0
Vanilla OS:下一代安全 Linux 发行版
|
21天前
|
NoSQL Linux PHP
如何在不同操作系统上安装 Redis 服务器,包括 Linux 和 Windows 的具体步骤
本文介绍了如何在不同操作系统上安装 Redis 服务器,包括 Linux 和 Windows 的具体步骤。接着,对比了两种常用的 PHP Redis 客户端扩展:PhpRedis 和 Predis,详细说明了它们的安装方法及优缺点。最后,提供了使用 PhpRedis 和 Predis 在 PHP 中连接 Redis 服务器及进行字符串、列表、集合和哈希等数据类型的基本操作示例。
46 4
|
1月前
|
人工智能 安全 Linux