• ~~并发编程(一):操作系统~~


    进击のpython

    *****

    并发编程——操作系统


    这一部分的知识点,我给你写的和别人写的应该是差不多的,所以说,没有什么意义

    也没有什么指导性意义,这部分就当做是一个计算机操作系统发展史的科普文章就行

    本节的内容主要就是介绍一下计算机的操作系统发展情况,以及对相关的功能发展进行简述


    什么是操作系统

    还是这个问题,操作系统是什么?这个问题说太深刻了就偏离了我们想要简单了解的初衷了

    简单来说,操作系统就是协调,管理和控制计算机硬件资源和软件资源的控制程序

    所以也就可以看出来,操作系统是活跃于软件和硬件之间的桥梁,操作系统本质也是一个软件

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

    1.隐藏了丑陋的硬件调用接口,为程序员提供调用硬件资源,更好更简单更清晰的模型。应用程序有了这些接口

    就不用再考虑操作硬件的细节,只需要专心的开发自己得应用程序即可

    举个简单的例子,我们在写程序的时候可能会控制到电脑的键盘鼠标的自动化键入,而这个控制我们只需要通过控制相应模块来操作,而不需要考虑键鼠设备的USB读取信息问题

    2.将应用程序对硬件资源的竞态请求变得有序化。

    经常使用计算机没有意识到,如果后台打开了多个音视频播放的软件

    那么这些软件都是想要争抢音量,画面等等计算机里面的这些资源的

    如果没有操作系统就会出现观看视频的过程中变成了别的视频,或者音画不匹配的现象

    操作系统就会对其进行有序处理


    操作系统与软件的区别

    操作系统本质上就是软件,但是就像类的继承一样,对父类来说有相似也有不同

    如果对QQ的操作界面不满意,可以换成微信,甚至可以自己写一个,这都是被允许的

    但是!你无法写一个属于操作系统一部分的程序(时钟中断处理程序),操作系统由硬件保护,不能被用户修改

    如果非要说的话,那么操作系统与用户程序的差异并不在于二者所处的地位

    特别地,操作系统是一个大型、复杂、长寿的软件!

    操作系统的编写难度十分巨大,以至于要花大量的时间(年为单位)来进行开发

    而如此大的代码量,一旦完成,操作系统所有者便不会轻易扔掉,再写一个,而是在原有的基础上进行改进

    相比较来说,程序就显得渺小的太多了


    操作系统发展史

    第一代计算机(1940~1955):真空管和穿孔卡片

    第一代计算机的产生背景:

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

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

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

    特点:

    没有操作系统的概念
    所有的程序设计都是直接操控硬件

    工作过程:

    程序员在墙上的机时表预约一段时间,然后程序员拿着他的插件版到机房里,将自己的插件板接到计算机里,这几个小时内他独享整个计算机资源,后面的一批人都得等着(两万多个真空管经常会有被烧坏的情况出现)。

    后来出现了穿孔卡片,可以将程序写在卡片上,然后读入机而不用插件板

    优点:

    程序员在申请的时间段内独享整个资源,可以即时地调试自己的程序(有bug可以立刻处理)

    缺点:

    浪费计算机资源,一个时间段内只有一个人用。
    注意:同一时刻只有一个程序在内存中,被cpu调用执行,比方说10个程序的执行,是串行的

    第二代计算机(1955~1965):晶体管和批处理系统

    第二代计算机的产生背景:

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

    特点:

    设计人员、生产人员、操作人员、程序人员和维护人员直接有了明确的分工,计算机被锁在专用空调房间中,由专业操作人员运行,这便是‘大型机’。

    有了操作系统的概念

    有了程序设计语言:FORTRAN语言或汇编语言,写到纸上,然后穿孔打成卡片,再讲卡片盒带到输入室,交给操作员,然后喝着咖啡等待输出接口

    第二代如何解决第一代的问题/缺点:

    1.把一堆人的输入攒成一大波输入,
    2.然后顺序计算(这是有问题的,但是第二代计算也没有解决)
    3.把一堆人的输出攒成一大波输出

    优点:

    批处理,节省了机时

    缺点:

    1.整个流程需要人参与控制,将磁带搬来搬去

    2.计算的过程仍然是顺序计算串行

    3.程序员原来独享一段时间的计算机,现在必须被统一规划到一批作业中,等待结果和重新调试的过程都需要等同批次的其他程序都运作完才可以(这极大的影响了程序的开发效率,无法及时调试程序)

    第三代计算机(1965~1980):集成电路芯片和多道程序设计

    第三代计算机的产生背景:

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

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

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

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

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

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

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

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

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

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

    cpu在执行一个任务的过程中,若需要操作硬盘,则发送操作硬盘的指令,指令一旦发出,硬盘上的机械手臂滑动读取数据到内存中,这一段时间,cpu需要等待,时间可能很短,但对于cpu来说已经很长很长,长到可以让cpu做很多其他的任务,如果我们让cpu在这段时间内切换到去做其他的任务,这样cpu不就充分利用了吗。这正是多道技术产生的技术背景

    多道技术:

    多道技术中的多道指的是多个程序,多道技术的实现是为了解决多个程序竞争或者说共享同一个资源(比如cpu)的有序调度问题,解决方式即多路复用,多路复用分为时间上的复用和空间上的复用。

    空间上的复用:将内存分为几部分,每个部分放入一个程序,这样,同一时间内存中就有了多道程序。

    时间上的复用:当一个程序在等待I/O时,另一个程序可以使用cpu,如果内存中可以同时存放足够多的作业,则cpu的利用率可以接近100%,类似于我们小学数学所学的统筹方法。(操作系统采用了多道技术后,可以控制进程的切换,或者说进程之间去争抢cpu的执行权限。这种切换不仅会在一个进程遇到io时进行,一个进程占用cpu时间过长也会切换,或者说被操作系统夺走cpu的执行权限)

    空间上的复用最大的问题是:

    程序之间的内存必须分割,这种分割需要在硬件层面实现,由操作系统控制。如果内存彼此不分割,则一个程序可以访问另外一个程序的内存,

    首先丧失的是安全性,比如你的qq程序可以访问操作系统的内存,这意味着你的qq可以拿到操作系统的所有权限。

    其次丧失的是稳定性,某个程序崩溃时有可能把别的程序的内存也给回收了,比方说把操作系统的内存给回收了,则操作系统崩溃。

    第三代计算机的操作系统仍然是批处理

    许多程序员怀念第一代独享的计算机,可以即时调试自己的程序。为了满足程序员们很快可以得到响应,出现了分时操作系统

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

    分时操作系统:
    多个联机终端+多道技术

    20个客户端同时加载到内存,有17在思考,3个在运行,cpu就采用多道的方式处理内存中的这3个程序,由于客户提交的一般都是简短的指令而且很少有耗时长的,索引计算机能够为许多用户提供快速的交互式服务,所有的用户都以为自己独享了计算机资源

    CTTS:麻省理工(MIT)在一台改装过的7094机上开发成功的,CTSS兼容分时系统,第三代计算机广泛采用了必须的保护硬件(程序之间的内存彼此隔离)之后,分时系统才开始流行

    MIT,贝尔实验室和通用电气在CTTS成功研制后决定开发能够同时支持上百终端的MULTICS(其设计者着眼于建造满足波士顿地区所有用户计算需求的一台机器),很明显真是要上天啊,最后摔死了。

    后来一位参加过MULTICS研制的贝尔实验室计算机科学家Ken Thompson开发了一个简易的,单用户版本的MULTICS,这就是后来的UNIX系统。基于它衍生了很多其他的Unix版本,为了使程序能在任何版本的unix上运行,IEEE提出了一个unix标准,即posix(可移植的操作系统接口Portable Operating System Interface)

    后来,在1987年,出现了一个UNIX的小型克隆,即minix,用于教学使用。芬兰学生Linus Torvalds基于它编写了Linux

    第四代计算机(1980~至今):个人计算机


    *一堆借鉴*
    *找不到源头*
  • 相关阅读:
    MYSQL数据丢失讨论【转】
    MySQL 5.6 新功能之 Index Condition Pushdown (ICP)
    MySQL Binlog 【ROW】和【STATEMENT】选择
    MySQL open_files_limit相关设置
    Python颜色输出和random的学习
    Python 之 【二进制、十进制、八进制、十六进制 】之间的转换【转】
    初识 MySQL 5.5 新功能、参数
    Oracle Inventory关键词解释
    plsql 输出当月的所有日期
    ORA29279: SMTP permanent error: 550 XXX@XX.com... No such user
  • 原文地址:https://www.cnblogs.com/jevious/p/11402239.html
Copyright © 2020-2023  润新知