关于最近的一些困扰,包括计算机 软件等

有时候 ,做软件时间长了,总是有点困扰。由于做的是java, 处于高级语言的范围,自然会对计算机语言这个东西在社会发展的过程中处于什么样的地位而思考,能不能每写一句代码的时候,从最上层的抽象到最底层CPU硬件的运行有一个清晰

的思维,为什么会出现 计算机这个东西,计算机的出现对于社会的发展有什么用,或者说体现了什么样的社会地位。等等。

有时候想这种问题的时候总是要花费大量的时间来网上搜索,思考。总是想建立起一个自己对于软件,计算机这种事物的一种总体性的理解,总体性发展的了解以及总体性运行的清晰的思绪。

下面是各种各样的问题。

1》计算机为什么会出现这个问题?

看一下人类发展的历史,总是一个以方便人类生活为目的的一种轨迹。从原始社会到制度社会,到最初的工业时代。每一次重大的变革总是在偶然之间的。可以说,在计算机没有出现之前,人类总是会自己来计算一些问题,或者一些重复性的计算任务总是很繁琐。

特别是数学家,总是会有大量的计算存在,人力总是难以胜任。这时候,突然有人提出了一种计算模型,也就是图灵机或者冯诺依曼机,为的是将大量计算,重复性计算的很多计算任务交给这种机器来完成。

2》计算机出现。

人们根据之前的图灵机和冯诺依曼机的设计思想来实现它,当然也是伴随着硬件的发展,这时候计算机雏形出现,也就被造出来了。大概主要包括:cpu  内存  磁盘。

单台的计算机主要是以一个输入为开始,进行一系列的计算动作,从而产生具体的输出。各种各样的单台计算机出现,这时候突然有一个念头,如何将这些计算机连接起来,能够进行资源的共享,也就是这个计算机上面的资源能够发送到亮一台计算机,这是一个很伟大的想法,于是各种大牛搞来搞去出现了计算机网络这个东西实现了所有。在之后的讨论中先不涉及计算机网络的东西,为了减轻思绪压力与其他影响,主要探讨单台计算机上面的运作。

3》关于计算机的运行。

毕竟不是搞底层的,但是整体的运作流程要搞清楚。对于计算机来说,只认识0和1这两个字符,分别代码低电平和高电平。计算机中所有存储的东西(磁盘)都是最终以10序列的方式来存储的(文本,音频,视频等)。

cpu的工作主要是执行1和0的序列,具体的执行方式,猜想是高电平,低电平依靠许多逻辑门来进行实现。

4》汇编语言的出现。

根据3中说法,如果要让计算机进行运作。我们必须给计算机输入相应的01序列。计算机来执行完成输出。(符合上述所说的计算机出现的原因,根据输入进行一系列的运作,产生输出)。这种难度太大。毕竟所有的东西都要统一

转化为10序列,后来为了让机器更好的面向人类,让大部分人都能操作计算机,首先发明了汇编语言。汇编语言就是根据语法写好之后,有一份汇编和机器码的对照表,根据对照表来人工翻译或者自动翻译(编译器的出现)成01序列,

输入cpu,完成相应的操作。

5》操作系统的出现。

为了能够维护大量的软件在计算机上面有条不紊的运行以及屏蔽一切的底层硬件差异,出现了操作系统这种软件。操作系统的设计以及运行机制思想是一个很庞大的内容。在这里,我们设想操作系统其实就是用汇编语言来编写实现的软件

,也就是对汇编语言进行各种各样的封装,向下就是各种汇编的代码集合,向上暴露出操作系统的api.例如windows api等。

6》c语言的出现以及运行机制。

操作系统的出现是大量的计算机编程语言出现的基础。C语言诞生。c语言本质是提供了大量的标准函数库,而大量的标准函数库的内部实现是调用各种windows api来进行实现,一般一种编程语言的出现都是人们为了更加方便的来和计算机打交道。所以基于这种思想,c语言诞生,语言也就是一些规范,程序员按照规范来写代码,调用大量的标准函数库。最后对于生成的.c文件进行统一的编译,编译过程猜想是分级编译,首先统一编译成汇编语言,最后编译成对应平台的10序列,让cpu执行.

7>c++语言

 根据6中所说,c++诞生,思想是面向对象。c++也提供了大量的标准类库,标准类库的实现是从c语言来书写的,这种就叫做,c++是基于c来实现的。程序员根据c++的语法,调用c++标准库来书写自己的程序,最后向下统一编程成c文件,汇编语言,最后是10序列,让cpu执行。

8>java语言

java语言的出现是一种设计思想的体现(这种设计思想在c++中已经有所体现),也就是典型的面向对象。并且提供了大量的标准类库,标准类库的实现有用c语言来实现的,有用java来实现的,说到底,最终还是由c语言来实现的。为了让一种语言出现,设计,运用,必须有各种语言规范。java程序员根据java提供的语言规范,调用大量的标准类库来书写自己的代码,为了实现各种功能。首先是大量的java文件,经过简单编译器编译之后生成class文件。class文件是一种文件规范。class文件是不能被操作系统认识的,也就不能直接运行。所以必须有一个东西能够将class文件翻译成10序列来让cpu运行。在这一步先暂停。

9》计算机上面基于操作系统的各种各样的软件(可以直接运行,不需要第三方软件协助运行的)。实际是代码编译到最终的汇编语言,比如那些可执行文件,就是一种汇编,可以直接被操作系统接收,转化为10序列,让cpu运行。

也就是说,程序员想让计算机干些什么事情,通过代码来体现,代码是一种指令,然后让cpu去执行指令

10》说说java虚拟机这个东西。

java程序员写好代码之后,统一简单编译成class文件,class文件是一种文件规范。class文件怎么来运行呢,通过java虚拟机。在这里,要说明,各种操作系统都实现了各自的java虚拟机的前提下,java虚拟机是一个用c语言来书写的软件,来模拟真实的计算机的行为。各种操作系统怎么来实现各自的虚拟机呢,猜想是各个操作系统向下都是封装汇编语言的,向上都是暴露api的,不同的java虚拟机实现语言c的标准类库实现不同,有的调用windows api  有的调用linux api,也就实现了各个平台的虚拟机。也就说 到现在为止,各个平台都可以运行各自的java虚拟机。

虚拟机说到底是一个软件,就跟c语言实现的其他软件一样。而虚拟机的功能就是输入class文件,将class文件里面的一行一行的java指令翻译成对应平台的10序列,实现一次编写,到处运行的机制。

在这里我们说的是虚拟机的功能,因为就相当于用c语言写的其他程序一样,java虚拟机本质是c程序,里面有三个重要的系统,类加载系统,执行引擎系统,垃圾收集系统,我们可以想象当初实现虚拟机的时候是怎样的,这三个子系统就相当于c代码中的三个函数,第一个函数的功能是将class资源文件加载至内存中,第二个函数的功能是将class文件里面的指令翻译出对应机器的10序列,第三个函数的功能是回收堆没有被引用的对象,在这里我们忽略掉内存模型,数据肯定要存储至一个地方,才能进行运算。

在这里我想将java虚拟机分成两部分来说明:第一部分,就是java虚拟机自身的运行,包括上面三个函数的具体实现,都是采用c,而c调用各个平台操作系统api,最终让cpu来运行,实现上面三个函数的功能。第二部分也就是第二个函数中的功能,这里面是将class文件里面指令翻译成对应机器的10序列,翻译这个动作其实是虚拟机的一个功能而已,运行是在外部cpu上面,会用到解释器。也就是说 外部cpu执行第二个函数的输出结果 是10序列,而输出结果的10序列会让虚拟机内部模拟的计算机来执行,(其实还是外部cpu,只不过虚拟机申请了一部分cpu),宏观体现是两部分内容。

10.1》外部cpu来执行虚拟机的具体逻辑,也就是c语言最终编译成的汇编集合指令,也就是上面三个函数,外部cpu执行的目的就是让虚拟机运行起来,完成自身逻辑。

10.2>class文件应该作为虚拟机的一个资源文件,被虚拟机各种各样的处理,只不过第二个函数的处理结果是10序列,就是说class文件里面每一行指令都要被翻译出对应平台的10序列。这些10序列被内部cpu执行,完成java程序员的一些目的。

再次说一下:虚拟机也就是一个用c语言书写的软件。这个搞好之后在计算机上以汇编指令集合存在,这个汇编指令集合里面实现的功能是class加载,解释,回收等,class文件作为一个外部资源文件被虚拟机汇编 指令一一处理。只不过在第二部分经过cpu处理之后生成10序列,10序列就是我们java程序员写的指令,让cpu再次处理完成虚拟机的整体运作以及java程序的整体运作.

下一步可以深入java虚拟机了。。

时间: 2024-10-19 05:14:30

关于最近的一些困扰,包括计算机 软件等的相关文章

IT(计算机/软件/互联网)专业词汇宝典(持续更新中)

1.Stack Overflow:http://stackoverflow.com/      .一个著名的IT技术的问答网站.完全免费.程序员必知. 2.programmer:程序员 3.enthusiast:狂热者,来自Stack Overflow对网站的介绍: Stack Overflow is a question and answer site for professional and enthusiast programmers. 4.programming:编程 5.distrac

P2P技术简介(包括BT软件的分析)(转)

这是一篇别人发表的论文,里面很全面的解释了P2P技术的实现,以及BT网络中应用P2P技术所设计的原理,并列举BT软件的一些专业名词的定义.由于论文发表的比较早,2005年时还没有DHT技术. http://files.cnblogs.com/files/EasonJim/P2P%E6%8A%80%E6%9C%AF%E7%AE%80%E4%BB%8B.pdf 原文出处:上海交通大学-周中夏 2005年

linux笔记学习大全,包括相关软件

1.如果tomcat正常启动,内部浏览器可以访问,外部电脑的浏览器布恩那个访问? 可以使用如下命令: iptables -F firewall-cmd --add-port=8080/tcp --permanent 保证以后也可以访问 Linux下Tomcat重新启动 首先,进入Tomcat下的bin目录 cd /usr/local/tomcat/bin 使用Tomcat关闭命令 ./shutdown.sh 查看Tomcat是否以关闭 ps -ef|grep java *如果你想直接干掉Tomc

驱动,包括很多软件,并不是最新的就是最好的

刚才很晚了封伟叫我去他寝室帮他弄电脑,说电脑没有声音了,我首先想到可能是驱动问题,或者是一些杀毒软件什么的,因为我今天发现我安装的360安全卫士 会让我的迅雷崩溃,不过这只是猜测,然后我方法都试完了还是不行,然后我突然想到一句话,就是驱动不是最新的最好,一定要兼容性好才行,因为我之前有帮封 伟升级驱动,于是我打开设备管理器找到网络适配器,回滚了驱动程序,也就是还原成最初的驱动,然后声音出来了.

Ubuntu 16.04 一系列软件安装命令,包括QQ、搜狗、Chrome、vlc、网易云音乐安装方法

1 简介 Ubuntu 16.04安装完后,还需要做一些配置才能愉快的使用,包括添加软件源.安装搜狗输入法.Chrome浏览器.网易云音乐.配置快捷键.安装git等等,下面就跟着我来配置吧,just do it 2 版本选择 如果你是小白,不想折腾,可以直接选择安装deepin linux,中文名”深度Linux”,这个是国内目前最好用的Linux之一,开箱即用,常用软件都安装好了,甚至连最新版的QQ都有,mac风格的界面也很漂亮. 但是,作为一个程序员,还是要使用Ubutnu,之前博主用过Ub

计算机专业学生一定要学好这几门课!(转)

很多程序员,包括计算机专业出身的程序员,也包括通过自学成为程序员的非科班同学,在工作一两年后甚至更久后,基本上都会碰到技术瓶颈,由此可能产生很长一段时间的迷茫期. 在这个迷茫期,很多程序员都在思考类似自己是不是适合做程序员.是否要做一辈子程序员.是否要转行到其他职业,比如产品经理等问题.如果不能很快地得到这些问题的答案,那么这些程序员就会一直被这些问题所困扰,举步难行,浪费大好光阴. 这篇文章不是用来探讨程序员是否能干一辈子.程序员如何转型到产品经理等问题的.相反,这篇文章的目的是想要帮助那些迷

计算机的组成及其功能

计算机组成 1软件 1.1系统软件    系统软件是指控制和协调计算机及外部设备,支持应用软件开发和运行的系统,是无需用户干预的各种程序的集合,主要功能是调度,监控和维护计算机系统:负责管理计算机系统中各种独立的硬件,使得它们可以协调工作.系统软件使得计算机使用者和其他软件将计算机当作一个整体而不需要顾及到底层每个硬件是如何工作的. 1.1.1操作系统    操作系统(Operating System,简称OS)是管理和控制计算机硬件与软件资源的计算机程序,是直接运行在"裸机"上的最基

如何避免勒索软件的方法

如今互联网给我们带来就非常多的便利,但同时使用时也有安全隐患.有网友反馈自己在访问某网站时,遭遇到了勒索软件,那我们该如何避免呢?安全卫士提出了以下七条防范建议: 1. 安全意识培训 广大计算机用户进行持续的安全教育培训是十分必要的,应当让用户了解勒索软件的传播方式,如社交媒体.社会工程学.不可信网站.不可信下载源.垃圾邮件和钓鱼邮件等.通过案例教育使用户具备一定的风险识别能力和意识. 2. 电子邮件安全 钓鱼邮件是目前勒索软件传播的主要方式,有条件的单位和用户应该部署电子邮件防护产品,对所有的

记软件构建之法的读书笔记

什么是软件工程? 软件工程与计算机科学有什么关系? <构建之法:现代软件工程>这本书的绪论主要就是讲解这两个问题.软件工程是把系统的.有序的.可量化的方法应用到软件的开发.运营和维护的过程.它包括:软件需求分析.软件构建.软件测试和软件维护等多个领域.做一个合格的软件工程师,并不仅仅局限于你会多少种语言,是否会用C++写“Hello World”的程序,你还要清楚软件如何构建以及在软件构建之中不厌其烦的去做那些用户使用率为百万分之一,但却不可或缺的功能.程序是基本功,但是在算法和数据结构之上,