1.操作系统历史
2.进程,IO,同步异步阻塞非阻塞
操作系统历史:
手工操作:
1946年第一台计算机诞生--20世纪50年代中期,计算机工作还在采用手工操作方式。此时还没有操作系统的概念。
手工操作方式两个特点:
(1)用户独占全机。不会出现因资源已被其他用户占用而等待的现象,但资源的利用率低。
(2)CPU 等待手工操作。CPU的利用不充分。
批处理—磁带操作:
主机与输入机之间增加一个存储设备——磁带,在运行于主机上的监督程序的自动控制下,计算机可自动完成:成批地把输入机上的用户作业读入磁带,依次把磁带上的用户作业读入主机内存并执行并把计算结果向输出机输出。完成了上一批作业后,监督程序又从输入机上输入另一批作业,保存在磁带上,并按上述步骤重复处理。
监督程序不停地处理各个作业,从而实现了作业到作业的自动转接,减少了作业建立时间和手工操作时间,有效克服了人机矛盾,提高了计算机的利用率。
但是,在作业输入和结果输出时,主机的高速CPU仍处于空闲状态,等待慢速的输入/输出设备完成工作: 主机处于“忙等”状态。
脱机批处理系统:为克服与缓解:高速主机与慢速外设的矛盾,提高CPU的利用率,又引入了脱机批处理系统,即输入/输出脱离主机控制。
多道程序系统(IO到了就切换任务):
#两个作业之间,如果一个作业遇到了IO操作了,另外一个作业就开始使用CPU进行计算 # 多道程序设计技术不仅使CPU得到充分利用,同时改善I/O设备和内存的利用率,从而提高了整个系统的 # 资源利用率和系统吞吐量(单位时间内处理作业(程序)的个数),最终提高了整个系统的效率。 # 单处理机系统中多道程序运行时的特点: # (1)多道:计算机内存中同时存放几道相互独立的程序; # ·(2)宏观上并行:同时进入系统的几道程序都处于运行过程中,即它们先后开始了各自的运行,但都未运行完毕; # ·(3)微观上串行:实际上,各道程序轮流地用CPU,并交替运行。 # 多道程序系统的出现,标志着操作系统渐趋成熟的阶段,先后出现了作业调度管理、处理机管理、存储器管理、外部设备管理、文件系统管理等功能。 # 由于多个程序同时在计算机中运行,开始有了空间隔离的概念,只有内存空间的隔离,才能让数据更加安全、稳定。 # 出了空间隔离之外,多道技术还第一次体现了时空复用的特点,遇到IO操作就切换程序,使得cpu的利用率提高了,计算机的工作效率也随之提高。
多道程序系统
分时系统(时间片到了就切换):
# 分时技术:把处理机的运行时间分成很短的时间片,按时间片轮流把处理机分配给各联机作业使用。 # 若某个作业在分配给它的时间片内不能完成其计算,则该作业暂时中断,把处理机让给另一作业使用,等待 # 下一轮时再继续其运行。由于计算机速度很快,作业运行轮转得很快,给每个用户的印象是,好象他独占了一台计算 # 机。而每个用户可以通过自己的终端向系统发出各种操作控制命令,在充分的人机交互情况下,完成作业的运行。 # 具有上述特征的计算机系统称为分时系统,它允许多个用户同时联机使用计算机。 # 特点: # (1)多路性。若干个用户同时使用一台计算机。微观上看是各用户轮流使用计算机;宏观上看是各用户并行工作。 # (2)交互性。用户可根据系统对请求的响应结果,进一步向系统提出新的请求。这种能使用户与系统进行人机对话的工作方 # 式,明显地有别于批处理系统,因而,分时系统又被称为交互式系统。 # (3)独立性。用户之间可以相互独立操作,互不干扰。系统保证各用户程序运行的完整性,不会发生相互混淆或破坏现象。 # (4)及时性。系统可对用户的输入及时作出响应。分时系统性能的主要指标之一是响应时间,它是指:从终端发出命令到系统予以应答所需的时间。 # 分时系统的主要目标:对用户响应的及时性,即不至于用户等待每一个命令的处理时间过长。 # 分时系统可以同时接纳数十个甚至上百个用户,由于内存空间有限,往往采用对换(又称交换)方式的存储方法。 # 即将未“轮到”的作业放入磁盘,一旦“轮到”,再将其调入内存;而时间片用完后,又将作业存回磁盘(俗称“滚进”、“滚出“法),使 # 同一存储区域轮流为多个用户服务。 # 多用户分时系统是当今计算机操作系统中最普遍使用的一类操作系统。 # 注意:分时系统的分时间片工作,在没有遇到IO操作的时候就用完了自己的时间片被切走了,这样的切换工作其实并没有提高cpu的效率, # 而使得计算机的效率降低了。但是我们牺牲了一点效率,却实现了多个程序共同执行的效果,这样你就可以在计算机上一边听音乐一边聊qq了。 # 分时——现在流行的PC,服务器都是采用这种运行模式,即把CPU的运行分成若干时间片分别处理不同的运算请求 linux系统 # 实时——一般用于单片机上、PLC等,比如电梯的上下控制中,对于按键等动作要求进行实时处理
分时系统
通用操作系统:
# 操作系统的三种基本类型:多道批处理系统、分时系统、实时系统。 # 通用操作系统:具有多种类型操作特征的操作系统。可以同时兼有多道批处理、分时、实时处理的功能,或其中两种以上的功能。 # 例如:实时处理+批处理=实时批处理系统。首先保证优先处理实时任务,插空进行批处理作业。常把实时任务称为前台作业,批作业称为后台作业。 # 再如:分时处理+批处理=分时批处理系统。 # 即:时间要求不强的作业放入“后台”(批处理)处理,需频繁交互的作业在“前台”(分时)处理,处理机优先运行“前台”作业。 # 从上世纪60年代中期,国际上开始研制一些大型的通用操作系统。这些系统试图达到功能齐全、可适应各种应用范围和操作方式变化多端的环境的目标。 # 但是,这些系统过于复杂和庞大,不仅付出了巨大的代价,且在解决其可靠性、可维护性和可理解性方面都遇到很大的困难。 # 相比之下,UNIX操作系统却是一个例外。这是一个通用的多用户分时交互型的操作系统。它首先建立的是一个精干的核心, # 而其功能却足以与许多大型的操作系统相媲美,在核心层以外,可以支持庞大的软件系统。它很快得到应用和推广,并不断完善,对现代操作系统有着重大的影响。 # 至此,操作系统的基本概念、功能、基本结构和组成都已形成并渐趋完善。
通用操作系统
操作系统的进一步发展:个人计算机操作系统,网络操作系统,分布式操作系统
操作系统的几个概念:
IO:
# I/O # 即 input output #只要是和内存打交道,但是不涉及到计算的,都是IO #内置函数 inpput time.sleep() 读文件,写文件 网络请求:recv accept都是IO
IO初识
进程:
1.是运行中的程序;
2.是系统最小的资源分配单位
3.为多个任务之间的数据安全和内存隔离做约束
进程的三个状态:就绪态,执行态,阻塞态
# (1)就绪(Ready)状态 # 当进程已分配到除CPU以外的所有必要的资源,只要获得处理机便可立即执行,这时的进程状态称为就绪状态。 # (2)执行/运行(Running)状态当进程已获得处理机,其程序正在处理机上执行,此时的进程状态称为执行状态。 # (3)阻塞(Blocked)状态正在执行的进程,由于等待某个事件发生而无法执行时,便放弃处理机而处于阻塞状态。 # 引起进程阻塞的事件可有多种,例如,等待I/O完成、申请缓冲区不能满足、等待信件(信号)等。 #进程创建后,进入就绪状态,等待操作系统运行 import time print(‘程序开始运行了‘) #程序运行状态 name = input(‘>>> ‘) #遇到了阻塞 #用户输入后,进入就绪状态,等待运行 print(name) #运行态 time.sleep(1) #再次进入阻塞态 #再次进入就绪态 print(‘程序结束运行‘) #运行态 #结束 #由于该程序运行十分短暂,没有遇到没运行完,但是时间片到了,切换到就绪态,进入等待队列
进程的三个状态
#引进进程的概念 每一个程序都有它自己存储的空间,空间上隔离开来 # 第一,进程是一个实体。每一个进程都有它自己的地址空间,一般情况下,包括文本区域(text region)、数据区域(data region)和堆栈(stack region)。 # 文本区域存储处理器执行的代码;数据区域存储变量和进程执行期间使用的动态分配的内存;堆栈区域存储着活动过程调用的指令和本地变量。 # 第二,进程是一个“执行中的程序”。程序是一个没有生命的实体,只有处理器赋予程序生命时(操作系统执行之), # 它才能成为一个活动的实体,我们称其为进程。[3] # 进程是操作系统中最基本、重要的概念。是多道程序系统出现后,为了刻画系统内部出现的动态情况,描述系统内部各道 # 程序的活动规律引进的一个概念,所有多道程序设计操作系统都建立在进程的基础上。 #进程与程序中的区别 # 程序是指令和数据的有序集合,其本身没有任何运行的含义,是一个静态的概念。 # 而进程是程序在处理机上的一次执行过程,它是一个动态的概念。 # 程序可以作为一种软件资料长期存在,而进程是有一定生命期的。 # 程序是永久的,进程是暂时的。 # 注意:同一个程序执行两次,就会在操作系统中出现两个进程,所以我们可以同时运行两个软件,分别做不同的事情也不会混乱。
进程-与程序的区别
#进程调度 #先来先服务调度算法(FCFS),有利于长作业,不利于短作业 #短作业优先调度算法(SJ/PF),进程的长短被预先估算出来 #时间片 轮转法:把1秒钟分成多份,每一份就是时间片,每一份是CPU调度的时间 # 基本思路是让每个进程在就绪队列中的等待时间与享受服务的时间成比例。 # 在时间片轮转法中,需要将CPU的处理时间分成固定大小的时间片,例如,几十毫秒至几百毫秒。 # 如果一个进程在被调度选中之后用完了系统规定的时间片,但又未完成要求的任务, # 则它自行释放自己所占有的CPU而排到就绪队列的末尾, # 等待下一次调度。同时,进程调度程序又去调度当前就绪队列中的第一个进程。 #多级反馈队列调度—较为科学的调度方法 # 多级反馈队列调度算法则不必事先知道各种进程所需的执行时间,而且还可以满足各种类型进程的需要, # 因而它是目前被公认的一种较好的进程调度算法。在采用多级反馈队列调度算法的系统中,调度算法的实施过程如下所述。 # (1) 应设置多个就绪队列,并为各个队列赋予不同的优先级。第一个队列的优先级最高,第二个队列次之, # 其余各队列的优先权逐个降低。该算法赋予各个队列中进程执行时间片的大小也各不相同, # 在优先权愈高的队列中,为每个进程所规定的执行时间片就愈小。 # 例如,第二个队列的时间片要比第一个队列的时间片长一倍,……,第i+1个队列的时间片要比第i个队列的时间片长一倍。 # (2) 当一个新进程进入内存后,首先将它放入第一队列的末尾, # 按FCFS原则排队等待调度。当轮到该进程执行时,如它能在该时间片内完成,便可准备撤离系统; # 如果它在一个时间片结束时尚未完成,调度程序便将该进程转入第二队列的末尾,再同样地按FCFS原则等待调度执行; # 如果它在第二队列中运行一个时间片后仍未完成,再依次将它放入第三队列,……, # 如此下去,当一个长作业(进程)从第一队列依次降到第n队列后,在第n 队列便采取按时间片轮转的方式运行。 # # (3) 仅当第一队列空闲时,调度程序才调度第二队列中的进程运行; # 仅当第1~(i-1)队列均空时,才会调度第i队列中的进程运行。如果处理机正在第i队列中为某进程服务时, # 又有新进程进入优先权较高的队列(第1~(i-1)中的任何一个队列),则此时新进程将抢占正在运行进程的处理机, # 即由调度程序把正在运行的进程放回到第i队列的末尾,把处理机分配给新到的高优先权进程。
进程的调度
#我们计算机采用时间片轮转法和多级反馈队列调度
并行和并发:
# 并行 : 并行是指两者同时执行,比如赛跑,两个人都在不停的往前跑;(资源够用,比如三个线程,四核的CPU ) # (多线程:看起来像一起执行,但由于cpython中的GIL,使得多个线程同一时间只有一个线程占用cpu) # 并发 : 并发是指资源有限的情况下,两者交替轮流使用资源,比如一段路(单核CPU资源)同时只能过一个人 # A走一段后,让给B,B用完继续给A ,交替使用,目的是提高效率。 #(多进程:在同一时间可以占用多个cpu) # # 区别: # 并行是从微观上,也就是在一个精确的时间片刻,有不同的程序在执行,这就要求必须有多个处理器。 # 并发是从宏观上,在一个时间段上可以看出是同时执行的,比如一个服务器同时处理多个session。
并行和并发
同步、异步、阻塞、非阻塞:
#同步:事情是串行的,必须做完这件事,才能继续往下做 # 类似好几条马路,只有一辆车在这些道上跑 #异步:变现出来为两个函数,同时运行。在同一时间有两件事在同时做的事情 #阻塞:inpput time.sleep() 读文件,写文件 网络请求:recv 等 # 非阻塞:程序不管走到哪,都不停下来。但是程序不可避免的就要阻塞 # 非阻塞和阻塞的概念相对应,指在不能立刻得到结果之前,该函数不会阻塞当前线程,而会立刻返回。 # 简单点说: # 阻塞就是干不完不准回来, # 非阻塞就是你先干,我现看看有其他事没有,完了告诉我一声 # 其它该了解的概念: # 1.同步VS异步 # 同步和异步通常用来形容一次方法调用。同步方法调用一开始,调用者必须等待被调用的 # 方法结束后,调用者后面的代码才能执行。而异步调用,指的是,调用者不用管被调用方法是否 # 完成,都会继续执行后面的代码,当被调用的方法完成后会通知调用者。比如,在超时购物,如 # 果一件物品没了,你得等仓库人员跟你调货,直到仓库人员跟你把货物送过来,你才能继续去收银台付款,这就 # 类似同步调用。而异步调用了,就像网购,你在网上付款下单后,什么事就不用管了,该干嘛就干嘛去了,当货 # 物到达后你收到通知去取就好。 # # 2 并发与并行 # 并发和并行是十分容易混淆的概念。并发指的是多个任务交替进行,而并行则是指真正意义上 # 的“同时进行”。实际上,如果系统内只有一个CPU,而使用多线程时,那么真实系统环境下不能并行,只能通过切换时间片的方式交替进行,而成为并发执行任务。真正的并行也只能出现在拥有多个CPU的系统中。 # # 3 阻塞和非阻塞 # 阻塞和非阻塞通常用来形容多线程间的相互影响,比如一个线程占有了临界区资源,那么其他线程 # 需要这个资源就必须进行等待该资源的释放,会导致等待的线程挂起,这种情况就是阻塞,而非阻塞就恰好相反,它强调没有一个线程可以阻塞其他线程,所有的线程都会尝试地往前运行。 # # 4 临界区 # 临界区用来表示一种公共资源或者说是共享数据,可以被多个线程使用。但是每个线程使用时,一旦临界区资源被一个线程占有,那么其他线程必须等待。
同步,异步,阻塞,非阻塞
同步阻塞,异步阻塞,同步非阻塞,异步非阻塞:
#1.同步阻塞形式 效率最低。拿上面的例子来说,就是你专心排队,什么别的事都不做。 #2.异步阻塞形式 如果在银行等待办理业务的人采用的是异步的方式去等待消息被触发(通知),也就是领了一张小纸条,假如在这段时间里他不能离开银行做其它的事情,那么很显然,这个人被阻塞在了这个等待的操作上面; 异步操作是可以被阻塞住的,只不过它不是在处理消息时阻塞,而是在等待消息通知时被阻塞。 #3.同步非阻塞形式 实际上是效率低下的。 想象一下你一边打着电话一边还需要抬头看到底队伍排到你了没有,如果把打电话和观察排队的位置看成是程序的两个操作的话,这个程序需要在这两种不同的行为之间来回的切换,效率可想而知是低下的。 #4.异步非阻塞形式 效率更高, 因为打电话是你(等待者)的事情,而通知你则是柜台(消息触发机制)的事情,程序没有在两种不同的操作中来回切换。 比如说,这个人突然发觉自己烟瘾犯了,需要出去抽根烟,于是他告诉大堂经理说,排到我这个号码的时候麻烦到外面通知我一下,那么他就没有被阻塞在这个等待的操作上面,自然这个就是异步+非阻塞的方式了。 很多人会把同步和阻塞混淆,是因为很多时候同步操作会以阻塞的形式表现出来,同样的,很多人也会把异步和非阻塞混淆,因为异步操作一般都不会在真正的IO操作处被阻塞。
四种状态的结合
摘抄链接:景老师-操作系统介绍
原文地址:https://www.cnblogs.com/gkx0731/p/9744162.html