zoukankan      html  css  js  c++  java
  • 操作系统

    操作系统

    1.初识操作系统

    1.为什么要有操作系统?

    现代的计算机系统主要是由一个或者多个处理器,内存,硬盘,键盘,鼠标,显示器,网络接口等其他输入输出设备组成.程序员无法把所有的硬件操作细节都了解到,通过操作系统管理这些硬件并且加以优化使用,程序员只要考虑自己的应用软件的编写就可以了,应用软件直接使用操作系统提供的功能来间接使用硬件.

    2.什么是操作系统?

    操作系统就是一个协调,管理和控制计算机硬件资源和软件资源的控制程序.

    操作系统位于计算机硬件与应用软件之间,本质也是一个软件。操作系统由操作系统的内核(运行于内核态,管理硬件资源)以及系统调用(运行于用户态,为应用程序员写的应用程序提供系统调用接口)两部分组成,所以,单纯的说操作系统是运行于内核态的,是不准确的。
    

    操作系统分为两部分功能

     
    #一:将一些对硬件操作的复杂接口变成简单的接口.为应用程序员提供调用硬件资源的更好,更简单,更清晰的模型(系统调用接口)。应用程序员有了这些接口后,就不用再考虑操作硬件的细节,专心开发自己的应用程序即可。
    例如:操作系统提供了文件这个抽象概念,对文件的操作就是对磁盘的操作,有了文件我们无需再去考虑关于磁盘的读写控制(比如控制磁盘转动,移动磁头读写数据等细节),
    
    #二:多个进程抢夺一个(CPU)资源时,将应用程序对硬件资源的竞态请求变得有序化
    例如:很多应用软件其实是共享一套计算机硬件,比方说有可能有三个应用程序同时需要申请打印机来输出内容,那么a程序竞争到了打印机资源就打印,然后可能是b竞争到打印机资源,也可能是c,这就导致了无序,打印机可能打印一段a的内容然后又去打印c...,操作系统的一个功能就是将这种无序变得有序。
    

    3.操作系统发展史

    • 第一代计算机(1949-1956) 手工操作--穿孔卡片

      第一代之前人类是想用机械取代人力,第一代计算机的产生是计算机由机械时代进入电子时代的标志,从Babbage失败之后一直到第二次世界大战,数字计算机的建造几乎没有什么进展,第二次世界大战刺激了有关计算机研究的爆炸性进展。

      lowa州立大学的john Atanasoff教授和他的学生Clifford Berry建造了据认为是第一台可工作的数字计算机。该机器使用300个真空管。大约在同时,Konrad Zuse在柏林用继电器构建了Z3计算机,英格兰布莱切利园的一个小组在1944年构建了Colossus,Howard Aiken在哈佛大学建造了Mark 1,宾夕法尼亚大学的William Mauchley和他的学生J.Presper Eckert建造了ENIAC。这些机器有的是二进制的,有的使用真空管,有的是可编程的,但都非常原始,设置需要花费数秒钟时间才能完成最简单的运算。

      在这个时期,同一个小组里的工程师们,设计、建造、编程、操作及维护同一台机器,所有的程序设计是用纯粹的机器语言编写的,甚至更糟糕,需要通过成千上万根电缆接到插件板上连成电路来控制机器的基本功能。没有程序设计语言(汇编也没有),操作系统则是从来都没听说过。

      工作过程:
      程序员在墙上的机时表预约一段时间,然后程序员拿着他的插件版到机房里,将自己的插件板接到计算机里,这几个小时内他独享整个计算机资源,后面的一批人都得等着(两万多个真空管经常会有被烧坏的情况出现)。后来出现了穿孔卡片,可以将程序写在卡片上,然后读入机不用插件板.

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

      优点:个人独享整个计算机资源

      缺点:1.硬件的调试插线,耗时严重

      ​ 2.同一时刻只有一个程序在内存中被cpu调用执行,程序串行执行

    • 第二代计算机(1957-1964) 磁带存储--批处理系

      由于当时的计算机非常昂贵,自认很自然的想办法较少机时的浪费。通常采用的方法就是批处理系统。

      特点:
      设计人员、生产人员、操作人员、程序人员和维护人员直接有了明确的分工,计算机被锁在专用空调房间中,由专业操作人员运行,这便是‘大型机’。有了操作系统的概念.有了程序设计语言:FORTRAN语言或汇编语言,写到纸上,然后穿孔打成卡片,再将卡片盒带到输入室,交给操作员,然后喝着咖啡等待输出接口.

      工作过程:

      优点:1.程序员不用亲自对硬件进行插线操控,效率提高

      ​ 2. 可以进行批量处理代码

      缺点:1.程序员不能独自使用计算机

      ​ 2.程序运行仍然是串行执行

    • 第三代计算机(1964-1971) 集成电路--多道程序系统

      20世纪60年代初期,大多数计算机厂商都有两条完全不兼容的生产线。

      一条是面向字的:大型的科学计算机,如IBM 7094,见上图,主要用于科学计算和工程计算

      另外一条是面向字符的:商用计算机,如IBM 1401,见上图,主要用于银行和保险公司从事磁带归档和打印服务

      开发和维护完全不同的产品是昂贵的,同时不同的用户对计算机的用途不同。

      IBM公司试图通过引入system/360系列来同时满足科学计算和商业计算,360系列低档机与1401相当,高档机比7094功能强很多,不同的性能卖不同的价格

      360是第一个采用了(小规模)芯片(集成电路)的主流机型,与采用晶体管的第二代计算机相比,性价比有了很大的提高。这些计算机的后代仍在大型的计算机中心里使用,此乃现在服务器的前身,这些服务器每秒处理不小于千次的请求。

      如何解决第二代计算机的问题:
      卡片被拿到机房后能够很快的将作业从卡片读入磁盘,于是任何时刻当一个作业结束时,操作系统就能将一个作业从磁带读出,装进空出来的内存区域运行,这种技术叫做
      同时的外部设备联机操作:SPOOLING,该技术同时用于输出。当采用了这种技术后,就不在需要IBM1401机了,也不必将磁带搬来搬去了(中间俩小人不再需要)

      如何解决第二代计算机的问题:

      第三代计算机的操作系统广泛应用了第二代计算机的操作系统没有的关键技术:多道技术

      多道技术中的多道指的是多个程序,多道技术的实现是为了解决多个程序竞争或者说共享同一个资源(比如cpu)的有序调度问题,解决方式即多路复用,多路复用分为时间上的复用和空间上的复用。
      
      1.空间上的复用
      将内存分区域,一个内存可以同时加载多个进程
      2.时间上的复用
      实现将cpu在多个进程之间来回切换,并且保留状态
      
      几乎所有程序都有IO阻塞,同时加载到内存3个任务,3个进程,每个进程都有阻塞情况,只要cpu运行一个进程时,遇到IO阻塞立马回切换,长时间占用cpu也会切换.
      目的:提升效率,最大限度的使用cpu.
      如果是一个IO密集型进程,来回切换提升效率.
      如果是一个计算密集型,来回切换降低效率.
      
      第三代计算机广泛采用了必须的保护硬件(程序之间的内存彼此隔离)之后,第三代计算机应用而生:
      每个人占用计算机的时间有限的,实现了多人(少于10个) 共同使用一个计算机主机,
      
    • 第四代计算机(1972-至今)

      进入20世纪80年代,大规模集成电路工艺技术的飞跃发展,微处理机的出现和发展,掀起了计算机大发展大普及的浪潮。一方面迎来了个人计算机的时代,同时又向计算机网络、分布式处理、巨型计算机和智能化方向发展。于是,操作系统有了进一步的发展,如:个人计算机操作系统、网络操作系统、分布式操作系统等。

        1.个人计算机操作系统

          个人计算机上的操作系统是联机交互的单用户操作系统,它提供的联机交互功能与通用分时系统提供的功能很相似。

          由于是个人专用,因此一些功能会简单得多。然而,由于个人计算机的应用普及,对于提供更方便友好的用户接口和丰富功能的文件系统的要求会愈来愈迫切。

        2.网络操作系统

          计算机网络:通过通信设施,将地理上分散的、具有自治功能的多个计算机系统互连起来,实现信息交换、资源共享、互操作和协作处理的系统。

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

          就是添加了一些网络方面的功能。

        3.分布式操作系统

          表面上看,分布式系统与计算机网络系统没有多大区别。分布式操作系统也是通过通信网络,将地理上分散的具有自治功能的数据处理系统或计算机系统互连起来,实现信息交换和资源共享,协作完成任务。——硬件连接相同。

          分布式:将一个大的任务拆分成几个小的任务,分配给不同的任务处理机制,具体怎么分配是由系统中的算法决定的,大家同时来运行自己的任务,然后各自将人物的返回结果再返回给你这个大的任务。

          但有如下一些明显的区别:

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

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

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

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

          分布式系统已经很普遍了,一般个人用不到,企业在处理比较大的任务的时候才会使用。

    2.进程与程序

    程序:指静态的文件

    进程:指的是程序的运行过程或正在运行的一个程序或任务.由操作系统操控调用交于CPU运行.

    串行:所有任务一个一个完成.

    并发:伪并行,一个cpu完成多个任务,看起来是同时完成.

    并行:多个cpu执行多个任务,是真正的同时完成.

    阻塞:阻塞调用是指调用结果返回之前,当前线程会被挂起(如遇到io操作).

    非阻塞:非阻塞和阻塞的概念相对应,指在不能立刻得到结果之前也会立刻返回,同时不会阻塞当前进程.

    进程的创建:

    一个子进程必须依赖于一个主进程才可以开启,一个主进程可以开启多个子进程.

    无论哪一种,新进程的创建都是由一个已经存在的进程执行了一个用于创建进程的系统调用而创建的:

      1. 在UNIX中该系统调用是:fork,fork会创建一个与父进程一模一样的副本,二者有相同的存储映像、同样的环境字符串和同样的打开文件(在shell解释器进程中,执行一个命令就会创建一个子进程)

      2. 在windows中该系统调用是:CreateProcess,CreateProcess既处理进程的创建,也负责把正确的程序装入新进程。

    关于创建的子进程,UNIX和windows

      1.相同的是:进程创建后,父进程和子进程有各自不同的地址空间(多道技术要求物理层面实现进程之间内存的隔离),任何一个进程的在其地址空间中的修改都不会影响到另外一个进程。

      2.不同的是:在UNIX中,子进程的初始地址空间是父进程的一个副本,提示:子进程和父进程是可以有只读的共享内存区的。但是对于windows系统来说,从一开始父进程与子进程的地址空间就是不同的。

    ​ 3.unix(linux,mac):创建一个子进程会完完全全复制一个主进程所有的资源,初始资源不变.

    ​ windows:创建一个子进程,会copy主进程所有的资源,但是会改变一些资源.

    进程的状态:

    一个进程由三种状态组成

  • 相关阅读:
    Java中常见时间类的使用
    springboot2.0介绍1
    Element-ui-Basic
    Java开发中的23中设计模式详解(一)工厂方法模式和抽象工厂模式
    CSS3 变形、过渡、动画、关联属性浅析
    Webpack 入门教程
    ES6对象简洁语法
    如何下载ts文件
    PPT转PDF
    python实践
  • 原文地址:https://www.cnblogs.com/tutougold/p/11377976.html
Copyright © 2011-2022 走看看