计算机中的抽象

    计算机科学中遇到的所有问题都可通过增加一层抽象来解决。

    All problems in computer science can be solved by another level of indirection。

    这句话是伟大的计算机科学家David Wheeler的名言。

    随着学习编程,学习计算机系统的不断深入,纵观计算机发展历史,不论是硬件设计还是软件设计,都遵从这一规则。

    计算机科学,本身就是一门抽象的科学。

    在这里,我简单的写下自己对于这句话在实践中的理解。

1. 虚拟存储器的产生是一层抽象

    早期CPU和存储器,是以物理地址进行寻址读写的,即使现在还有芯片采用这种方式进行寻址。但是这遇到了两个问题:

    (1) 一个8位的地址总线CPU,最多不过能0-255字节的存储,我是否能够读写更大的磁盘空间。

    (2)一个软件需要2G的内存空间,但是内存卡就512M是不是不能玩了。

    问题1:

            此问题不仅仅是虚拟存储器,还有一个叫主存的东西,他是磁盘的高速缓存,后边会讲到高速缓存的抽象。

            虚拟存储器展现给进程的是2^8-1字节的地址空间,但是当他去访问其中的一个地址时候,这个地址的内容可能缓存在主存里,也可能不在主存里,而主存是磁盘的高速缓存,那么虽然程序只能够访问最大2^8-1字节的主存,但是实际上却一直在读写更大的磁盘。

    问题2:    

            虚拟存储器给出了进程一个抽象的地址空间,这个地址空间的大小由地址总线的位数决定,一般32位系统地址总线也是32位的。访问范围是  0- 2^32-1字节范围。

            那么对于一个只有512M内存的32位系统,其实展现给软件的内存空间,依然是2^32-1字节,相当于4G的空间。

2. 主存是硬盘的高速缓存一层抽象

    从计算机内存结构看,计算机有很多级高速缓存。SRAM,DRAM,我们还可以把硬盘看做是网络的高速缓存。

3. 汇编语言是机器语言的一层抽象

4. C语言是汇编语言的一层抽象

5. java中对象是基本数据类型的一层抽象

6. java虚拟机是操作系统的一层抽象

7. 面向接口的编程是直接类耦合调用的抽象

未完待续...,有兴趣大家可以一起探讨。

编程语言的抽象性,代表我们能够通过阅读程序,去抽象的整体的理解一个事物的本质。这是一种从程序内部反观生活的参考性存在。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值