操作系统是管理系统资源、控制程序执行、改善人机界面、提供各种服务,合理组织计算机工作流程和为用户有效使用计算机提供良好运行环境的最基本的一种系统软件。
总的来说:操作系统为你完成所有“硬件相关、应用无关”的工作。
②计算机系统的层次结构
计算机系统可以看成由硬件和软件按层次结构组成的系统。硬件系统是指构成计算机系统所必须配置的硬件设备。 软件系统是一个为计算机系统配置的程序和数据的集合。软件系统又有应用软件、支撑软件和系统软件之分。
操作系统是配置在计算机硬件上的第一层软件,是计算机系统中最重要的系统软件;其它支撑软件以及大量的应用软件,都依赖于操作系统的支持,即支撑软件及应用软件不能直接而只能通过操作系统来使用计算机系统的物理资源。可以理解为操作系统(系统软件)是软件层次结构的核心。
(1)资源复用:操作系统让众多的进程共享物理资源。资源复用技术又可以分为两种:
空分复用共享: 该资源可进一步分割成更多和更小的单位供进程使用。把资源的不同单位同时分配给不同进程。内存和磁盘就是例子,因为多个进程可以同时进入内存和磁盘。
时分复用共享: 并不把资源进一步分割成更小的单位,进程可在一个时间段内独占使用整个物理资源。例如CPU、打印机。时分复用可以进一步分类为时分独占式和时分共享式。时分独占式是指进程获得时分独占式资源后,对资源执行多个操作,通常使用一个完整的周期后才会释放。时分共享式是指进程在执行完一个周期之前随时会被剥夺。
(2)资源虚拟
是指对资源进行转化、模拟或整合,可以分为两种情况:
把物理上的一个资源变成逻辑上的多个对应物,每个用户使用一个,造成独占的假象;或者把多个资源变成单个的对应物。
(3)资源抽象
①进程抽象:对进入内存的执行程序在CPU的操作集上的抽象,是处理器的一种抽象
②虚存抽象:是对物理主存的抽象,进程可获得硕大的连续地址空间来存放程序和数据,可使用虚拟地址来引用物理主存单元(就是平时所说的内存)
③文件抽象:是对设备(磁盘)的抽象 。通过将文件中的字节映射到存储设备的物理块中来实现文件抽象。这使得我们只需读写文件,而无需关注磁盘的细节。(具体可以word文档为例子)
(1)资源管理来看操作系统的五项功能
①处理器管理。(管理CPU的运行)
②存储管理。(管理内存资源,提高空间利用率)
③设备管理(指那些完成IO请求的设备)
④文件管理(对计算机储存的信息数据的管理)
⑤联网与通信管理。
(2)异步性
异步性又称为随机性。操作系统中的随机处处可见,例如进程A在CPU上面运行一段时间就被抢占了,使得A在操作系统上的运行时间是随机的。随机性给系统带来潜在危险,有可能导致与时间有关的错误。操作系统的一个重要任务是必须确保捕捉任何一种随机事件,正确处理可能发生的随机事件。
(3)多道程序设计
多道程序设计技术是在计算机内存中同时存放几道相互独立的程序,使它们在管理程序控制之下,相互交替地运行。当某道程序因某种原因不能继续运行下去时(如等待外部设备传输数据),管理程序便将内存中的另一道程序投入运行,这样可以使CPU及各外部设备尽量处于忙碌状态,从而大大提高了计算机的使用效率。
(4)三种基本的操作系统类型
1 批处理操作系统 :是指用户将一批作业提交给操作系统后就不再干预,由操作系统控制它们自动运行。
2 分时操作系统(重点) :一台主机连接了若干个终端,每个终端有一个用户使用。用户向系统提出命令请求,系统接受每个用户的命令,采用时间片轮转方式(就是轮流用)处理服务请求,并通过交互方式在终端上向用户显示结果。
分时操作系统将CPU的运行时间划分成若干个片段,称为时间片。操作系统以时间片为单位,轮流为每个终端用户服务
3 实时操作系统:计算机能及时响应外部事件的请求,在严格规定的时间内完成对该事件的处理
(5)分时操作系统的特点:多路性、交互性、独立性(体现在一个用户一台主机)和及时性。
(6)系统调用与api关系
①系统调用:操作系统运行空间分为内核态与用户态,逻辑上相互隔离。用户进程在通常情况下不允许访问内核数据,也无法使用内核函数。在这种情况下,系统调用是应用程序获得操作系统服务的唯一途径。
②系统调用与API的关系
通常,API函数与系统调用一一对应(如open( ))。
有时,API函数需要调用多个系统调用(如CopyFile和MoveFile)。
有时,API函数需要调用系统调用,但仅是其部分工作(如fprintf( ))。
有时,API函数与系统调用无关(如strcpy( ) ,abs() )。
可以说系统调用只是API中的一种。不过有的系统调用是API的组合。
(7)posix标准:它是一个由IEEE开发的标准。它为不同平台下的应用程序提供相同的API,那么应用程序在不同的操作系统之间就具有可移植性。
(8)系统调用的实现
系统调用,就是用户在程序中调用操作系统所提供的一些子功能。它是通过系统调用命令,中段现行程序而转去执行相应的子程序(这里要保护CPU的),以完成特定的系统功能(这里的步骤是取对应的系统功能号查询对应的入口地址表找到对应的指令)。完成后,控制又返回到发出系统调用命令之后的一条指令,被中断的程序将继续执行下去。
(9)系统调用与函数调用区别
①调用和实现方式不同(系统调用要通过陷阱机制在两个态之间转化并访问核心栈,函数只在用户态执行的,只能访问用户栈。)
②被调用的代码的位置和提供者不同。(函数调用是编程语言提供,系统调用是操作系统提供)
(10)shell(Linux命令解释程序)
Shell不是操作系统的组成部分。shell在用户态下运行,其主要的功能是解释并执行用户键入的命令。工作过程大致如下:
①读取从键盘输入的命令
②判断命令是否正确,把命令参数改成符合系统调用execve()的形式
③fork()创建子进程,并调用wait()等待子进程完成
④子进程调用②中的参数和系统调用execve()来执行这条命令
(11) 操作系统内核
①单内核结构:内核是一个单独的二进制大映象。他的内部又能够被分为若干模块(或是层次或其他),但是在运行的时候,模块间的通讯是通过直接调用其他模块中的函数实现的。
②微内核结构:并非是一个完整的OS,而只是为构建通用OS提供一个重要基础。微内核所提供的功能,通常都是一些最基本的功能。操作系统的大部分功能和服务都是由若干服务器来提供的。
(1)指令与CPU不同的态
从资源管理和控制程序执行的角度出发,必须把指令系统中的指令分作两部分:特权指令和非特权指令。特权指令是指仅供操作系统的核心程序使用的指令,如启动I/O设备、设置时钟。
处理器分为两种状态:核心态和用户态。处理器处于核心态时,程序可以执行全部指令,使用所有资源,具有改变处理器状态的能力;处理器处于用户态时,程序只能执行非特权指令。
(2)PSW(程序状态字)
通常操作系统都引入程序状态字PSW(Program Status Word)来记录程序的状态。OS将程序运行时的一组动态信息汇集在一起的东西。
PSW用来存放三类信息:
1 体现当前指令执行结果的各种状态信息,称为状态标志.。如如有无进位(CF位),有无溢出(OF位),结果正负(SF位)
2 存放控制信息,称为控制状态。例如IF为1的时候,就允许响应中断,否则就关中断。
3系统标志,例如IOPL(IO特权级别)
(3)中断
是指程序执行过程中,遇到急需处理的事件时,暂时中止CPU上现行程序的运行,转去执行相应的事件处理程序,待处理完成后再返回原程序被中断处或调度其他程序执行的过程。
中断源分类:
(1)硬中断:要通过硬件设施来产生中断请求,是硬中断。可以分为2类。外中断:指来自处理器之外的中断信号。 内中断:指来自处理器内部
(2)软中断是利用硬件中断的概念,用软件方式进行模拟,实现宏观上的异步执行效果。
(4)中断处理的四个基本步骤(下半部分处理方法为小任务,软中断,工作队列)
①发现中断源 ②保护现场
③转向处理中断的处理程序 ④恢复现场
(5) 进程三个基本状态
①三态模型
1 运行态:进程占有CPU正在运行的状态(有CPU了)
2 就绪态:进程具备运行条件,等待系统分配CPU进入运行态的状态。
3 等待态:又称阻塞态以及睡眠态,指进程不具备运行的条件,正在等待某个事件完成的状态。
② 三态模型的转化(只有就绪态和运行态可以互相转化,且就绪态是无法编程等待态的,二等待态必须要经过就绪态才能到运行态)
③挂起:指进程暂时不参与调度,停止工作。挂起进程通常被兑换到磁盘上,不能立即被执行。
④PCB:是操作系统用于记录和刻画进程状态及有关信息的数据结构。OS通过PCB来对进程进行动态记录。也是操作系统掌握进程的唯一资料。结构进程控制块(PCB)包含三类信息
标识信息:唯一的标识一个进程。可以理解为进程的索引
现场信息:保留进程在运行时存放在处理器现场中的各种信息。(中断恢复的时候可以用到)
控制信息:用于管理和调度进程。
(6)线程(进程的两个部分:资源分配与计算的分派执行)
把进程的两项功能--“独立分配资源”与“被调度分派执行”分离开来,进程作为系统资源分配和保护的独立单位,不需要频繁地切换;线程作为系统调度和分派的基本单位,能轻装运行,会被频繁地调度和切换,在这种指导思想下,产生了线程的概念。线程是处理器调度和分派的基本单位。每个进程内允许包含多个并发执行的实体(控制流),这就是多线程。
(7)内核级线程,用户级线程
(1)内核级线程:线程的管理工作由内核完成,并提供API来使用线程。 优缺点如下:
①如果有多个CPU的时候,内核能够同时调度同一进程中的多个线程并行执行;,也就是或比较好的使用多CPU的优势。