专栏首页FluentStudy《操作系统》:理解一些基础概念

《操作系统》:理解一些基础概念

计算机基础《操作系统》基础篇,理解操作系统中常见的一些概念 本篇主要学习来源为《B站王道考研-操作系统》

01 基础概念

一、操作系统的发展与分类

要想了解操作系统的一些基础概念,我们首先要了解操作系统的历史,因为每个概念的来源其实都是因为在操作系统的发展阶段中存在一些问题,包括所谓的“操作系统”这个大概念也是为了解决这些问题产生的。

1.1 手工操作阶段

即我们常说的“打孔开发阶段”,这个阶段是没有操作系统的。用户将程序代码和数据用通过打孔记录在纸带上(代表着二进制,有孔代表1,没孔代表0),计算机读入后,结果也会以同样的方式输出。整个过程如下:

用户 ---> 打孔机 ---> 计算机 ---> 打孔机 ---> 用户

存在问题:1) 这个过程中计算机的处理速度是很快的,但打孔输入输出是很慢的,而且人工方式把数据记录到纸带和从纸带上读取数据就更加的繁琐了(可以想象下,当程序出现bug时,要改起来是很崩溃的); 2) 一个计算机在处理过程中只能为一个用户服务,因此即便是计算机的处理速度很快,但由于输入输出很慢,导致计算机大部分时间都处理等待阶段,这也是我们常说的计算机的资源利用率很低。

资源利用率 = 以资源的使用时间/程序运行总时间

1.2 单道批处理阶段

很显然是为了解决第一个阶段中提到的“一个计算机在处理过程中只能为一个用户服务”的问题,引入了脱机输入/输出技术(用磁带完成)监督程序负责控制作业的输入和输出。整个过程如下:

多个用户 ---> 打孔机 ---> 外围机[负责作业的输入] ---> 磁带 ---> 计算机 ---> 磁带 ---> 外围机[负责作业的输出] ---> 用户

可以看到在这个阶段,实现了多用户同时运行程序,磁带的输入输出速度明显高于纸带,因为计算机将会有更多的时间处理忙碌阶段。同时引入监督程序来控制输入和输出,实现了多用户同时输入。

存在问题:虽然在这个阶段,多用户可以同时输入,但计算机内存中仅有一道程序在运行,只有当一个程序运行结束之后,才能调入下一道程序,CPU的利用率仍然很低。

这里的“监督程序”已经有了操作系统的雏形

1.3 多道批处理阶段

即在上一个阶段上解决“每次只能读入一个程序”,即“单道”的问题。每次往内存中读入多道程序,操作系统正式诞生。由操作系统来管理这些引入的多道程序的运行。各个程序并发执行。

存在问题:用户在提交自己的作业之后,只能等待计算机处理完成,中间不能控制自己的作业执行

并发与并行的概念 并行即某个时间点同时,并发即某个时间段同时。比如所有人一起齐步走,就是并行,一分钟内一个人接一个进行正步走就是并发。

1.4 分时操作系统

计算机以时间片为单位轮流为每个用户/作业服务,即一会服务A,一会服务B。

存在问题:不能优化处理一些紧急任务,因为时间片是固定的,所以它对每个用户是完全公平的。

1.5 实时操作系统

能够优先的响应一些紧急任务,某些紧急任务不需要时间片排队。在实时操作系统的控制下,计算机系统接收到外部信号后及时进行处理,并且要在严格的时限内处理完事件。它的主要特点是及时性和可靠性

硬实时:必须在绝对严格的规定时间内完成处理。如:导弹控制系统、自动驾驶系统 软实时:能接受偶尔违反时间规定

1.6 其他操作系统

网络操作系统、分布式操作系统、个人计算机操作系统。

总结

从操作系统发展的不同阶段,我们可以总结出操作系统具有的特点:

  • 并发性:它用于管理多个程序并发的执行
  • 共享性:多个程序同时输入到内存中,是需要共享一些资源的

这两个特点是操作系统最基础的特点,也是我们从上述发展过程中很容易理解到的两个特点。其他特点:

  • 异步性:因为有并发,操作系统是一会执行A程序,一会执行B程序,所以一个程序的执行并不是一下从头到尾的执行完,而是会走走停停,以不可预知的速度向前推进
  • 虚拟性:同样也是因为有并发,我们可以同时执行多个程序,但每个程序所需要的资源大小不一样,比如我们的内存可能只有4G,但同时运行的程序所需要的内存大小超过了4G,但它们确实是可以并发执行的。即看上去好像内存大小不止4G,但实际只有4G,这就是虚拟性

此外,我们还可以得出一个结论:操作系统的产生是为了实现多道程序并发执行,以提高资源利用率。而这其中涉及到的其他概念:内核、系统调用、中断等,都是为了这一个目标而产生。

二、中断

在多道程序批处理阶段,我们提到了并发的概念。那在操作系统中是如何实现并发操作的呢?答案就是通过中断来实现的,中断操作就是告诉操作系统,我现在需要由你来介入管理。而理解这句话,我们需要先来理解什么是用户态与核心态的概念。

计算机底层运行程序,实际上都是一条一条的指令,而指令分为:特权指令和非特权指令。这也比较好理解,因为有很多指令(比如清空内存)是不能直接让用户使用的,也正是因为这个原因,所以CPU对应分为两个状态:核心态和用户态。核心态可以执行特权指令和非特权指令,而用户态只能执行非特权指令。

核心态和用户态是通过程序状态字寄存器(PSW)中的某标志位来标识当前处理器处于什么状态,如0为用户态,1为核心

说白了就是在操作系统内部做了权限管理,有些用户可以直接使用,有些则不能。而中断其实就是将用户态转为核心态的唯一方式。当我们程序在运行时,如果产生中断,则意味着必须交由操作系统介入来进行管理,比如对一些临界资源的访问等,正是因为有了操作系统的介入,从而达到了对程序做并发控制的可能。

中断又可分为内中断和外中断,区分内外主要是根据中断来源,如果中断来源是CPU内部,则是内中断,比如程序异常,如果来源是CPU外部,比如IO设备发出的中断,则是外中断

三、内核

我们都知道计算机运行程序,其实最终都是操作硬件,但如果直接与硬件打交道,学习成本可能比较高,而且普通用户不好理解。因此产生了内核。它是对硬件操作的一层抽象,可以理解为我们平时写代码进行的函数封装,我们不再需要关心底层硬件是怎么做的,而只需要符合内核定义的规范即可。因此内核其实就是一组管理和操作硬件的程序。

内核便是运行在核心态的程序,它是计算机上配置的底层软件,是操作系统最基本、最核心的部分。内核可以分为:微内核和大内核。简单理解就是大内核包含的功能更多,比如包括进程管理等等,功能多,性能高,但代码庞大,管理麻烦;微内核功能精简,结构就会更加清晰,缺点就是用户态与核心态切换会更频繁。

在理解微内核和大内核,可以对应小公司与大公司,但对应关系要相反。 微内核对应的其实是大公司的组织架构,大公司发展好,组织架构比较清晰,部门多,每个部门各思其责,虽然结构很清晰,每个部门内部功能很明确,但是如果要走一个流程,就很繁琐 而大内核对应小公司,特别是发展初期的小公司,管理层可能就一层,因此走流程特别快,效率特别高,但缺点就是管理混乱 微内核功能包括:时钟管理、中断处理、原语(设备驱动,CPU切换等)大内核功能除了微内核,还包含:进程管理、存储器管理、设备管理等。

四、系统调用

理解内核之后,我们再来看下最后一个概念:系统调用。内核对硬件操作做了抽象,那为什么还需要有系统调用呢?很简单,系统调用相当于是操作系统对上层再做的抽象,它是操作系统向上层应用程序提供的程序接口,这样应用程序在需要获得某些服务时,必须通过系统调用来获取,然后操作系统再对其进行处理。有点像我们平时系统对外提供的一些API,系统底层负责处理这些API,一方面规范了用户的请求,另一方面由系统统一管理和处理这些请求,避免了一些安全问题。

需要注意的是:

  1. 用户不仅是只能通过程序接口(即系统调用)与操作系统打交道,还可以通过命令接口来做交互
  2. 系统调用与库函数的区别:像我们平时使用编程语言,如C语言操作的函数就是库函数,库函数对程序调用做了封装,普通应用程序可以通过库函数来进行系统调用,也可直接进行系统调用。总结来说即为:操作系统向上提供系统调用 -> 编程语言向上封装库函数,这些库函数可能涉及到调用调用,也可能不涉及,如取绝对值 -> 应用程序想使用哪个就使用哪个

五、总结

  1. 操作系统引入:为了解决多道程序并发程序,操作系统用于管理多道程序并发执行
  2. 操作系统通过中断机制实现多道程序并发执行
  3. 操作系统指令分为特权指令和非特权指令,对应CPU状态为核心态和用户态
  4. 内核是操作系统最基本也是最核心的部分,它是对硬件做的抽象,它是运行在核心态的内核程序
  5. 系统调用是操作系统向上提供了程序接口,应用程序通过进行系统调用来使用操作系统提供的一些服务
  6. 内核、系统调用都是操作系统的一部分

本文分享自微信公众号 - FluentStudy(gh_30ef659095e0),作者:Demon5203

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-05-25

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Python每日一题:标准库

    1. 在 Python 中我们经常听到 模块、包、库、标准库、第三方库 这些概念,首先要对这些概念进行区分

    用户7685359
  • leetcode: explore-array-30 有效的数独

    https://leetcode-cn.com/explore/interview/card/top-interview-questions-easy/1/ar...

    用户7685359
  • leetcode: explore-array-28 移动零

    https://leetcode-cn.com/explore/interview/card/top-interview-questions-easy/1/ar...

    用户7685359
  • 《中国正在说》 | 听倪光南院士说说我国操作系统与网络安全

    5月24日,东南卫视《中国正在说》播出了由倪光南院士主讲的关于我国网络安全与信息化技术应用创新的节目。

    用户6543014
  • 电脑软件(例如 Adobe、Autodesk)为什么那么容易被破解?

    来自:https://www.zhihu.com/question/356008082/answer/1128751775

    7089bAt@PowerLi
  • [译]JS 模块化历史简介

    对于 JavaScript 来说,模块化是一个相对现代的概念,这篇文章会带你在 JavaScript 的世界里快速浏览模块化的历史进程~

    savokiss
  • 云技术会不会代替芯片和操作系统?

    从事软件开发多年,现在无论大小设备几乎都离不开芯片和操作系统,当然很多单片机本身不带操作系统,从手机到电脑,到家里的电视几乎都离不开芯片和操作系统,而且芯片有C...

    程序员互动联盟
  • Flutter中ListView加载图片数据的优化

    在使用ListView懒加载模式时,当ListView的Item中有图片信息时,在快速滚动过程中会大量的浪费流量与内存,甚至会造成在滚动过程中页面的卡顿效果。

    早起的年轻人
  • Java的日期类的时间从为什么是从1970年1月1日开始?

    ----------------------------------------------------------------------------- I ...

    黑泽君
  • SaaS企业中的收入留存率意味着什么?

    ? 来源:美股研究社 作者:陈恩婷 ---- 腾讯SaaS加速器 二期30席项目招募 报名方式 腾讯SaaS加速器,作为腾讯产业加速器的一个重要组成部分,旨...

    腾讯SaaS加速器

扫码关注云+社区

领取腾讯云代金券