操作系统的主要功能

1.操作系统(Operating System,简称OS)是一管理电脑硬件与软件资源的程序,同时也是计算机系统的内核与基石。操作系统是一个庞大的管理控制程序,大致包括5个方面的管理功能:进程与处理机管理、作业管理、存储管理、设备管理、文件管理
(1)作业管理:包括任务、界面管理、人机交互、图形界面、语音控制和虚拟现实等;
(2)文件管理:又称为信息管理;
(3)存储管理:实质是对存储“空间”的管理,主要指对主存的管理;
(4)设备管理:实质是对硬件设备的管理,其中包括对输入输出设备的分配、启动、完成和回收;
(5)进程管理:实质上是对处理机执行“时间”的管理,即如何将CPU真正合理地分配给每个任务。

计算机的组成:应用程序、操作系统、硬件。操作系统的作用是管理资源(各种硬件、计算资源、时间等)。
硬件层:CPU、主存、总线、I/O设备、
操作系统:
发展过程:串行->简单批处理->多道程序设计->分时系统
<1>简单批处理:人工组织任务,操作系统负责调度完成一个后继续下一个,省下了每次人工复位输入任务的时间.
<2>多道程序设计:最计算资源有了时间片划分,CPU不用因为一个进程I/O阻塞而空转了。
优点:由于系统资源为多个作业所共享,其工作方式是作业之间自动调度执行。并在运行过程中用户不干预自己的作业,从而大大提高了系统资源的利用率和作业吞吐量。缺点:无交互性,用户一旦提交作业就失去了对其运行的控制能力;而且是批处理的,作业周转时间长,用户使用不方便。
<3>分时系统:计算资源昂贵的背景下,每个用户的分时。

分时操作系统是一个联机的多用户交互式的操作系统,如UNIX是多用户分时操作系统。分时计算机系统:由于中断技术的使用,使得一台计算机能连接多个用户终端,用户可通过各自的终端使用和控制计算机,我们把一台计算机连接多个终端的计算机系统称为分时计算机系统,或称分时系统。

分时技术:把处理机的响应时间分成若于个大小相等(或不相等)的时间单位,称为时间片(如100毫秒),每个终端用户获得CPU,就等于获得一个时间片,该用户程序开始运行,当时间片到(用完),用户程序暂停运行,等待下一次运行

<4>实时操作系统

一种联机的操作系统,对外部的请求,实时操作系统能在规定的时间内处理完毕。



2.进程:
进程是一个程序对某个数据集的执行过程是分配资源的基本单位,程序执行的最小单位,进程的组成包括:用户程序、数据、栈、进程控制块。
进程状态切换:五个状态:新建、就绪、运行、阻塞、退出.
程序是用来描述计算机所完成的独立功能,并在时间上严格地前后次序相继的进行计算机操作序列的集合,是一个静态的概念。
一.进程和程序的区别与联系
(1)程序是指令的集合,是静态的概念。进程是程序在处理机上的一次执行的过程,是动态的概念。程序可以作为软件资料长期保存。进程是有生命周期的。
(2)进程是一个独立的运行单位,能与其它进程并行(并发)活动。而程序则不是。
(3)进程是竞争计算机系统有限资源的基本单位,也是进行处理机调度的基本单位.
(4)不同的进程可以包含同一程序,只要该程序所对应的数据集不同。

作业和进程的关系
作业是用户需要计算机完成某项任务时要求计算机所做工作的集合。而进程则是已提交完毕程序的执行过程的描述,是资源分配的基本单位。主要区别:
(1)作业是用户向计算机提交任务的任务实体。
(2)一个作业可由多个进程组成。
(3)作业的概念主要用于批处理系统中。

一个进程中存在:进程控制块(PCB)、有关程序段、数据结构集。
<1>进程控制块:包含一个进程的描述信息、控制信息及资源信息,有些系统还有进程调度等待所使用的现场保护区。PCB集中反映一个进程的动态特征。在创建时,建立PCB,并伴随进程运行的全过程,当进程完成其功能后,系统释放PCB,进程也随之消亡。
<2>进程上下文实际上是进程执行活动全过程的静态描述。
进程上下文是一个抽象的概念,它包含了每个进程执行过的、执行时的以及待执行的指令和数据,在指令寄存器、堆栈(存放个调用子程序的返回点和参数等),状态字寄存器等中的内容。

上文:已执行过的进程指令和数据在相关寄存器与堆栈中的内容。

正文:正在执行的指令和数据在相关寄存器与堆栈中的内容。

下文:待执行的指令和数据在相关寄存器与堆栈中的内容。


<3>进程上下文切换
进程上下文切换发生在不同的进程之间而不是同一个进程内。包含3个部分,第一部分为保存被切换进程的正文部分(或当前状态)至有关存储区。第二部分操作系统进程中有关调度和资源分配程序执行,并选取新的进程。第三部分则是将被选中进程的原来被保存的正文部分从有关存储区中选出,并送至有关寄存器或堆栈中,激活被选中进程执行。

<4> 进程的空间大小

任一进程都有自己的地址空间,把该空间称为进程空间或虚空间。进程空间的大小只与处理机的位数有关。程序的执行都在进程空间内进行。用户程序、进程的各种控制表格等都按一定的结构排列在进程空间中。 在有的系统中进程空间被划分为两部分:用户空间和系统空间。为了防止用户程序访问系统空间,造成访问出错,计算机通过程序状态寄存器等设置不同的执行模式,即用户模式(用户态)和系统模式(系统态)来进行保护。


<5>进程互斥
产生互斥的原因:资源共享、进程合作。
临界资源:一次仅允许一个进程使用的资源称为临界资源。
临界区:每个进程中访问临界资源的那段程序段称为临界区。
互斥:在操作系统中,当某一进程正在访问某临界区时,就不允许其它进程进入,否则就会发生(后果)无法估计的错误。我们把进程之间的这种相互制约的关系称为互斥
<6>进程同步

同步:把异步环境下的一组并发进程,因直接制约而互相发送消息而进行互相合作、互相等待,使得各进程按一定的速度执行的过程称为进程间的同步。

<8>进程通信

通信(communication)意味着进程间传递数据。操作系统可以看作是各种进程组成的,这些进程都具有各自独立的功能,且大多数都被外部需要而启动执行。

在单机系统中进程的通信有4种形式:(1)主从式(2)会话式(3)消息或邮箱机制(4)共享存储区方式


<9>死锁问题

死锁:指个并发进程彼此互相等待对方所拥有的资源,且这些并发进程在得到对方的资源之前不会释放自己所拥有的资源。从而造成大家都想得到资源而又得不到资源,个并发进程不能继续向前推进的状态。

死锁的起因:根本原因在于系统提供的资源个数少于并发进程所要求的资源数。

产生死锁有四个必要条件:(1)互斥条件。并发进程所要求和占有的资源是不能同时被两个以上进程使用或操作的,进程对他所需要的资源进行排他性控制。

(2)不剥夺条件。进程所获得的资源在未使用完毕之前,不能被其它进程强行剥夺,而只能由获得该资源的进程自己释放。

(3)部分分配。进程每次申请它所需要的一部分资源,在等待新资源的同时,继续占用已分配的资源。

(4)环路等待条件。存在一种进程循环链,链中每一个进程已获得的资源同时被下一个进程所请求。 只要有一个条件不满足,死锁就可解除。


线程:
一个进程可以是多线程的。有了进程之后还要有线程的原因是进程的换入换出、数据交换开销太大,线程远远小于进程的开销。首先,进程之间通信需要获取共享资源锁,而同一进程内的线程完全享有进程获得的资源,也因此线程的编写要特别注意同步问题。第二,进程的创建成本很高,涉及空间分配、初始化栈、初始化数据等,而线程的创建成本低很多可以包括操作系统创建和进程调用库自己创建。于是有了两种不同类型的线程——用户级别和内核级别。第三,多道程序设计中线程的换入换出比进程来得快多了,因为不需要保存进程控制块等一大堆数据嘛(当然要保存线程控制块,但是成本很低)。最后,销毁成本低。 
说到线程的两种类型——用户、内核。用户级别的线程是进程调用线程库创建的,对操作系统是透明的,是进程中通过代码实现切换的因此因此一旦一个线程引起了I/O阻塞从操作系统的视角就是进程阻塞,所以要阻塞整个进程;而内核级别的线程是操作系统创建的,所以该阻塞线程的不会阻塞整个进程,当然效率也就没有用户级别的高。
多线程的应用场景:
<1>用户界面和后台数据运行:用户界面渲染和后台数据运算使用不同的线程,没有喜欢后台一运算界面就卡死的程序吧。
<2>异步计算:不如实时备份,一个线程定时触发就可以了,没必要进程定时的检查是不是该备份了。
<3>速度敏感的计算:可以并发计算的、多核处理的,在计算和组织上线程更具优势。
<4>模块化:模块化的程序有时候很适合用多线程来设计。

内存管理:
先说内存分区的集中方式——固定大小,等大小的划分限制了进程大小并且存在明显浪费(每块尾部都有剩余),稍微改进一点变成不等大小的固定划分一定程度上能加入更大的程序了,但是限制仍然存在效率也非常低——很多内部碎片。动态划分,来一个进程划分一块的方式会产生外部碎片,需要不断的进行压缩才能保证有足够的连续空间给新进程。分页,把内存划分成固定大小的很多小块需要页表的支持,但是内存的利用提高了很多,会产生很少的内部碎片。分段,很分页的思路一样都是进程可以划分到不连续的内存区域中,需要段表支持。段页结合,每个段内划分成页,这样进程更利于数据共享(分段的便利),同时消除了外部碎片(段释放后无论如何都是若干页),存在少量的内部碎片。
    还有一处漂亮的地方是虚拟内存,由于局部性原理。进程中常用的数据往往只是一部分,其它部分只有在需要时在换入就可以了。在进程运行过程中常驻内存的部分称为常驻集。虚拟内存作用就是在硬盘上划分了一块区域用于进程的换入换出,虽然硬盘也很慢但是比它更慢的是I/O,有了虚拟内存就能把阻塞的进程及时换出,换入就绪进程的部分或者全部,让更多的进程同时运行提升CPU的利用率。
有了驻留集的感念就该涉及到驻留集的管理了,首先驻留集可以有几种分配方式:
     <1>固定分配,局部范围:每个进程的驻留集是固定不变的,在进程启动时决定,块的换入换出总发生在进程内部。
     <2>动态分配,局部范围:进程的驻留集是动态调整的,内存块的交换限制在进程内部(即一个进程的数据被请求时,只能替换自己的块出去
    <3>动态分配,全局范围:同上,但是在替换策略上可以换成任意进程中的内存块。
       在驻留集固定分配情况下,页的替换策略包括:先入先出、最近最少使用、始终。 当驻留集动态分配时,页的替换策略变得更精彩:工作集(很理想,开销太大)、页错误频率(定期查看频率,决定扩充或清理)、采样间隔可变的工作集(考虑页错误频率在局部性发生偏移时或膨胀的改进方案,间隔时间是可变的)。 除此以外还有加载侧路的问题——多道程序设计导致加入的进程太多时,同样会导致每个进程的驻留集太小导致页错误率居高的情况。


存储器:
存储器分两类:内存储器(简称内存、主存、物理存储器)外存储器(简称外存、辅助存储器)。

虚拟存储器:为用户提供一种不受物理存储器结构和容量限制的存储器的技术称为虚拟存储器,或称虚拟存储技术。

虚拟存储器需要大容量的外存储器的支持,或称物资基础。

 

程序地址:

用户编程序时所用的地址(或称逻辑地址、虚地址),基本单位可与内存的基本单位相同,也可以不相同。

程序地址空间(逻辑地址空间、虚地址空间):

用户的程序地址的集合称为逻辑地址空间,它的编址总是从0开始的,可以是一维线性空间,也可以是多维空间。 

物理地址:把内存分成若干个大小相等的存储单元,每个单元给一个编号,这个编号称为内存地址(物理地址、绝对地址、实地址),存储单元占8位,称作字节(byte)。 

物理地址空间:物理地址的集合称为物理地址空间(主存地址空间),它是一个一维的线性空间。


存储器管理功能:

地址映射: 将程序地址空间中使用的逻辑地址变成主存地址的过程。

实现地址映射有三种方式:

<1>编程或编译时确定地映射关系。<2>静态地址映射。<3>动态地址映射。


发布了24 篇原创文章 · 获赞 8 · 访问量 4万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章