码迷,mamicode.com
首页 > 其他好文 > 详细

01 操作系统基础

时间:2019-01-23 11:37:17      阅读:197      评论:0      收藏:0      [点我收藏+]

标签:GPL协议   复杂   emacs   kernel   GNU C   image   有一个   style   公司   

---恢复内容开始---

计算机的基本组成

   计算机主要要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 这是红帽系统的发型版本

---恢复内容结束---

计算机的基本组成

   计算机主要要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 这是红帽系统的发型版本

01 操作系统基础

标签:GPL协议   复杂   emacs   kernel   GNU C   image   有一个   style   公司   

原文地址:https://www.cnblogs.com/BurnovBlog/p/10307604.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!