操作系统简述及进程调度
一.操作系统
1.什么是操作系统?
操作系统是指控制和管理整个计算机系统的硬件和软件资源,并且合理地组织调度计算机的工作和资源的分配,提供给用户和其他软件比较方便的接口和环境,是计算机系统中最基本的系统软件。
画个图更为直观:
①对下管理各种硬件设备
②对上给各种软件提供稳定的运行环境
2.操作系统有什么功能?
- 操作系统作为计算机系统的资源管理者:
对资源进行管理:
- 处理及管理,
- 存储器管理,
- 文件管理
- 设备管理.
- 操作系统作为用户与计算机硬件系统之间的接口:
操作系统提供了用户接口,
主要分为两类:
- 命令接口
- 程序接口。
- 操作系统用作扩充机器
没有任何软件支持的计算机称为裸机。
我们通常把覆盖了软件的机器称为扩充机器或虚拟机。
二.进程调度
1.什么是进程
定义:从不同的角度,进程可以有不同的定义,比较典型的定义有:
①进程是程序的一次执行。
②进程是一个程序及其数据在处理机上顺序执行时所发生的活动。
③进程是具有独立功能的程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位
简而言之,进程就是一个程序,运行起来,完成一系列任务的模样
这时候我们打开我们的任务管理器就可以很直观的了解到进程的模样:
在看到这张图之后,看到了进程显示的名称是xxx.exe格式,可千万别把进程当成了咱们下载安装程序的那个.exe文件.
进程和程序(可执行文件)之间还是有点区别的:
这个是一个进程,它是动态的,被加载到内存中
而这个则是可执行文件,静态的,躺在硬盘上的.
这就是进程的一个基本特征:动态性.
不过本文对于进程调度也只是一个简单的系统性描述,不过太过于详细.
2.进程是如何进行管理的
对进程进行调度,换句话来说就是需要对进程进行管理,如何管理?
先描述,再组织
先使用一个类/结构体把这个东西的特征表示出来,再利用一个数据结构,把很多个这样的对象/结构体整理起来
进程是由程序控制块PCB、程序段、数据段组成。
这就是进程的另一个基本特征:结构性
操作系统是通过PCB来管理进程,再操作系统内核中,就把若干个PCB利用索引或者链接的方式进行存储.
既然PCB如此重要,那PCB里面包含什么?
1.pid:是进程的身份标识
上面那个控制管理器的进程截图中,就有显示pid;2.内存指针:把一些必要的数据加载到内存中
上面说了,进程是由PCB,程序段和数据段组成.
这些必要的数据就保存在程序段和数据段中3.文件描述符:表示当前进程打开了哪些文件
总的来说,PCB中应该包含操作系统对其进行管理所需的各种信息,如进程描述信息、进程控制和管理信息、资源分配清单和处理机相关信息。
3.进程是如何进行调度的
由于进程数目多,而计算机的CPU相对于进程来说,少的可怜,所以,为了能够保证多个进程正常运行,进程就得采用一些策略.
针对不同情况,采用的策略就不同.
比如:FCFS,SJF,优先级,RR,HRRN,多级反馈队列调度算法等,
这里就通过RR(时间片轮转算法)简单的说明
这里处理器显示的2.60GHZ,就是处理机1s能有26亿个时钟周期
一个时间片能够处理多个进程
也就是说在1s中,处理机足以"同时"很多个进程
进行并发处理,尽管微观上是串行,但宏观上是并行,大大提高了处理及的效率
这就是进程的下一个基本特征:并发性
在进程处理过程中,要注意,
- 进程的优先级;
- 进程的状态;
- 进程的记账信息;
- 进程的上下文;
1.进程的优先级就不必详细描述了,顾名思义,在其他条件相同的时候,谁的优先级高,谁先被处理;
2.进程的状态:
一般来说,进程有五个状态:就绪状态、运行状态、阻塞状态、创建状态、终止状态。其中前三种状态是进程的基本状态。
3.进程的记账信息:
OS在安排进程的时候,会记录每个进程以往在CPU执行的时间(或者是执行的指令数),再之后每次执行的时候,会根据之前的情况,适当调整;毕竟一个优秀的管理者,需要合理得把时间分配给池塘的每个鱼.4.进程的上下文:
比如某个进程被处理到一半的时候,忽然间被另一个优先级更高的进程抢占了.下一次,它再被处理的时候,如果再次从初始被处理,那效率未免就太低了,所以,进程的上下文就是再进程被中断的时候,保存此时的状态,并将该状态存到PCB里面,下次再被执行的时候,就直接根据PCB里面的上下文,恢复到原来的状态,再处理.
4.进程的虚拟地址空间
进程,需要使用一些系统资源,尤其是内存资源
但是,每个进程在使用内存资源,如果不加一些限制或者操作不当,利用内存指针去访问内存的时候,容易导致占用一些正在运行进程的内存资源,就会导致一些特殊情况,造成OS(操作系统)和咱们的心态(OM)很不稳定.
比如你正在编写CSDN,忽然间有一些知识点记得不太清楚,打算上网查资料的时候,一打开浏览器,啪的一声~CSDN没了,你一想到你的文章还没保存…
所以,为了让各个进程互不干扰,OS就引入了"虚拟地址空间"这样的概念
每个进程都只能访问到自己的地址空间,减少互相之间的影响,哪怕指针指错了,OS也能及时发现,及时去处理
这就是进程的后一个基本特征:独立性/u>
看下图:
改进之后:
进程在想访问内存资源的时候,先进行操作指向内存的时候,需要经过MMU进行映射,通过这个映射再去访问内存
这样,如果其中一个进程访问的是一个有问题的地址,MMU也能及时发现,并向OS进行汇报,然后再由OS进行处理
那么也许会有人问:每个进程都有一个虚拟地址空间,那一个系统有这么多进程,这么多进程的虚拟地址空间加在一起,那岂不是比内存物理地址还要大,那咋整啊?
1.不是所有的进程都被同时执行,CPU一次性最多也就处理几个进程;
2.即使同时有好几个进程在运行,他们表面上看上去的虚拟地址内存很大,但实际上占用的内存还是很小的;
举个例子,6个进程在运行,占用的内存空间可能也就1M左右3.真的发生了那种,几个进程同时占用了很多真实的内存,导致了物理地址不够用了,那就想办法再去解决它呗
可以考虑去优化内存占用或者扩容换一个更大的机器
5.进程之间的通信
进程有了独立性后,确实系统更为稳定了
但是进程之间想要配合工作就比较困难了
因此,OS又引入了"进程通信
进程通信是指进程之间的信息交换。
操作是最低级的通信,高级通信方式是指以较高的效率传输大量数据的通信方式。
高级通信方法主要有三类:
①共享存储。分别有基于共享数据结构的通信方式,例如生产者和消费者、基于共享存储区的通信方式。
②消息传递。是以格式化的消息为单位,利用原语传递消息,分为直接通信和间接通信。
③管道通信。是消息传递的一种特殊方式,是指用于连接一个读进程和一个写进程以实现它们之间的一个共享文件.
简而言之,它们的本质都是一样的,借助多个进程之间都能访问到的公共资源来进行通信
5.进程的特征
但进程还有最后一个基本特征:异步性
各个进程按各自独立的、不可预知的速度向前推进,操作系统要提供进程同步机制来解决异步问题。
所以,可知进程具有
- 动态性,
- 结构性,
- 并发性,
- 独立性
- 异步性.