小咩说

当当当当,前两周小咩我去忙了一下毕业论文答辩的事情,这次总算也是平平安安毕业快乐了。于是立刻回想起自己还挖了一个好大好大的坑没有去做,于是在每天午后跑步机的时间开始读《深入理解计算机系统》(喂,为什么要在跑步机上看书)。总之今天花了比较短的时间读完了第1章,以下是我的读书笔记——Biu!向下看。

第一章 计算机系统漫游

首先,打开你的计算机,计算机是什么。
图片说明
这一段我从WIKI上弄来的,现代计算机的基础也就是冯诺依曼结构。存储程序计算机——计算机就像厨子,你给厨子菜谱,厨子给你做菜,厨子会换,但你菜谱在那儿,就不愁没有菜。计算机系统就是由硬件和系统软件组成,市面上电脑很多,硬件各不相同,计算机系统是如何做到足够的泛用性的,为什么你电脑一出现小问题修电脑的小哥就建议你重装系统,为什么重装系统之后系统会变快。接着看下去,或许你会有答案。

1.信息就是位+上下文

什么是32位系统,什么是64位系统。相信不少玩游戏的小伙伴经常遇到这种问题,很多APP在下载之前也要指定一下,今天小咩我就告诉你一个很简单的不用查控制面板也能判断的办法。32位系统的内存,超过不了4G。原因是,32位二进制最多能够表示多大的数据呢,是2的32次方个Byte。根据KB,MB,GB的换算,刚好4G。那64位有多少呢,64位系统根据地址总线大约是2的36到40次方,自己回去算。
任何一个程序都是由0和1构成的,而每一个字节是8个位。一般可以用ASCII标准去把可显示的文本字符表现为很多的0和1。系统中所有的信息——包括磁盘文件、内存中的程序、各种数据,都是一串比特表示的。如何区分它究竟是什么呢,这里看的就是上下文了,上下文规定它是什么,它就是什么。所以有了位+上下文,信息世界的一切东西都在0和1中诞生了。

2.Hello World!的奇妙冒险

#include <stdio.h>

int main()
{
    printf("hello world!\n");
    return 0;
}

这段程序是很多CS专业的同学写的第一段代码,它凭什么就能在你电脑上显示出hello world。
当我们选择要打开可执行文件hello的时候,系统加载一系列指令去将代码和数据从磁盘复制到主存,数据包括最终要输出的字符串“hello world!”。
首先,#include这一行告诉计算机,去查查stdio.h这个头文件,把它给放进来,就像是给这段程序随身带好身份证,接着编译器将带好身份证的程序翻译成汇编语言,汇编语言可以保证无论你是C还是Java,遵守同一个汇编标准的电脑都能看明白。然后汇编器把它翻译成最底层的机器语言,最后是链接器将它需要的某些函数从系统的库里链接上。处理器去执行main程序中的机器语言指令,这些指令会把数据中的字符串从寄存器文件复制去显示设备,最终显示在屏幕上。

3.操作系统管理着硬件设备

前面的hello程序的例子中,并没有直接访问键盘、显示器,取而代之依靠了操作系统提供的服务。操作系统通过三大抽象实现服务:

  1. 文件
  2. 虚拟内存
  3. 进程
    进程是对一个正在运行的程序的抽象,假装它正独占着处理器、内存和一系列的I/O设备。
    图片说明
    如图是一系列的抽象,这些概念让操作系统得以成为应用程序和硬件之间的媒介。
    那么《深入理解计算机系统》第一章讲的其实也就是一点点的通识,接下来下一章将会直接深入到信息的表示方法去解开万物皆可编码的奥秘。
    我是小咩,一个致力于让自己可以早点睡的弱技术博主。如果对你有帮助的话,请点赞转发收藏。