正篇(一)

232 阅读8分钟


闲话

在正式搭建平台前,或者说为什么要搭建程序环境,以及系统变量究竟是什么,在这里需要有个大概的理解。

下面先说说一下问题: 最终问题:系统变量是什么?

一些思维:

系统是什么?变量是什么?系统是操作系统,操作系统是一种软件,那么软件是什么?作为软件的操作系统做的是什么?软件是由程序代码编程写的,操作系统调度cpu处理能力的资源管理软件,那么程序代码是什么,编程是怎么回事,调度是什么,cpu处理能力是什么?

过渡问题中的路标:

程序和软件是什么? 程序代码是什么?计算机的cpu是什么?

这些问题有点难回答或者建立进一步的分解,那么往源头看一看,最开始的计算机程序是什么样子的,或者20世纪40年代的计算机是什么样子的。


计算机的CPU是什么?

据网传,1946年,Eniac计算机在美国宾夕法尼亚大学问世,最初用于计算弹道。第一代计算机称为电子管数字机,逻辑元件用的是真空电子管,主存储器用的是汞延迟线、阴极射线示波管静电存储器、磁鼓、磁芯;外存储器用的是磁带。软件方面采用的是机器语言和汇编语言。

那么计算机的构成中有几个关键,逻辑元件,主存储器,外存储器,软件中机器语言和汇编语言扮演着什么样的角色。

下一段历史,第二代计算机是晶体管计算机,看起来逻辑元件从电子管换成了晶体管。

再下一段,第三代计算机是集成电路计算机,逻辑元件用中小规模集成电路,主存储器仍然采用磁芯。在这个时段,出现了我们熟悉的集成电路作为逻辑元件。

接下来,第四代计算机就是大规模集成电路计算机,逻辑元件从中小规模变成大规模集成电路。

之后集成技术的提高,集成电路用半导体芯片集成在一块拇指大小的芯片上就是微处理器的诞生,然后发展出中央处理器,也就是CPU.所以CPU本质上是集成电路,大规模集成电路的微型化,所以CPU能做信息处理工作,用电路也能做,但是一块芯片和一间厂房,你怎么选。

CPU是逻辑电路的集成加一些控制电路,我们从这段历史中了解的就是这条信息。

程序代码是什么?程序和软件?

在思考这个问题之前,先看看计算机,用于计算的机器,“计算”这个概念在我们理解来看是什么: 最简单,直接的算式计算:1+1 =2, 2+2=4,自然数的四则运算法则;

深入一些:自然数进化成有理数,有理数打包无理数合成实数,实数加虚数,将自然数的四则运算法则延伸,变成有理数运算法则,无理数运算法则,实数运算法则,虚数运算法则,这个过程叫做数域的拓展,数域越多那么能够用来表达的工具越多。那么计算机记录下这些数域和相应的运算法则实现数值计算,这也算是计算的一种。

记录,然后查询记录用于计算,构建这个过程,也叫构建一个函数,将函数保存下来,这也是一种计算。

多个函数(多个计算过程)汇总到一起形成计算模块,将整个模块记录下来,这也是进一步的计算。

在从简单的四则运算过度到计算模块的过程中,出现了记录的概念,记录,存储,缓存,那么计算机怎么记录下这种信息,计算机中涉及存储概念有寄存器,内存,磁盘。这个问题看起来很麻烦,那么换个问题:我想记录下每天吃了什么:

星期一,早餐吃了鸡蛋,面包,中午吃了米饭,西红柿炒鸡蛋,晚餐吃米饭,小炒牛肉 星期二,早餐吃了面包,牛奶,中午吃了米饭,西红柿炒鸡蛋,晚餐吃面包 星期三,早餐吃了牛奶,稀饭,中午吃了面包,小炒牛肉, 晚餐吃西红柿炒鸡蛋,米饭 ……………… 我写一个月,30天,都是这样子记录,一行30多字,就是说至少需要900多个字,我写成了一篇标准的记录日志,上面有我一个月的饮食记录。我写一年至少需要12 * 900 = 10800个字,写10年需要108000个字,假如我写一个字的速度是1秒,这个过程耗费我108000 * 1 = 54000 秒 = 30 小时,相对于10年的记录也不是太长,但是总觉得容忍不了。

换个方式,星期一嘛,我改改写成1,星期二又改改写成2,早餐写成M,午餐N,晚餐L,全省了早,午,晚按顺序,怎么分,加个分割符,分号就行,鸡蛋A,面包B,米饭C, 西红柿炒鸡蛋D,小炒牛肉E,牛奶F,稀饭G…… 那么这份记录写成这样:

1,A,B;C,D;C,E

2,B,F;C,D;B

3,F,G; B, E; D, C

.....

鸡蛋A,面包B,米饭C, 西红柿炒鸡蛋D,小炒牛肉E,牛奶F,稀饭G

一行不超过15个字母,在我足够熟练的了解字母和菜谱得关系时,我能做到写一个由菜谱到字母不超过0.8秒, 那么这份记录就是 15 * 30(天) * 12(月) * 10(年) = 54000个字母, 需要耗费54000 * 0.8 = 43200秒= 12小时

代价是我需要记下一份表单,菜谱和字母得表单,要不然我拿着记录是看不懂的。

这就是一个简单的编码过程,用编码这种手段将信息量压缩和整理。那么计算机中哪些地方用了这个手段,从头到脚好像没有地方没用的,因为现实世界的信息量太大了,不用这种手段一层一层地压缩,计算机是记录不下来的。 编码这种手段就是会留下一个记录对应信息的表单,所以在计算机中只要由这种形式的表单出现,都是用编码的手段压缩信息量。

编码手段里面最简单的是什么?用自然数记录,0-9记录10种状态,嗯,电路有10种状态的判别方法吗?根据电流或者电压大小细分出10种状态,这样连续状态是不是太不稳定了,简单一些,就用2种状态,不用考虑连续状态之间是否摆动,除了0就是1。当然如果有电力能源之外的能量形式,能够明确界定出状态间边界的,0-1就不是唯一的选择了,其实现在也不是,只是不稳定。用0-1状态编码,这种方式就是二进制。

所以会计数的人可以解决计算机能够处理的大部分问题。人可以很轻松的区分10种或者无穷种状态……,当然需要思考计算过程。

二进制编码跟程序代码和程序和软件又有什么联系?

这部分内容我想着总觉得有些说不清楚,好像要了解CPU的功能和指令集,知道这些与机器语言的关系,然后机器语言跟汇编语言的关系,然后才是现在的“程序代码”,这个程序代码就是进一步地把机器语言和汇编语言往人性化发展,就是能够更加人性化地解决问题,不用管具体用哪个寄存器存储数值,也不用思考哪段字节流范围代表的是数值,哪段字节流代表的是处理数值的函数,哪段字节流代表的是储存这些的地址,就是说底层具体的杂碎事情被抽象化,代价是保存一份记录这种转变的记录表,作用是更好地让人去思考计算过程本身的设计,就是函数的设计,黑盒化,硬要取个类似的名字。黑盒的两端只是处理输入和输出,黑盒的细节不被了解。命名这种行为就是最自然的黑盒化,所以对一个概念的处理是找到相似的概念来通过命名建立联系,这是一件伟大的事情。

程序代码所写成的程序就是对函数集合的进一步黑盒化,也就是抽象化。

系统变量是什么?

系统变量是一种定位,因为在黑盒一层层的包裹中,需要找到信息流的入口,这样说还是让人不懂,我以后再想想怎么更加通俗一点。


正题...网页抓取的平台搭建

至少系统变量是什么,有了一个印象。。。下次正题,环境搭建