读CSAPP之公理和抽象

今年是离开校园的第五年,这五年来我一直在从事应用软件的设计、开发工作,大部分时间是在与高级编程语言、设计模式、业务逻辑打交道。它们大多流于表面,久而久之,与技术底层疏远了,诸如计算机组成原理、汇编语言、编译原理、数据结构以及算法慢慢得生疏,时至今日,向上碰到天花板,向下触到花岗岩。五年是一个契机,趁着下一个五年开始之际,我计划用三个月至半年时想间,重新学习这些知识,以期达到巩固基础,厚积薄发的目的。

本篇是我阅读《Computer System: A Programmer’s Perspective》一书的笔记,该书和与之搭配的《Professional Assembly Language》是我当下阅读计划的一部分。

hardware organization of a typical system

Hardware Organization Of A Typical System

中国语言文化很深奥,同样的话,不同人说,不同场合说,表达的意思就千差完毕。所以,要揣摩说话者的心思,就得把他的话放到具体的语境里,稍不留神就会弄出岔子。

通常,人们认为计算机没有二义性,一是一,二十二。实际上,在计算机中,所有的信息表示方式都是一致的,存在着同样一段表示形式对应的信息是不唯一的。

只有在指明了特定的解读方式以后,这些表现形式才能表示唯一的信息,我把它定义为计算机系统第一公理:

  1. 信息由一串位表示,只有在特定的上下文中,其才具有意义。

计算机系统是硬件和系统软件的结合体,硬件构成了物理存在,见上图。而系统软件更多指的是操作系统,其具备两个基本功能:

  1. 防止硬件被失控的应用程序滥用;
  2. 向应用程序提供简单一致的机制来控制复杂而又通常大相径庭的低级硬件设备。

应用软件离不开操作系统,因此需要理解操作系统,其将一些概念包装起来,有三个基本抽象对理解很有帮助:

  1. 文件是对I/O设备的抽象表示,
  2. 虚拟存储器是对主存和磁盘I/O设备的抽象表示,
  3. 进程则是对处理器、主存和I/O设备的抽象表示。

要理解虚拟存储器,需要了解一下这些:

虚拟存储器为每个进程提供一个假象,即每个进程都在独占地使用主存。每个进程看到的是一致的存储器,称为虚拟地址空间。

虚拟地址空间是由不同的区构成的,依次是程序代码和数据、堆、共享库、栈、内核虚拟存储器。对于所有进程而言,代码是从同一个固定地址开始,32-bit是0x08048000,64-bit是0x00400000。

2 Comments

lisafang28 9 月, 2011 at 7:14 下午

字体大小不一,文本排版很乱

Xu Haojie29 9 月, 2011 at 10:40 上午

谢谢反馈。字体大小不一,是因为前两段不是正文,特意使用了small标签以区分;文本排版的问题,主要是列表缩进问题,正在改善。

Leave a comment

Your comment