提兵百万西湖上,立马吴山第一峰!这篇文章主要讲述计算机与操作系统相关的知识,希望能为你提供帮助。
计算机的定义计算机是一个计算设备。现代意义的计算机是一种可编程机器,在用户给出输入时能自动并按顺序执行算术和逻辑运算,并在处理后提供所需的输出。
计算机的构成计算机由运算器、控制器、存储器、以及IO设备构成。当计算机需要运行一段程序时首先需要将程序读入内存中。程序包含了指令与数据,控制器从内存中获得控制指令,通过控制总线发出相应指令,而运算器从内存中提取数据,该数据通过数据总线传输至运算器中,由运算指令运算。
运算器和控制器构成了CPU的核心。除此之外,CPU还包含了寄存器,用于暂时存放数据的存储空间。现在CPU还通常有缓存机制(一级缓存、二级缓存、三级缓存)。
存储器通常就是指的内存(RAM)。内存是易失性存储介质,断电后即清空内容。
I/O设备,即输入/输出设备,包含鼠标、键盘、显示器。硬盘也可看作一种I/O设备。
现代计算机的各部件均集成在一块板子上,这块板子叫做主板。而我们的CPU,内存,各种I/O设备都插在主板上。主板分南北桥,北桥主要连接CPU和内存,需要大量数据高速交换,由高速总线控制器控制数据传输。以前的北桥为CPU与内存之间的总线,现在很多服务器将固态硬盘插到北桥提高速率。而南桥主要连接各种I/O设备如鼠标、键盘、硬盘等,由低速总线控制器将数据汇总后,到北桥。
cpu的主频一般远高于内存,所以为了平衡这种情况,在cpu与内存之间增加了缓存机制,1/2/3级缓存,缓存的空间小那么距离CPU越近,其频率也就越高,造价也就越高。1级缓存之上的缓存就是寄存器了,其可以与CPU以相同的频率工作,1级缓存又分为指令缓存和数据缓存。
tips:cpu是如何知道是什么I/O设备在输入或输出?(敲击键盘如何知道是键盘而不是鼠标)
1、poll(轮询):每隔一段时间就询问相应设备是否有输入或输出,这种机制效率极低
2、interrupt(中断):硬件通知机制,由I/O设备通知CPU,CPU中有中断控制器实现。
计算机与操作系统1946年世界上第一台现代电子数字计算机ENIAC诞生,但是最初的计算机是没有操作系统的,人们通过各种按钮来控制计算机,后来出现了汇编语言,操作人员通过有孔的纸带将程序输入计算机进行编译。这些将语言内置的计算机只能由专业人员自己编写程序来运行,不利于程序、设备的共用。为了解决这种问题,就出现了操作系统。
操作系统的演变批处理系统
早期的cpu只有1个核,同时只能处理一件任务(job),为了更好的利用cpu计算能力,引入了批处理的概念。即将两个任务以某种分割符隔开,一个任务识别到该分割符后,即认为该任务完成,将载入后面的任务。如job1$$$$$$$$job2,当cpu读到连续的8个$符号时,就任务job1已经结束,可以继续job2了。
多程序系统
为了更好的利用cpu计算能力,又提出了多任务的概念,即同时进行多个任务。由于计算机只有一颗cpu和一份内存,需要将资源进行切割。如对于cpu在时间上进行切割,如上1秒执行job1,下一秒执行job2,再下一秒执行job1,如此反复。对内存,可以将内存分为多段,每个程序使用其中一段,每段单独编址。
tips: 32位系统为啥最大只能有4G内存。
地址总线:说到内存寻址,就不能不提地址总线(address bus),地址总线的宽度从根本上决定着有多少内存可以被访问
32位系统内存寻址:一个32位单元地址总线,理论上可寻址到2^32字节的内存,即4GB
64为系统内存寻址:一个64位单元地址总线,理论上可寻址到2^64字节的内存,即16EB(16000PB)
内存有一段空间是任何应用程序无法访问的,这段空间只能内核使用,叫做内核空间。其它空间叫做用户空间。
为了在cpu切换任务时保存每个任务产生的数据(用户切换来回时重新载入使用),提出了进程的概念,进程其实就是运行中的程序。
结合上诉内存操作系统可以理解为一种软件,其运行在硬件上,负责管理硬件资源,而且将硬件资源提供cpu计算能力切割成多个片,内存分配成不同的段,再将这些资源分配给不同的程序。
分时系统
为了使计算机能够由单个人变为多人同时操作使用,在1964年由Bell实验室(AT&
T)、MIT(麻省理工学院)、GE(通用电气公司)共同研发,开发一套安装在大型主机上的多人多工的操作系统,叫做multics。但是到1969年Bell实验室、GE退出。
现代通用系统
Unics由于Bell实验室的退出multics,Bell实验室的Ken Thompson不能继续使用multics,为了能够玩一款space travel的游戏,使用了PDP-7计算机(DEC公司产品,当时最新为PDP-11),以汇编语言(Assembler)写出了一组核心程序,被同事戏称为unics
tips:DEC(数字设备公司),早期很牛的一家公司,产品包括PDP和VAX系列。
Unix诞生【计算机与操作系统】早期Unics由于采用汇编语言实现,只能在PDP-7上运行,在其它产品上移植都需要重新编写
tips: 汇编语言的Unics为什么不具有可移植性?
程序的运行依赖cpu芯片的针脚的收放电(代表0或者1)来实现,所以计算机能认识的唯一语言叫做机器语言(由0或1构成)。所以为了方便开发程序,计算机的生产厂家,针对cpu芯片都会给出对应的微码,即汇编语言,开发者用汇编语言写的程序经过编译器翻译成机器语言来让计算机识别。而每家计算机生产厂家生产的cpu芯片的针脚数和类型也不尽相同,所以每种厂商的微码也不同,它跟硬件(cpu)强相关。所以在PDP-7上由其汇编语言写的操作系统无法再其它机器上运行。
1973年Dennis Ritchie等人以C语言(为了Unix由B语言改写来的)重写了unics,并命名为unix
tips: C语言写的unix为啥有良好的移植性
C语言是专门为了写unix而开发的语言,属于高级语言。不同的cpu使用汇编语言写出来具有相同功能的程序API,而C语言这类高级语言可以使用API将C代码翻译成对应类型CPU的汇编语言,再由其相应的编译器翻译成机器语言,因而有好的移植性。所以只要哪种厂商的cpu支持C语言的API,就能支持C语言写出的代码。
Unix的发展Unix属于Bell实验室的产品,Bell实验室属于AT&
T公司,1974年AT&
T受美国反垄断法的影响,除了电话电报业务,其它任何东西都不能卖钱,不仅不能卖钱,别人要还得给。所以Unix早期属于免费系统。
Unix的重要分支----BSD:加州大学伯克利(Berkeley)的Bill Joy以Unix核心原始码为基础,增加了很多工具软件与编译程序(如TCP/IP协议,虚拟内存,csh等),命名为Berkeley Software Distribution(BSD),由于太过成功,很多公司都购买BSD改造
Unix其它分支:由于没有版权纠纷,很多商业公司都有自己的Unix操作系统
1):IBM-->
AIX
2)
: SUN
-->
Solaris
(SUN由Bill Joy创立,其旗下产品Sun
Workstation
由于太过成功,重创了DEC公司)
3):HP -->
HP-UX
4)
:Microsoft -->
XENIX
System V:1984年AT&
T难逃被拆分,因而收回Unix版权,与BSD打官司(10年左右)。推出自己的Unix System V。一份copy 4w$
Linux的诞生当Unix和BSD打官司的10年中,由于版权问题,Unix处于一个停滞不前的状态。而这段时间涌现出的类似unix的系统,通常称为unix like系统。而其中最成功最有影响力的就是linux操作系统
1984 Andrew Tanenbaum写了Minix,但是仅用于教育上。
1991写出linus写出了linux,并将其放到互联网上。得益于自由软件于东的兴起,linux作为其重要组成部分的操作系统得到飞速发展,目前linux已经是当前使用最多的服务器以及安卓平台设备的操作系统。
计算机或操作系统厂商之间的爱恨纠葛:微软的第一桶金:80年代IBM PC诞生,当时一个PC 2w$而操作系统确要4w$。IBM使用cpu为 intel
80286(当时很垃圾),同期的unix操作系统一般装在摩托罗拉M68000芯片计算机上。当时的IBM可以使用CP/M系统,但是CP/M也需要2w一份。
西雅图一家公司一个程序员花4个月仿造CP/M写了86-DOS,被Bill Gates以5w$买断。由于Bill Gates的母亲是IBM董事会成员,所以拿到了IBM的合同,向IBM出售DOS系统,5美元一份。
早期的Apple使用powerpc CPU,操作系统使用BSD。由于产品特别漂亮,所以大卖。Jobs挖来了百事可乐总裁(你是想卖一辈子糖水还是跟着我去改变世界打动了他)。但是1985年jobs被赶出苹果,后jobs创办pix(后卖给迪士尼),1996年jobs回归苹果,开发了ipod,iphone等划时代产品
PARK:隶属于施乐公司,发明了GUI(图像操作系统),发明鼠标。施乐主要产品是复印机,施乐领导认为GUI都会用了,就不会有人打印机了。
Jobs得知GUI后,从施乐公司拿到一份copy后以此开发自己的MAC操作系统(核心还是BSD),现在的MAC也还是Free BSD
Bill Gates得知后取得Jobs信任,帮助Jobs开发,同时偷偷开发自己的windows操作系统。因为两家都是基于GUI,所以打官司也不了了之。
早期的windows经常蓝屏到windows
3.1改善很多。此时Unix和BSD官司中。
DEC公司有两大产品PDP和VAX-->
VMS操作系统
Unix发展起来后,客户要求安装Unix,所以VMS就没人用了,VMS的团队被Bill Gates挖到微软。以windows的基础上结合VMS的技术,开发了windows NT 、window 3.1 、95 、98、NT 2000 xp(NT后就有server版本了,这又重创了Novell公司的Netware)
IBM与微软很作开发了OS2,后来微软Windows NT大火,微软退出OS2,y由IBM独立研发。当apple越来越炫,windows越来越丑。微软买来OS2结合windows xp诞生了windows
vista ,win7 win8。
自由软件运动Richard
Stallman于1984年发起的自由软件运动,其核心是开发者免费发放自己代码,并且该代码具有获取自由,改编自由,分发自由,使用自由。其盈利模式为通过软件提供服务收取服务费。
早期自由软件组织有不少优秀软件如vi,gcc,emacs,但缺少free的操作系统搭载这些软件。所以当linux出来后,作为free的操作系统迅速流行于世界。
总结:自由软件
1、为任何目的运行程序的自由;
2、学习和修改源程序的自由;
3、重新分发程序的自由;
4、基于某源程序开发衍生版的自由;
操作系统的构成系统调用(system call)
任何程序不能跟硬件直接打交道,必须通过系统调用(内核提供),系统调用是非常底层的。shell通过系统调用跟内核打交道。
库
由于程序要想使用硬件资源就必须使用相应的系统调用,而一段程序往往不止需要1个资源,为了减少程序的开发难度,可以将1个或多个系统调用的功能封装起来,做成更高级的接口,这种高级接口叫做库。
静态编译:上层应用已经提前将库编译进程序了
动态编译:windows .dll文件,程序执行需要先调用库(glibc供c语言运
行提供的基本底层库
shell
shell(外壳)是一种特殊的应用程序,它提供一个界面可以接收使用者输入的指令提供给内核驱动硬件。
有两种shell:
GUI:Graphic User Interface,图形界面
CLI:
Command Line Interface,命令行界面
操作系统(计算机)的终极构成。
最底层就是各种硬件,往上为内核(操作系统核心,包含了各种system call),在之上就是各种库,最上面就是各种应用(其中最特殊也最重要的就是shell)
Linux发行版linux distribution
linux只是一组源程序,普通用户并不具备直接使用它进行系统安装。
linux内核编译的二进制程序(针对不同cpu平台)+安装程序(将linux编译后的二进制程序一步一步安装到指定磁盘空间),就变成所谓的linux Distribution(发行版)
linux distribution分类
Redhat系列:(Linux+ GNU +安装程序)CentOS为Redhat源代码二次编译来的。CentOS目前已被Redhat收购,作为其上游版本。
Slcakware:现存最古老的
Debian:稳定,社区维护,无公司 ubuntu是在debian的基础上二次开发的-->
mint 在ubuntu基础上二次开发的
SuSE
欧洲流行:
1)openSuSE
2)企业版
三大最流行的版本Redhat,Debian,SuSE。
如果是公司提供的Distribution,以提供服务来赚取利益。
补丁只提供源程序,需要付费才给编译后的二进制,否则只能自己去下载源程序,自己编译安装
Redhat版本
redhat 6.0 第一个出名的版本
redhat 8.0
redhat 9.0
2003以后不再维护 -->
Fedora(捐赠给这个组织)-->
最新到Fedora
30(redhat 最新的功能一般会先在fedora版本上使用)
RedHat Enterprise edition Linux 3,RHEL3(第一个有名的企业版)
RHEL5
RHEL7
RHEL8
LFS:Linux From Scratch,书,从零开始编译一个linux版本
linux内核版本
1.0-->
2.0-->
2.2-->
2.4-->
2.6-->
3.0
linux基本法则
1、一切皆文件;
2、体积短小且目的单一的程序;
3、组合小程序,完成复杂任务;
4、尽可能避免捕获用户接口;
5、配置数据保存至文本文件;
Unix之争后续BSD 4.3移除system v中的代码后性能一落千丈
BSD 4.4
Lite不再维护
第三方组织继续维护:
FreeBSD
OpenBSD
NetBSD
Unix这个名字被捐赠给开源组织
IBM:AIX
HP:HP-UX
SUN:Solaris
android: Linux kernel + java虚拟机
ios:
FreeBSD + ObjectC
计算机分类按CPU
1.ARM:只设计芯片,不生产设备,手机多用
2.x86:Inter,AMD
3.x86_64:
Inter,AMD
4.安腾64(intel收购的hp)
5.Alpha(HP):HP-UX
6.Power(IBM):AIX
7.UltraSparc(SUN):Solaris(被Orcal收购了)
8.M68000(摩托罗拉)
9.PowerPC(苹果):Apple,摩托罗拉,IBM联合生产
按操作系统
1.Windows
2.Linux
3.Unix:
1)HP-UX
2)Solaris
3) SCO
Unix
4)Unixware
4.OS/2
推荐阅读
- (5.2)苹果系统中数据隐藏Stego Sec使用方法原理分析
- 我在工作中是如何使用Git
- (5.1)苹果系统中的数据隐藏Spy Pix原理使用方法分析
- MBR分区无法扩容至2T以上解决办法(MBR更改为GPT无损扩容)
- 深入底层学git(目录中包含的秘密)
- 天猫精灵的自定义语音技能创建流程
- 简单介绍C#集合查询Linq在项目中使用详解
- WINDOWS编译JDK11
- 学习Linux须知1.1之Linux属性权限,以及解决你没有权限操作此文件