操作系统(1)---操作系统的概念、并发、共享、虚拟、异步、系统调用、以及操作系统的运行机制及体系结构。

目录

一、什么是操作系统?

二、操作系统的发展阶段:

手工操作系统:

单道批处理器:

 多道批处理器:​编辑

 分时操作系统:

实时操作系统:

三、操作系统的四个特性:

并发性:

共享性:

虚拟性:

 异步性:

四、操作系统的运行机制及体系结构:

 程序是如何运行的?

CPU的用户态和内核态:

操作系统的内核:

外核操作系统:

五、中断:

六、操作系统引导:

 七、虚拟机:

八、系统调用:

什么是系统调用?

为什么要用系统调用?

什么时候需要系统调用?

系统调用的过程: ​


一、什么是操作系统?

操作系统(Operating System,OS)是指控制和管理整个计算机系统的硬件和软件资源,并合理地组织调度计算机的工作和资源的分配;以提供给用户和其他软件方便的接口和环境;它是计算机系统中最基本的系统软件

 操作系统是资源的管理者,是最接近硬件的软件,同时向上层提供方便且易用的服务。

提供用户 图形化界面 和 命令接口

  •  联机命令接口:用户输入一条命令操作系统执行一条命令
  • 脱机命令接口:用户输入一堆命令,操作系统再执行一堆命令

为程序员提供了程序接口:

程序接口实际就是调用系统调用的接口,例如C语言的printf()当程序员调用这个函数,C语言就会执行对应的逻辑,通知操作系统我需要显示器显示程序员输出的数据,于是操作系统开始调用系统调用去与硬件交互。


二、操作系统的发展阶段:


手工操作系统:

人将指令写在纸带上->计算机读取纸袋->执行程序->将结果打印在纸带上。

显然计算机的性能完全没有展现出来,浪费了大量的时间。

单道批处理器:

引入了批量输入和输出,既用户可以同时输入多条指令,这些指令的执行由外围机来管理控制。

主要优点:缓解了一定程度的人机速度矛盾,资源利用率有所提升。 

主要缺点:内存中仅能有一道程序运行,只有该程序运行结束之后才能调入下一道程序。CPU有大量的时间是在空闲等待o完成。资源利用率依然很低。

 多道批处理器:

 之前是每次只能将一条指令送往内存,现在可以同时将多条指令送往内存去执行,当输入部分空闲时就可以执行下一个程序的输入,当运算空闲时就可以之前上一条程序的运算部分。

 分时操作系统:

分时操作系统:计算机以时间片为单位轮流为各个用户/作业服务,各个用户可通过终端与计算机进行交互。

表面上每个用户独占一台计算机实际只是操作系统在异步为他们服务,每个人的程序执行一部分时间交替运行。但是正是对任何人都是公平的,所以不存在谁先谁后,无法为优先级高的用户先服务。

 主要优点:用户请求可以被即时响应,解决了人机交互问题。允许多个用户同时使用一台计算机,并且用户对计算机的操作相互独立,感受不到别人的存在。

主要缺点:不能优先处理一些紧急任务。操作系统对各个用户/作业都是完全公平的,循环地为每个用户/作业服务一个时间片,不区分任务的紧急性。

实时操作系统:

针对上面分时操作系统的缺点,无法先为优先级高的用户进行先服务,此时引入了实时操作系统。当用户的优先级高,做出指令时,操作系统必须放下当前执行的程序为优先级高的用户服务。

实时操作系统最主要的特点是 及时性 可靠性


三、操作系统的四个特性:

四大特性 并发、共享、虚拟、异步。前两个是操作系统最基本的特征,二者互为条件,是虚拟和异步实现的前提。

并发性:

区分并发之前我们先说一下并行。并行指的是两个程序在同一时间内同时运行。而并发只得是两个程序在一个时间段内交替运行。

举个简单例子,听歌学习。并行指的是在一个小时内我一边听歌一边学习,二者都不耽误同时进行。并发指的是在一个小时内我听五分钟歌,然后关闭音乐去学习五分钟,学习五分钟之后我停止学习再去听五分钟歌,这样在一个时间段内我只能进行一件事情但是是交替执行的。

并发:指两个或多个事件在同一时间间隔内发生。这些事件宏观上是同时发生的,但微观上是交替发生的

操作系统的并发性指计算机系统中“同时”运行多个程序,这些程序看上去是同时执行的,但是实际上是交替执行的。

根据并发我们介绍一下CPU的核数与程序的关系:如果你的CPU是单核的,那么你最多同时只能运行一个应用程序。如果你的CPU是八核的,那么你的计算机就可以并行的运行八个程序。之所以我们看到的单核CPU也同时运行了很多个应用程序,实际上是操作系统在并发的执行这些程序。

共享性:

共享即资源共享,是指系统中的资源可供内存中多个并发执行的进程共同使用。

同时共享在微观上讲指的是多个进程在同一个时间间隔内对一个资源交替的访问。而互斥共享在一个时间间隔内仅允许一个进程对其访问。

  • 互斥共享:使用QQ和微信视频。同一时间段内摄像头只能分配给其中一个进程。
  • 同时共享:使用QQ发送文件A,同时使用微信发送文件B。宏观上看,两边都在同时读取并发送文件,说明两个进程都在访问硬盘资源,从中读取数据。微观上看,两个进程是交替着访问硬盘的。

虚拟性:

虚拟是指把一个物理上的实体变为若干个逻辑上的对应物。物理实体(前者)是实际存在的,而逻辑上对应物(后者)是用户感受到的。

假设一个游戏需要4GB的内存,QQ需要300MB,QQ音乐需要300MB,但是我们的计算机只有4GB的内存但游戏、QQ、QQ音乐同时运行需要4.6GB的内存,这就应用了操作系统的虚拟性,他让我们用户感觉自己的内存变大了实际是操作系统将内存虚拟了。

在这背后操作系统是起初将上面这些程序的一部分代码调度到内存中,当运行该代码时发现需要用到其他代码然后再将其他代码调度到内存中将可能用不到的代码再调出内存。

 异步性:

异步是指,在多道程序环境下,允许多个程序并发执行。但由于资源有限,进程的执行不是一贯到底的,而是走走停停,以不可预知的速度向前推进,这就是进程的异步性。

了解异步之前我们先说同步,同步指的是当前程序执行完毕之后才能去执行另一个程序,异步指我只把要执行的事情交给你,什么时候执行完我不管。

例如打印机的打印,三个用户要打印,但是此时只有一个打印机:

  • 同步:第一个用户占用了打印机,第二个人点击打印操作系统告诉他不行,要等第一个人执行完之后你才能通知我。
  • 异步:三个人同时提交请求,谁先使用打印机由提交的次序操作系统会依次分配,用户不用等第一个人打印完之后再去提交第二次打印。

四、操作系统的运行机制及体系结构:

 程序是如何运行的?

当我们程序员写好C语言代码之后,经过编译成二进制指令,然后由操作系统送往CPU,CPU依次执行这些指令。

指令:指的是一条一条由01组成的二进制数,是CPU唯一能识别、执行的基本命令。

CPU的用户态和内核态:

CPU可以执行两种类型的指令:用户指令内核指令。用户指令是程序员写的,内核指令是操作系统的内核程序中的指令。因此CPU有两种状态 内核态用户态

  •  处于内核态时,说明此时正在运行的是内核程序,此时可以执行特权指令
  • 处于用户态时,说明此时正在运行的是应用程序,此时只能执行非特权指令

CPU通过PSW标志位来切换 内核态 和 用户态 。

  • 内核态→用户态:执行一条特权指令――修改PSW的标志位为“用户态”,这个动作意味着操作系统将主动让出CPU使用权
  • 用户态→内核态:由“中断”引发,硬件自动完成变态过程,触发中断信号意味着操作系统将强行夺回CPU的使用权,并停止当前运行的程序。

操作系统的内核:

 原语:操作系统通过原语来通知某个硬件要执行什么功能。

时钟管理:例如分时操作系统需要在固定的时间间隔内切换程序,有了时钟管理,时钟会在该时间间隔到后通知操作系统要处理其他程序了。

 大内核:企业初创时体量不大,管理层的人会负责大部分的事情。优点是效率高;缺点是组织结构混乱,难以维护,一部分出错可能导致整个内核出错。

微内核:随着企业体量越来越大,管理层只负责最核心的一些工作。优点是组织结构清晰,方便维护;缺点是效率低。

 大内核的执行速度块,因为CPU状态切换的次数少。

外核操作系统:

内核操作系统给用户提供的内存否是经过虚拟化的,即不连续的,用户直观上感觉自己独占了一段连续的内存空间,实际上用户只是占用了一部分非连续的内存空间。而外核不同,外核操作系统会为用户分配一段实际的连续的空间,用户直观感受到的空间就是他所拥有的空间。

五、中断:

 中断处理:强行终止当前正在执行的程序,让操作系统去执行其他程序。是操作系统内核夺回CPU的唯一途径。

  • 内中断:与当前执行的指令有关来自CPU内部
  • 外中断:与CPU内部无关,来自CPU外部,例如打印机、时钟部件向CPU发送的中断信号

六、操作系统引导:

操作系统引导说白了就是操作系统开机的过程。

当我们的计算机开机时,CPU会先访问内存中的ROM程序将主引导记录以此读入到内存中,此时CPU就会执行内存中的主引导程序(MBR),主引导程序找到C盘中的引导记录程序然后CPU执行这个引导记录程序,引导记录程序中会指引程序找到操作系统初始化程序并将其读入到内存,此时完成操作系统的初始化。

 七、虚拟机:

虚拟机大概分为两种:

第一种直接安装在自己的电脑上,对电脑进行分区等操作,相当于一台电脑安装了两个系统,在电脑开机时选择要进入的操作系统。

第二种相当于在当前系统上安装一个虚拟机软件,由虚拟机软件来管理和分配虚拟系统的资源。

前者是一个单独的系统后者是在一个系统上在安装另一个系统,比我们要调用硬件资源,前者直接进入系统调用来完成硬件资源的调用,而后者虚拟系统需要先向虚拟机处理程序发送请求,然后由虚拟机程序向母操作系统发送请求,由母操作系统完成系统调用后将反馈结果发送给虚拟机软件,由虚拟机软件再通知虚拟操作系统该功能已完成,是一个层层调用的过程,所以效率显然很低。


八、系统调用:

什么是系统调用?

当我们想使用打印机时,打印机是硬件资源,我们程序员没有办法直接调用计算机的硬件资源,只有操作系统才能调用计算机的硬件资源,所以系统调用可以先将其想象为一个函数的接口,通过这个接口通知操作系统来完成硬件的调用。

为什么要用系统调用?

还是上面的例子,有两个人同时访问打印机,若没有任何控制,一台打印机同时收到两条请求,最终的结果是将两个文件打印在一张纸上,数据混乱,所以对于共享资源的访问必须由我们的大管家操作系统来完成,由系统调用向操作系统内核发送请求由内核管理资源。

什么时候需要系统调用?

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

系统调用的过程: 

 应用程序调用read库函数-->将当前进程的唯一id写入寄存器-->陷入操作系统内核-->操作系统内核有很多系统调用,由内核根据传来的数据判断该指令到底要执行什么调用-->操作系统确定了要调用硬件开始执行对应的程序-->执行完毕之后用原语唤醒刚刚执行的应用程序,通知它该过程已完成。 

猜你喜欢

转载自blog.csdn.net/weixin_60414376/article/details/126921743
今日推荐