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

    计算机的基本组成

       计算机主要要CPU与内存以及IO总线三个核心设备,加上外部设备(例如硬盘、显示器、鼠标键盘等)组成;

      当前的计算机常见架构如下:

      CPU:CPU包括运算器、控制器与寄存器;其中运算器为核心设备,它用来进行数据运算,控制器则是用来处理控制指令,同时为了实现线路复用技术,我们需要保存先输入进来的加数,等待被加数输入进来后进行运算,而用来存储加数的空间我叫做寄存器;

      北桥:高速总线控制器,需要高速形成数据交换,它是用来连接内存与CPU的;【现在的架构的内存直接连接到CPU了,北桥芯片则直接连接硬盘(固态硬盘)】

      南桥:低速总线控制器,它是用来连接IO设备的,然后在连接到北桥芯片上;

      加电自检:我们说内存空间在计算机启动的时候是没有数据的,而计算机是如何启动的呢?在计算机启动的时候,电脑内置的BIOS芯片会将一段默认代码加载到内存中,提供给CPU读取,这段代码实现的是CPU对于关联硬件设备的检测功能,比如硬盘是否正常、主板是否正常等,这个过程我们就叫做加电自检;

    应用程序与CPU架构

      程序:由指令是数据完成某些特定功能呢的代码,我就叫做程序;指令控制由CPU控制器来完成,而数据运算则由CPU运算器来完成;计算在读取数据的时候哪些数据才是这段程序需要的呢?这些都由控制器来决定;

      CPU架构:复杂指令集:intel和AMD  以及  精简指令集:IBM和ARM

      intel和AMD为x86架构,而IBM则为PowerPC架构,ARM为自己的ARM架构,M68K摩托罗拉;

      【Linux系统支持所有的CPU架构类型】

      程序移植:我们知道,程序的运行都是依赖于硬件设备,也就是我们的CPU,而不同厂家生产的CPU架构是不一样的,这样的话,也许这个CPU上能运行的代码移植到别的厂家CPU上就运行不了了。为了避免这种情况,第一种方法就是使用汇编语言来编写程序,这种低级别语言在CPU读取上没有太多的困难,但是对于程序员而言,想要读懂就不太容易了。第二种方式则是通过CPU的微码(microcode)来解决,微码是汇编语言的一种编辑器,每个厂家为自己的CPU生产对应的微码,但是这种方式依然不能很好解决程序移植的问题,于是就出现了高级语言。

      高级语言:高级语言通过调用系统提供的API(应用编程接口),很好的避免了程序直接和硬件打交道,这样的话,只需要系统上运行的API,或者说库文件一致,就能够支持高级语言的运行,就很好的解决了程序移植的问题;

    操作系统介绍

      我们知道程序是运行在操作系统之上的,但是操作系统本身也是一个程序,只不过,它是一种来搭载别的应用程序的一种平台而已;

    常见的操作系统

      windows系统,Linux系统,Unix:HP-UX/Solaris/aix,OS/2系统

    操作系统的工作流程

    jobs:计算机上完成的一个计算过程,我们叫一个作业;
    之后为了提高CPU的运算你过程,我们将多个作业同时加载到CPU上进行处理,这个过程就叫做批处理;比如:job1$job2$job3,当CPU读取到$后就发现前一个作业完成,开始进行后一个作业;
    多任务:为了使多个jobs同时运行,我们将CPU按照时间来区分slice,一个slice假设为5ms,则job每5ms来运行一次,此时,程序运行时间断的,所以我们需要保存现场,这个过程就由我们的进程来完成;memory和CPU一样需要分段来使用;
     
    操作系统:运行在硬件上,用来管理硬件资源的一个软件;它还需要完成程序的启动终止和资源回收的过程;它说白了就是一种软件,它不负责具体的工作,而是用来协调其他软件的一种软件程序;
     
    库:程序为了在各个硬件上面运行,需要调用库文件;
    system call系统调用:程序需要使用硬件资源,必须通过操作系统,而操作系统提供system call的接口去调用,而system call就是内核的一种调用资源的机制;
    系统调用是非常底层的东西,而具体的体现形式由程序员决定,程序员可以自己开发自己具体想要的东西,但是这很麻烦,如果你真的只是想要“馒头”,这时候就直接开发一个库,最后调用库即可;

       shell:为人机交互接口!!!

    操作系统的发展历史

    早期开发操作系统初衷是实现批处理功能,而早期的批处理系统无法发挥硬件的全部功能,于是三个公司开始开发多任务多进程的系统,这三个公司为GE通用电气-BELL贝尔实验室-MIT麻省理工大学;于是在1970年的时候诞生了第一个操作系统multics系统;
    系统开发完成以后,他们失去了原本的目标,于是GE和BELL退出了这个项目,其中BELL一个年轻的科学家ken thompson,他为了运行自己space travel的游戏向公司申请购买一台计算机系统,而被公司拒绝;此时,他基于DEC(美国数字设备)公司开发的PDP-7(当时最好的是PDP-11)系统开发了自己的系统,用来运行space travel,这就是我们后面的Unix系统;而DEC公司还有一个系统(vmx)我们之后再说它!
    ken除了是Unix系统的发明者,他还是C语言的发明者;1973年C语言被发明,ken和他的同事Ritchie迫不及待的通过C语言重写了Unix系统;
    因为对计算机行业的巨大贡献,ken获得了一年的带薪年假,在这段时间里面,他来到了加州大学伯克利分校任教;而在这个学校里面有个杰出的学生Bill Joy(SUN的创始人),他组织了BSRG,并且在ken的带领下BSRG开发了一个新的系统BSD(和Unix相近)。此时BSD商业化,开始售卖赚钱;而Unix系统的所有者BELL实验室在被Novell公司收购后也开始售卖,并由于代码相近的原因,两者之间因为版权问题,打了十年的官司,而在这十年里面,我们新的IT巨头悄悄发展起来,它就是Mircosoft;
    1981年个人PC机的兴起为微软带了商机,他借助母亲的关系,将转轴买来的的CP/M系统敲敲打打后,也就是我们后来为人所知的DOS系统,转手卖给了IBM;此时PC机市场有着一个巨无霸,那就是jobs的苹果公司;苹果Apple1系统基于Unix开发,要远远强于DOS系统,同时jobs在Xerox公司的PARC实验室那看到了鼠标与图形界面的开发,它从Xerox公司购买到了图形界面,而比尔盖茨则假装帮助jobs开发图形界面。而得到图形界面的比尔盖茨将自己的DOS从新开发,这就是我们的windows系统!
    windows系统可以说在系统行业属于非常差的系统,经常蓝屏,比尔盖茨为了解决这个问题,推导了原本CP/M的框架从新使用了DEC的vmx系统作为底层开了一个新的系统,这就时候我们的windows NT;
    十年后,当Microsoft非常强大以后,BSD和Unix停止了官司,开始发展自己的系统,其中BSD开发了FreeBSD OpenBSD NetBSD;与此同时,Bill Joy则在这时候成立了自己的小型机系统SUN OS,也就是我们后面所知道的Solaris;SUN 2001年被oracle收购;*SUN为我们的Linux引入了CSHELL;而基于Unix系统则各个厂家开发了自己的系统例如上面说到的solaris,以及IBM的AIX和惠普的HP-Unix;
     此时的系统市场已经高度商业化;Unix、BSD商业化以后,大学里面就无法在使用这些系统教学了,此时,荷兰大学的一个教授Andrew开发了自己系统Minix系统。此时有个学生linus想使用Minix系统,但是想修改minix里面的一些驱动程序,所以自己开发了一个Linux系统;此时和80年代的一个stallman发起了freedom计划,也就是GNU计划,GNU is not unix;GPL宣言也由此诞生,General Public License;Emacs/gcc(GNU C Complier)也就是GNU计划提供的软件;
     我们说此时的GNU/Linux系统只是C语言的源代码程序,而想要运行起来就必须对这些C语言程序进行编译;而为了兼容各种CPU硬件架构,这是就出现了一些第三方公司,来开发Linux的打包程序的公司:其中包括RedHat SLS Debian SUSE,他们只是将Linux的源代码进行编译,能够让Linux系统在各种硬件上面运行,这些厂家就叫做Linux的发行商
    GPL的发展LGPL-GLPv2-GPLv3
    *Apache*、*BSD* 相对于GPL协议而言更加开放,更加自由;而Linux内核遵循的就是GPL协定;
    centos:community enterprise OS 社区企业操作系统,它是社区版的红帽;
    fedora:为红帽系统的个人版本;
    mandriva:为红帽的图形系统;
    SUSE --> Novell(netware),OpenSUSE
    Debian 它是唯一一个不受商业组织维护的操作系统
    Ubuntu 基于Debian的二次发型版 mint是Ubuntu的二次发型版本
    Linux的内核版本:www.kernel.org
    RHEL:3.0 4.0 5.0 6.0 7.0 这是红帽系统的发型版本
  • 相关阅读:
    UVA 11925 Generating Permutations 生成排列 (序列)
    UVA 1611 Crane 起重机 (子问题)
    UVA 11572 Unique snowflakes (滑窗)
    UVA 177 PaperFolding 折纸痕 (分形,递归)
    UVA 11491 Erasing and Winning 奖品的价值 (贪心)
    UVA1610 PartyGame 聚会游戏(细节题)
    UVA 1149 Bin Packing 装箱(贪心)
    topcpder SRM 664 div2 A,B,C BearCheats , BearPlays equalPiles , BearSorts (映射)
    UVA 1442 Cave 洞穴 (贪心+扫描)
    UVA 1609 Foul Play 不公平竞赛 (构(luan)造(gao)+递归)
  • 原文地址:https://www.cnblogs.com/BurnovBlog/p/10307604.html
Copyright © 2011-2022 走看看