• DAY 25 PYTHON入门


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

    二、操作系统与普通软件的区别
    1.主要区别是:你不想用暴风影音了你可以选择用迅雷播放器或者干脆自己写一个,但是你无法写一个属于操作系统一部分的程序(时钟中断处理程序),操作系统由硬件保护,不能被用户修改。
    2.操作系统与用户程序的差异并不在于二者所处的地位。特别地,操作系统是一个大型、复杂、长寿的软件,

    现代的计算机系统主要是由一个或者多个处理器,主存,硬盘,键盘,鼠标,显示器,打印机,网络接口及其他输入输出设备组成。
    一般而言,现代计算机系统是一个复杂的系统。
    其一:如果每位应用程序员都必须掌握该系统所有的细节,那就不可能再编写代码了(严重影响了程序员的开发效率:全部掌握这些细节可能需要一万年....)
    其二:并且管理这些部件并加以优化使用,是一件极富挑战性的工作,于是,计算安装了一层软件(系统软件),称为操作系统。它的任务就是为用户程序提供一个更好、更简单、更清晰的计算机模型,并管理刚才提到的所有设备。

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

    三、操作系统发展史
    第一代计算机(1940~1955):真空管和穿孔卡片
    特点:
    没有操作系统的概念
    所有的程序设计都是直接操控硬件

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

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

    缺点:
    浪费计算机资源,一个时间段内只有一个人用。

    注意:同一时刻只有一个程序在内存中,被cpu调用执行,比方说10个程序的执行,是串行的


    第二代计算机(1955~1965):晶体管和批处理系统
    第二代计算机的产生背景:
    由于当时的计算机非常昂贵,自认很自然的想办法较少机时的浪费。通常采用的方法就是批处理系统。

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

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

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

    现代操作系统的前身:(见图)

    优点:批处理,节省了机时

    缺点:
    1.整个流程需要人参与控制,将磁带搬来搬去
    2.计算的过程仍然是顺序计算-》串行
    3.程序员原来独享一段时间的计算机,现在必须被统一规划到一批作业中,等待结果和重新调试的过程都需要等同批次的其他程序都运作完才可以(这极大的影响了程序的开发效率,无法及时调试程序)

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

    如何解决第二代计算机的问题2:
    第三代计算机的操作系统广泛应用了第二代计算机的操作系统没有的关键技术:多道技术
    多道技术:
    多道技术中的多道指的是多个程序,多道技术的实现是为了解决多个程序竞争或者说共享同一个资源(比如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

    进程:动态概念,指正在运行的程序。
    程序:静态概念,指一系列的代码文件。


    批处理操作系统:串行

    多道计数:
    1.空间上的复用
    2.时间上的复用
    cpu在多个进程/人物之间快速切换
    1、遇到io切
    2、占用时间过长也切

    管道:共享内存

    分时操作系统:分时系统(英语:time-sharing)是计算机科学中对资源的一种共享方式,利用多道程序与多任务处理使多个用户可以同时使用一台计算机。
    分时的概念出现于1960年代,在1970年代作为一种杰出的模型引发了计算机历史上的一次重大技术革新。通过在多个用户之间共享计算机资源,此技术极大地降低了计算资源的成本,让个人和组织可以在不实际拥有计算机的情况下使用计算机。[2]分时系统还对交互式计算机起到了推广作用,促进了交互式软件的开发进程。
    一般来说,计算机用户(可以是多个)通过特定的端口向计算机发送指令,计算机完成相应任务后再将结果通过端口反馈给用户。在早期的计算机系统中,计算机处理多个用户发送出的指令的时候,处理的方案即为分时,即计算机把它的运行时间分为多个时间段,并且将这些时间段平均分配给用户们指定的任务。轮流地为每一个任务运行一定的时间,如此循环,直至完成所有任务。
    这种使用分时的方案为用户服务的计算机系统即为分时系统。

    MULTICS: 名称来自于多任务信息与计算系统(英语:MULTiplexed Information and Computing System)的缩写,它是一套分时多任务操作系统,是1964年由贝尔实验室、麻省理工学院及美国通用电气公司所共同参与研发,并安装在大型主机上。最后一个装有Multics的计算机已于2000年10月30日关闭。通过UNIX,几乎所有现代操作系统都深受Multics的影响,无论是直接 (Linux, OS X)或间接(Microsoft Windows)。
    MULTICS以兼容分时系统(CTSS)做基础,建置在美国通用电力公司的大型机GE-645上。目的是连接1000部终端,支持300位用户同时上线。1969年,因MULTICS项目的工作进度过于缓慢,最后终究遭裁撤的命运,贝尔实验室由此退出此项目。当时,肯·汤普逊正在撰写一个称为“星际旅行”(Space Travel)的游戏程序。贝尔实验室退出Multics计划后,由贝尔实验室的两位软件工程师肯·汤普逊与丹尼斯·里奇以C语言为基础而发展出UNIX。通用电气及麻省理工学院仍继续开发Multics,并最终成为商业产品,由霍尼韦尔销售。

    UNIX: UNIX(非复用信息和计算机服务,英语:Uniplexed Information and Computing Service,UnICS),一种多用户、多进程的计算机操作系统,源自于从20世纪70年代开始在美国AT&T公司的贝尔实验室开发的AT&T Unix。

    MINIX: Minix,是一个迷你版本的类Unix操作系统,由塔能鲍姆教授为了教学之用而创作,采用微核心设计。它启发了Linux核心的创作。它的名称取自英语:Mini UNIX的缩写。与Xinu、Idris、Coherent和Uniflex等类Unix操作系统类似,派生自Version 7 Unix,但并没有使用任何AT&T的代码。第一版于1987年发布,只需要购买它的磁片,就提供完整的源代码给大学系所与学生,做为授课及学习之用。2000年4月,重新以BSD许可协议发布,成为开放源代码软件。

    LINUX: Linux(/ˈlɪnəks/ LIN-əks)是一种自由和开放源码的类UNIX操作系统。该操作系统的内核由林纳斯·托瓦兹在1991年10月5日首次发布,在加上用户空间的应用程序之后,成为Linux操作系统。Linux也是自由软件和开放源代码软件发展中最著名的例子。只要遵循GNU 通用公共许可证(GPL),任何个人和机构都可以自由地使用Linux的所有底层源代码,也可以自由地修改和再发布。大多数Linux系统还包括像提供GUI的X Window之类的程序。除了一部分专家之外,大多数人都是直接使用Linux 发行版,而不是自己选择每一样组件或自行设置。

    GITHUB: GitHub是通过Git进行版本控制的软件源代码托管服务平台,由GitHub公司(曾称Logical Awesome)的开发者Chris Wanstrath、PJ Hyett和Tom Preston-Werner使用Ruby on Rails编写而成。
    GitHub同时提供付费账户和免费账户。这两种账户都可以创建公开或私有的代码仓库,但付费用户支持更多功能。根据在2009年的Git用户调查,GitHub是最流行的Git访问站点。除了允许个人和组织创建和访问保管中的代码以外,它也提供了一些方便社会化共同软件开发的功能,即一般人口中的社区功能,包括允许用户追踪其他用户、组织、软件库的动态,对软件代码的改动和bug提出评论等。GitHub也提供了图表功能,用于概观显示开发者们怎样在代码库上工作以及软件的开发活跃程度。
    截止到2015年,GitHub已经有超过2800万注册用户和5700万代码库,事实上已经成为了世界上最大的代码存放网站和开源社区。2018年6月4日晚,美国科技公司微软宣布以75亿美元的股票收购GitHub。

    1个CPU并行一个,并发多个

    并发》》》》》》
    并行》》》》》》》 进程如何运行
    串行》》》》》》

    一个任务运行的三种状态:
    运行态(遇到io)******
    阻塞态
    就绪态*****
    非阻塞态:运行、就绪

    提交任务的两种方式:
    1.同步:点外卖(原地等运行完)
    2.异步:快递

    异步非阻塞:运行效率最快(两个概念)
    内存空间相互隔离

  • 相关阅读:
    Java高并发学习笔记(四):volatile关键字
    Java高并发学习笔记(三):类加载
    Java高并发学习笔记(二):线程安全与ThreadGroup
    解决druid在OpenJDK11+Gradle中的依赖问题
    解决AUR无法正常升级WebStorm2021.1.1的问题
    论软件体系架构之质量属性
    以《淘宝网》为例,描绘质量属性的六个常见属性场景
    软件架构师如何工作
    泰坦尼克号数据分析
    当当网图书数据爬取和清洗
  • 原文地址:https://www.cnblogs.com/DEJAVU888/p/14298185.html
Copyright © 2020-2023  润新知