zoukankan      html  css  js  c++  java
  • Python并发编程 —— 操作系统基础

    1、手工操作 —— 穿孔卡片

    1946年第一台计算机诞生--20世纪50年代中期,计算机工作还在采用手工操作方式。此时还没有操作系统的概念。

    特点:

      (1)用户独占全机。不会出现因资源已被其他用户占用而等待的现象,但资源的利用率低。

      (2)CPU 等待手工操作。CPU的利用不充分。

    2、批处理 —— 磁带存储和批处理系统

    批处理系统:加载在计算机上的一个系统软件,在它的控制下,计算机能够自动地、成批地处理一个或多个用户的作业(这作业包括程序、数据和命令)。

    联机批处理系统 ——> 脱机批处理系统

    特点:

    ​ (1)它极大缓解了人机矛盾及主机与外设的矛盾。

      (2)每次主机内存中仅存放一道作业,每当它运行期间发出输入/输出(I/O)请求后,高速的CPU便处于等待低速的I/O完成状态,致使CPU空闲。

    3、多道程序系统

    第一次提出了多个程序可以同时在计算机中被计算

    ​ ·遇到IO就让出CPU

    ​ ·把CPU让给其他程序,让其他程序能够使用CPU

    ​ ·CPU的让出这件事,占用时间

    ​ ·两个程序之间来回在CPU上切换,不会发生混乱

    ​ 每个程序有独立的内存空间

    ​ 每个程序在切换的前后会把当前程序的状态记录下来

    多道程序设计技术,就是指允许多个程序同时进入内存并运行。即同时把多个程序放入内存,并允许它们交替在CPU中运行,它们共享系统中的各种硬、软件资源。当一道程序因I/O请求而暂停运行时,CPU便立即转去运行另一道程序。

    多道程序系统的出现,标志着操作系统渐趋成熟的阶段,先后出现了作业调度管理、处理机管理、存储器管理、外部设备管理、文件系统管理等功能。

    由于多个程序同时在计算机中运行,开始有了空间隔离的概念,只有内存空间的隔离,才能让数据更加安全、稳定。

    除了空间隔离之外,多道技术还第一次体现了时空复用的特点,遇到IO操作就切换程序,使得cpu的利用率提高了,计算机的工作效率也随之提高。

    特点:

      (1)多道:系统内可同时容纳多个作业。这些作业放在外存中,组成一个后备队列,系统按一定的调度原则每次从后备作业队列中选取一个或多个作业进入内存运行,运行作业结束、退出运行和后备作业进入运行均由系统自动实现,从而在系统中形成一个自动转接的、连续的作业流。

      (2)成批:在系统运行过程中,不允许用户与其作业发生交互作用,即:作业一旦进入系统,用户就不能直接干预其作业的运行。

      (3)不提供人机交互能力,给用户使用计算机带来不便。虽然用户独占全机资源,并且直接控制程序的运行,可以随时了解程序运行情况。但这种工作方式因独占全机造成资源效率极低。

    CPU计算和不计算(IO)操作:

    IO操作(网络操作  文件操作):  输入输出 :相对内存
    	阻塞:sleep  input  recv  accept  recvfrom 是不需要CPU参与的
    	对文件的读取:对硬盘的操作一次读取相当于CPU执行90w条代码
    		Input :向内存输入数据
    			读文件 load  input  recv  recvfrom  accept   connect  close
    		Ouput :从内存中输出数据
    			写文件 dump  print  send  sendto  accept  connect  close
    		所有的IO操作本质都是文件操作:
    			input  print : input是写入文件,然后通过读取文件把输入的内容加载到内存
    						   print是直接写入文件,然后通过文件展示给用户看
    			socket中的交互方法:都是文件操作
    					send : 是向缓存文件中写
    					recv  :是从缓存文件中读 
    也就是说只要涉及到IO操作,至少就是一个0.009s == 就是CPU执行90w条python代码的时间
    
    # 操作系统每秒500000000条指令,一般情况下一句python代码被翻译为5条指令
    0.009s
    500000000条指令/s  /5 = 100000000条python代码/s
    0.009s * 100000000 = 900000条python代码
    
    import dis     # dis 模块可以查看python代码被翻译为的操作系统指令
    a = 1
    def func():
        global a
        a+=1
    dis.dis(func)
    

    4、分时系统

    分时技术:把处理机的运行时间分成很短的时间片,按时间片轮流把处理机分配给各联机作业使用。

    若某个作业在分配给它的时间片内不能完成其计算,则该作业暂时中断,把处理机让给另一作业使用,等待下一轮时再继续其运行。由于计算机速度很快,作业运行轮转得很快,给每个用户的印象是,好象他独占了一台计算机。而每个用户可以通过自己的终端向系统发出各种操作控制命令,在充分的人机交互情况下,完成作业的运行。

    特点:

      (1)多路性。若干个用户同时使用一台计算机。微观上看是各用户轮流使用计算机;宏观上看是各用户并行工作。

      (2)交互性。用户可根据系统对请求的响应结果,进一步向系统提出新的请求。这种能使用户与系统进行人机对话的工作方式,明显地有别于批处理系统,因而,分时系统又被称为交互式系统。

      (3)独立性。用户之间可以相互独立操作,互不干扰。系统保证各用户程序运行的完整性,不会发生相互混淆或破坏现象。

      (4)及时性。系统可对用户的输入及时作出响应。分时系统性能的主要指标之一是响应时间,它是指:从终端发出命令到系统予以应答所需的时间。

    时间片轮转算法:

    ​ 时间片到了才让出CPU

    ​ CPU的让出事件占用时间

    ​ 减低工作效率,提高了用户体验

    5、实时系统

    虽然多道批处理系统和分时系统能获得较令人满意的资源利用率和系统响应时间,但却不能满足实时控制与实时信息处理两个应用领域的需求。于是就产生了实时系统,即系统能够及时响应随机发生的外部事件,并在严格的时间范围内完成对该事件的处理。

    特点:

      (1)及时响应。每一个信息接收、分析处理和发送的过程必须在严格的时间限制内完成。

      (2)高可靠性。需采取冗余措施,双机系统前后台工作,也包括必要的保密措施等。

    6、通用操作系统

    操作系统的三种基本类型:多道批处理系统、分时系统、实时系统。

    通用操作系统:具有多种类型操作特征的操作系统。可以同时兼有多道批处理、分时、实时处理的功能,或其中两种以上的功能。

    7、操作系统的进一步发展

    个人计算机操作系统:个人计算机上的操作系统是联机交互的单用户操作系统,它提供的联机交互功能与通用分时系统提供的功能很相似。由于是个人专用,因此一些功能会简单一些。

    网络操作系统:在原来各自计算机操作系统上,按照网络体系结构的各个协议标准增加网络管理模块,其中包括:通信、资源共享、系统安全和各种网络应用服务。

    分布式操作系统:

    ​ (1)分布式系统要求一个统一的操作系统,实现系统操作的统一性。

      (2)分布式操作系统管理分布式系统中的所有资源,它负责全系统的资源分配和调度、任务划分、信息传输和控制协调工作,并为用户提供一个统一的界面。

      (3)用户通过这一界面,实现所需要的操作和使用系统资源,至于操作定在哪一台计算机上执行,或使用哪台计算机的资源,则是操作系统完成的,用户不必知道,此谓:系统的透明性。

      (4)分布式系统更强调分布式计算和处理,因此对于多机合作和系统重构、坚强性和容错能力有更高的要求,希望系统有:更短的响应时间、高吞吐量和高可靠性。

    8、操作系统的作用

    现代的计算机系统主要是由一个或者多个处理器,主存,硬盘,键盘,鼠标,显示器,打印机,网络接口及其他输入输出设备组成。

      一般而言,现代计算机系统是一个复杂的系统。

      其一:如果每位应用程序员都必须掌握该系统所有的细节,那就不可能再编写代码了(严重影响了程序员的开发效率:全部掌握这些细节可能需要很长很长很长时间....)

      其二:并且管理这些部件并加以优化使用,是一件极富挑战性的工作,于是,计算安装了一层软件(系统软件),称为操作系统。它的任务就是为用户程序提供一个更好、更简单、更清晰的计算机模型,并管理刚才提到的所有设备。

    总结:

      程序员无法把所有的硬件操作细节都了解到,管理这些硬件并且加以优化使用是非常繁琐的工作,这个繁琐的工作就是操作系统来干的,有了他,程序员就从这些繁琐的工作中解脱了出来,只需要考虑自己的应用软件的编写就可以了,应用软件直接使用操作系统提供的功能来间接使用硬件。

      精简的说的话,操作系统就是一个协调、管理和控制计算机硬件资源和软件资源的控制程序。

      细说的话,操作系统应该分成两部分功能:

    # 一:隐藏了丑陋的硬件调用接口,为应用程序员提供调用硬件资源的更好,更简单,更清晰的模型(系统调用接口)。应用程序员有了这些接口后,就不用再考虑操作硬件的细节,专心开发自己的应用程序即可。
    例如:操作系统提供了文件这个抽象概念,对文件的操作就是对磁盘的操作,有了文件我们无需再去考虑关于磁盘的读写控制(比如控制磁盘转动,移动磁头读写数据等细节),
    
    # 二:将应用程序对硬件资源的竞态请求变得有序化
    例如:很多应用软件其实是共享一套计算机硬件,比方说有可能有三个应用程序同时需要申请打印机来输出内容,那么a程序竞争到了打印机资源就打印,然后可能是b竞争到打印机资源,也可能是c,这就导致了无序,打印机可能打印一段a的内容然后又去打印c...,操作系统的一个功能就是将这种无序变得有序。
    
  • 相关阅读:
    Maven(一)之Maven入门
    由浅入深讲解数据库中Synonym的使用方法
    sql server 中查询数据库下有多少张表以及同义词等信息
    SQLServer中同义词Synonym的用法
    SQL Server在用户自定义函数(UDF)中使用临时表
    java 异常
    java算法之冒泡排序法
    如何用Java实现反转排序
    关于eclipse的注释和反注释的快捷键
    java获取随机数
  • 原文地址:https://www.cnblogs.com/caiyongliang/p/14006901.html
Copyright © 2011-2022 走看看