【操作系统篇】第二篇——计算机系统概述(下)

简介: 【操作系统篇】第二篇——计算机系统概述(下)

系统调用


什么是系统调用


知识点回顾:

操作系统作为用户和计算机硬件之间的接口,需要向上提供一些简单的服务。主要包括命令接口和程序接口。其中,程序接口由一组系统调用组成。

image.png

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

系统调用与库函数的区别


普通应用程序,可直接进行系统调用,也可使用库函数。有的库函数涉及系统调用,有的不涉及。

编程语言,向上提供库函数,有时会将系统调用封装成库函数,以隐藏系统调用的一些细节,使程序员编程更加方便。

操作系统,向上提供系统调用,使得上层程序能请求内核服务。

image.png

不涉及系统调用的库函数:如的"取绝对值"的函数

涉及系统调用的库函数: 如"创建一个新文件"的函数

为什么系统调用是必须的


生活场景:去学校打印店打印论文,你按下了 WPS 的“打印”选项,打印机始工作。 你的论文打印到一半时,另一位同学按下了 Word 的“打印”按钮,开始打印他自己的论文。

思考:如果两个进程可以随意地、并发地共享打印机资源,会发生什么情况?

两个进程并发运行,打印机设备交替地收到 WPS 和 Word 两个进程发来的打印请

求,结果两篇论文的内容混杂在一起了 …

解决方法:由操作系统内核对共享资源进行统一的管理,并向上提供“系统调用” ,用户进程想要使用打印机这种共享资源,只能通过系统调用向操作系统内核发出请求。内核会对各个请求进行协调处理。

什么功能要用系统调用实现


应用程序通过系统调用请求操作系统的服务。而系统中的各种共享资源都由操作系统内核统一掌管,因此 凡是与共享资源有关的操作(如存储分配、I/O 操作、文件管理等),都必须通过系统调用的方式向操作系统内核提出服务请求 ,由操作系统内核代为完成。这样 可以保证系统的稳定性和安全性 ,防止用户进行非法操作。

image.png

系统调用的过程


一个程序运行在用户态,这个应用程序的各个指令会被CPU依次执行,当它想要发出系统调用的时候,他会进行传参数的指令给CPU中传入必要的参数。例如:

image.png

当这些参数都放到CPU之后,应用程序会传入陷入指令,陷入指令会引发一个内中断,因此转入相应的中断处理程序--即系统调用的入口程序。于是这个CPU会暂停运用这个应用程序,转而去执行处理线路指令的程序,这个程序就是系统调用入口程序,即内核态。

image.png

然后根据寄存器中的参数来判断用户需要哪种系统调用服务,例如上面的寄存器参数1需要调用的使fork,于是入口程序会调用与之对应的处理程序,执行完后,CPU又会转会用户态,接着执行应用程序。

image.png

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


注意: 1. 陷入指令 是在 用户态 执行的,执行陷入指令之后立即引发一个 内中断 ,使 CPU 进入核心态  2. 发出系统调用请求 是在 用户态 ,而 对系统调用的相应处理 在 核心态 下进行

image.png

操作系统的体系结构


操作系统的内核


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

image.png

注意:操作系统内核需要运行在内核态,操作系统的非内核功能运行在用户态

大内核VS微内核


image.png

现在,应用程序想要请求操作系统的服务,这个服务的处理同时设计到进程管理,存储管理,设备管理。注意:变态的过程是有成本的,要消耗不少时间,频繁地变态会降低系统性能

大内核:将操作系统的主要功能模块都作为系统内核,运行在核心态。优点:1.高性能,内核内部各种功能都可以直接相互调用,缺点:1.内核代码庞大,结构混乱,难以维护.2.大内核中某个功能模块出错,就可能导致整个系统崩溃。

微内核:只把最基本的功能保留在内核;优点:内核功能少,结构清晰,方便维护;某个功能模块出错不会导致整个系统崩溃。缺点:需要频繁地在核心态和用户态直接切换,性能低。用户态下的各功能模块不可以直接相互调用,只能通过内核的"消息传递"来间接通信。

典型的大内核/宏内核/单内核 操作系统:Linux,UNIX

典型的微内核操作系统:Windows NT

分层结构


特性:内核分多层,每层可单向调用更低一层提供的接口

优点:1.便于调试和验证,自底向上逐层调试验证;2.易扩充和易维护,各层之间调用接口清晰固定。

缺点:1.仅可调用相邻低层,难以合理定义各层的边界;2.效率低,不可跨层调用,系统调用执行时间长。

image.png

模块化


特性:将内核划分为多个模块,各模块之间相互协作。

内核=主模块+可加载内核模块。

主模块:只负责核心功能,如进程调度,内存管理。

可加载内核模块:可以动态加载新模块到内核,而无需重新编译整个内核。


优点:1.模块间逻辑清晰易于维护,确定模块间接口后即可多模块同时开发;2.支持动态加载新的内核模块(如:安装设备驱动程序,安装新的文件系统模块到内核),增强OS适应性。3.任何模块都可以直接调用其他模块,无需采用消息传递进行通信,效率高。


缺点:1.模块间的接口定义未必合理,实用;2.模块间相互依赖,更难调试和验证。

image.png

操作系统引导


开机过程

一个刚买来的磁盘如下所示:

image.png

给其安装了操作系统后,如下所示:

image.png

操作系统引导:

1.CPU从一个特定主存地址开始,取指令,执行ROM中的引导程序(先进行硬件自检,再开机)

2.将磁盘的第一块--主引导记录 读入内存,执行磁盘引导程序,扫描分区表

3.从活动分区(又称主分区,即安装了操作系统的分区)读入分区引导记录,执行其中的程序

4.从根目录下找到完整的操作系统初始化程序(即启动管理器)并执行,完成"开机"的一系列动作。

image.png

注:完整的操作系统初始化程序(即启动管理器)可在根目录下找到

Eg:windows操作系统完整的开机初始化程序在"根目录/Windows/Boot"下

image.png

虚拟机


虚拟机:使用虚拟化技术,将一台物理机器虚拟化为多台虚拟机器,每个虚拟机器都可以独立运行一个操作系统

image.png

两类虚拟机管理程序(VMM)对比

image.png




相关文章
|
7月前
|
Unix C语言
操作系统基础:IO管理概述【上】
操作系统基础:IO管理概述【上】
操作系统基础:IO管理概述【上】
|
7月前
|
算法 Shell Linux
操作系统概述
操作系统概述
68 0
|
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()`获取文件属性。
97 4
|
5月前
|
Linux 调度
部署02-我们一般接触的是Mos和Wimdows这两款操作系统,很少接触到Linux,操作系统的概述,硬件是由计算机系统中由电子和机械,光电元件所组成的,CPU,内存,硬盘,软件是用户与计算机接口之间
部署02-我们一般接触的是Mos和Wimdows这两款操作系统,很少接触到Linux,操作系统的概述,硬件是由计算机系统中由电子和机械,光电元件所组成的,CPU,内存,硬盘,软件是用户与计算机接口之间
|
7月前
|
存储 安全 数据处理
【计算机系统组成原理】操作系统处理器深入介绍
【计算机系统组成原理】操作系统处理器深入介绍
|
7月前
|
存储 API 芯片
1.操作系统概述
1.操作系统概述
|
7月前
|
存储 缓存 安全
【linux基础(八)】计算机体系结构--冯诺依曼系统&操作系统的再理解
【linux基础(八)】计算机体系结构--冯诺依曼系统&操作系统的再理解
|
7月前
|
程序员 Linux 调度
《操作系统》——计算机系统概述
《操作系统》——计算机系统概述
278 3
|
7月前
|
安全 Unix Linux
第一章 操作系统概述
第一章 操作系统概述
201 0
操作系统基础:IO管理概述【下】
操作系统基础:IO管理概述【下】