经常使用的操做系统知识

为何要有操做系统

现代计算机系统是由一个或者多个处理器,主存,磁盘,打印机,键盘,鼠标显示器,网络接口以及各类其余输入,输出设备组成的复杂系统,每位程序员不可能掌握全部系统实现的细节,而且管理优化这些部件是一件挑战性极强的工做。因此,咱们须要为计算机安装一层软件,成为操做系统,任务就是用户程序提供一个简单清晰的计算机模型,并管理以上全部设备。程序员

定义也就有了:操做系统是一个用来协调、管理和控制计算机硬件和软件资源的系统程序,它位于硬件和应用程序之间。(程序是运行在系统上的具备某种功能的软件,好比说浏览器,音乐播放器等。)浏览器

操做系统的发展历史

手工阶段

早期的程序员将对应于程序和数据的已穿孔的纸带(或卡片)装入输入机,而后启动输入机把程序和数据输入计算机内存,接着经过控制台开关启动程序针对数据运行;计算完毕,打印机输出计算结果;用户取走结果并卸下纸带(或卡片)后,才让下一个用户上机。服务器

手工操做方式有两个特色:网络

(1)用户独占全机。不会出现因资源已被其余用户占用而等待的现象,但资源的利用率低。
(2)CPU 等待手工操做。CPU的利用不充分。
 20世纪50年代后期,出现 人机矛盾:手工操做的慢速度和计算机的高速度之间造成了尖锐矛盾,手工操做方式已严重损害了系统资源的利用率(使资源利用率降为百分之几,甚至更低),不能容忍。惟一的解决办法:只有摆脱人的手工操做,实现做业的自动过渡。这样就出现了成 批处理

批处理阶段

出现了批处理系统,它是加载在计算机上的一个系统软件,在它的控制下,计算机可以自动地、成批地处理一个或多个用户的做业(这做业包括程序、数据和命令)。数据结构

 为了解决上面手工阶段的问题,因此产生了批处理系统,而批处理系统又分为单道批处理和多道批处理。架构

单道批处理

系统对做业的处理是成批进行的,但内存中始终保持一道做业。该系统主要特征以下
1)自动性:无需人工干预
2)顺序性:磁带上的各道做业顺序进入内存,做业完成顺序与其进入内存的顺序,在正常状况下应彻底相同
3)单道性:内存中只容许存在一道程序运行并发

多道批处理

多道程序设计技术容许多个程序同时进入内存,并在操做系统的控制下交替运行。内存中的程序共享系统中各中硬、软件资源。当一道程序因I/O请求而暂停运行时,CPU便当即转去运行另外一道程序。其主要特色以下:
1)多道:计算机内存中同时容许多道相互独立的程序
2)宏观并行:同时进入系统内存的多道程序都处于运行过程当中,宏观上在并行运行
3)微观串行:内存中多道程序流轮流占有CPU,交替执行异步

多道批处理系统的优势是资源的利用率高,系统吞吐量大,CPU和其余资源都处于忙碌状态。缺点是用户响应时间较长。不提供人机交互能力,用户既不了解本身程序的运行状况,也不能控制计算机。分布式

分时系统

因为CPU速度不断提升和采用分时技术,一台计算机可同时链接多个用户终端,而每一个用户可在本身的终端上联机使用计算机,好象本身独占机器同样。
分时技术:把处理机的运行时间分红很短的时间片,按时间片轮流把处理机分配给各联机做业使用。
若某个做业在分配给它的时间片内不能完成其计算,则该做业暂时中断,把处理机让给另外一做业使用,等待下一轮时再继续其运行。因为计算机速度很快,做业运行轮转得很快,给每一个用户的印象是,好象他独占了一台计算机。而每一个用户能够经过本身的终端向系统发出各类操做控制命令,在充分的人机交互状况下,完成做业的运行。模块化

具备上述特征的计算机系统称为分时系统,它容许多个用户同时联机使用计算机。
特色:
(1)多路性。若干个用户同时使用一台计算机。微观上看是各用户轮流使用计算机;宏观上看是各用户并行工做。
(2)交互性。用户可根据系统对请求的响应结果,进一步向系统提出新的请求。这种能使用户与系统进行人机对话的工做方式,明显地有别于批处理系统,于是,分时系统又被称为交互式系统。
(3)独立性。用户之间能够相互独立操做,互不干扰。系统保证各用户程序运行的完整性,不会发生相互混淆或破坏现象。
(4)及时性。系统可对用户的输入及时做出响应。分时系统性能的主要指标之一是响应时间,它是指:从终端发出命令到系统予以应答所需的时间。
分时系统的主要目标:对用户响应的及时性,即不至于用户等待每个命令的处理时间过长。
分时系统能够同时接纳数十个甚至上百个用户,因为内存空间有限,每每采用对换(又称交换)方式的存储方法。即将未“轮到”的做业放入磁盘,一旦“轮到”,再将其调入内存;而时间片用完后,又将做业存回磁盘(俗称“滚进”、“滚出“法),使同一存储区域轮流为多个用户服务。
多用户分时系统是当今计算机操做系统中最广泛使用的一类操做系统。

实时操做系统

虽然多道批处理系统和分时系统能得到较使人满意的资源利用率和系统响应时间,但却不能知足实时控制与实时信息处理两个应用领域的需求。因而就产生了实时系统,即系统可以及时响应随机发生的外部事件,并在严格的时间范围内完成对该事件的处理。
实时系统在一个特定的应用中常做为一种控制设备来使用。
实时系统可分红两类:
(1)实时控制系统。当用于飞机飞行、导弹发射等的自动控制时,要求计算机能尽快处理测量系统测得的数据,及时地对飞机或导弹进行控制,或将有关信息经过显示终端提供给决策人员。当用于轧钢、石化等工业生产过程控制时,也要求计算机能及时处理由各种传感器送来的数据,而后控制相应的执行机构。
(2)实时信息处理系统。当用于预约飞机票、查询有关航班、航线、票价等事宜时,或当用于银行系统、情报检索系统时,都要求计算机能对终端设备发来的服务请求及时予以正确的回答。此类对响应及时性的要求稍弱于第一类。
实时操做系统的主要特色:
(1)及时响应。每个信息接收、分析处理和发送的过程必须在严格的时间限制内完成。
(2)高可靠性。需采起冗余措施,双机系统先后台工做,也包括必要的保密措施等。

 
这些基原本自百度百科,我只抄录了一部分比较经常使用的,下面是参考的连接: 操做系统发展历史

内核态和用户态

操做系统结构

操做系统的发展大体经历了无结构操做系统(第一代),模块化的操做系统(第二代),分层式结构(第三代),这些称为传统操做系统结构。而微内核操做系统是现代操做系统结构,他是在C/S(客户端/服务器)这种架构方式上发展起来的。传统操做系统的内容,你们只须要了解就能够了。重点在微内核操做系统。

微内核操做系统

    微内核操做系统每每采用的是C/S模式,它把操做系统分为微内核和多个服务器。微内核主要用于(1)实现与硬件紧密相关的处理,(2实现一些较基本的功能3)负责客户和服务器之间的通讯。

内核的功能

  1. 进程(线程)管理 (进程或者线程的调度)
  2. 低级存储器管理 (用户程序逻辑空间到内存空间的物理地址的变换)
  3. 中断和陷入管理 (中断和陷入)

因为微内核结构的存在,那么程序就运行在两种不一样的地方,内核态和用户态内核态与用户态是操做系统的两种运行级别,intel cpu没有必然的联系

特权级

对于任何一个操做系统来讲,建立一个新的进程都属于核心功能,由于它要作不少底层细致的工做,消耗系统的物理资源,好比分配物理内存,从父进程拷贝相关信息,拷贝设置页目录页表等,这些显然不能随便让哪一个程序就能去作,因而就天然引发了特权级别的概念,显然,最关键性的权力必须由高特权级别的程序来执行,这样才能作到几种管理,减小有限资源的访问和使用冲突。特权级别显然是很是有效的管理和控制程序的执行手段,所以在硬件对特权级别作了不少支持,就Intel的x86架构的CPU来讲,一共由0~3四个特权级,0为最高,3为最低,硬件上在执行每条执行的时候都会对指令所具备的特权级作相应的检查,相关概念有CPL,DPL和RPL,这里不在多阐述,硬件已经提供了一套特权级使用的相关机制,软件天然就是好好利用这个问题,这属于操做系统要作的事情,对于Unix/Linux来讲,只使用了0级特权和3级特权。也就是说在Unix和Linux中,一条工做在0级特权的指令具备CPU能提供的最高权力,而一条工做在3级特权的指令具备CPU提供的最低或者说最基本的权力。

内核态和用户态

根据上面说的特权级,来理解用户态和内核态就比较好理解了,当程序运行在3级特权的时候就能够称之为运行在用户态,由于这是最低特权级,是普通的用户进行运行的特权级,大部分用户之间面对的程序都是运行在用户态;反之,当程序运行在0级特权级上时,就能够称之为是运行在内核态。虽然用户态下和内核态下工做的程序有不少差距,可是更重要的差异就在于特权级的不一样,即权力的不一样。运行在用户态下的程序不能直接访问操做系统内核数据结构和程序。当咱们在系统中执行一个程序时,大部分时间是运行在用户态下的,在其须要操做系统帮助完成某些它没有权力和能力完成的工做时就会切换到内核态。

内核态当一个任务(进程)执行系统调用而陷入内核代码中执行时,咱们就称进程处于内核运行态(或简称为内核态)。其余的属于用户态。用户程序运行在用户态,操做系统运行在内核态.(操做系统内核运行在内核态,而服务器运行在用户态)。用户态不能干扰内核态.因此CPU指令就有两种,特权指令非特权指令.不一样的状态对应不一样的指令。特权指令:只能由操做系统内核部分使用,不容许用户直接使用的指令。如,I/O指令、置终端屏蔽指令、清内存、建存储保护、设置时钟指令(这几种记好,属于内核态)。 非特权指令:全部程序都可直接使用。 
因此:

系统态(核心态、特态、管态):执行所有指令。 
    用户态(常态、目态):执行非特权指令。

 用户态和内核态的转换

用户态切换到内核态的3种方式

  • 系统调用
    • 系统调用这是用户态进程主动要求切换到内核态的一种方式,用户态进程经过系统调用申请使用操做系统提供的服务程序完成工做,好比执行了一个建立新进程的系统调用。而系统调用的机制其核心仍是使用了操做系统为用户特别开放的一个中断来实现,例如Linux的int 80h中断。
  • 异常
    • CPU在执行运行在用户态下的程序时,发生了某些事先不可知的异常,这时会触发由当前运行进程切换处处理此异常的内核相关程序中,也就转到了内核态,好比缺页异常。
  • 外围设备的中断
    • 当外围设备完成用户请求的操做后,会向CPU发出相应的中断信号,这时CPU会暂停执行下一条即将要执行的指令转而去执行与中断信号对应的处理程序,若是先前执行的指令是用户态下的程序,那么这个转换的过程天然也就发生了由用户态到内核态的切换。好比硬盘读写操做完成,系统会切换到硬盘读写的中断处理程序中执行后续操做等。

这3种方式是系统在运行时由用户态转到内核态的最主要方式,其中系统调用能够认为是用户进程主动发起的,异常和外围设备中断则是被动的。

具体的切换操做

从触发方式上看,能够认为存在前述3种不一样的类型,可是从最终实际完成由用户态到内核态的切换操做上来讲,涉及的关键步骤是彻底一致的,没有任何区别,都至关于执行了一个中断响应的过程,由于系统调用实际上最终是中断机制实现的,而异常和中断的处理机制基本上也是一致的,关于它们的具体区别这里再也不赘述。关于中断处理机制的细节和步骤这里也不作过多分析,涉及到由用户态切换到内核态的步骤主要包括:

  • 从当前进程的描述符中提取其内核栈的ss0及esp0信息。
  • 使用ss0和esp0指向的内核栈将当前进程的cs,eip,eflags,ss,esp信息保存起来,这个过程也完成了由用户栈到内核栈的切换过程,同时保存了被暂停执行的程序的下一条指令。
  • 将先前由中断向量检索获得的中断处理程序的cs,eip信息装入相应的寄存器,开始执行中断处理程序,这时就转到了内核态的程序执行了。

常见的内核态常见总结

前文已经提到,内核的功能

1)进程(线程)管理 (进程或者线程的调度)

2)低级存储器管理 (用户程序逻辑空间到内存空间的物理地址的变换)

3)中断和陷入管理 (中断和陷入)

具体的:

(1) I/O指令、置终端屏蔽指令、清内存、建存储保护、设置时钟指令。 

(2) 中断、异常、陷入,好比缺页中断等

3进程(线程)管理

4)系统调用,好比调用了设备驱动程序

5)用户内存地址的转换(逻辑---> 物理映射)

并行和并发

 关于并行与并发说有不少,这里列举一些常见的说法:

  • 解释一:并行是指两个或者多个事件在同一时刻发生;而并发是指两个或多个事件在同一时间间隔发生。
  • 解释二:并行是在不一样实体上的多个事件,并发是在同一实体上的多个事件。
  • 解释三:在一台处理器上“同时”处理多个任务,在多台处理器上同时处理多个任务。如hadoop分布式集群

 简单理解就是:

并发是指一个处理器同时处理多个任务。

并行是指多个处理器或者是多核的处理器同时处理多个不一样的任务。

并发是逻辑上的同时发生(simultaneous),而并行是物理上的同时发生。

来个比喻:并发是一我的同时吃三个馒头,而并行是三我的同时吃三个馒头。

同步与异步

同步异步一般用来形容一次方法调用。

  • 同步方法调用一旦开始,调用者必须等到方法调用返回后,才能继续后续的行为。
  • 异步方法调用更像一个消息传递,一旦开始,方法调用就会当即返回,调用者就能够继续后续的操做。而,异步方法一般会在另一个线程中,“真实”地执行着。整个过程,不会阻碍调用者的工做。