计算机相关语言、系统、软件出现顺序

图灵机Turing machine/stored-program computer

1940s,图灵机就是指一个抽象的机器,它有一条无限长的纸带,纸带分成了一个一个的小方格,每个方格有不同的颜色。有一个机器头在纸带上移来移去。机器头有一组内部状态,还有一些固定的程序。在每个时刻,机器头都要从当前纸带上读入一个方格信息,然后结合自己的内部状态查找程序表,根据程序输出信息到纸带方格上,并转换自己的内部状态,然后进行移动。

汇编语言(assembly language)

Assembly languages date to the introduction of the stored-program computer.程序存储计算机 The first assembly language was developed in 1947 by Kathleen Booth for the ARC2 at Birkbeck, University of London following work with John von Neumann and Herman Goldstine at the Institute for Advanced Study.The Electronic Delay Storage Automatic Calculator (EDSAC) had an assembler (named "initial orders") integrated into its bootstrap program that used one-letter mnemonics in late 1948 developed by David Wheeler and credited by the IEEE Computer Society as the creator of the first "assembler."Reports on the EDSAC introduced the term "assembly" for the process of combining fields into an instruction word.SOAP (Symbolic Optimal Assembly Program) was an assembly language for the IBM 650 computer written by Stan Poley in 1955

 x86把用宏汇编语言编写的源程序翻译成目标程序的工作是由宏汇编程序来完成的。
 

汇编语言典型应用

  • 计算机boot系统使用。Assembly language is typically used in a system's boot code, the low-level code that initializes and tests the system hardware prior to booting the operating system and is often stored in ROM. (BIOS on IBM-compatible PC systems and CP/M is an example.)
  • 有些编译器在编译前将目标语言翻译成汇编语言,为了调试及优化。Some compilers translate high-level languages into assembly first before fully compiling, allowing the assembly code to be viewed for debugging and optimization purposes.
  • 低层级语言编程允许汇编语言嵌入程序,针对不同硬件环境使用不同汇编语言,系统可通过统一接口调用。Some compilers for relatively low-level languages, such as Pascal or C, allow the programmer to embed assembly language directly in the source code. Programs using such facilities can then construct abstractions using different assembly language on each hardware platform. The system's portable code can then use these processor-specific components through a uniform interface.
  • 用于反向工程???Assembly language is useful in reverse engineering. Many programs are distributed only in machine code form which is straightforward to translate into assembly language, but more difficult to translate into a higher-level language. Tools such as the Interactive Disassembler make extensive use of disassembly for such a purpose. This technique is used by hackers to crack commercial software, and competitors to produce software with similar results from competing companies.
  • Assembly language is used to enhance speed of execution, especially in early Personal Computers with limited processing power and RAM.
  • Assemblers can be used to generate blocks of data, with no high-level language overhead, from formatted and commented source code, to be used by other code.

UNIX系统

1965年时,贝尔实验室(Bell Labs)加入一项由通用电气(General Electric)和麻省理工学院(MIT)合作的计划;该计划要建立一套多使用者、多任务、多层次(multi-user、multi-processor、multi-level)的MULTICS(Multiplexed Information and Computing Service)操作系统。直到1969年,因MULTICS计划的工作进度太慢,该计划被停了下来。当时,Ken Thompson(后被称为UNIX之父)已经有一个称为"星际旅行"的程序在GE-635的机器上跑,但是反应非常慢,正巧被他发现了一部被闲置的PDP-7(Digital的主机),Ken Thompson和Dernis Ritchie就将"星际旅行"的程序移植到PDP-7上。

Brian Kernighan就开玩笑地称他们的系统其实是:"UNiplexed Information and Computing Service",缩写为"UNICS",后来,大家取其谐音,就称其为"UNIX"了。1970年可称为"UNIX元年"。

1971年,Ken Thompson写了充分长篇的申请报告,申请到了一台PDP-11/24的机器。于是Unix第一版出来了。在一台PDP-11/24的机器上完成。这台电脑只有24KB的物理内存和500K磁盘空间。Unix占用了12KB的内存,剩下的一半内存可以支持两用户进行Space Travel的游戏。而著名的fork()系统调用也就是在这时出现的。

C语言

到了1973年的时候,Ken Thompson 与Dennis Ritchie感到用汇编语言做移植太过于头痛,他们想用高级语言来完成第三版,对于当时完全以汇编语言来开发程序的年代,他们的想法算是相当的疯狂。一开始他们想尝试用Fortran,可是失败了。后来他们用一个叫BCPL(Basic Combined Programming Language)的语言开发,他们整合了BCPL形成B语言,后来Dennis Ritchie觉得B语言还是不能满足要求,于是就改良了B语言,这就是今天的大名鼎鼎的C语言。于是,Ken Thompson 与Dennis Ritchie成功地用C语言重写了Unix的第三版内核。至此,Unix这个操作系统修改、移植相当便利,为Unix日后的普及打下了坚实的基础。而Unix和C完美地结合成为一个统一体,C与Unix很快成为世界的主导。

Unix的第一篇文章 “The UNIX Time Sharing System”由Ken Thompson和Dennis Ritchie于1974年7月的 The Communications of the ACM发表。这是UNIX与外界的首次接触。结果引起了学术界的广泛兴趣并对其源码索取,所以,Unix第五版就以“仅用于教育目的”的协议,提供给各大学作为教学之用,成为当时操作系统课程中的范例教材。各大学公司开始通过Unix源码对Unix进行了各种各样的改进和扩展。于是,Unix开始广泛流行。

BIOS(Basic Input Output System)

中文名称就是"基本输入输出系统"。在IBM PC兼容系统上,是一种业界标准的固件接口。BIOS这个字眼是在1975年第一次由CP/M操作系统中出现。BIOS是个人电脑启动时加载的第一个软件。

其实,它是一组固化到计算机主板上一个ROM芯片上的程序,它保存着计算机最重要的基本输入输出的程序、开机后自检程序和系统自启动程序,它可从CMOS中读写系统设置的具体信息 其主要功能是为计算机提供最底层的、最直接的硬件设置和控制。此外,BIOS还向作业系统提供一些系统参数。系统硬件的变化是由BIOS隐藏,程序使用BIOS功能而不是直接控制硬件。现代作业系统会忽略BIOS提供的抽象层并直接控制硬件组件。

BIOS设置程序是储存在BIOS芯片中的????,BIOS芯片是主板上一块长方形或正方形芯片,只有在开机时才可以进行设置。(一般在计算机启动时按F2或者Delete进入BIOS进行设置,一些特殊机型按F1、Esc、F12等进行设置)。BIOS设置程序主要对计算机的基本输入输出系统进行管理和设置,使系统运行在最好状态下,使用BIOS设置程序还可以排除系统故障或者诊断系统问题。有人认为既然BIOS是"程序",那它就应该是属于软件,感觉就像自己常用的Word或Excel。但也有很多人不这么认为,因为它与一般的软件还是有一些区别,而且它与硬件的联系也是相当地紧密。形象地说,BIOS应该是连接软件程序与硬件设备的一座"桥梁",负责解决硬件的即时要求。主板上的BIOS芯片或许是主板上唯一贴有标签的芯片,一般它是一块32针的双列直插式的集成电路,上面印有"BIOS"字样。

DOS(Disk Operating System)磁盘操作系统

磁盘操作系统是1979年由微软公司IBM个人电脑开发的MS-DOS,它是一个单用户单任务的操作系统。后来DOS的概念也包括了其它公司生产的与MS-DOS兼容的系统,如PC-DOS  、DR-DOS, 等。它们在1985年到1995年及其后的一段时间内占据操作系统的统治地位,最著名和广泛使用的DOS系统从1981年直到1995年的15年间微软在推出Windows 95之后,宣布MS-DOS不再单独发布新版本。不过FreeDOS等与MS-DOS兼容的DOS则在继续发展着。

虽然大多数用户将1981年最早发表的术语“PC”与IBM PC或PC兼容机等同看待, 但是实际上个人计算机在1970年已经开始使用。DOS是IBM PC及其兼容机用的操作系统。在DOS之前,一些微机为其操作系统使用内部BASIC编程语言,而另外一些使用Digital Research公司开发的CP/M操作系统(此公司提供了DR DOS)。Microsoft公司于1970年后开发了MS-DOS,当时,该公司为不同微机开发了像BASIC这类编程语言;1980年IBM正在设计最早的IBM PC并请Microsoft为其新型机开发多个编程语言。这次CP/M作为选择的操作系统并成为IBM新机种的操作系统。在Microsoft为IBM PC 设计语言的过程中,尽管Microsoft公司改进了IBM PC的语言设计和应用程序设计,但是他们认识到开发PC操作系统才是其努力方向。然而,由于没有足够的时间从零开始开发一个操作系统。为解决这个问题,Microsoft购买了一个用于8086处理器操作系统86-DOS,86-DOS操作系统是西雅图电脑产品公司(Seattle Computer Products)的一名24岁的程序员蒂姆·帕特森(Tim Paterson)花费了四个月时间编的,该操作系统与最早的IBM PC中的8086处理器非常相似。给每台IBM电脑安装一个DOS系统,微软就收取200美金的商业运作模式,造就了微软的初期辉煌。

DOS模块和层次

         

Windows操作系统

Microsoft Windows,是美国微软公司研发的一套操作系统,它问世于1985年,起初仅仅是Microsoft-DOS模拟环境,后续的系统版本由于微软不断的更新升级,不但易用,也慢慢的成为家家户户人们最喜爱的操作系统。

Windows采用了图形化模式GUI,比起从前的DOS需要键入指令使用的方式更为人性化。随着电脑硬件和软件的不断升级,微软的Windows也在不断升级,从架构的16位、16+32位混合版(Windows9x)、32位再到64位, 系统版本从最初的Windows 1.0 到大家熟知的Windows 95Windows 98Windows MEWindows 2000Windows 2003Windows XPWindows VistaWindows 7Windows 8Windows 8.1、Windows 10 和 Windows Server服务器企业级操作系统,不断持续更新,微软一直在致力于Windows操作系统的开发和完善。现在最新的正式版本是Windows 10。

GNU编译器套件GCC

GNU编译器套件GCC(GNU Compiler Collection)。GCC的初衷是为GNU操作系统专门编写的一款编译器。

原本只能处理 C语言。扩展可处理 C++。后来又扩展如FortranPascalObjective-CJavaAdaGo以及各类处理器架构上的汇编语言等,所以改名GNU编译器套件(GNU Compiler Collection)。也包括了这些语言的库(如libstdc++、libgcj等等)。

GNU系统是彻底的自由软件。此处,“自由”的含义是它尊重用户的自由。

1985年Richard Stallman又创立了自由软件基金会(Free Software Foundation)来为GNU计划提供技术、法律以及财政支持。尽管GNU计划大部分时候是由个人自愿无偿贡献,但FSF有时还是会聘请程序员帮助编写。当GNU计划开始逐渐获得成功时,一些商业公司开始介入开发和技术支持。当中最著名的就是之后被Red Hat兼并的 Cygnus Solutions。

到了1990年,GNU计划已经开发出的软件包括了一个功能强大的文字编辑器EmacsGCC(GNU Compiler Collection,GNU编译器集合),是一套由 GNU 开发的编程语言编译器。以及大部分UNIX系统的程序库和工具。唯一依然没有完成的重要组件就是操作系统的内核(称为HURD)。

1991年Linus Torvalds编写出了与UNIX兼容的Linux操作系统内核并在GPL条款下发布。Linux之后在网上广泛流传,许多程序员参与了开发与修改。1992年Linux与其他GNU软件结合,完全自由的操作系统正式诞生。该操作系统往往被称为“GNU/Linux”或简称Linux。(尽管如此GNU计划自己的内核Hurd依然在开发中,已经发布Beta版本。)

GNU 认为任何软件都应当以 自由软件 发布。要让一个软件成为自由软件,您需要把它以自由软件许可证发布。我们通常使用 GNU 通用公共许可证 (GNU GPL) 发布软件,但有时我们也使用 其它自由软件许可证 发布软件。在 GNU 软件包中,GNU 只使用与GNU GPL兼容的许可证。

GPL协议条款:GNU通用公共许可证(GNU General Public License)。这里指的自由,并不是价格免费,这和价格无关而是使用软件对所有的用户来说是自由的。

GPL通过如下途径实现这一目标:

1.它要求软件以源代码的形式发布,并规定任何用户能够以源代码的形式将软件复制或发布给别的用户。

2.如果用户的软件使用了受 GPL 保护的任何软件的一部分,那么该软件就继承了 GPL 软件,并因此而成为 GPL 软件,也就是说必须随应用程序一起发布源代码。

3.GPL 并不排斥对自由软件进行商业性质的包装和发行,也不限制在自由软件的基础上打包发行其他非自由软件。

由于GPL很难被商业软件所应用,它要求调用它的库的代码也得GPL,全部开放,并且一同发布,不能直接连接。所以后来GNU推出了LGPL许可证

在GPL与LGPL许可证保护下发布源代码的结果很相似,对旧代码所做的任何修改对于想知道这些代码的人必须是公开的,唯一真正的不同之处在于私人版权代码是否可以与开放源代码相互连接,LGPL允许实体连接私人代码到开放源代码,并可以在任何形式下发布这些合成的二进制代码。只要这些代码是动态连接的就没有限制。(使用动态链接时,即使是程序在运行中调用函数库中的函数时,应用程序本身和函数库也是不同的实体)

μC/OS II(Micro-Controller Operating System Two)

μC/OS-II实时多任务操作系统内核。它被广泛应用于微处理器、微控制器和数字信号处理器。 μC/OS-II 的前身是μC/OS,最早出自于1992 年美国嵌入式系统专家Jean J.Labrosse 在《嵌入式系统编程》杂志的5 月和6 月刊上刊登的文章连载,并把μC/OS 的源码发布在该杂志的BBS上。

是一个可以基于ROM运行的、可裁剪的、抢占式、实时多任务内核,具有高度可移植性,特别适合于微处理器控制器,适合很多商业操作系统性能相当的实时操作系统(RTOS)。为了提供最好的移植性能,μC/OS II最大程度上使用ANSI C语言进行开发,并且已经移植到近40多种处理器体系上,涵盖了从8位到64位各种CPU(包括DSP)。 μC/OS II可以简单的视为一个多任务调度器,在这个任务调度器之上完善并添加了和多任务操作系统相关的系统服务,如信号量、邮箱等。其主要特点有公开源代码,代码结构清晰、明了,注释详尽,组织有条理,可移植性好,可裁剪,可固化。内核属于抢占式,最多可以管理60个任务。从1992年开始,由于高度可靠性、鲁棒性和安全性,μC/OS II已经广泛使用在从照相机到航空电子产品的各种应用中。

那么移植了μC/OS II的和原本的单片机、DSP的操作有何不同?指令之类的是否有区别?

μC/OS II是一个小型操作系统,单片机和DSP相当于小型PC的CPU,组合起来就是简易的PC机。开发者相当于二次开发。

如果不装μC/OS II,各种功能操作就要自己写。

计算机语言层级:

1、程序本体编码

下图程序用C语言编写,文本文件名为hello.c。

程序以每个字符的ASCII码方式存储在文件中,ASCII码是规范的文本(键盘上的字符)字符标准,适用于所有机器???

也就是在任意计算机中,查看该文本的存储器上的内容,都是这堆ACSSII码。

对于特殊字符(罗马)有统一字符集Unicode标准(如UTF-8UTF-16UTF-32)。与ASCII码兼容。

2、译码

程序以byte为单位存储在计算机中,不同机器编译同一段程序的机器代码(汇编代码)不同。

机器代码就是即将执行的程序代码,取指令的源,即hello.o。

p35.

3、为什么不同机器译码后的机器代码不同?

即hello.c相同,而hello.o不同?

见编译过程。

不同的CPU,不同的编译器,都会在编译过程中产生不同的代码。

4、举例(第三章)

在linux中用GCC编译器编译C程序。指令分别为:

以下关键代码分别为:C语言代码,汇编代码(ATT格式,其他格式:intel格式),机器代码。都非完整代码。

               

想要查看机器代码对应的程序功能,可采用反汇编命令:p115

问题:

机器代码采用什么规范?

计算机编程语言的六十年历史(1956-2016)

ASCII码:占一个字节的空间。

UTF-8编码:一个英文字符等于一个字节,一个中文(含繁体)等于三个字节。中文标点占三个字节,英文标点占一个字节

Unicode编码:一个英文等于两个字节,一个中文(含繁体)等于两个字节。中文标点占两个字节,英文标点占两个字节







国际单位制(SI):

1KB=1024B;1MB=1024KB=1024×1024B。

1B(byte,字节)= 8 bit(位,比特);

1KB(Kilobyte,千字节)=1024B= 2^10 B;

1MB(Megabyte,兆字节,百万字节,简称“兆”)=1024KB= 2^20 B;

1GB(Gigabyte,吉字节,十亿字节,又称“千兆”)=1024MB= 2^30 B;

1TB(Terabyte,万亿字节,太字节)=1024GB= 2^40 B;

1PB(Petabyte,千万亿字节,拍字节)=1024TB= 2^50 B;

1EB(Exabyte,百亿亿字节,艾字节)=1024PB= 2^60 B;

1ZB(Zettabyte,十万亿亿字节,泽字节)= 1024EB= 2^70 B;

1YB(Yottabyte,一亿亿亿字节,尧字节)= 1024ZB= 2^80 B;

1BB(Brontobyte,一千亿亿亿字节)= 1024YB= 2^90 B;

1NB(NonaByte,一百万亿亿亿字节) = 1024BB = 2^100 B;

1DB(DoggaByte,十亿亿亿亿字节) = 1024 NB = 2^110 B;

国际电工委员会的电气技术用字母符号标准IEC 60027-2IEC 80000-13

数据存储是以10进制表示,数据传输是以2进制表示

参考文献

1、wiki百科

2、《深入理解计算机系统》第三版

3、《DOS原理与结构》

4、世界第一台电子计算机 哔哩哔哩  https://www.bilibili.com/bangumi/play/ss21761/

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值